向量索引
用于加速相似度检索的专用数据结构 — 以极小的 Recall 损失换取速度和扩展性的质变。
向量索引是一种专用数据结构,用于加速在大规模的向量 Embedding 数据上的相似度检索。
在没有索引的情况下,若要检索出与查询向量最相似的的项,系统必须将其与数据库中的每一个向量进行比对 — 这种方式被称为暴力检索或 Flat 检索。
暴力检索的特点:
- ✅ 精确:能够返回严格匹配的最相似结果,不存在近似计算。
- ⚠️ 大规模下性能极低:当面对数百万乃至数十亿的向量数据时,查询耗时可能长达数秒甚至数分钟,导致其无法满足实时应用的需求。
近似检索 vs. 精确检索
大多数向量索引都采用了近似最近邻 (ANN) 算法。
ANN 不再执着于寻找绝对精确的“最相近匹配项”,而是转而寻找高度准确的的近似结果。在实际应用中,这些近似结果的质量往往与精确结果难分伯仲,但检索速度和效率却得到了质的提升。
对于语义搜索或推荐系统这类实际应用场景而言,这种策略极具价值 — 因为它仅需牺牲很小的精度,就能换来速度和扩展性的质变。简而言之:结果够准,速度够快 ✨。
Recall:衡量近似检索精度
Recall 是评估 ANN 算法结果质量的标准指标。
它量化了这样一个比例:在近似方法返回的 Top‑k 结果中,有多少是真正包含在精确搜索(暴力检索)找到的“真最近邻”里的。
它量化的是真实最近邻(通过精确暴力搜索确定的)中,出现在近似方法返回的 top-k 结果中的比例:
示例:
- 如果你请求了 top 10 的结果,其中有 9 个与精确检索得出的的真实 top 10 匹配,则
recall@10为 90%。 - 通常情况下,高 Recall(例如 ≥ 96%) 意味着对于大多数应用来说,这种近似搜索的效果与精确搜索在实际体验上几乎没有区别。
通过选用不同的索引类型 (如 HNSW) 及其参数 (如 ef_search),你可以灵活权衡 Recall、查询速度和资源开销,从而针对特定的精度与性能需求进行优化。
向量索引类型
Zvec 支持以下向量索引类型,各自适用于不同的使用场景、数据集规模和性能需求:
根据你的数据规模、延迟要求和精度容忍度选择索引类型。始终使用与你的 Embedding 模型训练时一致的距离度量。