【问题标题】:embedding vector search efficient algorithm嵌入向量搜索高效算法
【发布时间】:2021-12-17 14:15:49
【问题描述】:

背景:我有一个机器学习模型,其中给定一个对象返回一个维度为 d 的嵌入向量,该模型的训练方式使得两个嵌入向量的语义相似性非常接近.现在,验证过程比较简单,我可以取两个向量的余弦相似度之类的东西。对于识别,有点复杂,要么我可以循环遍历所有锚文档并比较余弦相似度,要么使用类似 kNN(在线)的东西。

问题:我有一个嵌入向量列表,每个向量的维度为 d,长度为 N。每个向量都包含浮点数据。

什么是高效的数据结构+算法,可以做到以下几点:

  1. 可以有效地将具有唯一 ID 的新向量添加到列表中(
  2. 使用列表中的随机向量进行搜索,并检索前 k 个向量,这样曼哈顿距离 / L1 范数对于这些向量来说是有效的最小值(希望

示例:

[
 [1., 2., 3.],
 [5., 6., 8.],
 [-11., 2., 31.]
]

k = 2 query = [1.5, 2.5, 3.2] results:

[
 [1., 2., 3.],
 [5., 6., 8.],
]

【问题讨论】:

  • 我会调查approximate nearest neighbor algorithms。根据数据(特别是是否N >> d),某种形式的局部敏感散列或基于 kd-tree 的方法似乎是合适的。
  • 谢谢,这绝对有帮助,我在这里找到了一些很好的资源:@​​987654322@
  • 我写了一个 few articles,你可能会发现它对 ANN 算法很有用,你有各种方法,如 IVFHNSW,也可以使用 mix and match several combinations。您的问题的答案取决于您的数据集的大小,最重要的是,任何特别大的 1M+ 都是 IVF+HNSW 领土
  • 谢谢,@JamesBriggs。我会调查的。
  • 是的,向量数量将达到1M+。

标签: python algorithm search data-structures similarity


【解决方案1】:

我认为 Faiss 正是您想要的。 Github 页面是here,如果您对实现细节感兴趣(这是相当技术性的)请参阅here,教程是here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多