| nlist | 聚类数,常见做法取 sqrt(N) 附近量级 |
|---|---|
| nprobe | 查询扫描的聚类数,常用 1~128 之间调 |
| 训练 | 先 train 再 add,训练集规模需大于聚类数 |
FAISS IVF 最小示例
FAISS IVF 最小示例
import faiss, numpy as np
d = 768; nlist = 256
quantizer = faiss.IndexFlatL2(d)
index = faiss.IndexIVFFlat(quantizer, d, nlist)
train_xb = np.random.rand(100000, d).astype("float32")
index.train(train_xb)
index.add(np.random.rand(500000, d).astype("float32"))
index.nprobe = 16
D, I = index.search(np.random.rand(1, d).astype("float32"), 10)未调用 train 就 add 会报错;训练样本过少时聚类质心偏差大,召回显著变差。