2017-02-23 1 views
7

Ich habe eine große Sammlung von Texten, wo jeder Text schnell wächst. Ich muss eine Ähnlichkeitssuche implementieren.Word2vec mit elasticsearch für Texte Ähnlichkeit

Die Idee besteht darin, jedes Wort als word2vec einzubetten und jeden Text als einen normalisierten Vektor darzustellen, indem die Einbettungen jedes Wortes darin hinzugefügt werden. Die nachfolgenden Zusätze zu dem Text würden nur zur Verfeinerung des Vektors des sich ergebenden Textes führen, indem er neue Wortvektoren zu ihm hinzufügt.

Ist es möglich, elasticsearch für Kosinusähnlichkeit zu verwenden, indem nur die Koordinaten des normalisierten Vektors jedes Textes in einem Dokument gespeichert werden? Wenn ja, wie lautet die richtige Indexstruktur für eine solche Suche?

Antwort

3

Diese elasticsearch plugin implementiert eine Score-Funktion (Punktprodukt) für gespeicherte Vektoren, die die delimited-payload-tokenfilter

Die Komplexität dieser Suche verwendet, ist eine lineare Funktion der Anzahl der Dokumente, und es ist schlimmer als tf-idf auf einen Begriff Abfrage , da ES first searches on an inverted index dann es uses tf-idf for document scores, so tf-idf nicht auf allen Dokumenten des Index ausgeführt wird. Bei dem Vektor ist die gesuchte Repräsentation der Vektorraum des Dokuments mit dem niedrigeren Kosinusabstand, ohne die Vorteile des invertierten Index.

+0

Wie skaliert das mit der Anzahl der Dokumente? Ist das viel schlechter skalierbar als tf-idf, das einfach einen invertierten Index behält? –