user-User Collaborative Filtering for Jokes Recommendation

zanurkujmy szczegółowo i przyjrzyjmy się różnym punktom konfiguracji dla każdego kroku.

normalizacja danych

oceny mają duży wpływ na skalę jednostek. Niektóre osoby są życzliwe podczas oceniania i mają tendencję do wysokiej oceny, podczas gdy inne są po prostu Zimne serca i mają tendencję do wystawiania średnich ocen za dobrą treść. Normalizacja jest jednym ze sposobów zrekompensowania takiego zachowania użytkownika poprzez dostosowanie skali ocen do ocen innych użytkowników.

jedną z prostych technik normalizacji ocen jest odjęcie średniej ocen każdego użytkownika od jego ocen.

oto implementacja normalizacji w Pythonie.

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

zaimplementujmy tę metodę dla zbioru danych. Dla celów demonstracyjnych wybierzemy oceny 10 użytkowników dla pierwszych 10 żartów.

źródło: image by author

na etapie normalizacji możemy również zaimplementować inne konfiguracje.

Z-score to kolejny możliwy sposób normalizacji danych oceny, gdzie znormalizowana wartość mówi o tym, ile standardowych odchyleń od średniej naszego wyniku.

podobieństwo obliczeniowe

podobieństwo obliczeniowe między użytkownikami jest głównym zadaniem w algorytmach filtrowania opartego na współpracy. Podobieństwo między użytkownikami (znane również jako odległość między użytkownikami) jest matematyczną metodą ilościowego określenia, jak różni lub podobni są do siebie użytkownicy. Dla algorytmu User-User CF, podobieństwo, sim ₓᵧ pomiędzy użytkownikami X i y, którzy ocenili te same pozycje, jest obliczane jako pierwsze. Do obliczenia tego podobieństwa używane są różne metryki. Do obliczenia podobieństwa między użytkownikiem x a użytkownikiem y będziemy używać korelacji opartej na korelacji, używając korelacji Pearsona

wybór korelacji Pearsona ma sens, ponieważ metryki podobieństwa jako dane oceny dla każdego użytkownika są zwykle rozkładane. Podobnie jak inne współczynniki korelacji, ten waha się od -1 do +1 z 0 oznacza brak korelacji. Korelacje -1 lub +1 implikują dokładną zależność liniową. Pozytywne korelacje między użytkownikiem x i użytkownikiem y oznaczają, że jeśli użytkownik x ocenił żart jako pozytywny, istnieje bardzo duża szansa, że użytkownik y również oceni pozytywnie ten sam żart.

oto implementacja Pythona korelacji Pearsona przy użyciu pakietu scipy.

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

teraz implementujemy wyżej wymienioną metodę znajdowania podobieństwa Pearsona do zbioru danych ocen. Należy pamiętać, że tutaj oceniamy podobieństwo za pomocą zestawu danych ocen, a nie za pomocą znormalizowanego zestawu danych ocen, ponieważ metoda korelacji Pearsona dba o etap normalizacji!

źródło: Obraz autor

na etapie obliczeń podobieństwa możemy również zaimplementować inne konfiguracje.

podobieństwo Cosinusowe jest inną możliwą konfiguracją do obliczenia podobieństwa między dwoma użytkownikami, obliczając cosinus kątów między dwoma wektorami i określając, czy oba wektory są skierowane w mniej więcej tym samym kierunku. Podobieństwo cosinusowe jest często używane do pomiaru podobieństwa dokumentu w analizie tekstu.

wybieranie sąsiadów

podejście user-user collaborative filtering (uucf) w dużym stopniu opiera się na aktywnych informacjach o sąsiedztwie użytkownika, aby przewidywać i rekomendować. Wybór sąsiedztwa może tworzyć lub łamać rekomendację dla aktywnego użytkownika i może mieć bezpośredni wpływ na przewidywanie ocen i rekomendację pozycji.

obecnie każdy komercyjny system rekomendacji ma bardzo dużą liczbę użytkowników, dlatego sąsiedztwo musi składać się z podzbioru użytkowników, jeśli system rekomendacji chce zagwarantować akceptowalny czas reakcji.

poniższy rysunek przedstawia cztery tradycyjne podejścia do wyboru dzielnic.

źródło: Image by author
  1. użyj wszystkich zestawów danych, gdy zestaw danych jest bardzo mały
  2. Wybierz zestaw danych, gdy wynik podobieństwa jest powyżej określonego progu
  3. wybierz górny N zestaw danych według wyniku podobieństwa
  4. wybierz podobny klaster za pomocą metody klastrowania, takiej jak K-Mean

będziemy używać podejścia progowego do wybierz dzielnice dla aktywnego użytkownika. Oznaczmy użytkownika z indeksu 2 jako naszego aktywnego użytkownika.

Zdjęcie według autora

aktywny użytkownik przeczytał tylko 4 z 10 żartów, więc dowiemy się, który żart z pozostałych 6 będzie najlepszą rekomendacją dla aktywnego użytkownika.

wybierzmy próg 0.1 lub wyższy, aby odfiltrować sąsiadów.

oto implementacja Pythona do wyszukiwania podobnych sąsiadów za pomocą metody threshold. Tutaj „sim”oznacza dla podobieństwa tablicę typów serii pand.

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

Oto zrzut ekranu tablicy podobieństwa dla naszego aktywnego użytkownika. Upewnij się, że przed rozpoczęciem pracy upuściłeś własne podobieństwo aktywnego użytkownika.

źródło: Obraz autor

będziemy implementować metodę „sąsiedzi” dla tablicy podobieństwa.

