繁体   English   中英

如何找到稀疏向量的最近邻居

[英]how to find the nearest neighbor of a sparse vector

我有大约500个向量,每个向量都是1500维向量,并且几乎每个向量都非常稀疏-我的意思是向量的大约30-70维不为0。

现在,问题是这是给定的向量,也是1500维,我需要将其与500个向量进行比较,以找出500个向量中最接近的一个(以欧氏距离表示)。

毫无疑问,蛮力法是一种解决方案,但是我需要计算500次的距离,这需要很长时间。

昨天我读了一篇文章“具有大词汇量和快速空间匹配的对象检索”,它说使用倒排索引会有所帮助,它说: 在此处输入图片说明

但是经过我的测试,几乎没有任何意义,可以想象一个1500矢量,其中50维的尺寸不为零,当涉及到另一个矢量时,它们可能始终具有相同的维数,而不为零。 换句话说,这种算法只能排除一些向量,我仍然需要与剩下的许多向量进行比较。

谢谢您阅读本文的帮助,我的问题是:

1.这种算法有意义吗?

2.还有其他方法可以做我想做的事吗? 例如flann或Kd-TREE? 但我想要确切准确的最近邻居,一个大约一个是不够的

这种索引称为倒排列表 ,通常用于文本。

例如,Apache Lucene使用这种索引进行文本相似性搜索。

本质上,您使用列式布局,并且仅存储非零值。 为了提高磁盘效率,可以使用各种压缩技术。

然后,您可以使用这些列表上的set操作来计算许多相似度。

kd-trees不能在这里使用。 如果您有许多重复的(零)值,它们将效率极低。

我不知道您的情况,但是如果您不关心冗长的预处理步骤,并且必须经常且快速地进行此检查,则可以构建邻域图并按距离对邻居进行排序。

为了有效地构建此图,您可以执行出租车距离或平方距离,以按距离对点进行排序(这将避免繁重的计算)。

然后,如果您想要最近的邻居,则只需选择第一个邻居即可:p。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM