我有大量的文本,每个文本都在快速增长。我需要实现相似性搜索。
这个想法是将每个单词嵌入为word2vec,并通过向量添加每个单词的嵌入来将每个文本表示为标准化向量。随后对文本的添加只会通过向其添加新的单词向量来优化结果文本的向量。
通过仅存储文本中每个文本的规范化向量的坐标,是否可以使用elasticsearch进行余弦相似性?如果是这样,这种搜索的正确索引结构是什么?
答案 0 :(得分:5)
此elasticsearch plugin为使用delimited-payload-tokenfilter
存储的向量实现了得分函数(点积)此搜索的复杂性是文档数量的线性函数,并且在术语查询中比tf-idf更差,因为ES first searches on an inverted index然后它uses tf-idf for document scores,所以tf-idf不是在索引的所有文件上执行。使用向量,您要搜索的表示是具有较低余弦距离的文档的向量空间,而没有倒排索引的优点。
答案 1 :(得分:1)
对于Elasticsearch 6.4.x,StaySense取得了this plugin available。
答案 2 :(得分:0)
在较新版本的Elastic中,密集向量作为独立的字段类型受支持。 More here.