jak widać na powyższym zrzucie ekranu, tutaj tylko użytkownicy z indeksami 3, 4, 6, 9 kwalifikują się do bycia sąsiadami.

ale w każdym komercyjnym systemie rekomendacji, który ma bardzo dużą liczbę danych, możemy skończyć z dużą liczbą sąsiadów, jeśli zastosujemy metodę progową. Powstaje więc pytanie, ilu sąsiadów?

teoretycznie im więcej tym lepiej, jeśli mamy dobrą macierz podobieństwa. Ale praktycznie hałas z różnych sąsiadów zmniejsza przydatność. jeśli wymieszamy wiele sąsiadów o niskim podobieństwie, różnica od użytkownika docelowego może zacząć pogarszać jakość zalecenia. Między 25-100, Sąsiedzi o wysokim podobieństwie są często używane w praktycznym i komercyjnym systemie rekomendacji.

punktowanie elementów

punktowanie elementów za pomocą ocen sąsiedztwa jest podstawą tworzenia wspólnego modelu filtrowania. Średnia ważona jest jedną z najczęstszych metod konstruowania takiego systemu punktacji. Będziemy używać średniej ważonej do obliczania punktacji dla naszych przedmiotów.

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

Image by author

w naszym przypadku jest to joke_1, joke_2, joke_3, joke_4, joke_9 i joke_10. Ponieważ pozostałe cztery dowcipy są już ocenione, nie zdobędziemy tych pozycji.

Poniżej znajduje się zrzut ekranu z ramki danych neighbor_rating i neighbor_similarity. Będziemy te dwie ramki danych i ramki danych ocen, aby utworzyć wyniki dla każdego żartu. Zauważ, że tutaj używamy znormalizowanej ramki danych oceny do znalezienia 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: Image by author

tutaj wyraźnie widać, że joke_2 ma najwyższy wynik, a joke_4 ma najniższy.

wybór przedmiotów

Po ustaleniu punktacji przedmiotu najlepszą rekomendacją będzie przedmiot z maksymalnym wynikiem. Tak więc w naszym przypadku joke_2 będzie najbardziej odpowiednią rekomendacją dla naszego aktywnego użytkownika.

Poleć Joke 2 naszemu aktywnemu użytkownikowi

jednak istnieje duża szansa, że przy użyciu tej metody rekomendacja może za każdym razem nasycić się tylko kilkoma rekomendacjami. Może to prowadzić do pogorszenia jakości rekomendacji.

jednym z prostych rozwiązań tego problemu jest wzięcie najwyżej n punktów i przypadkowe polecenie jednego z nich.

pułapki filtrowania opartego na współpracy użytkowników

systemy filtrowania opartego na współpracy użytkowników okazały się w przeszłości bardzo skuteczne, ale ich powszechne stosowanie ujawniło pewne prawdziwe wyzwania. Omówmy krótko cztery kluczowe wyzwania związane z użyciem takiego systemu:

Cold-Start :

Jeśli użytkownik jest nowy, nie można obliczyć jego podobieństwa do innych użytkowników, ponieważ system może nie mieć żadnej formy danych o tym nowym użytkowniku.

skalowalność:

gdy liczba użytkowników lub elementów zaczęła rosnąć, wtedy filtrowanie użytkownika-użytkownika cierpi na spadek wydajności z powodu wzrostu obliczeń podobieństwa.

Sparsity danych:

przy dużych zestawach pozycji, małej liczbie ocen, często zdarzają się sytuacje, w których nie można uzyskać odpowiedniej rekomendacji dla użytkownika.

:

organizacja lub osoba może celowo manipulować prognozowaniem, które robi się dla innych, tworząc wiele rachunków cywilnych i umieszczając fałszywe oceny.

wniosek

podejście oparte na współpracy użytkownika z użytkownikiem jest najczęściej stosowaną i badaną technologią do formułowania zaleceń i zostało szeroko przyjęte w branży. Podstawową koncepcją tego podejścia jest to, że ” Podobni użytkownicy mają podobne gusta.”

na tym blogu przedstawiliśmy podejście UUCF i jego praktyczne zastosowanie w rekomendacji żartów przy użyciu 5-stopniowego procesu. Pokazaliśmy również możliwość różnych punktów konfiguracji na każdym z tych etapów.

w wielu z tych kroków nie wybraliśmy najlepszego wyniku, ale bardziej losowy wybór spośród akceptowalnych wyborów. Jest to główna ironia systemu rekomendacji, ponieważ nie szukamy najlepszego wyniku, a odrobina przypadkowości jest zawsze mile widziana przez użytkownika i jest konieczna, w przeciwnym razie całe doświadczenie staje się monotonne.

  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. Recommender Systems Challenges and Solutions Survey (ang.). ITCE ’ 2019, Aswan, Egipt, 2-4 lutego 2019
  4. Zhipeng Zhang, Yasuo Kudo i Tetsuya Murai. „Wybór sąsiada do filtrowania opartego na użytkowniku przy użyciu szorstkich zestawów opartych na pokryciu”. Annals of Operations Research, Nov 8, 2016
  5. Dietmar Jannach, Markus Zanker, Alexander Felfering, and Gerhard Friedrich. Recommender System, An Introduction (Ang.). Cambridge University Press, 2011
  6. Rounak Banik, „Hands-On Recommendation Systems with Python”. Packt Publishing, 2018
  7. Coursera. Kurs „najbliższe sąsiedztwo wspólne filtrowanie”, przez University of Minnesota. Tydzień 1 i tydzień 2.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.