User – User de filtrare de colaborare pentru glume recomandare

să se arunca cu capul în detaliu și uita-te la diferite puncte de configurare pentru fiecare pas.

normalizarea datelor

evaluările sunt puternic influențate de scara indivizilor. Unele persoane sunt cu inima bună în timp ce evaluează și tind să evalueze ridicat, în timp ce altele sunt doar cu inima rece și tind să ofere evaluări medii pentru conținut bun. Normalizarea este o modalitate de a compensa comportamentul unui astfel de utilizator prin ajustarea scalei de rating pentru a fi comparabilă sau la același nivel cu evaluările altor utilizatori.

o tehnică simplă de normalizare a evaluărilor este scăderea mediei de evaluare a fiecărui utilizator din evaluările sale.

aici este implementarea Python a normalizării.

def normalization(dataframe):
dataframe_mean = dataframe.mean(axis=1)
return dataframe.subtract(dataframe_mean, axis = 'rows')

să implementăm această metodă pentru setul de date jokes. În scopuri demonstrative, vom selecta evaluări de către 10 utilizatori pentru primele 10 glume.

Sursa: imagine de autor

putem implementa și alte configurații la etapa de normalizare.

scorul Z este un alt mod posibil de a normaliza datele de evaluare în care valoarea normalizată spune despre câte abateri standard de la media scorului nostru este.

similaritate de calcul

calculul similarității între utilizatori este sarcina principală în algoritmii de filtrare colaborativi. Similitudinea dintre utilizatori (cunoscută și sub numele de distanța dintre utilizatori) este o metodă matematică pentru a cuantifica cât de diferiți sau similari sunt utilizatorii între ei. Pentru un algoritm CF utilizator-utilizator, se calculează mai întâi similitudinea, SIM-ul între utilizatorii X și Y care au evaluat ambele aceleași elemente. Pentru a calcula această similitudine sunt utilizate diferite valori. Vom folosi metrici de similitudine bazate pe corelație pentru a calcula similitudinea dintre utilizatorul x și utilizatorul y, SIM-ul folosind corelația Pearson

alegerea corelației Pearson are sens, deoarece valorile de similitudine, deoarece datele de evaluare pentru fiecare utilizator tind să fie distribuite în mod normal. Ca și alți coeficienți de corelație, acesta variază între -1 și +1, 0 implicând nicio corelație. Corelațiile de -1 sau + 1 implică o relație liniară exactă. Corelațiile pozitive dintre utilizatorul x și utilizatorul y implică faptul că, dacă utilizatorul x a evaluat o glumă ca fiind pozitivă, există șanse foarte mari ca utilizatorul y să evalueze pozitiv aceeași glumă.

aici este implementarea python a corelației Pearson folosind pachetul scipy.

def similarity_pearson(x, y):
import scipy.stats
return scipy.stats.pearsonr(x, y)

acum implementăm metoda menționată mai sus pentru a găsi similitudinea Pearson pentru setul de date de rating. Vă rugăm să rețineți că aici evaluăm similitudinea folosind setul de date de rating și nu prin setul de date de rating normalizat, deoarece metoda de corelare Pearson are grijă de pasul de normalizare!

Sursa: imagine de autor

putem implementa și alte configurații la pasul de calcul al similarității.

similitudinea cosinusului este o altă configurație posibilă pentru a calcula similitudinea între doi utilizatori prin calcularea cosinusului unghiurilor dintre doi vectori de rating și determinarea dacă ambii vectori indică în aproximativ aceeași direcție. Similitudinea cosinusului este adesea folosită pentru a măsura similitudinea documentelor în analiza textului.

selectarea vecinilor

abordarea user-user collaborative filtering (uucf) se bazează în mare măsură pe informații active despre vecinătatea utilizatorilor pentru a face predicții și recomandări. Selectarea vecinătății poate face sau rupe recomandarea pentru un utilizator activ și poate avea o influență directă asupra predicției de rating și a recomandării articolului.

