什么是稠密段落检索(Dense Passage Retrieval)?
稠密段落检索(Dense Passage Retrieval,DPR)是一种用稠密向量表示问题和段落、并据此完成候选段落召回的方法,由 Karpukhin 等人在 2020 年的论文中提出。它把检索从稀疏词项匹配转向可学习的双编码器表示,在开放域问答中用于为阅读器挑选候选上下文。
稠密段落检索(Dense Passage Retrieval,简称 DPR)是一种面向开放域问答的段落召回方法:它用稠密向量(dense representation)分别表示问题和段落,再通过向量相似度从大规模段落集合中挑出候选上下文。它要解决的问题是——在开放域问答里,如何从海量文本中高效地选出少量可能包含答案的段落,供后续的阅读器(reader)抽取答案。
为什么重要
开放域问答(open-domain question answering)并不预先给定一段包含答案的文本,而是要求系统自己从整个语料库中找出答案。这类系统通常分成两步:先做段落检索,把候选上下文缩小到可处理的规模;再由阅读器在这些候选里定位答案。检索这一步的质量直接决定了后面阅读器能看到什么。
在 DPR 出现之前,段落检索的事实标准是稀疏向量空间模型(sparse vector space model),例如 TF-IDF 和 BM25。这类方法把文本表示成词项上的稀疏权重向量,靠词项是否出现、出现多少次来判断相关性。它们不需要训练、可解释性强、在大规模语料上也能跑得动,因此在很长时间里是开放域问答的默认选择。
但稀疏表示有一个结构性限制:它依赖字面上的词项重合。如果问题问的是「谁写了某本书」,而段落里只出现作者名字和书名、没有出现与问题相同的措辞,词项匹配就可能失效。同义改写、跨语言表述、需要语义推断的匹配,都是稀疏模型的弱项。DPR 的论文正是针对这一点,提出检索可以只用稠密表示来实现,并且这种表示可以从少量问题和段落中学习得到。
工作机制
按照该论文的描述,DPR 的核心是一个简单的双编码器框架(dual-encoder framework),配合少量监督数据训练。可以拆成以下几个要点:
- 双编码器结构。 系统包含两个独立的编码器:一个把问题编码成向量,另一个把段落编码成向量。两者输出同一向量空间中的表示,相关性由两个向量的相似度衡量。因为问题和段落分别编码、互不依赖,段落向量可以离线预先算好并建立索引,在线检索时只需编码问题再做近邻搜索。
- 稠密表示取代稀疏权重。 与 TF-IDF、BM25 输出高维稀疏词项权重不同,DPR 输出的是固定长度的稠密向量。相似度不再由词项重合决定,而由模型学到的语义表示决定。
- 从少量标注中学习。 论文强调,这些嵌入是从「少量问题和段落」中学习得到的,而不是依赖大规模人工标注的段落相关性数据。训练的目标是让问题向量与其对应正例段落的向量更接近,与负例段落更远。
- 与阅读器配合。 检索只是整条流水线的前半段。Hugging Face 官方文档把 DPR 描述为包含三个模型:问题编码器(question encoder)把问题编码为向量,上下文编码器(context encoder)把上下文编码为向量,阅读器(reader)则在检索到的上下文中抽取答案,并给出一个相关性分数——当抽取出的片段确实回答了问题时,该分数较高。
从工程角度看,这种分工带来一个直接后果:段落侧的编码可以离线批量完成,在线阶段的计算量主要落在问题编码和向量近邻搜索上。这也是稠密检索能够在大规模语料上实际部署的前提之一。
典型例子
该论文报告了在多个开放域问答数据集上的评测结果。论文摘要称,在广泛的开放域问答数据集上,其稠密检索器在 top-20 段落检索准确率上大幅超过一个强 Lucene-BM25 系统,绝对提升幅度为 9%–19%,并帮助其端到端问答系统在多个开放域问答基准上取得当时的最优结果(state-of-the-art)。需要说明的是,这些数字来自该论文自身的实验设置与评测口径,属于论文作者的报告,而非独立的第三方复现结论。
在工具与模型层面,Hugging Face 官方文档将 DPR 描述为一套面向开放域问答研究的工具与模型集合。该文档记录,相关模型于 2020 年 4 月 10 日发布在 HF papers 上,并于 2020 年 11 月 16 日贡献进 Hugging Face Transformers。文档同时给出了 DPRConfig 这一配置类,其中包含 vocab_size、hidden_size、num_hidden_layers、num_attention_heads、intermediate_size、max_position_embeddings 等超参数,默认值分别为 30522、768、12、12、3072 和 512。这些默认值反映的是该实现中配置类的设定,不代表所有 DPR 模型都必须采用同样的规模。
论文本身提交于 2020 年 4 月 10 日,最终修订版本为 v3,修订日期为 2020 年 9 月 30 日,发表在 EMNLP 2020。作者为 Vladimir Karpukhin、Barlas Oğuz、Sewon Min、Patrick Lewis、Ledell Wu、Sergey Edunov、Danqi Chen、Wen-tau Yih。
边界与常见误解
第一,DPR 是检索环节的方法,不是完整的问答系统。它负责把候选段落召回出来,答案的抽取由阅读器完成。把 DPR 直接等同于「问答模型」会忽略流水线中阅读器这一环,也会误判它的能力边界——它本身不生成答案。
第二,论文的对比结论有明确的范围。9%–19% 的绝对提升是在 top-20 段落检索准确率这一指标上、相对于论文所使用的那套 Lucene-BM25 系统、在论文所评测的那批开放域问答数据集上得到的。它不能被外推为「稠密检索在任何场景、任何语料、任何指标上都优于 BM25」。稀疏检索在专有名词、罕见词、精确串匹配等场景中仍有其优势,这也是后续研究中稀疏与稠密方法常被结合使用的原因。
第三,「稠密」并不意味着不需要训练数据。论文的表述是嵌入从少量问题和段落中学习得到,这里的「少量」是相对于大规模人工标注而言,并不等于零监督。训练数据的构造方式(正例与负例如何选取)会显著影响检索质量,这一点在论文的方法描述中占据重要位置。
第四,稠密检索有它自身的代价。段落向量需要预先计算并存储,索引占用空间通常明显大于倒排索引;向量近邻搜索需要专门的索引结构才能在规模上可用;当语料更新时,新增段落需要重新编码。这些工程成本是选择稠密方案时必须一并考虑的,而不是只有效果一个维度。
第五,DPR 是一个具体的方法与模型集合,不是稠密检索这一整类技术的同义词。后续出现了多种稠密检索方案,它们在训练目标、负例采样、编码器结构上各不相同。把 DPR 的实验结论直接套到所有稠密检索方法上,是不准确的。