检索评测指标是什么
检索评测的作用是把「优化有没有效」从感觉变成数字。三个常用指标各有侧重:Hit Rate@k 看 top-k 里是否至少有一条相关内容,是召回底线;MRR 看第一条相关结果排得多靠前,衡量头部排序质量;nDCG@k 带位置折损地评价整体排序,还支持多级相关度。另有 Recall@k 反映相关文档被召回的比例,衡量知识覆盖面。做法是先建五十到一百条标注评测集,再动切分、索引与重排参数,每次改动后重跑同一套题。
基本信息
| Hit Rate@k | top-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@k | top-k 中至少有一条相关 | 召回底线,越高越好 |
| Recall@k | 相关文档被召回的比例 | 知识覆盖面,决定答案上限 |
| MRR | 第一条相关结果的排名倒数均值 | 头部排序质量 |
| nDCG@k | 带位置折损的排序质量 | 整体排序,支持多级相关度 |
评测集要覆盖三类问法:高频问题、含专有名词的问题、需要跨多篇文档多跳的问题。只盯一种问法调参,很快会过拟合到那类场景。
指标要结合幻觉率一起看:Hit Rate 提升但答案忠实度下降,通常说明检索来的片段更干扰生成,需要回到重排与提示词环节排查。