「检索效果不好」要拆成三段来测
把检索链路当成一个整体去评,只会得到一句"不好用"。拆成三段,问题立刻具体:
1. **召回**:该找到的文档,进没进候选集?
2. **排序**:进来的文档,排到前面了吗?
3. **答案**:拿到这些片段,回答对不对、有没有引用?
三段的责任人、指标和修法都不同。混在一起测,往往会把"排序问题"误当成"模型问题",白换模型。
第一段:召回
构造 30~50 个问题,人工标注**每题的"应命中片段"**(哪一段是真正能回答它的);
指标:`召回率@K`(K 取 10~50,看候选集够不够);
召回低通常是**切分/解析**问题(见"文档解析与切分"那篇),不是向量模型问题;
排查顺序:先看该片段是否存在 → 是否存在但没进候选(切分/索引)→ 是否进了但排太后(排序)。
第二段:排序
指标:`MRR` 或 `命中位次`(第一条正确片段平均排在第几);
对比改动时**只改一个因子**(加时效、加权威、去重、多样性重排);
常见现象:召回不错但第一条永远是"最像但不是最有用"的那段 → 这是排序信号不足,而不是召回问题。
第三段:答案
指标:**正确率** + **引用率**(答案里给出的片段是否真的支撑结论)+ **编造率**;
关键:答案错时先问"给它的片段够不够"——**片段不足导致的错,不该记在生成头上**;
要求模型给出引用来源,并做**引用一致性检查**(引用内容与结论是否相关)。
三段分开测之后能得到什么
定位清楚(是切分、排序还是生成);
改动可归因(每段有自己的指标与前后的对照);
预算花得准(哪一段最需要投入一目了然)。
一个最小落地流程
1. 30 个问题 + 每题标注应命中片段(半天能做完);
2. 跑基线:召回@20、MRR、答案正确率/引用率/编造率;
3. 挑最差的一段,只改一个因子,复跑同一批问题;
4. 记录改动与三段指标变化(**包括没变好的地方**);
5. 把这三段指标接进流水线,改动即回归。