User-User Collaborative Filtering for Jokes Recommendation

pojďme se podrobně ponořit a podívat se na různé konfigurační body pro každý krok.

normalizace dat

hodnocení jsou velmi ovlivněna stupnicí jednotlivců. Někteří jedinci jsou dobrosrdeční při hodnocení a mají tendenci hodnotit vysoko, zatímco jiní jsou jen chladní a mají tendenci dávat střední hodnocení dobrého obsahu. Normalizace je jedním ze způsobů, jak kompenzovat takové chování uživatele úpravou stupnice hodnocení tak, aby byla srovnatelná nebo na stejné úrovni jako hodnocení ostatních uživatelů.

jednou jednoduchou technikou normalizace hodnocení je odečíst průměr hodnocení každého uživatele od jeho hodnocení.

Tady je python provádění normalizace.

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

implementujme tuto metodu pro datovou sadu jokes. Pro demonstrační účely vybereme hodnocení od 10 uživatelů pro prvních 10 vtipů.

Zdroj: Obraz podle autora

také můžeme provádět další konfigurace na normalizaci krok.

Z-skóre je další možný způsob, jak normalizovat hodnocení dat, kde normalizovaná hodnota říká, o kolik směrodatných odchylek od průměrné naše skóre.

Výpočetní Podobnosti

Podobnost výpočtu mezi uživateli je hlavním úkolem v kolaborativní filtrování algoritmy. Podobnost mezi uživateli (také známá jako vzdálenost mezi uživateli) je matematická metoda pro kvantifikaci toho, jak odlišní nebo Podobní uživatelé jsou navzájem. U algoritmu user-User CF se nejprve vypočítá podobnost mezi uživateli X a Y, kteří oba hodnotili stejné položky. Pro výpočet této podobnosti se používají různé metriky. Budeme pomocí korelace založené na podobnosti, metriky pro výpočet podobnosti mezi uživatel x a uživatel y, sim ₓᵧ pomocí Pearsonovy korelace

Výběr Pearsonův korelační dává smysl jako podobnost metriky, jako je hodnocení dat pro každého uživatele mají tendenci být normálně rozděleny. Stejně jako ostatní korelační koeficienty, i tento se pohybuje mezi -1 a + 1, přičemž 0 neznamená žádnou korelaci. Korelace -1 nebo + 1 znamenají přesný lineární vztah. Pozitivní korelace mezi uživatelem x a uživatelem y znamenají, že pokud uživatel x ohodnotil vtip jako pozitivní,existuje velmi vysoká šance, že uživatel y bude také hodnotit pozitivně na stejný vtip.

zde je implementace Pearsonovy korelace v Pythonu pomocí scipy balíčku.

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

nyní implementujeme výše uvedenou metodu k nalezení Pearsonovy podobnosti pro datovou sadu hodnocení. Vezměte prosím na vědomí, že zde hodnotíme podobnost pomocí datové sady ratingů a nikoli normalizovanou datovou sadou ratingů, protože Pearsonova korelační metoda se stará o normalizační krok!

Zdroj: Obraz podle autora

také můžeme provádět další konfigurace na podobnost krok výpočtu.

Cosinus Podobnost je další možné konfigurace pro výpočet podobnosti mezi dvěma uživateli pomocí výpočetní kosinus úhlu mezi dvěma klientů vektory a určení, zda oba vektory směřující v přibližně stejném směru. Kosinusová podobnost se často používá k měření podobnosti dokumentu v textové analýze.

Výběr Sousedy

Uživatel-Uživatel kolaborativní filtrování (UUCF) přístup silně spoléhá na aktivní uživatele okolí informace, předpovědi a doporučení. Výběr sousedství může buď učinit nebo porušit doporučení pro aktivního uživatele a může mít přímý vliv na předpověď hodnocení a doporučení položky.

v Současné době žádné obchodní doporučení systém má velmi velký počet uživatelů, a tím okolí musí být složen ze podmnožinu uživatelů, pokud systém doporučení chce záruku přijatelnou dobu odezvy.

níže uvedený obrázek ukazuje čtyři tradiční přístupy k výběru čtvrtí.

Zdroj: Obraz podle autora
  1. Použití všech údajů při dataset je velmi malá
  2. Vyberte dataset, když skóre podobnosti je nad určitou prahovou hodnotu
  3. Select top N dataset pomocí skóre podobnosti
  4. Vybrat podobné clusteru pomocí shlukování metodou, jako je K-Mean

Budeme používat prahový přístup k výběru čtvrtí pro aktivní uživatele. Označme uživatele na indexu 2 jako našeho aktivního uživatele.

Obrázek podle autora

Aktivní uživatel má číst pouze 4 z 10 vtipů, tak zjistíme, které vtip ze zbývajících 6 bude nejlepší doporučení pro aktivní uživatele.

vybereme prahovou hodnotu 0,1 nebo vyšší, abychom odfiltrovali sousedy.

zde je implementace Pythonu k nalezení podobných sousedů pomocí metody threshold. Zde“ sim “ znamená pro podobnost pole typu pandy série.

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

zde je snímek obrazovky pole podobnosti pro našeho aktivního uživatele. Před zahájením práce se ujistěte, že upustíte od vlastní podobnosti aktivního uživatele.

