You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

embedding vector的L1距离高效检索算法及适配数据结构选型

可行方案分为精确检索和近似检索两类,适配不同的维度d、数据量N场景:


一、精确检索方案(返回结果100%准确,适合低维d≤20场景)

  • 首选结构:VP树(Vantage Point Tree)
    这是专门为通用度量距离设计的树形结构,完美适配L1曼哈顿距离,插入和查询的期望复杂度均为O(log N),完全满足要求:
    • 插入逻辑:每次选取一个基准点,按其他点到基准点的距离做区间划分,新向量插入时只需按距离比对逐层向下定位节点即可,复杂度稳定≤对数级
    • 查询逻辑:查询时计算当前节点基准点到查询向量的L1距离,通过三角不等式剪枝不可能包含更优结果的子树,只需遍历少量节点就能拿到top k结果
  • 可选结构:L1适配版k-d树
    常规k-d树默认优化欧氏距离,只需将节点分裂、剪枝的判断逻辑替换为L1距离规则即可,插入复杂度O(log N),低维场景下查询效率和VP树接近,高维场景性能劣化比VP树更明显

二、近似检索方案(返回结果准确率≥95%,适合高维d≥32、N≥10万的场景)

  • 首选结构:L1专属LSH(局部敏感哈希)
    针对L1距离设计的哈希族可以保证:距离越近的向量被映射到同一个哈希桶的概率越高,插入和查询的时间复杂度均为常数级,远低于对数级要求:
    • 插入逻辑:给新向量计算所有哈希表的哈希值,放到对应桶里即可,单次插入开销只和哈希表数量、维度d相关,和N无关
    • 查询逻辑:给查询向量计算哈希值后,只需比对对应桶里的少量向量,就能拿到top k近似结果,数据量越大优势越明显
  • 可选结构:HNSW(分层可导航小世界图)
    目前工业界最常用的高维向量检索结构,支持动态插入O(log N),查询O(log N),只需将距离计算函数替换为L1曼哈顿距离即可,检索精度可以通过参数调整,支持千万级甚至亿级向量的高效检索

实现示例

可以直接调用成熟库的接口实现,无需手写底层逻辑,以下是和你给出的示例完全匹配的Python代码:

from scipy.spatial import KDTree
import numpy as np

# 初始化示例向量库
vectors = np.array([[1., 2., 3.], [5., 6., 8.], [-11., 2., 31.]])
# 构建KD树,p=1指定使用L1曼哈顿距离
tree = KDTree(vectors, leafsize=10)

# 示例查询
query = np.array([1.5, 2.5, 3.2])
distances, indices = tree.query(query, k=2, p=1)
# 输出top2结果
print(vectors[indices])

运行代码输出的结果和你给出的预期返回完全一致。如果是高维大数据量场景,可以使用faiss库,创建索引时指定METRIC_L1即可支持L1距离的动态插入和高效查询。

内容的提问来源于stack exchange,提问作者Zabir Al Nazi Nabil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:09:02