Tövsiyə sisteminə və sıfırdan necə həyata keçiriləcəyinə ümumi baxış

Bu blogda tarix, indiki, gələcək, bunun müxtəlif kateqoriyaları və nəhayət bir zarafat tövsiyəsini emal etmək üçün kod daxil olmaqla tövsiyə sistemlərinin icmalı var.

Edo Nugroho tərəfindən Unsplash-də

Keçmişimiz və gələcəyimiz:

Tövsiyə sisteminin tarixinə baxsaq, fikir 1992-1996-cı illər arasında rədd edildi. Tövsiyə sistemləri əvvəlcədən fərdiləşdirmə olaraq bilinən müştərək filtrasiya haqqında danışmazdan əvvəl təsəvvür edilirdi. Ancaq hamısı dərslik idi. Məsələn: Bir safari ilə maraqlandığınızı bilən bir səyahət agenti ilə, heç kimin edə biləcəyi bir şeyə deyil, istədiyi səfər növünə baxacaqsınız. İkinci bir misal olaraq: Şəxsi alıcıların yeni məhsullar gəldikdə və yeni bir məhsul üçün yaxşı bir namizəd olacağını düşünmək istədikləri haqqında bir fikir əldə etdikləri zaman insanların profillərini idarə edə bildikləri bəzi sadə məlumat bazaları var. 2007-ci ildə Netflix 1 Milyon dollarlıq bir müsabiqə elan etdi və tövsiyə sisteminin gedişatını dəyişdirdi. Müsabiqədə iştirak etmək üçün bir çox təbəqədən olan insanları cəlb etdi. Yeni riyazi düsturlarla birlikdə yeni alqoritmlər meydana çıxdı. Yeri gəlmişkən, zarafatla tövsiyə etmək üçün istifadə edəcəyim sürpriz kitabxana, Netflix mükafatının qalib komandası tərəfindən nəşr olunan tədqiqat sənədinə diqqətlə baxaraq tamamilə inkişaf etdirilmişdir. Gözlədiyimiz kimi hələ bilmədiyimiz çox şey var. Müvəqqəti tövsiyə problemi. Tövsiyələrimi yalnız insanların bir müddətdir işlədikləri mövsüm kimi deyil, ardıcıllıqla necə izah edirəm, bundan sonra nə istehlak etmisinizsə, bundan sonra nəyi istehlak etdiniz. Bu sahələrdən biri olan təhsilə dair tövsiyələr çox müvəqqəti məsələlər idi.

Tövsiyə sisteminin geniş bölgüsü:

Əsasən tövsiyə sisteminin iki kateqoriyası var. 1. Birgə filtrləmə 2. Məzmuna əsaslanan filtrləmə

Birgə filtrləmə: Birgə süzgəcin açarı keçmişdə razılığa gələn insanların gələcəkdə razı olacağına və oxşar maddələrin keçmişdə istədikləri kimi olacağına dair fərziyyəyə əsaslanır. Birgə süzgəcin üç əsas kateqoriyası bunlardır: 1. İstifadəçi-İstifadəçi oxşarlığı 2. Element element oxşarlığı 3. Model əsaslı

İstifadəçi-istifadəçi və maddə-maddə oxşarlığı

Məzmuna əsaslanan filtrləmə: Məzmuna əsaslanan filtrasiya üsulları, elementin təsvirinə və istifadəçinin seçimlərinin profilinə əsaslanır. Bu üsullar istifadəçi üzərində olmayan bir elementdə (adı, yeri, təsviri və s.) Məlum olan vəziyyətlərə ən uyğun gəlir.

Birgə qarşı məzmuna əsaslanan tövsiyə

Ön şərt

1.Basic Python 2.Basic pandalar 3.Sürpriz kitabxananı araşdırmaq istəyi 4. Keras (isteğe bağlı)

Birbaşa kodlara atlamaq istəyirsinizsə, xahiş edirəm bu github linkinə girin və jupyter noutbukunu tapın.

Problemi həll edərkən izlədiyim hər əsas addımları izah edəcəyəm, amma problemin tam izahı ilə maraqlandığınız və sürpriz kitabxananın istifadəsi haqqında bilmək istəsəniz inanıram, bu mövzunu keçdikdən sonra git repoya baxmalısınız. blog.

Başlayaq. İstifadə edəcəyimiz məlumatlarla bağlı bəzi əsas məlumatlar.

Məlumatların təsviri

İndi problemə yaxınlaşmaq və yavaş-yavaş həll yoluna keçmək üçün bir plan hazırlayacağam. Hər addımdan kod parçaları ilə keçəcəyik. 1. Məlumat toplamaq 2. Qatar testi bölüşdürülməsi 3. Sadə statistika 4. Struktur məlumatları uyğun sürpriz kitabxananın formatına uyğunlaşdırmaq 5. Səhv metrikasını müəyyənləşdirmək 6. Əsas modeldən istifadə 7. Fərqli modellərdən istifadə edin 8. Nəticə

Məlumat toplamaq

  1. Məlumatlarda 3 üstün vərəq var. Biz onları bir araya gətirəcəyik və birləşmiş python pandas dataFrame təşkil edəcəyik. Cəmi 73421 istifadəçimiz var.
