IVF 索引(Inverted File Index,倒排文件索引)是一种近似最近邻(Approximate Nearest Neighbor, ANN)索引:先把向量粗聚类成若干簇,查询时只到最可能的几个簇里找,而不是全库比对。
生活里可以这样理解:一个大型仓库按品类分成很多区,每个区有指示牌。要找一款耳机,先看指示牌,直接去“数码区”“影音区”这几个最像的区翻,不用走遍全仓。IVF 的“区”就是簇,指示牌是簇中心,区里的货架清单就是倒排列表。
建索引时,通常用 k-means 把向量聚成 nlist 个簇,每个向量归到最近的簇中心,并记录在对应倒排列表里。查询时,先算查询向量到所有簇中心的距离,挑最近的 nprobe 个簇;只在这些簇内做精确距离计算,返回 top-k 邻居。nprobe=1 最快但容易漏掉其他簇里的近邻;nprobe 增大,召回率上升,计算量也上升。nlist 和 nprobe 是关键参数,需要按数据规模和延迟要求调。
和相邻概念的区别:
| 方法 | 怎么找 | 特点 |
|---|---|---|
| 暴力检索 | 与所有向量算距离 | 精确,数据大时慢 |
| IVF | 先找最近簇,再簇内算 | 快,可能漏;适合大规模 |
| HNSW(Hierarchical Navigable Small World) | 在图上逐跳靠近目标 | 通常高召回、低延迟,内存更大 |
| PQ(Product AI 词典:Quantization">Quantization,量化">乘积量化) | 压缩向量,用近似距离 | 省内存,常与 IVF 组合成 IVF-PQ |
核心区别是:IVF 是“分而治之”的粗筛结构;HNSW 是“导航图”;PQ 是“压缩编码”。三者可以组合使用。
实际意义:在语义搜索、推荐、图像检索和 RAG(Retrieval-Augmented Generation,检索增强生成)里,向量数量动辄百万千万,全量比对不现实。IVF 让系统用可控的召回损失换速度。从业者要关注聚类训练、增量更新、删除后倒排列表维护,以及数据分布变化后重建索引。普通人可以把它理解成:搜索快,不是因为算得更多,而是因为先排除了大部分不用算的。具体实现和参数以官方页面为准。
