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