按余弦距离获取前N个最近向量的最快方法

编码和尚

我有大量的向量(〜100k)(代表单词并使用随机索引进行计算),并且必须找到给定的1个输入单词,前N个最接近的向量。我现在这样做的方法是按距离进行完整排序,然后提取前N个结果,但这需要太多时间才能使用,因为我必须计算100k距离。有更有效的方法吗?向量已经归一化,因此在计算距离时我只需要计算点积。

向量存储在Java中HashMap<String, Vector>,其中Vector是稀疏向量的la4j类。

很快

您可以将向量放入可感知空间的容器中,例如R树kd树PK树

这样,您仅通过查看几个相邻的像元就可以找到点,而无需遍历所有数据集。别忘了,您不仅需要在单个单元格中搜索,而且还需要在相邻的单元格中搜索,并且在多维空间中,有很多邻居。

更新:您仍然需要手动测量距离。但是,您将不需要遍历所有向量。

一个简单的解决方案-定义最大距离,迭代该距离内的像元内的所有向量,排序并选择前N个。

最佳解决方案(很难开发)–迭代搜索过程。例如,从输入向量vX所在的单个单元格开始,在该单元格中找到N个最近的向量。如果vX与找到的第N个矢量之间的距离(最远的一个)小于vX与尚未搜索的任何单元格的最近点之间的距离,则得到N个结果。否则,从尚未搜索的最近单元中添加向量,然后重复该过程。这里最复杂的事情-跟踪已经搜索了哪些单元格以及下一步要做什么(尤其是PK树的高度可变的情况下)。

权衡解决方案(不是很难开发的,可能对您来说是最佳的)–迭代搜索过程,使您始终无所不用其极。您可以从包含vX的叶节点开始,如果它没有N个向量,或者如果vX距离单元的边界更近,则第n个找到的向量,则向上一层,然后添加完整的子节点,从父节点开始的树。这样,由于搜索区域始终为矩形,因此算法简单得多。但是,最坏的情况(即,如果vX位于2个根单元之间的边界上)会更糟-您必须遍历所有100k点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R-获取向量中最多n个元素的索引的最快方法

来自分类Dev

向量到矩阵的余弦距离

来自分类Dev

从列表中获取配对的最快方法,该配对按列表中的距离排序

来自分类Dev

在树状图中获取父母向量的最快方法

来自分类Dev

如何从一个位置获取数组中多个位置的距离,并在iOS中按最近距离对该数组进行排序?

来自分类Dev

在HashMap中获取前N个键(按值排序)的最佳方法

来自分类Dev

2个熊猫df列之间的cosine_similarity以获取余弦距离

来自分类Dev

确定两个点是否彼此最近的最快方法

来自分类Dev

向量空间模型:余弦相似度与欧式距离

来自分类Dev

获取向量中整数频率的最快方法是什么?

来自分类Dev

用numpy / scipy计算连续向量之间距离的最快方法

来自分类Dev

同时排序两个向量(键/值)的最快方法?

来自分类Dev

Matlab:最快的方法复制和相乘两个向量

来自分类Dev

检查元素是否在两个向量中的最快方法

来自分类Dev

按[R]顺序找到向量中前n个元素的索引

来自分类Dev

两个n维向量之间的欧式距离

来自分类Dev

从DynamoDB获取最近的N个项目

来自分类Dev

R:获取向量中每个唯一值的第一个和最后一个位置的最快方法?

来自分类Dev

如何使用R通过余弦相似度有效地检索前K个相似向量?

来自分类Dev

找到距离最近的前 5000 米的记录

来自分类Dev

用scipy计算“余弦”指标的最快方法

来自分类Dev

用scipy计算“余弦”指标的最快方法

来自分类Dev

按组分割数据帧的最快方法,在R中随机播放单个向量

来自分类Dev

在python中找到欧式距离的最快方法

来自分类Dev

向量的圆移距离n

来自分类Dev

按类别汇总最近的N个以前的条目

来自分类Dev

找到与 R 中值较小的另一个元素最近的元素的最快方法

来自分类Dev

余弦距离范围解释

来自分类Dev

余弦距离公式?

Related 相关文章

  1. 1

    R-获取向量中最多n个元素的索引的最快方法

  2. 2

    向量到矩阵的余弦距离

  3. 3

    从列表中获取配对的最快方法,该配对按列表中的距离排序

  4. 4

    在树状图中获取父母向量的最快方法

  5. 5

    如何从一个位置获取数组中多个位置的距离,并在iOS中按最近距离对该数组进行排序?

  6. 6

    在HashMap中获取前N个键(按值排序)的最佳方法

  7. 7

    2个熊猫df列之间的cosine_similarity以获取余弦距离

  8. 8

    确定两个点是否彼此最近的最快方法

  9. 9

    向量空间模型:余弦相似度与欧式距离

  10. 10

    获取向量中整数频率的最快方法是什么?

  11. 11

    用numpy / scipy计算连续向量之间距离的最快方法

  12. 12

    同时排序两个向量(键/值)的最快方法?

  13. 13

    Matlab:最快的方法复制和相乘两个向量

  14. 14

    检查元素是否在两个向量中的最快方法

  15. 15

    按[R]顺序找到向量中前n个元素的索引

  16. 16

    两个n维向量之间的欧式距离

  17. 17

    从DynamoDB获取最近的N个项目

  18. 18

    R:获取向量中每个唯一值的第一个和最后一个位置的最快方法?

  19. 19

    如何使用R通过余弦相似度有效地检索前K个相似向量?

  20. 20

    找到距离最近的前 5000 米的记录

  21. 21

    用scipy计算“余弦”指标的最快方法

  22. 22

    用scipy计算“余弦”指标的最快方法

  23. 23

    按组分割数据帧的最快方法,在R中随机播放单个向量

  24. 24

    在python中找到欧式距离的最快方法

  25. 25

    向量的圆移距离n

  26. 26

    按类别汇总最近的N个以前的条目

  27. 27

    找到与 R 中值较小的另一个元素最近的元素的最快方法

  28. 28

    余弦距离范围解释

  29. 29

    余弦距离公式?

热门标签

归档