Zdroj: Obraz podle autora

Budeme implementovat „sousedy“ metoda pro podobnost pole.

Obrázek podle autora

Jak je zřejmé z obrázku výše, zde pouze uživatelé s indexem 3, 4, 6, 9 nárok být sousedy.

ale v každém komerčním systému doporučení, který má velmi velký počet dat, můžeme skončit s velkým počtem sousedů, pokud půjdeme prahovou metodou. Vyvstává tedy otázka, kolik sousedů?

teoreticky řečeno, čím více, tím lépe, pokud máme dobrou matici podobnosti. Ale prakticky hluk od odlišných sousedů snižuje užitečnost. pokud smícháme spoustu sousedů s nízkou podobností, pak rozdíl od cílového uživatele může začít zhoršovat kvalitu doporučení. Mezi 25-100 se často používají sousedé s vysokou podobností v praktickém a komerčním systému doporučení.

bodování položek

bodování položek pomocí hodnocení sousedství je jádrem vytváření kolaborativního filtračního modelu. Vážený průměr je jednou z nejběžnějších metod konstrukce takového bodovacího systému. Budeme používat vážený průměr pro výpočet bodování pro naše položky.

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

Image by author

V našem případě je to joke_1, joke_2, joke_3, joke_4, joke_9, a joke_10. Protože zbývající čtyři vtipy jsou již hodnoceny, nebudeme tyto položky skórovat.

níže je snímek obrazovky dataframe neighbor_rating a neighbor_similarity pandy. Budeme tyto dva datové rámce a hodnocení dataframe vytvořit skóre pro každý vtip. Všimněte si, že zde používáme normalizovaný datový rámec hodnocení pro nalezení 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: Obraz podle autora

Tady je jasně vidět, že joke_2 mít nejvyšší skóre, a joke_4 mají nejnižší.

výběr položek

jakmile je rozhodnuto o bodování položky, bude položka s maximálním skóre nejlepším doporučením. V našem případě tedy bude joke_2 nejvhodnějším doporučením pro našeho aktivního uživatele.

Doporučujeme Vtip 2 pro naše aktivní uživatele

Nicméně, tam je vysoká šance, že při použití této metody doporučení může saturovat jen několik doporučení, pokaždé. To může vést ke zhoršení kvality doporučení.

jedním z jednoduchých řešení tohoto problému je vzít top n pozitivně hodnocené položky a náhodně doporučit jeden z nich.

Úskalí Uživatelská-Uživatelská Kolaborativní Filtrování

Uživatel-Uživatel Kolaborativní Filtrování systémy byly velmi úspěšné v minulosti, ale jejich široké využití odhalila některé skutečné problémy. Pojďme krátce diskutovat o čtyřech klíčových výzvách používání takového systému:

studený Start :

Pokud je uživatel nový, nelze jeho podobnost s ostatními uživateli vypočítat, protože systém nemusí mít o tomto novém uživateli žádnou formu údajů.

Škálovatelnost

Například počet uživatelů nebo předměty, se začal zvyšovat, pak uživatel-uživatel kolaborativní filtrování utrpí pokles výkonu v důsledku růstu v podobnosti výpočtu.

Řídkosti Dat:

S velké položky sady, malý počet hodnocení, často existují situace, kdy není správné doporučení může být pro uživatele.

ovlivňování:

organizace nebo osoba může záměrně manipulovat předpověď, že dělá pro ostatní, tím, že vytvoří více občanské účty a dávat falešné hodnocení.

Závěr

Uživatel-Uživatel Kolaborativní Filtrování přístup je nejčastěji používán a studoval technologie pro vytváření doporučení a byla široce přijata v celém odvětví. Základním konceptem tohoto přístupu je, že “ Podobní uživatelé mají tendenci mít podobný vkus.“

v tomto blogu jsme představili přístup UUCF a jeho praktickou aplikaci na doporučení vtipů pomocí 5 krokového procesu. V každém z těchto kroků jsme také ukázali možnost různých konfiguračních bodů.

v mnoha z těchto kroků jsme nevybrali nejlepší výsledek, ale náhodnější volbu z přijatelných možností. To je hlavní ironie systému doporučení, protože nehledáme nejlepší výsledek a trochu náhodnosti je vždy vítán uživatelem a je nezbytný, jinak se celý zážitek stane monotónním.

  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“. Itce ‚ 2019, Asuán, Egypt, 2-4 únor 2019
  4. Zhipeng Zhang, Yasuo Kudo a Tetsuya Murai. „Výběr sousedů pro kolaborativní filtrování založené na uživateli pomocí hrubých sad založených na krytí“. Annals of Operations Research, Nov 8, 2016
  5. Dietmar Jannach, Markus Zanker, Alexander Felfering, a Gerhard Friedrich. „Doporučující Systém, Úvod“. Cambridge University Press, 2011
  6. Rounak Baník, „praktické systémy doporučení s Pythonem“. Packt Publishing, 2018
  7. Coursera. Kurz na téma „nejbližší soused kolaborativní filtrování“, University of Minnesota. Týden 1 a týden 2.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.