Jak stworzyć własny silnik rekomendacji? [zamknięte]

Jestem obecnie zainteresowany silnikami rekomendacyjnymi i chcę się poprawić w tej dziedzinie. Obecnie czytam "Programming Collective Intelligence "myślę, że jest to najlepsza książka na ten temat, od O' Reilly. Ale nie mam żadnych pomysłów, jak wdrożyć silnik; co mam na myśli przez "brak pomysłu" jest "Nie wiem, jak zacząć". Mam taki projekt jak Last.fm w moim umyśle.

  1. Where do (powinno być zaimplementowane po stronie bazy danych lub po stronie zaplecza) i start tworzenie silnik rekomendacji?
  2. jaki poziom wiedzy o bazach danych będzie potrzebny?
  3. czy są jakieś open source, które można wykorzystać do pomocy lub dowolnego zasobu?
  4. Jakie powinny być pierwsze kroki, które muszę zrobić?
Author: the Tin Man, 2009-09-11

5 answers

Zbudowałem jeden dla portalu wideo. Główną ideą, którą miałem, było zbieranie danych o wszystkim:

    Kto przesłał film?
  • kto skomentował filmik?
  • które tagi zostały utworzone?
  • Kto odwiedził film? (śledzenie również anonimowych odwiedzających)
  • kto faworyzował film?
  • Kto ocenił film? Do których kanałów został przypisany film?
  • strumienie tekstowe z tytułem, opisem, tagami, kanałami i komentarzami są gromadzone przez indeksator pełnotekstowy, który przykłada wagę do każdego ze źródeł danych.

Następnie stworzyłem funkcje, które zwracają listy krotek (id,waga) dla każdego z powyższych punktów. Niektórzy uważają tylko ograniczoną ilość filmów (np. ostatnie 50), niektórzy modyfikują wagę np. ocena, liczba tagów (częściej tagowane = mniej wyraziste). Istnieją funkcje, które zwracają następujące listy:

  • Podobne Filmy przez fulltext search
  • filmy przesłane przez tego samego user
  • inne filmy użytkownicy z tych komentarzy również skomentowali
  • inne filmy użytkownicy z tych ulubionych również ulubione
  • inne filmy, które raterzy z tych ocen ocenili również na (ważone)
  • inne filmy w tych samych kanałach
  • inne filmy z tymi samymi tagami (ważone przez "wyrazistość" tagów)
  • inne filmy odtwarzane przez ludzi, którzy odtwarzali ten film (XY najnowsze sztuki)
  • Podobne filmy według komentarzy fulltext
  • Podobne filmy by title fulltext
  • Podobne filmy według opisu fulltext
  • Podobne filmy według tagów fulltext

Wszystkie te elementy zostaną połączone w jedną listę poprzez zsumowanie wag według identyfikatorów wideo, a następnie posortowanie według wagi. To działa całkiem dobrze dla około 1000 filmów teraz. Ale musisz zrobić przetwarzanie w tle lub ekstremalne buforowanie, aby to było szybkie.

Mam nadzieję, że uda mi się szybko zredukować to do ogólnego silnika rekomendacji lub kalkulatora podobieństw i wydać jako wtyczka rails/activerecord. Obecnie jest to nadal dobrze zintegrowana część mojego projektu.

Aby dać małą podpowiedź, w kodzie ruby wygląda to tak:

def related_by_tags
  tag_names.find(:all, :include => :videos).inject([]) { |result,t|
    result + t.video_ids.map { |v|
      [v, TAG_WEIGHT / (0.1 + Math.log(t.video_ids.length) / Math.log(2))]
    }
  }
end
Byłabym ciekawa, jak inni rozwiązują takie algorytmy.
 22
Author: hurikhan77,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 06:16:28

Przedstawianie zaleceń można podzielić na dwie główne sekcje:

  1. ekstrakcja funkcji
  2. zalecenie

Ekstrakcja funkcji jest bardzo specyficzna dla zalecanego obiektu. Dla muzyki, na przykład, niektóre cechy obiektu mogą być Pasmo przenoszenia utworu, moc, gatunek, itp. Funkcje dla użytkowników mogą być wiek, lokalizacja, itp. Następnie tworzysz wektor dla każdego użytkownika i utworu z różnymi elementami wektora odpowiadające różnym cechom zainteresowania.

