Skip to content

MRR 平均倒数排名

五层读懂一个词。这次拆的是:MRR (Mean Reciprocal Rank)--关心第一个相关文档位置的指标,问答系统的事实标准。


L1 · 一句话点破

MRR = 第一个相关文档排名的倒数的平均。第 1 名贡献 1.0,第 2 名 0.5,第 5 名 0.2。关心"第一个相关文档排第几",是问答和已知项检索的核心指标。


L2 · 通俗类比

学生问老师问题,老师给 5 个候选答案:

  • 题 1:正确答案排第 1 -> 这题得分 1/1 = 1.0
  • 题 2:正确答案排第 3 -> 这题得分 1/3 = 0.33
  • 题 3:正确答案排第 5 -> 这题得分 1/5 = 0.20
  • 题 4:5 个都不对 -> 这题得分 0

MRR = (1.0 + 0.33 + 0.20 + 0) / 4 = 0.38

直觉:正确答案越靠前,得分越高。第 1 名满分,越往后衰减。

适用场景

  • 问答系统:用户要 1 个正确答案,排第 1 最好
  • 已知项检索:找特定文档(如"RLHF 论文"),排第 1 最好
  • 客服:用户要 1 个解决方案,排第 1 最好

不适用场景

  • 多相关文档检索(用 Recall@K / NDCG@K)
  • 探索式搜索(用户浏览多个结果)

L3 · 正经定义

MRR (Mean Reciprocal Rank):所有查询中,第一个相关文档排名倒数的平均。

$$ \text{MRR} = \frac{1}{|Q|} \sum_{q \in Q} \frac{1}{\text{rank}_q^*} $$

其中 $\text{rank}_q^$ 是查询 $q$ 的第一个相关文档的排名(1-indexed)。如果 top-K 内无相关文档,$\text{rank}_q^ = \infty$,贡献为 0。

MRR@K:限制在 top-K 内:

$$ \text{MRR@K} = \frac{1}{|Q|} \sum_{q \in Q} \frac{1}{\text{rank}_q^} \cdot \mathbb{1}[\text{rank}_q^ \le K] $$

如果第一个相关文档排名 > K,贡献为 0。

性质

  • 范围 [0, 1],越高越好
  • 只关心第一个相关文档,忽略后续
  • 排名衰减快:第 1 名 1.0,第 10 名 0.1,第 100 名 0.01

伪代码

python
def mrr_at_k(results, relevant_docs, k):
    """
    results: dict, query_id -> list of retrieved doc_ids (ranked)
    relevant_docs: dict, query_id -> set of relevant doc_ids
    k: top-K 限制
    """
    reciprocal_ranks = []
    for q_id, retrieved in results.items():
        top_k = retrieved[:k]
        rel = relevant_docs[q_id]
        rr = 0.0
        for rank, doc_id in enumerate(top_k, start=1):
            if doc_id in rel:
                rr = 1.0 / rank
                break
        reciprocal_ranks.append(rr)
    return sum(reciprocal_ranks) / len(reciprocal_ranks)

# 示例
results = {
    "q1": ["d1", "d2", "d3", "d4", "d5"],  # d2 相关
    "q2": ["d6", "d7", "d8", "d9", "d10"], # 都不相关
    "q3": ["d11", "d12", "d13", "d14", "d15"],  # d11 相关
}
relevant = {
    "q1": {"d2"},      # 第 2 名 -> 1/2 = 0.5
    "q2": {"d20"},     # 不在 top-5 -> 0
    "q3": {"d11"},     # 第 1 名 -> 1/1 = 1.0
}
print(mrr_at_k(results, relevant, k=5))  # (0.5 + 0 + 1.0) / 3 = 0.5

L4 · 原理深挖

4.1 为什么用倒数排名

倒数排名的直觉

  • 第 1 名:1/1 = 1.0(满分)
  • 第 2 名:1/2 = 0.5(半分)
  • 第 5 名:1/5 = 0.2(五分之一)
  • 第 10 名:1/10 = 0.1
  • 第 100 名:1/100 = 0.01

衰减特性

  • 衰减快:top 排名差异显著(第 1 vs 第 2 差 0.5)
  • 长尾贡献小:第 100 名几乎不贡献
  • 鼓励排第 1:第 1 名得分远超其他

与其他衰减函数对比

排名1/rank1/rank^21/log(rank+1)指数衰减
11.01.01.01.0
20.50.250.630.5
50.20.040.390.06
100.10.010.300.001

