增加探针数量(例如,FAISS 等向量数据库中的 nprobe
)或搜索深度(例如,HNSW 图中的 efSearch
)通过扩大搜索范围直接影响查询延迟。较高的值通过检查更多集群或更深入地遍历搜索空间来提高召回率,但它们也会增加计算开销和延迟。例如,加倍 nprobe
可能需要检查两倍的向量集群,从而导致更长的处理时间[3]。 类似地,增加 HNSW 中的 efSearch
会迫使算法探索图中更多的节点,这会减慢查询速度,但会降低错过相关结果的风险[2]。
为了找到最佳平衡,开发人员应该使用具有代表性的数据集来对他们的系统进行基准测试。 一个实用的方法包括:
- 基线测试:测量默认参数值下的延迟和召回率。
- 增量调整:逐渐增加
nprobe
或efSearch
,同时跟踪性能。 例如,如果nprobe=10
产生 80% 的召回率和 50 毫秒的延迟,请尝试nprobe=20
,看看召回率是否提高到 90% 和 80 毫秒的延迟。 - 权衡分析:确定延迟增加与召回率增益不成比例的点。 如果延迟飙升到超出可接受的阈值(例如 100 毫秒),则恢复到较低的值。
实际应用通常优先考虑速度或准确性。 对于延迟敏感的系统(如实时推荐),请使用较低的值(例如,nprobe=16
,efSearch=64
)。 对于离线批量处理,可以接受更高的值(例如,nprobe=128
,efSearch=256
)[3][10]。 网格搜索或贝叶斯优化等工具可以根据数据集特征和硬件约束自动调整参数[2]。
参考资料:[2] 搜索深度 [3] 探针 [10] 深度研究