Wykonanie aktualnej rekomendacji wymaga tylko dobrze przemyślanych wektorów cech. Zauważ, że jeśli nie wybierzesz odpowiednich funkcji, twój silnik rekomendacji zawiedzie. To byłoby jak prośba o podanie mi płci w oparciu o mój wiek. Oczywiście mój wiek może dostarczyć trochę informacji, ale myślę, że można sobie wyobrazić lepsze pytania do zadawania. W każdym razie, gdy masz wektory funkcji dla każdego użytkownika i utworu, będziesz musiał trenuj silnik rekomendacji. Myślę, że najlepszym sposobem, aby to zrobić, byłoby, aby cała grupa użytkowników, aby wziąć swój test demograficzny, a następnie powiedzieć konkretne utwory, które lubią. W tym momencie masz wszystkie potrzebne informacje. Twoim zadaniem jest wyznaczenie granicy decyzji na podstawie posiadanych informacji. Rozważ prosty przykład. Chcesz przewidzieć, czy użytkownik lubi "Back in Black" AC/DC na podstawie wieku i płci. Wyobraź sobie wykres pokazujący 100 punktów danych. Oś x to wiek, oś y to Płeć (1 to mężczyzna, 2 to kobieta). Czarny znak oznacza, że użytkownik lubi utwór, podczas gdy czerwony oznacza, że nie lubi utworu. Domyślam się, że ten wykres może mieć wiele czarnych znaków odpowiadających użytkownikom, którzy są mężczyznami i w wieku od 12 do 37 lat, podczas gdy reszta znaków będzie czerwona. Więc, gdybyśmy ręcznie wybierali granicę decyzji, byłby to prostokąt wokół tego obszaru, trzymający większość czarnych znaków. Nazywa się to granicą decyzyjną, ponieważ, jeśli zupełnie nowa osoba przychodzi do Ciebie i mówi ci swój wiek i płeć, musisz tylko wykreślić je na wykresie i zapytać, czy mieszczą się w tym polu.

Więc najtrudniejszą częścią jest znalezienie granicy decyzyjnej. Dobra wiadomość jest taka, że nie musisz wiedzieć, jak to zrobić. Musisz tylko wiedzieć, jak korzystać z niektórych popularnych narzędzi. Można przyjrzeć się wykorzystaniu sieci neuronowych, maszyn wektorowych, klasyfikatorów liniowych itp. Nie daj się zwieść wielkim nazwiskom. Większość ludzi nie mogę powiedzieć, co te rzeczy naprawdę robią. Oni po prostu wiedzą, jak podłączyć rzeczy i uzyskać wyniki.

Wiem, że jest trochę późno, ale mam nadzieję, że to pomoże każdemu, kto natknie się na ten wątek.

 27
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-17 21:05:52

To naprawdę bardzo duże pytanie, które zadajesz, więc nawet gdybym mógł dać Ci szczegółową odpowiedź, wątpię, żebym miał czas.... ale mam sugestię, spójrz na blog Grega Linden ' a i jego artykuły na temat filtrowania opartego na elementach. Greg wdrożył ideę silników rekomendacji w Amazon, wykorzystując podejście oparte na elementach, naprawdę zna swoje rzeczy, a jego blog i artykuły są bardzo czytelne.

Blog: http://glinden.blogspot.com / Papier: http://www.computer.org/portal/web/csdl/doi/10.1109/MIC.2003.1167344 (obawiam się, że musisz się zalogować, aby przeczytać go w całości, ponieważ jesteś uczniem CS ' a powinno to być możliwe).

Edytuj Możesz również spojrzeć na Infer.Net , zawierają przykład budowania systemu rekomendacji dla danych filmów.

 3
Author: Steve Haigh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-01 17:20:14

Mam 2-częściowy blog na temat filtrowania opartego na współpracy silnika rekomendacji do implementacji w Hadoop.

Http://pkghosh.wordpress.com/2010/10/19/recommendation-engine-powered-by-hadoop-part-1/

Http://pkghosh.wordpress.com/2010/10/31/recommendation-engine-powered-by-hadoop-part-2/

Oto repozytorium github dla projektu open source https://github.com/pranab/sifarish

Możesz użyć, jeśli ci się podoba.

 3
Author: Pranab Ghosh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-19 00:27:11

Przykładowy silnik rekomendacji, który jest open source (na licencji AGPLv3) został opublikowany przez Filmaster.com ostatnio. Jest napisany w C++ i wykorzystuje najlepsze praktyki z white papers wyprodukowanych w ramach Netflix challange. Artykuł na ten temat można znaleźć pod adresem: http://polishlinux.org/gnu/open-source-film-recommendation-engine/ a kod jest tutaj: http://bitbucket.org/filmaster/filmaster-test/src/tip/count_recommendations.cpp

 2
Author: michuk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-28 07:56:29