我想将n维特征向量<1.00, 0.34, 0.22, ..., 0>
与每个文档一起存储,然后提供另一个特征向量作为查询,其结果按余弦相似度排序。Elastic Search可以做到吗?
我没有特定于Elastic Search的答案,因为我从未使用过它(我使用构建了弹性搜索的Lucene)。但是,我正在尝试为您的问题提供一个通用的答案。给定查询向量,有两种获取最近向量的标准方法,如下所述。
Kd树
第一种方法是借助支持最近邻居查询的数据结构(例如kd树)将向量存储在内存中。甲kd树是二叉查找树中的意义上的概括,所述的二叉查找树分区一个的每一个电平ķ尺寸分成两个部分。如果您有足够的空间来加载内存中的所有点,则可以在kd树上应用最近的邻居搜索算法,以获得按余弦相似度值排序的检索到的向量的列表。这种方法的明显缺点是,它无法像信息检索中经常遇到的那样扩展到大量的点集。
逆量化向量
第二种方法是使用反向量化矢量。一个简单的基于范围的量化将伪项或伪标记分配给矢量的实数,以便以后可以由Lucene对其进行索引(或就此而言为Elastic搜索)。
例如,我们可以将标签分配甲于范围[0,0.1) ,乙到范围[0.1,0.2)等等...在你的问题的样本矢量随后被编码成(J,d,C, ..A)。(因为[.9,1]是J,[0.3,0.4)是D,依此类推)。
因此,实数向量因此转换为字符串(可以视为文档),并因此使用标准信息检索(IR)工具进行索引。查询向量也被转换成一袋伪术语,因此可以计算集合中与当前最相似的其他一组相似向量(按余弦相似度或其他度量)。
该方法的主要优点是,它可以很好地扩展以用于大量实数向量集合。关键缺点在于,计算出的相似度值仅是真实余弦相似度的近似值(由于量化中遇到的损失)。较小的量化范围以增加索引大小为代价获得更好的性能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句