完整题目
向量召回有哪些主要实现方式?Flat、HNSW、IVF 和 PQ 分别解决什么问题,如何验证选型?
本文目录
先建立精确基线
向量召回既可以做精确最近邻,也可以做近似最近邻。选型前先统一距离度量、归一化方式、训练/测试查询、过滤条件和真值近邻,用 Flat 精确搜索或可靠真值建立 Recall@K 基线。没有真值和负载条件,“毫秒级”“召回率大于 95%”都不是可迁移结论。
1. Flat:精确搜索
Flat 保存原始向量并与查询逐个计算距离,结果精确、无需训练,适合数据量允许、需要做评测真值或作为重排阶段的场景。代价是查询计算随向量数量增长,是否够快取决于维度、批量、硬件和并发。
2. HNSW:图导航近似搜索
HNSW 构建多层邻接图,通过图遍历找到近邻。它常能在较高召回下取得低延迟,但需要额外图结构内存,构建和更新也有成本。Faiss 的 HNSW 底层存储可以是 Flat、标量量化或 PQ;“底层精确搜索”不是 HNSW 的定义。Faiss HNSW 不支持直接删除,因此删除、过滤与重建策略必须按所用引擎验证。
关键参数如 M、efConstruction、efSearch 共同影响构建时间、内存、召回和延迟,应在目标数据与并发下画曲线。
3. IVF:先选倒排单元再扫描
IVF 先训练粗量化器,把向量分配到倒排单元;查询时选择若干单元并扫描其中候选。nlist、nprobe、训练样本和数据分布影响速度与召回。IVF-Flat 仍保存完整向量,并不因为叫 IVF 就天然省内存;它主要通过少扫描单元减少查询计算。
粗量化器可以使用 Flat,也可以用 HNSW 加速中心选择。所谓 IVF-HNSW 通常是用 HNSW 搜粗中心,不能笼统描述为“HNSW 存全部向量、IVF 再检索”。