调整向量搜索的超参数涉及调整控制搜索准确性、速度和资源使用之间平衡的参数。关键超参数通常包括聚类数量(在像 IVF 这样的方法中)、探针数量(用于搜索聚类),以及候选列表大小或图连接等参数(在像 HNSW 这样的基于图的方法中)。目标是根据您的数据集大小、查询延迟要求和可接受的错误率来优化这些设置。例如,增加 IVF 中的聚类数量会减少每次查询的搜索空间,从而加快搜索速度,但如果聚类定义过于狭窄,则可能会错过相关结果。
首先使用默认值和一个已知查询的验证集进行基准测试。 测量召回率(找到的真实最近邻居的百分比)和延迟。 对于 IVF,调整 nlist
(聚类数量)和 nprobe
(每次查询搜索的聚类数量):更高的 nprobe
提高召回率,但会增加搜索时间。 如果使用 HNSW,则 efConstruction
(控制构建期间的索引质量)和 efSearch
(查询期间的候选列表大小)等参数会影响结果。 例如,设置 efSearch=100
可能比 efSearch=20
检索到更准确的结果,但需要更长的时间。 逐步试验——增加 nprobe
或 efSearch
直到召回率达到稳定水平,然后检查延迟是否可以接受。 使用网格搜索或贝叶斯优化等工具来系统地探索组合。
根据您的应用程序平衡权衡。 实时系统可能优先考虑延迟而不是完美的召回率,而批处理可能更喜欢准确性。 例如,具有 100 万个商品的电子商务产品搜索可以使用 nlist=1000
和 nprobe=20
的 IVF 在 5 毫秒内实现 90% 的召回率。 调整内存约束:像 PQ(乘积量化)这样的方法减少了向量存储,但引入了近似误差。 跨硬件进行测试——在具有 64GB 内存的服务器上工作的参数可能在边缘设备上失败。 记录设置并在数据更改时重新评估(例如,添加 50% 更多的向量)。 像 FAISS 的 autotune
或 ANN-Benchmarks 这样的开源工具可以自动执行此过程的某些部分。