Dense Passage Retrieval for Open-Domain Question Answering

Posted Facico

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dense Passage Retrieval for Open-Domain Question Answering相关的知识,希望对你有一定的参考价值。

Dense Passage Retrieval for Open-Domain Question Answering

段落检索是open domian QA的重要问题

  • 传统方法是使用稀疏向量空间模型,如TF-IDF或BM25
  • 本文重点研究室是密集向量空间模型,密集表示采用简单的双层编码器框架,同时采用了非常少的问题和段落对

传统检索器的问题

  • 传统检索器不能很好匹配语义关系,只能关键词匹配
  • 而密集向量检索器通过语义训练,可以更好捕获语义信息

Dense Passage Retriever(DPR)

要在M个文档中找到top-k个相关的段落

  • DPR采用多种编码器EQ,将输入段落映射到d维向量,并匹配与问题最接近的k个段落

  • 问题和段落的编码器使用两个不同的BERT,[CLS]作为输出

  • 问题和段落相似性度量,使用精度较高的点积(类似BERT[Rep]的方法)

  • 推理时,将段落编码器应用所有段落,使用开源器FAISS来进行问题相关的段落检索。最后找到top-k最相关的段落

训练部分

采用一个正例段落,n个负例段落的方式训练

  • 负例选择
    • 1、随机选择
    • 2、BM25获取top-n段落,去除正确答案
    • 3、其他问题对应的正确段落

最后实验证明(2+3),采用其他n-1个问题对应的正确段落+一个BM25获取的top1段落进行组合,时间复杂度低,精度高

  • batch内负例方法

    • 每个batch有B个问题,每个问题有对应的段落,构建B*B矩阵,则i≠j时是负例,i=j时是正例
    • 这种方法是训练一个孪生网络结构的(如dual encoder)的有效策略,能极大提高训练实例的数量
  • 有些数据集没有正例段落,或者正例段落不匹配

    • 用BM25获取top-100的段落中排名靠前,且含有答案的段落作为(替换)正例段落;如果都没有则丢弃

实验

  • 上面两个图都能看到DPR带来的提升,且混合数据集训练比单一数据集结果要好
  • SQuAD因为question和passage存在较多重合的token,BM25效果较好

in-batch negative training

31+32 表示batch=32时,每个训练question除了原有31条In-batch negative,另外增加32条难度较大的负样本

  • 这部分负样本是利用BM25,从passages中获取与每个训练question最相关、但不含answer的passage
  • 可以看到增加难度较大负样本效果提升

泛化性更好

DPR比BM23泛化性更好

时间效率

  • DPR要提前计算embedding,并用FAISS索引,耗时大,但是处理完可以离线并行处理
  • 若提前有了上面的计算和索引,借助FAISS,DPR后续检索很高效,速度大致是BM25/Lucene的40倍

总结

  • 1、DPR证明了这种检索方式提供更多的语义行,使用dual-encoder,利用预训练模型进行finetune,充分利用了预训练模型的海量知识
  • 2、明显提升在线的处理速度,但预处理海量的passage的embedding是难点
  • 3、用in-batch negative采样负样本,并用MB25增加难度较大的负样本,提升性能

以上是关于Dense Passage Retrieval for Open-Domain Question Answering的主要内容,如果未能解决你的问题,请参考以下文章