倒数排名衰减适中,top 重但长尾不忽略。DCG 用 $1/\log_2(\text{rank}+1)$,衰减更平缓。

4.2 MRR 的适用场景

适合用

  • 问答系统:用户要 1 个正确答案,排第 1 最好
  • 已知项检索:找特定文档(如"RLHF 论文"),排第 1 最好
  • 客服系统:用户要 1 个解决方案
  • 导航查询:用户找特定网站(如"GitHub"),排第 1 最好

不适合用

  • 多相关文档检索:如"机器学习书籍",用户要看多个,MRR 只看第一个
  • 探索式搜索:用户浏览多个结果
  • 排序质量评估:MRR 忽略后续相关文档排序

4.3 MRR vs Hit Rate vs NDCG

指标关心公式适用
Hit Rate@K有无命中$\mathbb{1}[\text{rank}^* \le K]$RAG
MRR@K第一个位置$1/\text{rank}^*$问答、已知项
NDCG@K全排序质量$\sum \text{DCG} / \text{IDCG}$综合排序

示例对比

查询返回 top-5,相关文档为 [d2, d4](排第 2 和第 4):

  • Hit Rate@5 = 1(命中)
  • MRR@5 = 1/2 = 0.5(第一个排第 2)
  • NDCG@5 = ?(考虑 d2 第 2、d4 第 4 的位置,综合排序质量)

选择建议

  • 单答案场景:MRR@K
  • 有无命中:Hit Rate@K
  • 综合排序:NDCG@K

4.4 MRR 的局限

局限 1:只看第一个相关文档

top-5 中第 1 名相关 vs 第 5 名相关,MRR 差异大。但 top-5 中 5 个都相关 vs 1 个相关,MRR 相同(都只看第一个)。

局限 2:不区分后续排序

第 1 名相关后,第 2~5 名是否相关不影响 MRR。丢失后续排序信息。

局限 3:不反映召回率

MRR 高不代表召回了所有相关文档,只代表第一个排得前。

局限 4:对无相关文档的查询敏感

如果某查询无相关文档(top-K 全错),贡献 0,拉低 MRR。评估集质量影响大。

应对

  • 配合 Recall@K(看召回)
  • 配合 NDCG@K(看全排序)
  • 报告无相关文档的查询比例

4.5 MRR 在问答系统中的应用

问答系统是 MRR 的主战场:

典型评估流程

  1. 准备评估集(问题 + 金标准答案所在文档)
  2. 用检索系统找 top-k 文档
  3. 找第一个含答案的文档排名
  4. 计算 MRR@k

MS MARCO 问答

  • 微软 MS MARCO 问答数据集
  • 评估指标:MRR@10
  • 检索系统在 top-10 中找第一个含答案的段落

Natural Questions (NQ)

  • Google NQ 数据集
  • 评估指标:Recall@K(多相关段落)或 MRR@K(单答案)

SQuAD

  • Stanford SQuAD 问答数据集
  • 评估指标:Exact Match / F1(答案抽取),检索阶段用 MRR

4.6 MRR 的变体

MRR@K with Cutoff

限制在 top-K 内,超过 K 视为 0:

$$ \text{MRR@K} = \frac{1}{|Q|} \sum_q \frac{\mathbb{1}[\text{rank}_q^* \le K]}{\text{rank}_q^*} $$

几何平均 MRR

$$ \text{GMRR} = \exp\left(\frac{1}{|Q|} \sum_q \log \frac{1}{\text{rank}_q^*}\right) $$

对低排名查询更敏感。

MRR with Multi-relevant

多相关文档时,取第一个的排名。等价于标准 MRR。

4.7 MRR 与其他指标的换算

MRR vs Hit Rate@1

  • Hit Rate@1 = 1 当且仅当第 1 名相关
  • MRR@1 = 1 当且仅当第 1 名相关
  • 两者等价:Hit Rate@1 = MRR@1

MRR vs 平均排名

  • 平均排名:$\frac{1}{|Q|} \sum_q \text{rank}_q^*$
  • MRR:$\frac{1}{|Q|} \sum_q 1/\text{rank}_q^*$

MRR 是平均排名的倒数变换,更敏感于 top 排名。


L5 · 沿革与坑

5.1 历史脉络

  • 1990s:TREC 问答评测引入 MRR
  • 2000s:MRR 成为问答系统标准指标
  • 2010s:MS MARCO、NQ 等数据集用 MRR@10 评估检索
  • 2020:DPR 论文用 MRR@10 评估稠密检索
  • 2023+:RAG 评估中 MRR 用于"第一个相关 chunk 位置"

