python - 嵌入向量搜索高效算法

标签 python algorithm search data-structures similarity

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

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

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

  1. 可以有效地将具有唯一 ID 的新向量添加到列表中(<= 对数复杂度)
  2. 使用列表中的随机向量进行搜索,并检索前 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.],
]

最佳答案

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

关于python - 嵌入向量搜索高效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69820812/

相关文章:

sql - 针对 SQL 数据库自动完成名称

类似 Python CAPTCHA 的图像失真

Python 类派生自 pandas DataFrame,具有 list/DataFrame 属性

python-3.x - 多边形三角剖分算法

c# - 垂直显示的字母排序列表

mysql - 在 mysql 中以 varchar 和文本数据类型获取单数和复数记录

python - bin 大小 seaborn 联合图

python - AIRFLOW - 从运算符(operator)列表中设置关系

algorithm - 如何创建黑客证明唯一代码

mysql - 为什么在 MySQL 中全文搜索字符串 'FDR' 没有结果?