13

Tworzę prosty system rekomendacji dla MovieLens DB zainspirowany przez https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html.Jak zaktualizować Spark MatrixFactorizationModel dla ALS

Mam również problemy z jawnym szkoleniem, jak tutaj: Apache Spark ALS collaborative filtering results. They don't make sense Korzystanie z treningu niejawnego (zarówno w przypadku danych jawnych, jak i niejawnych) daje mi rozsądne wyniki, ale wyraźne szkolenie nie.

Chociaż jest to już dla mnie ok, ciekawy jak zaktualizować model. Chociaż mój obecny rozwiązanie działa jak

  1. posiadające wszystkie user
  2. generowania modelu
  3. uzyskać zalecenia dla użytkownika

chcę mieć przepływ takiego:

  1. posiadającą baza ocen
  2. wygeneruj model raz (opcjonalnie zapisz & obciążenie go)
  3. trochę ocen przez jednego użytkownika na 10 przypadkowych filmów (nie w modelu!)
  4. uzyskać zalecenia stosując model i nowe user

Dlatego muszę aktualizować mojego modelu, bez całkowitej ponownej kalkulacji. Czy jest jakaś szansa, aby to zrobić?

Podczas gdy pierwszy sposób jest dobry do przetwarzania wsadowego (jak generowanie zaleceń w nocnych partiach), drugi sposób byłby dobry dla prawie żywego generowania zaleceń.

+0

Zobacz również to podobne pytanie http://stackoverflow.com/questions/28724639/how-to-augment-matrix-factors-in-spark- als-recommender –

+0

Ponadto, http://stackoverflow.com/questions/40809876/apache-spark-als-how-to-perform-live-recommendations-fold-in-anonym-user?rq=1 –

Odpowiedz

0

Wygląda na to, że chcesz robić coś w rodzaju online learning. To jest koncepcja, że ​​faktycznie aktualizujesz model podczas odbierania danych. Spark MLLib ma ograniczone opcje uczenia maszynowego. Jest streaming linear regression i streaming K-Means.

Wiele problemów z uczeniem maszynowym działa dobrze w przypadku rozwiązań wsadowych, być może ponowne szkolenie modelu co kilka godzin lub dni. Istnieją prawdopodobnie strategie rozwiązania tego problemu.

Jedną z opcji może być model zespołu, w którym można połączyć wyniki ALS z innym modelem, który pomaga przewidywać niewidoczne filmy.

Jeśli jednak spodziewasz się zobaczyć wiele wcześniej niewidocznych filmów, wspólne filtrowanie prawdopodobnie nie spełnia Twoich oczekiwań. Jeśli te nowe filmy w ogóle nie występują w modelu, model nie może rozpoznać, co inni lubią oglądać.

Lepszą opcją może być zastosowanie innej strategii i wypróbowanie jakiejś ukrytej analizy semantycznej filmów i koncepcji modelu filmu (takich jak gatunek, motywy itp.), W ten sposób nowe filmy z różne właściwości i pasują do istniejącego modelu, a oceny wpływają na to, jak mocno te właściwości współdziałają ze sobą.

5

Edytować: Poniższe pracował dla mnie, ponieważ miałem implicite oceny opinii i był interesujący tylko w rankingu produktów dla nowego użytkownika. Więcej szczegółów here


można rzeczywiście dostać prognozy dla nowych użytkowników korzystających z wyszkolony modelu (bez jej uaktualnianie):

Aby uzyskać prognozy dla użytkownika w modelu, należy użyć swojego utajonego reprezentacji (wektor o wielkości f (liczba czynników)), która jest mnożona przez macierz czynnego czynnika (macierz utworzona z utajonych reprezentacji wszystkich produktów, grupa wektorów o rozmiarze f) i daje wynik dla każdego produktu. Dla nowych użytkowników problem polega na tym, że nie masz dostępu do ich ukrytej reprezentacji (masz tylko pełną reprezentację rozmiaru M (liczba różnych produktów), ale możesz użyć funkcji podobieństwa do obliczenia podobnego utajonego reprezentacja dla tego nowego użytkownika przez pomnożenie przez transpozycję macierzy produktu

tzn. jeśli użytkownik macierzy utajonej jest u, a macierz utajona produktu to v, dla użytkownika i w modelu otrzymujemy wyniki przez: u_i * v dla nowego użytkownika, nie masz ukrytej reprezentacji, więc weź pełną reprezentację full_u i wykonaj: full_u * v^t * v To przybliży czynniki ukryte dla nowych użytkowników i powinno dać rozsądne rekomendacje (jeśli model zawiera już uzasadnione zalecenia dla obecnych użytkowników)

Aby odpowiedzieć na pytanie dotyczące treningu, pozwala to na obliczanie prognoz dla nowych użytkowników bez konieczności wykonywania ciężkich obliczeń modelu, który można teraz wykonywać tylko raz na jakiś czas. Dzięki temu masz możliwość przetwarzania wsadowego w nocy i wciąż możesz przewidzieć dla nowego użytkownika w ciągu dnia.

Uwaga: MLLIB daje dostęp do macierzy U i V

+0

Dodałem nowy post na podstawie tego: http://stackoverflow.com/questions/41537470/als-model-how-to-generate-full-u-vt-v –