最近在做一个RAG项目,用的Milvus存了大概50万条文档向量(OpenAI的1536维embedding)。目前测试下来,top-10召回率只有可怜的62%左右,但用余弦相似度直接暴力计算(numpy)能到85%以上。我确认了索引类型(IVF_FLAT)、nlist和nprobe都调过了,甚至试了HNSW,效果还是差一截。数据分布应该没问题,因为暴力检索的结果是准的。感觉是不是我哪里理解错了?比如参数设置和向量归一化是不是有关系?或者查询时是不是要加什么粗排精排的策略?有没有大佬遇到过类似情况,或者能分享下你们生产环境里的调优经验?另外,有没有必要上rerank模型?先谢过了。
楼主
2026-08-29
向量数据库召回率上不去,调参调到怀疑人生,求大佬指点迷津
请 登录 后发表回复
全部回复
共 21 条
2楼
16小时前
你暴力检索能到85%说明embedding本身没问题,差距应该出在索引近似搜索的精度损失上。归一化确实关键,Milvus里如果用IP度量必须先把向量L2归一化,不然内积和余弦就不是一回事了,nprobe调大召回会涨但延迟也上去了,可以试试nprobe设到nlist的10%看看天花板在哪。另外你top-10的62%是拿什么当ground truth的,如果是用暴力结果对拍那62%就是索引召回率,这个数值对IVF来说其实不算离谱,想要接近暴力效果可以上HNSW把ef调到200以上试试。rerank值得加,先粗排召回50-100条再精排,比死磕索引召回划算多了。