首页/AI/AI 应用速查/检索评测指标:Hit Rate / MRR / nDCG

检索评测指标:Hit Rate / MRR / nDCG

RAG 优化不能凭感觉:Hit Rate 看“相关内容是否被召回”,MRR 看“第一条相关结果排多前”,nDCG 看整体排序质量。先建 50-100 条标注评测集再调参。

AI 应用速查AI更新于 2026-10-13

检索评测指标是什么

检索评测的作用是把「优化有没有效」从感觉变成数字。三个常用指标各有侧重:Hit Rate@k 看 top-k 里是否至少有一条相关内容,是召回底线;MRR 看第一条相关结果排得多靠前,衡量头部排序质量;nDCG@k 带位置折损地评价整体排序,还支持多级相关度。另有 Recall@k 反映相关文档被召回的比例,衡量知识覆盖面。做法是先建五十到一百条标注评测集,再动切分、索引与重排参数,每次改动后重跑同一套题。

基本信息

Hit Rate@ktop-k 中至少有一条相关,看召回底线
Recall@k相关文档被召回的比例,看知识覆盖面
MRR第一条相关结果排名的倒数均值,看头部排序
nDCG@k带位置折损的排序质量,支持多级相关度
评测集规模50-100 条标注数据起步
触发时机改切分、换模型、调重排后都要重跑

典型使用场景

  • 切分调参:对比不同块大小对召回的影响
  • 重排上线前:确认精排确实把相关结果提到了前面
  • 换嵌入模型:判断新旧模型在同一题集上的差异
  • 召回数量选择:确定 k 取多少时收益开始饱和
  • 质量回退归因:线上答案变差时先定位是检索还是生成

指标计算实现

指标计算实现
def hit_rate(retrieved, relevant, k):
    # top-k 中只要有一条相关就算命中
    return 1.0 if set(retrieved[:k]) & set(relevant) else 0.0

def mrr(retrieved, relevant):
    # 第一条相关结果的排名倒数,越靠前分数越高
    for i, doc in enumerate(retrieved, 1):
        if doc in relevant:
            return 1.0 / i
    return 0.0

# 对评测集逐条计算后取平均,形成可对比的版本基线
# 每次只改一个变量(切分 / 嵌入 / 重排),否则归因不清

核心指标读法

指标含义关注点
Hit Rate@ktop-k 中至少有一条相关召回底线,越高越好
Recall@k相关文档被召回的比例知识覆盖面,决定答案上限
MRR第一条相关结果的排名倒数均值头部排序质量
nDCG@k带位置折损的排序质量整体排序,支持多级相关度
评测集要覆盖三类问法:高频问题、含专有名词的问题、需要跨多篇文档多跳的问题。只盯一种问法调参,很快会过拟合到那类场景。
指标要结合幻觉率一起看:Hit Rate 提升但答案忠实度下降,通常说明检索来的片段更干扰生成,需要回到重排与提示词环节排查。

易错点

  • 没有评测集就调参:改了哪一步变好说不清,只能靠感觉来回试
  • 只看命中率不看排序:第一条永远不相关也无人察觉,生成质量长期偏低
  • 只改一个指标不看全局:为提升 Recall 放大 k,结果精度下降、成本上升
  • 一次改多个变量:指标波动无法归因到具体改动
  • 评测集与线上分布脱节:题集全是自造问答,上线后效果完全不同

数据来源与参考

  • IR 评测通行定义(TREC 系);RAG 工程实践

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