System rekomendacji prowadzi dziennik tego, jakie rekomendacje zostały wydane konkretnemu użytkownikowi i czy ten użytkownik je przyjmuje. To jest jak
user_id item_id result
1 4 1
1 7 -1
5 19 1
5 80 1
gdzie 1 oznacza, że użytkownik zaakceptował zalecenie, a -1 oznacza, że użytkownik nie odpowiedział na zalecenie.
Pytanie: Jeśli mam zamiar wydać zalecenia dla grupy użytkowników na podstawie dziennika opisanego powyżej i chcę zmaksymalizować wyniki MAP @ 3, jak powinienem postępować z niejawnymi danymi (1 lub -1)?
Moim pomysłem jest traktowanie 1 i -1 jako ocen i przewidywanie oceny za pomocą algorytmów typu maszyny do faktoryzacji. Nie wydaje się to jednak właściwe, biorąc pod uwagę asymetrię niejawnych danych (-1 nie oznacza, że użytkownikowi nie podoba się to zalecenie).
Edycja 1 Pomyślmy o tym w kontekście metody faktoryzacji macierzy. Jeśli traktujemy -1 i 1 jako oceny, będzie jakiś problem. Na przykład użytkownik 1 lubi film A, który osiąga wysokie wyniki w jednym współczynniku (np. Mając wspaniałą muzykę w tle) w przestrzeni ukrytego czynnika. System zaleca film B, który również osiąga wysokie wyniki w „chwalebnej muzyce w tle”, ale z jakiegoś powodu użytkownik 1 jest zbyt zajęty, aby przyjrzeć się rekomendacji, i mamy film kategorii -1 B. Jeśli po prostu traktujemy 1 lub -1 jednakowo , wtedy system może być zniechęcony do polecania filmu z chwalebnym BGM użytkownikowi 1, podczas gdy użytkownik 1 nadal uwielbia film z chwalebnym BGM. Myślę, że takiej sytuacji należy unikać.
Odpowiedzi:
Twój system nie jest tylko przeszkolony w zakresie przedmiotów polecanych, prawda? jeśli tak, masz dużą pętlę sprzężenia zwrotnego. Mam nadzieję, że chcesz uczyć się na podstawie wszystkich kliknięć / wyświetleń.
Sugerujesz, że nie patrzenie na przedmiot jest sygnałem negatywnym. Zdecydowanie sugeruję, abyś nie traktował tego w ten sposób. Brak interakcji z czymś jest prawie zawsze najlepiej traktowany jako brak informacji. Jeśli masz wyraźny sygnał wskazujący na niechęć, taki jak głosowanie w dół (lub, może obejrzałeś 10 sekund filmu i zatrzymał się), może to jest ważne.
Nie interpretowałbym tych danych wejściowych jako danych podobnych do ratingu. (Chociaż w twoim przypadku możesz uciec od tego.) Zamiast tego pomyśl o nich jak o wadze, co jest dokładnie traktowane w artykule Hu Korena Wołyńskiego na temat ALS, który @Trey wspomina w komentarzu. Pozwala to zarejestrować względną siłę interakcji dodatnich / ujemnych.
Na koniec chciałbym zauważyć, że ten artykuł, choć jest bardzo prawdopodobne, że jest tym, czego szukasz, nie przewiduje ujemnych wag. W ten sposób można go łatwo rozszerzyć. Jeśli dojdziesz tak daleko, mogę wskazać łatwe rozszerzenie, które już istnieje w dwóch znanych mi implementacjach, w Spark i Oryx .
źródło