完整题目
请解释Facebook AI开发的向量相似性搜索库FAISS的核心原理,包括其如何实现高效近似最近邻搜索,以及常用索引结构(如IVF、PQ)的作用。
本文目录
FAISS 解决什么问题
FAISS 提供高维向量的相似度搜索与聚类实现,既支持 Flat 精确搜索,也支持多种近似最近邻索引。Flat 会计算查询与全部向量的距离,结果精确且可作为评测基线;当数据规模、维度或 QPS 超出预算时,再用 ANN 在召回率、延迟与内存之间取舍,不能笼统说精确搜索一定不可行。
IVF:减少候选比较
IVF 用聚类中心把向量分配到倒排列表。查询先找近邻中心,再只扫描 nprobe 个列表中的候选。增大 nprobe 往往提高召回但增加计算;实际复杂度受列表平衡、训练数据、向量分布和实现影响,不是固定的 O(logN)。
PQ:压缩向量并近似算距
PQ 把向量切成多个子空间,每个子空间用码本编码。数据库只保存短码,查询时通过查表近似累加距离,从而减少内存和带宽。子空间数、码本大小、是否使用 residual PQ 都会影响压缩率与误差。
IVFPQ 可先用 IVF 缩小搜索范围,再用 PQ 码计算候选距离;也可按需要加入重排或 GPU 加速。
选型与验证
根据数据量、可用内存、更新方式和目标 QPS,对 Flat、IVF、PQ、IVFPQ、HNSW 等候选统一测 Recall@K、延迟分位数、吞吐、构建时间和峰值内存。索引参数必须在代表性查询集上调优;不能仅按“百万级”或“亿级”给出固定索引结论。