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
- Behandeln Sie diese Relevanten / Nicht Relevanten als Labels und erstellen Sie Trainingsdaten.
- Verwenden Sie diese Daten, um einen Klassifikator (wie SVM) zu trainieren.
- 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:
- Was für alle Funktionen sollte ich extrahieren?
- 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.
Antworten:
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
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:
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.)
quelle