Bütün məlumatları birləşdirin

2. Dəqiqləşdirmə məlumatlarında göstərildiyi kimi 99 qiymətləndirmə, istifadəçinin bu zarafatı qiymətləndirməməsi deməkdir. Həmin qeydləri silib çıxaracağıq və ['user_id', 'joke_id', 'rating'] formatında məlumat hazırlayacağıq.

Məlumatların hazırlanması

Qatar testi split

Biz scikit-learn train_test_split istifadə edəcəyik və məlumatları 70-30 olaraq böləcəyik. 70% məlumat qatar üçün, 30% isə test üçün veriləcəkdir

Əsas statistika

1. Bir istifadəçi və bir zarafat üçün orta reytinq

bütün istifadəçilərin reytinqinin paylanmasıbütün zarafatların reytinqinin paylanması

Sürpriz kitabxananın uyğun formatına dair məlumat

Sürpriz kitabxanaya görə məlumatları strukturlaşdıracağıq. Məlumatları bir formatda ['user', 'zarafat', 'rating'] şəklində qəbul edir. Film tövsiyəsi ilə bağlı bir problemimiz olsaydı, məlumatları ['istifadəçi', 'film', 'reytinq'] kimi tərtib edərdik.

sürpriz kitabxana tərzində məlumat hazırlamaq

Səhv metrikasını təyin etmək

Normalaşdırılmış Orta Mütləq Xətanı səhv metrikası olaraq istifadə edəcəyik.

Normallaşdırılmış orta mütləq səhv (NAME) düsturuNMAE hesablamaq üçün kod

Əsas modeldən istifadə

Sürpriz kitabxananın verdiyi bazal modeldən istifadə edərək baza xətti modelini yaradacağıq. Əsas model 0.2033 NMAE verir, fərqli sürpriz modellərini sınayacağıq və daha yaxşı nəticələr əldə etmək üçün bütün nəticələri birləşdiririk.

Fərqli modelləri sınayın

  1. KNN Basel Model: Yeni zarafatlar üçün istifadəçilərin reytinqini proqnozlaşdırmaq üçün oxşarlıq əsaslı texnikadan istifadə edir. Bizim vəziyyətimizdə NMAE səhvi 0.196-dır

2. UserAverageRating, jokeAverageRating, Baseline və KNN bazalının nəticəsi üzrə XGBoost: Əvvəlki sürpriz modelin bütün nəticələrini birləşdirdik və hiper parametr tənzimləndikdən sonra məlumatlarda XGB regressiya modelini işlətdik. Burada 0.1928 NMAE-dən biraz daha yaxşı nəticə əldə edirik

3. SVD Model: SVD modeli matrisin tamamlanması problemini həll etmək üçün matris faktorlaşdırma metodlarından istifadə edir və reytinqi proqnozlaşdırır.

4. XAQoost on userAverageRating, jokeAverageRating, Baseline çıxışı, KNN Baseline çıxışı və SVD modelinin çıxışı. Bu model 0.18 NMAE verir və indiyə qədər ən yaxşısıdır.

5. Xüsusiyyət mühəndisliyi ilə model: Modelə təsirini yoxlamaq üçün iki asan xüsusiyyət əldə etdim. Bir xüsusiyyəti user_average + joke_avg-global_avg. Bu model adi NMAE kimi 20.2 kimi verir. Digər xüsusiyyət mühəndislik texnikalarını da sınamışdım. Həm də yaxşı işləmədilər.

6. Keraslardan istifadə edərək Depp Öyrənmə modelləri: Xüsusi mühəndislik yaxşı işləmədiyinə görə keras istifadə edərək bəzi sadə neyron şəbəkə modellərini sınamağı planlaşdırıram. 3 fərqli modeli sınadım. İstifadəçi ortalaması kimi əsas xüsusiyyətləri, zarafat ortalaması - ikinci, üçüncüsü isə bütün xüsusiyyətləri ilə, lakin fərqli memarlığı ilə. Bir modeldə 14,9% NMAE var.

Nəticələr

Gördüyümüz kimi Second_NN modeli ən aşağı test səhvinə malik olduğundan yaxşı işləyir.

Final Düşüncələr

Hamımızın bildiyimiz kimi heç bir model mükəmməl deyil. Bu modelin yaxşılaşdırılması üçün sahə var və həmişə olacaqdır. Fərqli xüsusiyyət mühəndislik texnikası, bəzi domen mütəxəssis məsləhətləri və fərqli sinir şəbəkə arxitekturaları daha yaxşı modellərə yol aça bilər.

İkinci bir qeyd olaraq deyə bilərəm ki, tövsiyə sistemləri indi bir gün artır. Təəccüblü kitabxana, bütün məşhur model tətbiqlərini verərək inkişaf etdiricilərin həyatını daha da asanlaşdırır. Əsas tövsiyə sistemini yaratmaq üçün həqiqətən faydalıdır. Düşünürəm ki, bu bloq yazmaq məqsədimi yerinə yetirmişəm və inkişaf etdiricilərə kiçik kodlu giriş ilə sürpriz kitabxana haqqında məlumat vermişəm. Bütün kod git burada mövcuddur.