检索与排序效果怎么评(Recall、MRR、nDCG)

一句话速记

  • Recall@k:相关文档有没有进前 k —— 偏召回广度
  • MRR:第一个相关结果排第几 —— 偏首位是否够前
  • nDCG@k:带相关度权重的排序质量 —— 偏整表顺序好坏。
    RAG 要分阶段评:先评检索(上列),再评最终答案(EM、F1、人工/LLM judge 等),两套别混。

集合与标注

  • 每条 query 有标注:相关文档集合 Rel(二值)或分级相关度(多档)。
  • 系统输出有序列表 d1, d2, …, dL

二值相关:Recall@k 与 Precision@k

  • Recall@k = 前 k 个结果中命中的相关文档数 ÷ |Rel|。
  • Precision@k = 前 k 个里相关数 ÷ k。

多 query 常做宏平均;也可配合 MAP、AP(单 query 多相关文档时的平均精度类指标)。RAG 基线里 Recall@k + MRR 很常见。

只关心「第一个相关排多前」:MRR

  • 对单条 query:找到排名最靠前的那条相关结果,名次为 r,则贡献 1/r;若前 L 个全无相关则贡献 0。
  • MRR = 多 query 上该值的平均。

适合:只关心「一条最相关是否很靠前」的场景。

分级相关:nDCG

  • DCG@k = Σᵢ (relᵢ / log₂(i+1)),其中 relᵢ 为第 i 位的相关度分(可为 0/1/2/3 等)。
  • IDCG@k:把文档按 rel 理想降序排一层得到的 DCG 上界。
  • nDCG@k = DCG@k / IDCG@k ∈ [0,1]。

适合:同一条 query 有多个不同强度相关结果、整体排序形状要比较时。

与生成质量的分离

  • 检索好 ≠ 最终答案对(合并/抄错/扩写幻觉 仍可能)。
  • 实践:用 query–doc 金标 评检索;用答案金标裁判模型 评端到端。

延伸追问

  • Q:线上一堆 query 没人工标全怎么办?
    答:分层抽样人评、弱监督(点赞/点踩、是否解决)、合成数据;线上再 A/B 看业务指标。

  • Q:Recall@k 高但业务仍差?
    答:可能 Rerank/截断/提示 失败,或评估的是检索、用户怨的是答非所问 —— 要分层看指标。

  • Q:Recall 和 MRR 会冲突吗?
    答:k 放大时 Recall 易升,第一名 仍可能错;常靠 Rerank混合检索 抬头部相关。

我的记法

TODO

状态

  • 已背速记
  • 能讲通俗版
  • 能答追问

参考资料

  • 信息检索教材中「评价指标」章节;BEIR 等公开基准的汇报表头即常见汇总统法。