Erstellen oder Suchen einer Vorschlagsfunktion für relevante Begriffe

8

Nach ein paar Worten möchte ich ein Dienstprogramm haben, das eine Vielzahl relevanter Begriffe, Sätze oder Konzepte zurückgibt. Ein Vorbehalt ist, dass es zu Beginn einen großen Termgraphen haben müsste, sonst wäre das Feature nicht sehr nützlich.

Zum Beispiel würde das Absenden von "baseball" zurückkehren

%Vor%

Google Sets ist das beste Beispiel, das ich für diese Art von Funktion finden kann, aber ich kann es nicht verwenden, weil sie es getan haben keine öffentliche API (und ich werde nicht gegen ihre TOS gehen). Außerdem führt die Eingabe eines einzelnen Worts nicht zu sehr unterschiedlichen Resultaten. Ich bin auf der Suche nach einer Lösung, die auf Tangenten geht.

Am ehesten habe ich mit WikiPedia-API experimentiert, um nach Kategorien und Backlinks zu suchen, aber das geht nicht um diese Ergebnisse direkt nach "Relevanz" oder "Beliebtheit" zu sortieren. Ohne diese ist die Suggestionsliste massiv und überall, was nicht sofort nützlich und sehr schwer zu reduzieren ist.

Die Verwendung eines Thesaurus könnte auch minimal funktionieren, aber das würde irgendwelche Eigennamen oder tangential relevante Begriffe (wie jedes der oben aufgeführten Ergebnisse) auslassen.

Ich würde glücklich einen offenen Dienst wiederverwenden, wenn einer existiert, aber ich habe nichts gefunden, was ausreicht.

Ich suche nach einer Möglichkeit, dies zu implementieren, entweder intern mit einer anständig bevölkerten Startgruppe , oder wiederverwenden eine frei Service bietet das.

Haben Sie eine Lösung? Vielen Dank im Voraus!

UPDATE: Danke für die unglaublich dichte & amp; informative Antworten. Ich wähle eine gewinnbringende Antwort in 6 bis 12 Monaten, wenn ich hoffentlich verstehe, was Sie alle vorgeschlagen haben =)

    
drfloob 21.02.2009, 01:56
quelle

3 Antworten

8

Sie könnten an WordNet interessiert sein. Es braucht ein wenig linguistisches Wissen, um die API zu verstehen, aber im Grunde ist das System eine Datenbank von Bedeutungs-basierten Verbindungen zwischen englischen Wörtern, was mehr oder weniger das ist, wonach Sie suchen. Ich bin sicher, dass ich weitere Informationen ausgraben kann, wenn Sie es wollen.

    
David Z 21.02.2009 02:00
quelle
6

Peter Norvig (Director of Research bei Google) sprach darüber, wie sie das bei Google tun (insbesondere unter Hinweis auf Google Sets) in ein Facebook Tech Talk . Die Idee ist, dass ein relativ einfacher Algorithmus in einem großen Datensatz (z. B. dem gesamten Web) viel besser ist als ein komplizierter Algorithmus in einem kleinen Datensatz.

Sie können sich die Google-N-Gram-Sammlung ansehen als Ausgangspunkt. Sie würden anfangen zu sehen, welche Konzepte gruppiert sind. Norvig deutete an, dass Google intern bis zu 7 Gramm für Dinge wie Google Übersetzer verwendet.

Wenn Sie ehrgeiziger sind, können Sie alle Artikel von Wikipedia in der von Ihnen gewünschten Sprache herunterladen und Ihre eigenen erstellen N-Gramm-Datenbank.

Das Problem ist noch komplizierter, wenn Sie nur ein einziges Wort haben; Weitere Einzelheiten zur Wortsinn-Disambiguierung finden Sie diese aktuelle These .

Es ist kein einfaches Problem, aber es ist nützlich, wie Sie erwähnt haben. Am Ende werden Sie feststellen, dass eine wirklich erfolgreiche Implementierung einen relativ einfachen Algorithmus und eine ganze Menge Daten haben wird.

    
Jeff Moser 21.02.2009 16:07
quelle
3

Sehen Sie sich die folgenden zwei Artikel an:

  • Clustering von Benutzeranfragen einer Suchmaschine [pdf]
  • Themenerkennung durch Clustering Keywords [pdf]
  • Hier ist mein Versuch einer sehr vereinfachten Erklärung:

    Wenn wir eine Datenbank mit Abfragen von früheren Benutzern haben, können wir eine Ähnlichkeitsfunktion zwischen zwei Abfragen definieren. Zum Beispiel: Anzahl der Wörter gemeinsam. Jetzt berechnen wir für jede Abfrage in unserer Datenbank ihre Ähnlichkeit mit jeder anderen Abfrage und erinnern sich an die ähnlichsten Abfragen. Die nicht überlappenden Wörter von diesen können als "verwandte Begriffe" zurückgegeben werden.

    Wir können diesen Ansatz auch mit einer Datenbank von Dokumenten durchführen, die Informationen enthalten, nach denen die Benutzer suchen könnten. Wir können die Ähnlichkeit zwischen zwei Suchbegriffen als die Anzahl der Dokumente definieren, die beides enthalten, dividiert durch die Anzahl der Dokumente, die beides enthalten. Um zu entscheiden, welche Begriffe getestet werden sollen, können wir die Dokumente scannen und Wörter aussortieren, die entweder zu gewöhnlich sind ("und", "die" usw.) oder die zu dunkel sind.

    Wenn unsere Daten es zulassen, könnten wir sehen, welche Abfragen die Benutzer dazu führten, die Ergebnisse zu wählen, anstatt Dokumente nach Inhalt zu vergleichen. Wenn wir beispielsweise Daten hätten, die uns zeigen, dass Nutzer, die nach "Celtics" und "Lakers" suchen, beide auf espn.com geklickt haben, könnten wir diese verwandten Begriffe aufrufen.

    Wenn Sie von vorne anfangen und keine Daten über vergangene Benutzeranfragen haben, können Sie es mit Wikipedia versuchen, oder mit Beutel der Wörter Datensatz als eine Datenbank von Dokumenten. Wenn Sie nach einer Datenbank mit Suchbegriffen und Ergebnissen für Nutzer suchen und sich abenteuerlustig fühlen, können Sie sich die AOL-Suchdaten ansehen.

        
    Imran 21.02.2009 15:09
    quelle