Für eine von uns erstellte Anwendung verwenden wir ein einfaches statistisches Modell zur Wortvorhersage (wie Google Autocomplete ), um die Suche zu leiten.
Es verwendet eine Sequenz von Ngrammen, die aus einem großen Korpus relevanter Textdokumente gesammelt wurden. Unter Berücksichtigung der vorherigen N-1 Wörter schlägt es die 5 wahrscheinlichsten "nächsten Wörter" in absteigender Reihenfolge der Wahrscheinlichkeit vor, unter Verwendung von Katz Back-Off .
Wir möchten dies erweitern, um Sätze (mehrere Wörter) anstelle von einem Wort vorherzusagen. Wenn wir jedoch eine Phrase vorhersagen, würden wir es vorziehen, ihre Präfixe nicht anzuzeigen.
Betrachten Sie zum Beispiel die Eingabe the cat
.
In diesem Fall würden wir gerne Vorhersagen machen wie the cat in the hat
, aber nicht the cat in
& amp; nicht the cat in the
.
Annahmen:
Wir haben keinen Zugriff auf vergangene Suchstatistiken
Wir haben keine getaggten Textdaten (wir kennen zum Beispiel die Teile der Rede nicht)
Was ist ein typischer Weg, um solche Mehrwortvorhersagen zu treffen? Wir haben multiplikative und additive Gewichtung längerer Phrasen versucht, aber unsere Gewichte sind willkürlich und passen zu unseren Tests.
Für diese Frage müssen Sie definieren, was Sie für eine gültige Ergänzung halten - dann sollte es möglich sein, eine Lösung zu finden.
In dem Beispiel, das Sie gegeben haben, ist "die Katze im Hut" viel besser als "die Katze im". Ich könnte dies als "es sollte mit einem Nomen enden" oder "es sollte nicht mit übermäßig gemeinsamen Worten enden" interpretieren.
Sie haben die Verwendung von "getaggten Textdaten" eingeschränkt, aber Sie könnten ein vortrainiertes Modell (z. B. NLTK, spacy, StanfordNLP) verwenden, um die Sprachteile zu erraten und versuchen, Vorhersagen auf die Vollständigkeit zu beschränken Nominalphrasen (oder Sequenz endet im Nomen). Beachten Sie, dass Sie nicht unbedingt alle Dokumente, die in das Modell eingegeben werden, markieren müssen, sondern nur die Sätze, die Sie in Ihrer Autocomplete-Datenbank beibehalten.
Alternativ könnten Sie Abschlüsse vermeiden, die auf Stoppwörter (oder Wörter mit sehr hoher Frequenz) enden. Sowohl "in" als auch "the" sind Wörter, die in fast allen englischen Dokumenten vorkommen. Sie könnten also experimentell einen Häufigkeits-Cutoff finden (der nicht in einem Wort enden kann, das in mehr als 50% der Dokumente vorkommt), das Ihnen beim Filtern hilft. Sie können sich auch Phrasen ansehen - wenn das Ende der Phrase als kürzere Phrase drastisch häufiger vorkommt, dann macht es keinen Sinn, sie zu markieren, da der Benutzer sie selbst herausfinden könnte.
>Letztendlich könnten Sie eine beschriftete Gruppe von guten und schlechten Instanzen erstellen und versuchen, einen überwachten Re-Ranker basierend auf Wortfunktionen zu erstellen - beide obigen Ideen könnten starke Merkmale in einem überwachten Modell sein (Dokumenthäufigkeit = 2) , Pos-Tag = 1). Dies ist typischerweise, wie Suchmaschinen mit Daten es tun können. Beachten Sie, dass Sie hierfür keine Suchstatistiken oder Benutzer benötigen, sondern nur die Bereitschaft, die Top 5-Komplettierungen für einige hundert Abfragen zu kennzeichnen. Der Aufbau einer formellen Bewertung (die automatisiert durchgeführt werden kann) würde wahrscheinlich helfen, das System in Zukunft zu verbessern. Jedes Mal, wenn Sie einen schlechten Abschluss bemerken, könnten Sie ihn zur Datenbank hinzufügen und ein paar Etiketten machen - mit der Zeit würde ein überwachter Ansatz besser werden.
Tags und Links algorithm autocomplete n-gram phrases