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ł
- Potraktuj te Istotne / Nieistotne jako etykiety i utwórz dane szkoleniowe.
- Użyj tych danych do szkolenia klasyfikatora (takiego jak SVM)
- 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:
- Jakie wszystkie funkcje powinienem wyodrębnić?
- 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.
Odpowiedzi:
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
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:
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.)
źródło