先记住这个答案
MRR 只关心第一个正确答案的排名倒数,用于单目标问答;Recall@k 统计前 k 中相关项占比,看覆盖;nDCG@k 对多级相关性做衰减折损,排在前面的高相关项贡献更多。k 越小越偏重头部精排,k 越大越接近全量覆盖,但这仅适用于 Recall@k 和 nDCG@k,MRR 本身不设 k。
- MRR 只数第一个相关项位置。
- Recall@k 忽略排序只算覆盖率。
- nDCG@k 要求位置越靠前相关度越高。
触发机制与计算差异
MRR=1/ rank_first_correct,只有排序第一项是对的才有满分,对后位错误不敏感。例如 query 有 5 个相关文档,系统排第 2 位出现第一个相关,MRR=0.5 它不奖励后面的 4 个全部命中。所以适合问题只有一个标准答案或只需第一跳的任务,如知识库问答。
Recall@k 是归一化命中覆盖:分子为前 k 中相关项数,分母为全部相关项数(固定集合评测中已知)。一个 top1 全错的系统若 top10 覆盖 8 个相关项,Recall@10=0.8,与排序无关。nDCG@k 则用 DCG/IDCG 做相对增益,k 截断使相对值不随库大小漂移,对多级标签 (如 0/1/2) 依位置对数衰减。
电商搜索召回场景的指标分歧
假设搜索“无线路由器”,标注 10 个相关商品,其中 3 个极高相关(用户必买),7 个一般相关。系统 A 把 3 个高标准商品排第 1、2、3,其余相关排 30 开外;系统 B 把 10 个相关均匀塞进前 20,没有一条高相关进前 5。若只看 MRR,A=1.0, B=0.2;看 Recall@20,A=0.3, B=1.0 完全反转。
业务目标是首屏转化,应看 nDCG@10,它会惩罚 B 的高相关排序靠后;若目标是“翻两屏能找全”,Recall@20 才对。实际团队采用混合:用 Recall@5 排查召回缺失,用 nDCG@10 监测头部关联,避免单一指标误导排序调优。
k 截断与标注形态的适用边界
当相关文档总数小于 k 时,只有全部相关文档排在前 k 才会使 Recall@k=1.0,若未全部命中则得分小于 1,区分度下降。例如人工只标了 5 条相关且 k=10,若只命中 4 条则 Recall=0.8,并非所有系统都满分。此时应改用 nDCG 的多级标签或把 k 收到与标注密度匹配。MRR 在答案唯一且存在时可靠,若无正确答案则置 0,会导致稀疏反馈。
nDCG@k对标签错误极敏感:若把高相关标成弱相关,IDCG 变小可能抬高实际得分。截断 k 若大于典型查询长度,用户不会翻那么深,计算冗余;k 过小则丢失长尾覆盖。实践是先按业务漏斗定用户翻看深度 k,再针对性选择主指标,并加分组统计看 k 变化时的曲线。
容易答错的地方
- 把 Recall@k 当排序质量指标
- Recal@k 只数前 k 里相关个数,不惩罚前 k 中把次相关排在首位的情况,常导致高覆盖但头部错乱的系统被高估。依据是它的公式不包含位置折损。
- 认为 MRR 能评估多相关项的覆盖
- MRR 只取第一个相关项的倒数,后续相关无论排第 2 还是第 8 都无区别,当 query 有多个正确答案时信息丢失。典型证据是它只取决于第一个正确项的位置,其他正解不影响得分。
面试官还会怎么问?
同一组实验 MRR 提升但 Recall@10 下降,可能原因?
系统把第一个正确答案从第 3 提到第 1,但挤掉了后面其他相关项,导致 MRR 升而 Recall@10 降。说明头部精排增强但覆盖受损,需按漏斗取舍。
nDCG@k 与 MRR 何时数值完全等价?
只使用二值相关性、且每个 query 恰好只有一个相关文档时,nDCG@k 退化成 1/log2(1+rank),与 MRR 单调相关,但数值仍不等。
离线评测里 k 如何确定?
查看线上搜索平均翻页位置或业务转化深度,把曝光点击曲线在 90% 累计增益处的位数设为 k,避免拍脑袋。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。