论文标题:Dense Passage Retrieval for Open-Domain Question Answering
论文来源:ACL 2020
论文链接:https://arxiv.org/abs/2004.04906
引言
Open-domain 的 Question Answering (QA) 一般需要先从大量的文档库中检索出一些和问题相关的文档(retrive),相关的方法有 TF-IDF 和 BM25。这篇文章发现学习 dense 的文档向量去替换 retrive 阶段的传统方法是可行的,并且本文提出的检索系统在 top-20 文章检索准确率上比 Lucene-BM25 系统高出 9%-19%。
介绍
近年来随着深度学习的兴起,目前大部分做 Open-domain 的 QA 使一般沿用两阶段框架:1)retriever 首先选择一小部分段落,其中一些包含问题的答案;2)reader 可以看到 retriever 检索到的上下文并从中识别正确的答案。
目前主流的 retriever 使用传统的信息检索(IR)方法,包括 TF-IDF unigram/bigram matching 或词权重支持 BM25 词权重的工具,如 Lucene 和 Elastic-search。
TF-IDF 和 BM25 将 query 和 context 用高维的 sparse 向量来表示,这些sparse向量可以通过倒排索引进行有效搜索,并且对于那些通常需要根据关键字显著缩小搜索空间的问题回答有效。
但是 TF-IDF 和 BM25 也有一些缺点就是无法很好的建模词与词之间的语义关系(两个同义词可能长的完全不一样),所以一些 encoding 文本为 dense 向量的方法给 TF-IDF 和 BM25 这一类方法做了补充。
Dense Passage Retriever (DPR)
在检索之前先用一个 dense encoder 给文档库中的所有文档都进行 encoding。在检索的时候用另一个 dense encoder 给 question 进行 encoding,之后根据下图公式算两个 representation 的 similarity,取 top-k 作为结果。
公式(1)比较简单,但是作者说该方式是最有效的。作者用的 encoder 是 bert-base-uncased,然后拿 [CLS] 的 vector 作为 representation。由于文档库可能会很大,所以作者用了 FAISS(一个非常高效的开源库,用于 dense 向量的相似性搜索和聚类,可以很容易地应用于数十亿个向量)来索引 encode 之后的向量。
一般情况下,正负例的比例会差很多,作者在选负例的时候也采用了一些 trick:
(1) Random: any random passage from the corpus; (2) BM25: top passages returned by BM25 which don’t contain the answer but match question tokens heavily; (3) Gold: positive passages paired with other questions which appear in the training set. (效果最好)
question 和 passage 在 encoding 之后,作者还采用了一种节省计算量的方法,称之为 In-batch negatives,原文描述如下:
Experiments: Passage Retrieval
Table 2 使用 top-k 精度(k 为 20 或 100)比较了五个 QA 数据集上不同的文章检索系统。除了 SQuAD,DPR 在所有数据集上都比 BM25 表现得更好。当k值较小时,差距尤其大(例如,NQ 的 top-20 78.4% vs 59.1%)。
当使用多个数据集进行训练时,TREC(五种数据集中最小的数据集)可以从更多的训练示例中获益。相比之下,NQ 和 WebQuestions 得到了适度的改进,而 TriviaQA 则略有下降。在某些情况下,可以通过在单数据集和多数据集设置中结合 DPR 和 BM25 进一步改进结果。
结论
首先,本文演示了在适当的训练设置下,只需对现有 question and passage encoder 进行 fine-tuning 就足以在 top-k 检索精度方面大大超过强大的 Lucene-BM25 系统。