跳转到内容

MS MARCO — 1 千万 Bing 真实查询喂饱神经检索的标准评测集

是什么

MS MARCO(Microsoft MAchine Reading COmprehension)是微软 2016 年公开的大规模阅读理解 + 段落排序数据集

日常类比:像驾校的标准考场。以前每家公司练自己造的车(神经检索模型),在自家小区路口测,没法跟别家比。MS MARCO 把全国驾校的考场统一成一个——同样的题目、同样的路线、同样的打分规则。

它的体量在 2016 年是空前的:

  • 101 万 真实查询(从 Bing 搜索日志采样)
  • 18 万 由人工写的标准答案
  • 884 万 段落(来自 356 万个网页)
  • 3 个任务:可答性判断、答案生成、段落排序

之后近十年,几乎所有神经检索 / RAG retriever 的论文都要在 MS MARCO 上跑一遍才有发表资格。

为什么重要

不理解 MS MARCO,下面这些事都没法解释:

  • 为什么 2018 年之后 dense retrieval(DPR、ANCE、ColBERT)忽然爆发——之前没有这么大的训练集
  • 为什么 Hugging Face 上一半 sentence-transformers 模型描述都写着「trained on MS MARCO」
  • 为什么 BEIR 把 MS MARCO 当成「域内训练集」,再测 18 个域外任务的零样本能力
  • 为什么 TREC Deep Learning Track 从 2019 年起干脆直接用 MS MARCO 做评测

一句话:MS MARCO 是把神经检索从论文搬进工业的那一节梯子

核心要点

1. 查询来自真实用户,不是众包工人

之前的 SQuAD(2016 年同年)是这样造的:先给众包工人一段维基段落,让他们看着段落写问题。问题天然「贴着段落」,模型只要会找关键词重叠就能拿高分。

MS MARCO 反过来——查询先存在(Bing 用户真的输入过的搜索词),再让人去 Bing 的检索结果里找能回答它的段落,再写答案。

后果:

  • 查询语言更口语化(“how tall is the eiffel tower” 这种)
  • 查询和段落用词差异大,关键词匹配不够用,必须语义匹配 → 神经模型才有发挥空间

2. 三个任务,难度递增

任务输入输出谁在做
Q&A问题 + 候选段落抽取式短答案BERT-QA、T5
Natural Language Generation问题 + 段落通顺的自然语言答案早期 seq2seq、后来 T5、LLM
Passage Ranking问题 + 候选池段落相关性排序BM25、DPR、ColBERT

Passage Ranking 是后来最火的子任务。规模:880 万段落池 / 训练查询 50 万 / dev 7K / eval 7K(eval 标签不公开,提交 leaderboard 才能打分)。

3. 评测指标:MRR@10 + Recall@1000

  • MRR@10:前 10 名里第一个相关段落排在第几位的倒数。BM25 基线约 0.18,2024 年 SOTA 约 0.45
  • Recall@1000:相关段落是否进入前 1000——衡量召回能力,配合 reranker 时关键

实践案例

案例 1:BM25 基线长什么样

# 用 pyserini(Anserini 的 Python 包装)跑一行 BM25 基线
from pyserini.search.lucene import LuceneSearcher
searcher = LuceneSearcher.from_prebuilt_index('msmarco-v1-passage')
hits = searcher.search('how tall is mount everest', k=10)
for i, h in enumerate(hits):
print(i + 1, h.docid, h.score)

跑完 dev set 7K 查询,MRR@10 约 0.187。这是 2018 年之前所有论文的「打不过 BM25」噩梦的起点。

案例 2:DPR 怎么用 MS MARCO 训练

DPR(Karpukhin 2020)的训练循环简化到极致:

  1. 取一条 (query, positive_passage) 正样本
  2. 同 batch 里其他查询的正样本就当 negative(in-batch negatives 技巧)
  3. 用对比损失,把 query 和 positive 推近、和 negatives 推开

为什么这招在 MS MARCO 上能跑:880 万段落 + 50 万训练对,足够 64 GPU 训练 40 小时跑出 0.31 MRR@10——比 BM25 高 12 个点。

案例 3:从 Passage Ranking 到 RAG retriever

现代 RAG 系统的 retriever 几乎都是这个流水线:

  1. 用 MS MARCO Passage Ranking 训练一个 dual encoder(query encoder + passage encoder)
  2. 把它当 backbone,在自己业务数据上再微调几千步
  3. 部署:query 实时编码、passage 离线编码 + ANN 索引(FAISS / HNSW)