în prezent, orice sistem de recomandări comerciale are un număr foarte mare de utilizatori, astfel cartierul trebuie să fie compus din subsetul utilizatorilor dacă sistemul de recomandări dorește să garanteze un timp de răspuns acceptabil.

figura de mai jos prezintă patru abordări tradiționale pentru a selecta cartiere.

sursă: Image by author

  1. utilizați toate seturile de date atunci când setul de date este foarte mic
  2. selectați setul de date atunci când scorul de similitudine este peste un anumit prag
  3. selectați Top n Set de date după scorul de similitudine
  4. selectați un cluster similar folosind o metodă de grupare ca K-Mean

vom folosi cartiere pentru un utilizator activ. Să desemnăm utilizatorul din indexul 2 ca utilizator activ.

imaginea autorului

utilizatorul activ a citit doar 4 din 10 glume, așa că vom afla, care glumă din restul de 6 va fi cea mai bună recomandare pentru utilizatorul activ.

să selectăm un prag de 0,1 sau mai mare pentru a filtra vecinii.

iată implementarea python pentru a găsi vecini similari folosind metoda pragului. Aici” sim ” implică pentru matrice similitudine de tip pandas serie.

def neighbours(sim):
return for i, v in enumerate(sim) if v>=0.1]

iată captura de ecran a matricei de similitudine pentru utilizatorul nostru activ. Vă rugăm să vă asigurați că renunțați la similitudinea proprie a utilizatorului activ înainte de a lucra.

Sursa: imagine de autor

vom implementa metoda „vecini” pentru matricea de similitudine.

imagine de autor

după cum reiese din captura de ecran de mai sus, aici doar utilizatorii cu indexul 3, 4, 6, 9 se califică pentru a fi vecini.

dar în orice sistem de recomandări comerciale care are un număr foarte mare de date, putem ajunge la un număr mare de vecini dacă mergem cu metoda pragului. Deci, se pune întrebarea, câți vecini?

teoretic vorbind, cu atât mai mult cu atât mai bine, dacă avem o matrice de similitudine bună. Dar, practic, zgomotul de la vecinii diferiți scade utilitatea. dacă amestecăm o mulțime de vecini cu similitudine scăzută, atunci diferența față de utilizatorul țintă poate începe să degradeze calitatea recomandării. Între 25-100, vecinii de înaltă similitudine sunt adesea folosiți în sistemul de recomandări practice și comerciale.

notarea elementelor

notarea elementelor folosind evaluările de vecinătate se află chiar în centrul realizării unui model de filtrare colaborativ. Media ponderată este una dintre cele mai comune metode de a construi un astfel de sistem de notare. Vom folosi media ponderată pentru a calcula punctajul pentru articolele noastre.

The first step is to select only those items which hadn’t yet been rated by the active user

Image by author

în cazul nostru, este joke_1, joke_2, joke_3, joke_4, joke_9 și joke_10. Din moment ce restul de patru glume sunt deja evaluate, nu vom înscrie aceste elemente.

mai jos este captura de ecran a cadrului de date neighbor_rating și neighbor_similarity pandas. Vom aceste două dataframes și evaluări dataframe pentru a crea scoruri pentru fiecare glumă. Rețineți că aici folosim dataframe-ul de evaluare normalizat pentru găsirea neighbor_rating.

Source: Image by author

Here is the python implementation to calculate the score of the items.

def score_item(neighbor_rating, neighbor_similarity, ratings ):
# aumr -> active user mean rating
aumr = np.mean(ratings.iloc)
score = np.dot(neighbor_similarity, neighbor_rating) + aumr
data = score.reshape(1, len(score))
columns = neighbor_rating.columns
return pd.DataFrame(data = data , columns = columns)

We will implement „score_item” method to find the score of all the jokes.

Source: Imagine de autor

