这四个指标都是衡量“信息检索系统好不好”的关键评估方式,尤其在 Dense Retriever 这种语义检索里常用。
① Precision@K —— 精准率@K(前 K 个里有几个是对的)
定义:在检索返回的前 K 个结果中,有多少是相关的?
举个例子:
用户问题:“孕妇可以吃头孢吗?”
我们返回前 5 个结果(K=5):
排名 | 文档内容 | 是否相关 |
---|---|---|
1 | “头孢属于孕期常用抗生素之一” | ✅ 是 |
2 | “退烧药的分类” | ❌ 否 |
3 | “孕妇应在医生指导下用药” | ✅ 是 |
4 | “头孢拉定的说明书” | ✅ 是 |
5 | “关于维生素的摄入量” | ❌ 否 |
有 3 个是对的。
✅ Precision@5 = 3 / 5 = 0.6
② Recall@K —— 召回率@K(应该找的都找到了几个)
定义:在所有应该被找出来的相关文档中,我们成功找到了多少个?
举个例子:
真实相关文档总共有 4 个:doc1、doc3、doc4、doc6
我们只在前 5 个返回结果里找到了 3 个(doc1, doc3, doc4)
✅ Recall@5 = 3 / 4 = 0.75
Precision 看“找出来的对几个”,Recall 看“对的找到了几个”。
③ MRR —— Mean Reciprocal Rank 平均倒数排名
定义:每个查询的“第一个相关结果”排在第几位?越靠前越好,然后取倒数平均。
举个例子:
我们有两个用户查询:
- Q1:我们第一个相关结果排在第 2 位 → Reciprocal rank = 1/2
- Q2:我们第一个相关结果排在第 1 位 → Reciprocal rank = 1/1
MRR = (1/2 + 1/1) / 2 = 0.75
✅ MRR 越高表示模型越擅长把“最相关的”放在最前面。
④ nDCG@K —— 归一化折损累计增益(考虑排序权重的评分)
定义:考虑排序越靠前越重要。越早看到相关文档越好。
- 第1位相关 → 得分高
- 第3位才相关 → 得分低一些(因为你要翻更久才看到)
举个例子(nDCG@3):
我们返回了前 3 个结果:
- 第1位:相关(gain=3)
- 第2位:无关(gain=0)
- 第3位:相关(gain=2)
我们先计算 DCG(折损累计增益):
DCG = 3 / log2(1+1) + 0 + 2 / log2(3+1)
= 3 / 1 + 2 / 2 = 3 + 1 = 4
再计算理想的 DCG(把最相关排在最前面):
IDCG = 3 / log2(1+1) + 2 / log2(2+1)
= 3 + 2 / 1.5849 ≈ 3 + 1.26 ≈ 4.26
最后:
nDCG@3 = DCG / IDCG ≈ 4 / 4.26 ≈ 0.939
✅ nDCG 越接近 1,表示模型排序越理想。
✅ 总结对比表
指标 | 衡量什么 | 举例说明 |
---|---|---|
Precision@K | 前 K 个结果中正确率 | 前5个结果中有3个是对的 → 0.6 |
Recall@K | 所有该找出的找到了几个 | 应找4个,找到了3个 → 0.75 |
MRR | 第一个对的排在第几 | 第1个在第2位 → 1/2 = 0.5 |
nDCG | 排名整体质量,越靠前越好 | 第1个对的得高分,第3个得低分 |