web-dev-qa-db-fra.com

Word2vec avec elasticsearch pour la similitude des textes

J'ai une grande collection de textes, où chaque texte se développe rapidement. Je dois implémenter une recherche de similitude.

L'idée est d'incorporer chaque mot en tant que Word2vec et de représenter chaque texte comme un vecteur normalisé en ajoutant des incorporations de chaque mot en lui. Les ajouts ultérieurs au texte ne feraient que raffiner le vecteur du texte résultant en y ajoutant de nouveaux vecteurs Word.

Est-il possible d'utiliser elasticsearch pour la similitude cosinus, en stockant uniquement les coordonnées du vecteur normalisé de chaque texte dans un document? Si oui, quelle est la structure d'index appropriée pour une telle recherche?

16
Alec Matusis

Ce plugin elasticsearch implémente une fonction de score (produit scalaire) pour les vecteurs stockés en utilisant le delimited-payload-tokenfilter

La complexité de cette recherche est une fonction linéaire du nombre de documents, et elle est pire que tf-idf sur une requête de terme, puisque ES recherche d'abord sur un index inversé puis il tilise tf -idf pour les scores des documents , donc tf-idf n'est pas exécuté sur tous les documents de l'index. Avec le vecteur, la représentation que vous recherchez est l'espace vectoriel du document avec la distance cosinus inférieure, sans les avantages de l'index inversé.

7
angleto

Pour Elasticsearch 6.4.x StaySense a rendu ce plugin disponible .

3
Alex Moore-Niemi