aici, este clar vizibil că joke_2 au cel mai mare scor, iar joke_4 au cel mai mic.

selectarea articolelor

odată ce punctajul articolului este decis, elementul cu scorul maxim va fi cea mai bună recomandare. Astfel, în cazul nostru, joke_2 va fi cea mai potrivită recomandare pentru utilizatorul nostru activ.

recomandați Joke 2 utilizatorului nostru activ

cu toate acestea, există șanse mari ca prin utilizarea acestei metode recomandarea să se sature la doar câteva recomandări de fiecare dată. Acest lucru poate duce la o degradare a calității recomandărilor.

o soluție simplă la această problemă este de a lua Top n pozitiv marcat elemente și aleatoriu recomanda una dintre acestea.

capcanele filtrării colaborative utilizator-utilizator

sistemele de filtrare colaborative utilizator-utilizator au avut un mare succes în trecut, dar utilizarea lor pe scară largă a dezvăluit unele provocări reale. Să discutăm pe scurt cele patru provocări cheie ale utilizării unui astfel de sistem:

pornire la rece :

dacă un utilizator este nou, similitudinea sa cu alți utilizatori nu poate fi calculată, deoarece sistemul poate să nu aibă nicio formă de date despre acest nou utilizator.

scalabilitate:

pe măsură ce numărul de utilizatori sau elemente a început să crească, atunci filtrarea colaborativă utilizator-utilizator suferă o scădere a performanței datorită creșterii calculului de similitudine.

raritatea datelor:

cu seturi mari de articole, un număr mic de evaluări, adesea există situații în care nu se poate face nicio recomandare adecvată pentru utilizator.

influențarea:

o organizație sau o persoană poate manipula în mod deliberat predicția care se face pentru alții prin crearea mai multor conturi civile și punerea ratingurilor false.

concluzie

abordarea de filtrare colaborativă utilizator-utilizator este cea mai frecvent utilizată și studiată tehnologie pentru a face recomandări și a fost adoptată pe scară largă în întreaga industrie. Conceptul de bază din spatele acestei abordări este că „utilizatorii similari tind să aibă gusturi similare.”

în acest blog, am prezentat abordarea UUCF și aplicarea sa practică pe recomandarea glume folosind 5 proces pas. Am arătat, de asemenea, posibilitatea de soiuri de puncte de configurare la fiecare dintre acești pași.

La mulți dintre acești pași, nu am ales cel mai bun rezultat, ci o alegere mai aleatorie din alegerile acceptabile. Aceasta este principala ironie a sistemului de recomandări, deoarece nu căutăm cel mai bun rezultat și un pic de aleatorie este întotdeauna binevenită de utilizator și este necesară altfel întreaga experiență devine monotonă.

  1. http://eigentaste.berkeley.edu/dataset/
  2. https://github.com/abbi163/Jester-Joke-Recommender-System
  3. Marwa Hussien Mohamed, Mohamed Helmy Khafagy, Mohamed Hasan Ibrahim. „Studiul provocărilor și soluțiilor sistemelor de recomandare”. ITCE ‘ 2019, Aswan, Egipt, 2-4 februarie 2019
  4. Zhipeng Zhang, Yasuo Kudo și Tetsuya Murai. „Selectarea vecinului pentru filtrarea colaborativă bazată pe utilizator folosind seturi brute bazate pe acoperire”. Analele cercetării operaționale, 8 noiembrie 2016
  5. Dietmar Jannach, Markus Zanker, Alexander Felfering și Gerhard Friedrich. „Sistem De Recomandare, O Introducere”. Cambridge University Press, 2011
  6. Rounak Banik, „sisteme de recomandare Hands-On cu Python”. Editura Packt, 2018
  7. Coursera. Curs despre” filtrarea colaborativă a vecinului cel mai apropiat”, de la Universitatea din Minnesota. Săptămâna 1 și Săptămâna 2.

Lasă un răspuns

Adresa ta de email nu va fi publicată.