5.2 使用常见坑

坑 1:用在多相关文档场景

"机器学习书籍"有 10 本相关,用户要看多个。MRR 只看第一个,丢失信息。用 NDCG@K。

坑 2:K 选错

MRR@1000 让长尾文档贡献小但非零,可能高估。MRR@1 太严格。问答用 MRR@10。

坑 3:金标准标注不全

只标 1 个金标准,实际多个相关。MRR 低估(可能漏掉排更前的相关文档)。

坑 4:忽略无相关文档的查询

无相关文档的查询贡献 0,拉低 MRR。要报告这类查询比例。

坑 5:评估集太小

100 query 的 MRR 方差大。建议至少 500 query。

坑 6:跨系统比较不公平

不同系统的检索深度、金标准不同,MRR 直接比不公平。要控制变量。

坑 7:只看 MRR 不看 Recall

MRR 高但召回率低(第一个排前但漏大量相关)。要配合 Recall@K。

坑 8:MRR 与用户体验脱节

MRR@10 = 0.5 意味着平均第一个相关排第 2,但用户可能看 top-3 就走。要结合用户行为数据。

坑 9:MRR 不反映排序质量

第一个排第 1 后,第 2~10 是否相关不影响 MRR。要看 NDCG@K。

坑 10:用 MRR 评估 RAG

RAG 关心 top-k 是否含答案(Hit Rate@K),不关心第一个排第几(LLM 能从 top-k 中找)。RAG 用 Hit Rate@K 或 Recall@K。

5.3 MRR 的现代应用

问答系统

  • 仍是事实标准
  • MS MARCO、NQ 等榜单用 MRR@10
  • 检索 + 阅读理解两阶段,MRR 评估检索阶段

RAG 系统

  • 辅助指标(非主指标)
  • 评估"第一个相关 chunk 位置"
  • 主指标仍是 Hit Rate@K

推荐系统

  • 不常用(推荐多相关,用 Recall@K / NDCG@K)
  • 但"第一个点击项"评估可用 MRR

搜索引擎

  • 不常用(搜索多相关,用 NDCG@K)
  • 但导航查询(找特定网站)可用 MRR

5.4 MRR 提升策略

提升 MRR@10 的方法

  1. 更好排序模型:Cross-encoder 精排提升 top 排序
  2. 难负样本训练:让模型区分细粒度差异
  3. 查询重写:消除歧义,让相关文档排前
  4. 个性化:用户偏好让相关文档排前
  5. 多路召回 + 融合:互补提升召回,融合后排序更准

典型提升幅度

  • 单 BM25:MRR@10 ≈ 0.20
  • 单 Dense:MRR@10 ≈ 0.30
  • 混合检索:MRR@10 ≈ 0.35
  • 混合 + 精排:MRR@10 ≈ 0.40

5.5 MRR 的替代指标

NDCG@K

  • 考虑所有相关文档排序
  • 支持分级相关性
  • 综合排序质量

MAP (Mean Average Precision)

  • 不同 K 下 Precision 平均
  • 考虑所有相关文档

Hit Rate@K

  • 只看有无命中
  • RAG 的事实标准

选择建议

  • 问答、已知项:MRR@K
  • RAG:Hit Rate@K
  • 综合排序:NDCG@K
  • 多相关文档:MAP 或 NDCG@K

速记卡

维度MRR
公式$\frac{1}{
关心第一个相关文档位置
范围[0, 1]
衰减1/rank(第 1 名 1.0,第 10 名 0.1)
适用问答、已知项检索
不适用多相关文档、RAG

与其他指标对比

指标关心适用
Hit Rate@K有无命中RAG
MRR@K第一个位置问答、已知项
Recall@K召回比例多相关召回
NDCG@K全排序质量综合排序

典型数值

排名1/rank
11.0
20.5
50.2
100.1

一句话记忆:MRR = 第一个相关文档排名倒数的平均,第 1 名 1.0,第 10 名 0.1。关心"第一个排第几",是问答和已知项检索的事实标准。RAG 用 Hit Rate@K,综合排序用 NDCG@K。


上一篇:Recall / Precision@K -- 召回率与精确率。下一篇:NDCG 归一化折损累计增益 -- 综合排序质量指标。

内容采用 CC BY-SA 4.0,代码采用 MIT。