Wie wird maschinelles Lernen in das Suchmaschinendesign einbezogen?

15

Derzeit baue ich eine kleine interne Suchmaschine auf der Basis von Apache Lucene. Sein Zweck ist einfach - basierend auf einigen Stichwörtern werden einige Artikel vorgeschlagen, die intern in unserem Unternehmen verfasst wurden. Ich verwende ein ziemlich standardmäßiges TF-IDF-Scoring als Basismetrik und baue darauf meinen eigenen Scoring-Mechanismus auf. Alle scheinen hervorragend zu funktionieren, mit Ausnahme einiger Eckfälle, in denen das Ranking durcheinander zu sein scheint.

Ich plane, der Suchergebnisseite einen kleinen Link "Relevant / Nicht relevant" hinzuzufügen, damit Benutzer auf einen dieser Links klicken können, je nachdem, wie sie davon ausgehen, ob dieses Ergebnis überhaupt hätte enthalten sein sollen.

Meine Idee

  1. Behandeln Sie diese Relevanten / Nicht Relevanten als Labels und erstellen Sie Trainingsdaten.
  2. Verwenden Sie diese Daten, um einen Klassifikator (wie SVM) zu trainieren.
  3. Integrieren Sie dieses Modell in die Suchmaschine, dh jedes neue Ergebnis durchläuft den Klassifikator und erhält eine Kennzeichnung, ob es relevant ist oder nicht.

Dieser Ansatz erscheint mir intuitiv, aber ich bin nicht sicher, ob er in der Praxis funktionieren wird. Ich habe zwei spezifische Fragen:

  1. Was für alle Funktionen sollte ich extrahieren?
  2. Gibt es eine bessere Möglichkeit, die Komponente für maschinelles Lernen in die Suchmaschine zu integrieren? Mein letztes Ziel ist es, die Ranking-Funktion zu "erlernen", die sowohl auf der Geschäftslogik als auch auf dem Feedback der Benutzer basiert.
Legende
quelle
4
Ich habe so etwas einmal gemacht und die Benutzer haben es gehasst, also habe ich es ausgeschaltet. Das Problem war das Benutzerverhalten. Benutzer passten sich an die Schwachstellen in den Suchergebnissen an, indem sie ihre Begriffe änderten. Anschließend verwendeten sie diese Begriffe weiter. Das System reagierte darauf, indem es die Rangfolge der Elemente anpasste, und diese bevorzugten Begriffe führten zu unterschiedlichen Ergebnissen. Dies hat die Benutzer abgelenkt. Lernen heißt nicht, dass es schlauer ist;)
Reactgular
Hier ist eine Implementierung mit elasticsearch und angularjs - enthält auch die Erklärungen, die Sie benötigen - machinelearningblogs.com/2016/12/12/…
Vivek Kalyanarangan

Antworten:

15

(1) Welche Funktionen sollte ich extrahieren?

Stellen Sie zunächst fest, dass Sie keine Dokumente klassifizieren. Sie klassifizieren (Dokument, Abfrage) Paare, sodass Sie Features extrahieren sollten, die ausdrücken, wie gut sie übereinstimmen.

Der Standardansatz beim Erlernen des Rankings besteht darin, die Abfrage mit verschiedenen Suchmaschinen-Setups (z. B. tf-idf, BM-25 usw.) zu vergleichen und dann ein Modell anhand der Ähnlichkeitsbewertungen zu trainieren, jedoch für eine kleine, domänenspezifische SE. Sie könnten Funktionen wie haben

  • Für jeden Begriff ein Boolescher Wert, der angibt, ob der Begriff sowohl in der Abfrage als auch im Dokument vorkommt. Oder vielleicht kein Boolescher Wert, sondern die tf-idf-Gewichtung der Suchbegriffe, die tatsächlich im Dokument vorkommen.
  • Verschiedene Überlappungsmetriken wie Jaccard oder Tanimoto.

(2) Gibt es eine bessere Möglichkeit, die maschinelle Lernkomponente in die Suchmaschine zu integrieren? Mein letztes Ziel ist es, die Ranking-Funktion zu "erlernen", die sowohl auf der Geschäftslogik als auch auf dem Feedback der Benutzer basiert.

Dies ist eine sehr weit gefasste Frage, und die Antwort hängt davon ab, wie viel Aufwand Sie betreiben möchten. Die erste Verbesserung, die Ihnen einfällt, ist, dass Sie nicht die binären Relevanzurteile des Klassifikators verwenden sollten, sondern dessen echte Entscheidungsfunktion. damit Sie tatsächlich ein Ranking erstellen können, anstatt nur zu filtern. Bei einer SVM ist die Entscheidungsfunktion der vorzeichenbehaftete Abstand zur Hyperebene. Gute maschinelle Lernpakete haben eine Schnittstelle, um den Wert davon zu erhalten.

Betrachten Sie darüber hinaus das paarweise und listweise Lernen, eine Rangfolge zu erreichen. Was Sie vorschlagen, ist der sogenannte pointwise Ansatz. IIRC, paarweise funktioniert in der Praxis viel besser. Der Grund ist, dass Sie beim paarweisen Ranking viel weniger Klicks benötigen: Anstatt Benutzer Dokumente als relevant / irrelevant kennzeichnen zu lassen, geben Sie ihnen nur die Schaltfläche "relevant". Dann lernen Sie einen binären Klassifikator für Tripel (document1, document2, query), der angibt, ob document1 für die Abfrage relevanter ist als document2 oder umgekehrt. Wenn ein Benutzer beispielsweise Dokument 4 in der Rangfolge als relevant einstuft, erhalten Sie sechs Beispiele, aus denen Sie lernen können:

  • document4> document3
  • document4> document2
  • document4> document1
  • document1 <document4
  • document2 <document4
  • document3 <document4

So bekommen Sie die Negative kostenlos.

(Dies sind alles nur Vorschläge, ich habe nichts davon ausprobiert. Ich habe zufällig in einer Forschungsgruppe gearbeitet, in der die Leute untersucht haben, wie man einen Rang erlangt. Ich habe einmal die Arbeit eines anderen für eine Lesegruppe vorgestellt, vielleicht die Folien können hilfreich sein.)

Fred Foo
quelle
+1 Vielen Dank. Dies ist das zweite Mal, dass du mir geholfen hast! Lassen Sie mich ein paar Stunden brauchen, um das zu verdauen. :)
Legende
4
Das ist eine ausgezeichnete Antwort, ich möchte nur eine kleine Änderung vorschlagen. Aus ux-Sicht ist es viel wahrscheinlicher, dass Benutzer mit einer "irrelevanten" Schaltfläche ein Ergebnis erzielen als mit einer "relevanten" Schaltfläche. Wer bleibt hier, um ein Ergebnis zu erzielen, wenn er gefunden hat, wonach er sucht? Es ist viel wahrscheinlicher, dass sie einen Knopf drücken, der wie eine "Gelegenheit zur Beschwerde" aussieht, wenn sie nicht gefunden haben, was sie wollten, weil die Verbesserung des Systems an diesem Punkt tatsächlich mit ihrem aktuellen Ziel in Einklang steht.
Racheet
4
tl; dr Wenn Sie nur einen Eingang verwenden, machen Sie ihn "irrelevant". Die Wahrscheinlichkeit ist größer, dass die Leute darauf klicken, wenn sie frustriert sind.
Racheet
Was wäre der "listenweise" Ansatz? Meinten Sie auch 3 oder 6 Beispiele kostenlos? (Die letzten 3 scheinen nur eine Wiederholung der ersten 3 zu sein?)
max.