背景:我有一个机器学习模型,其中给定一个对象返回一个维度为 d 的嵌入向量,该模型的训练方式使得两个嵌入向量的语义相似性非常接近.现在,验证过程相对简单,我可以取两个向量的余弦相似度之类的东西。对于识别,它有点复杂,我可以循环遍历所有 anchor 文档并比较余弦相似度,或者使用 kNN 之类的东西(在线)。
问题:我有一个嵌入向量列表,每个向量的维度为 d,长度为 N。每个向量都包含 float 据。
什么是高效的数据结构+算法,可以做到以下几点:
- 可以有效地将具有唯一 ID 的新向量添加到列表中(<= 对数复杂度)
- 使用列表中的随机向量进行搜索,并检索前 k 个向量,使得曼哈顿距离/L1 范数对于这些向量有效地最小(希望 <= 对数复杂度)。
示例:
[
[1., 2., 3.],
[5., 6., 8.],
[-11., 2., 31.]
]
k = 2
查询 = [1.5, 2.5, 3.2]
结果:
[
[1., 2., 3.],
[5., 6., 8.],
]
最佳答案
关于python - 嵌入向量搜索高效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69820812/