文章WHITEHOLE
召回与排序为什么要分开调
检索质量差,很多时候不是「找不到」,而是「找回来的东西排错了」。召回与排序是两个阶段,各自有不同的指标与调参方式;混在一起调,会陷入改了排序却以为改了召回的循环。本文说明两阶段各自的指标、分开之后能调什么,以及常见错误与验收口径
RAG知识引擎模型评估
召回与排序,是检索链路里两个职责不同的阶段:召回负责从全量内容里取出一批候选,排序负责把这批候选按相关性重排。把它们当成一件事来调,最常见的后果是反复调整却没有改善 —— 因为改的是后一步,瓶颈在前一步
两个阶段各做什么
- 召回:从全量内容里挑出一批可能相关的候选,目标是不漏。
- 排序:把候选按相关性重新排列,目标是准,通常只用前若干条。
- 组装:把排序后的内容拼进上下文,受长度预算限制,这一步常常被忽略。
召回追求覆盖率,排序追求精度,两者的评价标准天然冲突。这也是为什么必须分开看指标 —— 用一个端到端数字衡量,会把两种不同的失败混为一谈。
各自的指标
- 召回看遗漏:该被取回的内容有没有出现在候选集里。
- 排序看位置:正确答案是否落在实际会被使用的前几条之内。
- 端到端看结果:最终答案是否正确、是否附带了可核对的来源。
分开之后能调什么
- 召回侧:内容切分方式、同义与术语映射、候选数量、是否加入多路检索。
- 排序侧:排序模型的依据、是否引入重排环节、同分时的稳定排序规则。
- 组装侧:送入上下文的数量与顺序,以及是否保留来源标注。
常见错误
- 只调排序不查召回:候选集里根本没有正确内容时,排序怎么改都不会变好。
- 用端到端指标代替分阶段指标:只知道变差了,不知道差在哪一段。
- 候选数量设得太小:召回阶段就把正确答案挤掉,后面没有补救空间。
- 忽略权限过滤的影响:过滤发生在召回之后,会把候选集从内部缩小,效果等同于减量。
怎么定位问题在哪一段
做法是准备一批带标准答案的问题,逐个检查正确内容在链路上的位置:不在召回结果里、在召回但排序靠后、还是排在前列却仍答错。三种情况分别指向召回、排序与生成三个不同环节。
验收
- 有分阶段的指标记录,而不是只有一个端到端数字。
- 抽样问题的失败原因能归到具体环节。
- 参数调整前后有对照结果,且注明调整了哪一段。
- 权限过滤对召回的影响被测量过,而不是默认无影响。
组装环节常被忽略的三件事
- 顺序:排在前面的内容对最终答案影响更大,而实际往往只按分数机械排列。
- 重复:同一份材料的多个片段同时进入上下文,会挤掉其他候选的位置。
- 来源标注:丢掉了来源,答案就无法核对,等于放弃了可追溯性。