W jaki sposób uczenie maszynowe jest uwzględniane w projektowaniu wyszukiwarek?

15

Obecnie buduję małą wewnętrzną wyszukiwarkę opartą na Apache Lucene. Jego cel jest prosty - na podstawie niektórych słów kluczowych sugeruje artykuły napisane wewnętrznie w naszej firmie. Używam dość standardowej punktacji TF-IDF jako podstawowej miary i zbudowałem na niej własny mechanizm oceniania. Wszystkie te wydają się działać doskonale, z wyjątkiem niektórych przypadków narożnych, w których ranking wydaje się zawalony.

Planuję więc dodać mały link Istotny / Nieistotny do strony wyników wyszukiwania, aby użytkownicy mogli kliknąć jedną z nich w zależności od tego, czy postrzegają, czy wynik ten powinien był zostać uwzględniony.

Mój pomysł

  1. Potraktuj te Istotne / Nieistotne jako etykiety i utwórz dane szkoleniowe.
  2. Użyj tych danych do szkolenia klasyfikatora (takiego jak SVM)
  3. Włącz ten model do wyszukiwarki, tzn. Każdy nowy wynik przejdzie przez klasyfikator i zostanie mu przypisana etykieta, czy jest on odpowiedni, czy nie.

To podejście wydaje mi się intuicyjne, ale nie jestem pewien, czy zadziała w praktyce. Mam dwa konkretne pytania:

  1. Jakie wszystkie funkcje powinienem wyodrębnić?
  2. Czy istnieje lepszy sposób na zintegrowanie komponentu uczenia maszynowego z wyszukiwarką? Moim ostatnim celem jest „poznanie” funkcji rankingowej opartej zarówno na logice biznesowej, jak i opiniach użytkowników.
Legenda
źródło
4
Zrobiłem coś takiego raz, a użytkownicy go nie znosili, więc go wyłączyłem. Problemem było zachowanie użytkownika. Użytkownicy dostosowali się do słabości wyników wyszukiwania, zmieniając swoje terminy, a następnie nadal będą ich używać. System zareagował, dostosowując ranking przedmiotów, a te ulubione terminy zaczęły przynosić różne wyniki. To zepchnęło użytkowników. Uczenie się nie oznacza, że ​​jest mądrzejsze;)
Reactgular
Oto implementację korzystając elasticsearch i angularjs - zawiera również wyjaśnienia, czego potrzebujesz - machinelearningblogs.com/2016/12/12/...
Vivek Kalyanarangan

Odpowiedzi:

15

(1) Jakie wszystkie funkcje powinienem wyodrębnić?

Po pierwsze, zdaj sobie sprawę, że nie klasyfikujesz dokumentów. Klasyfikujesz pary (dokument, zapytanie), więc powinieneś wyodrębnić funkcje, które wyrażają, jak dobrze do siebie pasują.

Standardowym podejściem w nauce rangowania jest uruchomienie zapytania w stosunku do różnych ustawień wyszukiwarek (np. Tf-idf, BM-25 itp.), A następnie wytrenowanie modelu pod względem podobieństwa, ale dla małej SE specyficznej dla domeny, możesz mieć takie funkcje jak

  • Dla każdego terminu wartość logiczna wskazująca, czy termin występuje zarówno w zapytaniu, jak iw dokumencie. A może nie boolean, ale wagi tf-idf tych terminów zapytania, które faktycznie występują w dokumencie.
  • Różne wskaźniki nakładające się, takie jak Jaccard lub Tanimoto.

(2) Czy istnieje lepszy sposób na zintegrowanie komponentu uczenia maszynowego z wyszukiwarką? Moim ostatnim celem jest „poznanie” funkcji rankingowej opartej zarówno na logice biznesowej, jak i opiniach użytkowników.

To jest bardzo szerokie pytanie, a odpowiedź zależy od tego, ile wysiłku chcesz włożyć. Pierwszym usprawnieniem, jakie przychodzi na myśl, jest to, że nie powinieneś używać binarnych ocen trafności z klasyfikatora, ale jego wartościowej funkcji decyzyjnej, dzięki czemu można właściwie zrobić ranking zamiast po prostu filtrować. W przypadku maszyny SVM funkcją decyzji jest podpisana odległość do hiperpłaszczyzny. Dobre pakiety uczenia maszynowego mają interfejs pozwalający uzyskać wartość tego.

Poza tym spójrz na uczenie się w rankingu parami i listami; to, co sugerujesz, to tak zwane podejście punktowe. IIRC, parowanie działa znacznie lepiej w praktyce. Powodem jest to, że w przypadku parowania potrzeba znacznie mniej kliknięć: zamiast oznaczać dokumenty jako trafne / nieistotne, podajesz im tylko przycisk „odpowiedni”. Następnie uczysz się binarnego klasyfikatora na trójki (dokument1, dokument2, zapytanie), który mówi, czy dokument1 jest bardziej odpowiedni dla zapytania niż dokument2, czy odwrotnie. Gdy użytkownik oznaczy, powiedzmy, dokument 4 w rankingu jako odpowiedni, daje to sześć próbek do nauki:

  • dokument4> dokument3
  • dokument4> dokument2
  • dokument4> dokument1
  • dokument1 <dokument4
  • dokument2 <dokument4
  • dokument3 <dokument4

więc dostajesz negatywy za darmo.

(Są to tylko sugestie, nie próbowałem nic z tego. Zdarzyło mi się, że pracowałem w grupie badawczej, w której ludzie badali naukę rangowania. Raz zrobiłem prezentację czyjejś pracy dla grupy czytelniczej, może slajdy mogą być pomocne.)

Fred Foo
źródło
+1 Dziękuję. Po raz drugi mi pomogłeś! Pozwól mi poświęcić kilka godzin na strawienie tego. :)
Legenda
4
To doskonała odpowiedź, chciałbym tylko zasugerować drobną poprawkę. Z punktu widzenia użytkownika, istnieje większe prawdopodobieństwo, że użytkownicy uzyskają wynik, używając przycisku „nieistotny” niż przycisk „odpowiedni”. Kto się trzyma, by zdobyć wynik, gdy znajdzie to, czego szuka? Są o wiele bardziej prawdopodobne, aby trafić w przycisk, który wygląda jak „okazja do narzekania”, gdy nie znaleźli, co chcieli, ponieważ poprawa systemu w tym punkcie jest właściwie dostosowane do ich aktualnego celu.
Racheet
4
tl; dr Jeśli zamierzasz użyć tylko jednego wejścia, uczyń je „nieistotnymi”, ludzie częściej klikają je, gdy są sfrustrowani.
Racheet
Jakie byłoby podejście „listowe”? Czy miałeś na myśli 3 lub 6 przykładów za darmo? (Ostatnie 3 wydają się być powtórzeniem pierwszych 3?)
maks.