第 1 步几乎免费——开源 checkpoint 直接下。这就是 MS MARCO 真正改变了行业的地方:预训练的检索 backbone 标准化了

踩过的坑

  1. MRR@10 不报 Recall@1000 是耍流氓:MRR@10 只看前 10,召回再差也看不出。reranker 上线后没召回支撑,最终业务指标会崩。

  2. v1 vs v2 段落集不一样:2016 年发的是 v1(880 万段落),2021 年微软扩到 v2(1.38 亿段落)。论文比较时要看清版本号,混着比是错的。

  3. dev set 公开但 eval set 不公开:调参只能在 dev 上做,eval 要提交 leaderboard。新人常把 dev 当 test 用,过拟合 dev 不自知。

  4. 标注稀疏导致召回低估:880 万段落池里,每个查询通常只标了 1 条相关段落。模型可能召回了语义同样相关但没被标的段落,被算「错」。所以 Recall@1000 数值整体偏低,跨数据集不能直接比。

  5. License 不能商用瞎用:MS-MARCO 协议要求商用走微软授权。把 retriever 模型权重直接卖给客户的初创公司容易踩坑——上游训练数据有授权约束。

适用 vs 不适用场景

适用

  • 训练 / 评测英文段落级检索模型
  • 给 RAG retriever 找 backbone 预训练
  • 比较 BM25 / dense / sparse / late interaction(ColBERT 那种)三家方案

不适用

  • 中文 / 多语言场景(要换 mMARCO / Mr. TyDi)
  • 多跳问答(要换 HotpotQA / MuSiQue)
  • 长文档(段落最长几百词,长文档要换 LongBench)
  • 对话式检索(要换 OR-QuAC / TopiOCQA)

历史小故事(可跳过)

  • 2016 年 11 月:MS MARCO v1 发布,目标是「比 SQuAD 大 10 倍 + 用真实查询」
  • 2018 年:Passage Ranking 子任务和 leaderboard 上线,神经模型开始爆发
  • 2019 年:TREC Deep Learning Track 把 MS MARCO 收编为官方评测集
  • 2020 年:DPR / ANCE / ColBERT 三件套全用 MS MARCO 训练,dense retrieval 元年
  • 2021 年:v2 数据集发布,规模扩到 1.38 亿段落
  • 2023 年起:LLM 时代,MS MARCO 的「检索 + 生成」分工被 RAG 完整继承

学到什么

  1. 数据集决定研究方向:神经检索能爆发,是因为先有 MS MARCO 这种规模的训练集,不是因为模型变强了
  2. 真实查询 vs 合成查询有本质差距:查询和段落用词不重叠的真实场景,才能逼出语义匹配模型
  3. 评测指标要配套用:MRR 看精度、Recall 看召回,单看一个会被误导
  4. 基础设施先于模型:BM25 跑不过的「baseline」其实是工程实现(Anserini)+ 数据集(MS MARCO)共同建的台子

延伸阅读

关联

  • bm25-okapi —— BM25 是 MS MARCO Passage Ranking 的传统基线,一切神经模型都要先跨过它
  • okapi-bm25-1994 —— BM25 的原始论文,理解评测基线先看它
  • anserini-2017 —— 跑 MS MARCO BM25 / 复现实验最常用的工具链
  • dpr-2020 —— Dense Passage Retrieval,第一个在 MS MARCO 上稳定打过 BM25 的 dense 模型
  • ance-2020 —— ANCE,硬负采样,把 MS MARCO 上的 dense retrieval 推到新高度
  • colbert-2020 —— ColBERT,late interaction 范式,MS MARCO 上效率 / 精度折中代表作
  • colbert-v2 —— ColBERT v2,量化 + 蒸馏,进一步把 late interaction 工程化

反向链接

  • anserini-2017 —— Anserini — 把工业搜索引擎 Lucene 改造成学术 IR 实验台
  • colbert-2020 —— ColBERT — 让 BERT 检索既准又能扛大规模
  • colbert-v2 —— ColBERTv2 — 让向量检索既精又能扛百万文档
  • doc2query-2019 —— doc2query — 让模型替文档预想”会被怎么搜”再写进倒排表
  • dpr-2020 —— DPR — 用 BERT 双塔把检索从 BM25 时代拉进稠密向量时代
  • splade-2021 —— SPLADE — 让神经网络学出稀疏向量,直接复用倒排索引