论文阅读笔记Dense Passage Retrieval for Open-Domain Question Answering

前言

在开放域的问答系统中,我们需要从大量的文本数据中搜索匹配我们想要的答案(或者学习文档的“信息知识”用于生成答案),而对每个问题都进行全文的数据“学习”是不现实的,因此往往依赖于高效的文本检索来选择候选段落,进而缩小目标范围。

做法往往是将模型分为两大块,首先有一个 Document Retriever,对给定的问题 question,从所有文档中检索,检索到文档后切分成段落,然后用一个称之为 Document Reader 的模块在段落中预测答案位置并给出分数,或者是进行模型的学习生成。而本文的重点就在于Retriever,如何在Retriever阶段提高检索的效率。

传统的检索模型用的较多的有TF-IDF 或 BM25算法,它们通过高效匹配关键词将问题和context表示成一个稀疏的高维度空间向量,这些算法很高效,但是不足之处在于仅仅是在词的匹配上进行检索,并未考虑语义的相关性,有很大的局限性。

所以文中从一个很直观的思路,即通过稠密且能够包含语义信息的空间向量进行表示,那么问题来了,我们怎么样在不进行额外的预训练的前提下,只是用question和passage(或answer)对来训练一个足够好的embedding model呢?论文提出了的方案非常简单,通过优化question和相关passage向量的最大化内积,目的是比较batch中所有的question和passage,这种看似简单的方法,在 top-20 文章检索准确率上却比 Lucene-BM25 系统高出 9%-19%。

模型细节

本文目标的本质在于,从大量的语料库来检索出和question最相关的一些passage。本文假设抽取式QA设置(extractive QA setting),将检索的答案限制出现在语料库中的一个或多个段落跨度内。这里我们确定一下表示符号,假设documents集合为 D = { d 1 , d 2 , . . , d D } D=\{d_1,d_2,..,d_D\} D={d1,d2,..,dD},将每个document拆分为长度相同文本段落作为基本的检索单元,假设总共获得了 M M M 个段落,则另 C = { p 1 , p 2 , . . . , p m } C=\{p_1,p_2,...,p_m\} C={p1,p2,...,pm},而每个passage p i p_i pi 可以表示为序列token { w 1 ( i ) , w 2 ( i ) , . . . , w ∣ p i ∣ ( i ) } \{w_1^{(i)},w_2^{(i)},...,w_{|p_i|}^{(i)}\} {w1(i),w2(i),...,wpi(i)}。在给定一个question q q q ,那么我们的任务就是如何从passage p i p_i pi 中找到能够回答问题的跨度序列 { w s ( i ) , w s + 1 ( i ) , . . . , w e ( i ) } \{w_s^{(i)},w_{s+1}^{(i)},...,w_{e}^{(i)}\} {ws(i),ws+1(i),...,we(i)},那么我们就可以得到retriever映射 R : ( q , C ) → C F R:(q,C)\rightarrow C_F R:(q,C)CF,即输入question q q q 和 一个语料库 C C C,返回一个最小的匹配文本 C F ⊂ C C_F\subset C CFC,其中 ∣ C F ∣ = k ≪ ∣ C ∣ |C_F|=k\ll |C| CF=kC。对于给定的 k k k ,可以使用 top-k retrieval accuracy来进行evaluate。

实际模型结构很简单,使用两个独立的BERT分别对question和passage进行编码,将得到的两个表示向量进行dot-product或cosine similarity等,可以表示为如下:
在这里插入图片描述

论文中提到对数据构造需要注意一些地方,通常在QA数据集中,一般都会有答案所在的段落标记,这个就可以用来作为训练的正样本,但是负样本呢?似乎有很多中可选择的段落,最简单的就是把剩下的没有答案的段落作为负样本,但是有的数据集只有一个正样本段落,这个就比较麻烦。在论文中,针对这个问题,也做了一系列的实验,最后提出了一个比较好的负样本构造方法,同时也可以加速训练。

  • 负样本构造方法:
    • Random:从语料中随机抽取;
    • BM25:使用BM25检索的不包含答案的段落;
    • Gold:训练集中其他问题的答案段落
  • 正样本构造方法:因为数据集如TREC, WebQuestions 和 TriviaQA中只包含问题和答案,没有段落文本,因此,论文通过BM25算法,在Wikipedia中进行检索,取top-100的段落,如果答案没有在里面,则丢掉这个问题。对于 SQuAD 和 NQ数据集,同样使用问题在Wikipedia检索,如果检索到的正样本段落能够在数据集中匹配则留下,否则丢掉。

论文选择了1个正样本和n个负样本,共 m m m 个样本,表示为 D = { ⟨ q i , p i + , p i − , . . . , p i , n − ⟩ } i = 1 m D=\{\left \langle q_i,p_i^{+},p_i^{-},...,p_{i,n}^{-} \right \rangle\}_{i=1}^m D={qi,pi+,pi,...,pi,n}i=1m,然后使用softmax损失作为loss函数,如下:
L ( q i , p i + , p i − , . . . , p i , n − ) = − l o g e s i m ( q i , p i + ) e s i m ( q i , p i + ) + ∑ j = 1 n e s i m ( q i , p i , j − ) L(q_i,p_i^{+},p_i^{-},...,p_{i,n}^{-} )=-log\frac{e^{sim(q_i,p_i^{+})}}{e^{sim(q_i,p_i^{+})+\sum_{j=1}^ne^{sim(q_i,p_{i,j}^{-})}}} L(qi,pi+,pi,...,pi,n)=logesim(qi,pi+)+j=1nesim(qi,pi,j)esim(qi,pi+)
其中, s i m ( q , p ) = E Q ( q ) T E P ( p ) sim(q,p)=E_Q(q)^TE_P(p) sim(q,p)=EQ(q)TEP(p)

论文中还提到一个小trick,就是in-batch negatives,怎么实施呢?假设我们一个mini-batch有 B B B 个question以及其配套的一个相关的passage,这样我们就得到了 Q Q Q P P P (假设维度大小是 d d d),则矩阵大小为 B × d B\times d B×d,那么我们使用dot-product计算相似度矩阵得到 S = Q P T S=QP^T S=QPT,大小为 B × B B\times B B×B,我们怎么理解这个相似度矩阵呢?就是一个question和 B B B 个passage做内积,除了与之相对应passage视为正样本外,其余视为负样本,这样我们就在一个mini-batch内完成了正负样本的学习。

实验结果

如下图所示,DPR算法模型使用仅仅1k的数据的时候就已经全面超越了BM25算法的准确性。当训练的数据量逐渐增加时,准确性逐渐提升。当使用全量数据时,DPR算法的准确性超越了BM25算法10个点以上,top-n的数量越少,DPR算法的优势越大。
在这里插入图片描述
下表显示了在DPR训练时使用的训练数据源和不同的算法组合的结果。Single表示仅使用对应的数据集进行训练,Multi表示将表中的4个数据集全部加入训练。可以看到,大部分的情况下,将其他类型的问题段落数据加入训练时有利于当前数据集的准确率的。其中BM25+DPR整合的方式为: B M 25 ( q , p ) + λ ⋅ s i m ( q , p ) BM25(q,p)+\lambda\cdot sim(q,p) BM25(q,p)+λsim(q,p),其中 λ = 1.1 \lambda = 1.1 λ=1.1
在这里插入图片描述
IB策略即In-Batch,表示负样本是否在当前batch选取,#N标识负样本数量,得到结果如下图所示:
在这里插入图片描述
使用dot-product还是cosine区别不大:
在这里插入图片描述
如最开始提到的,DPR相对于传统的BM25检索方法,有着更好的语义理解检索:
在这里插入图片描述
下图是使用各检索方法得到的数据集进行QA模型训练,对最终QA效果的影响,基本可以得到检索效果直接影响了最终的QA模型效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462842.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

书生大模型第四期 | L0G3000 git 基础知识

1、破冰行动 fork项目 PR链接:跳转访问 https://github.com/InternLM/Tutorial/pull/21632、构建个人项目 创建一个仓库保存LLM学习的笔记,以md文件为主 博客页面项目

List 列表基础用法

List 列表基础用法 列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。 列表是写在方括号 [] 之间、用逗号分隔开的元素列表。 和字符串一样,列表…

从0开始学PHP面向对象内容之(类,对象,构造/析构函数)

上期我们讲了面向对象的一些基本信息&#xff0c;这期让我们详细的了解一下 一、面向对象—类 1、PHP类的定义语法&#xff1a; <?php class className {var $var1;var $var2 "constant string";function classfunc ($arg1, $arg2) {[..]}[..] } ?>2、解…

详细记录555定时器组成和工作原理(第一篇)

目录 一、创作灵感 二、CB555的电路结构图 1、比较器C1和C2 2、三个5KΩ串联组成的分压电路 3、由与非门G1和G2组成的SR锁存器 4、G3、G4、集电极开路的放电三极管TD 三、CB555引脚功能 1、CB555引脚功能描述 2、CB555的功能表 四、CB555施密特触发器 1、施密特触发器…

Linux_02 Linux常用软件——vi、vim

vi编辑器有三种主要模式&#xff0c;每种模式的功能和用途不同&#xff1a; 一、命令模式 (Command Mode)&#xff1a; - 启动 vi 时默认进入此模式。 - 你可以在此模式下移动光标&#xff0c;输入各种命令&#xff08;如删除、复制、粘贴等&#xff09;。 yy&#xff1a;…

C#与C++交互开发系列(十八):跨进程通信之命名管道(Named Pipes)

1、前言 在 C# 和 C 应用程序之间进行数据交换时&#xff0c;命名管道&#xff08;Named Pipes&#xff09;是一种简单高效的进程间通信&#xff08;IPC&#xff09;方式。命名管道提供了可靠的双向通信通道&#xff0c;适合用于同一台机器上的跨进程通信。本文将深入介绍如何…

uniapp的video视频属性打包app后层级过高

问题&#xff1a;在使用uniapp开发APP时&#xff0c;使用video标签显示视频发现H5可以正常展示&#xff0c;但是打包到APP后&#xff0c;它的层级过高&#xff0c;把底部导航都盖住了。 官网说明&#xff1a;uni-app官网 官网给了cover-view组件或plus.nativeObj.view、subNVue…

【linux 多进程并发】0302 Linux下多进程模型的网络服务器架构设计,实时响应多客户端请求

0302 多进程网络服务器架构 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 一、概…

SQLI LABS | Less-26 GET-Error Based-All Your SPACES And COMMENTS Belong To Us

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-25/ 本关考察…

XML标记语言

最近在学XXE-XML外部实体注入漏洞时候&#xff0c;浅浅学习了一下XML&#xff0c;谨做此学习笔记。 目录 一&#xff1a;XML概述 二&#xff1a;XML语法 XML中的CDATA 三&#xff1a;使用PHP解析XML文档 添加节点 四&#xff1a;Xpath语言 绝对查找 相对查找 使用*匹配…

详解:模板设计模式

模板设计模式&#xff08;Template Pattern&#xff09;是一种行为设计模式&#xff0c;在软件设计中有着广泛的应用&#xff0c;旨在提高代码的可维护性和可复用性。 一、定义与特点 定义&#xff1a; 模板设计模式定义了一个算法的骨架&#xff0c;将某些步骤推迟到子类中实…

《向量数据库指南》——RAG质量评估与监控,打造高效AI引擎

嘿,各位向量数据库的小伙伴们,我是你们的老朋友王帅旭,大禹智库的向量数据库高级研究员,也是那本被大家津津乐道的《向量数据库指南》的作者。今天咱们来聊聊一个特别重要但又经常被忽视的话题——质量评估与监控,这可是确保咱们RAG(检索增强生成)系统稳定高效运行的关键…

Verilog HDL基础

模块的基本结构 module 模块名(端口列表); // 模块声明// 端口定义input [数据类型] [位宽] 输入端口列表; output [数据类型] [位宽] 输出端口列表; inout [数据类型] [位宽] 双向端口列表; // 数据类型定义wire [位宽] 线网名,线网名&#xff0c;…; …

HarmonyOS NEXT 应用开发实战(九、知乎日报项目详情页实现详细介绍)

在本篇博文中&#xff0c;我们将探讨如何使用 HarmonyOS Next 框架开发一个知乎日报的详情页&#xff0c;逐步介绍所用到的组件及代码实现。知乎日报是个小巧完整的小项目&#xff0c;这是一个循序渐进的过程&#xff0c;适合初学者和有一定开发经验的工程师参考。 1. 项目背景…

SpringBoot+FileBeat+ELK8.x版本收集日志

一、准备环境 1、ElasticSearch&#xff1a;8.1.0 2、FileBeat&#xff1a;8.1.0 3、Kibana&#xff1a;8.1.0 4、logstach&#xff1a;8.1.0 本次统一版本&#xff1a;8.1.0,4个组件&#xff0c;划分目录&#xff0c;保持版本一致。 说明&#xff1a;elasticsearch和kib…

UML介绍-不同类间关系

目录 不同的类间关系有着各自独特的体现方式。 继承关系 实现关系 关联关系 聚合关系 组合关系 数据库建模PowerDesigner UML&#xff08;Unified Modeling Language&#xff09;即统一建模语言&#xff0c;是一种用于软件系统分析、 设计和文档编制的可视化建模语言。…

C语言 | Leetcode C语言题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; typedef struct {int* pre;int preSize;int total; } Solution;Solution* solutionCreate(int* w, int wSize) {Solution* obj malloc(sizeof(Solution));obj->pre malloc(sizeof(int) * wSize);obj->preSize wSize;obj->total…

Yocto 项目中 layer.conf 文件的基本框架与模版

一个在layer.conf文件的基本框架&#xff1a; # 层的名称&#xff0c;可自定义&#xff0c;用于标识该层 LCONF_VERSION "7" LAYERNAME "my_layer"# 层的优先级&#xff0c;整数&#xff0c;用于确定层在构建顺序中的位置 # 数字越大&#xff0c;优先级…

计算机毕业设计Hadoop+大模型地震预测系统 地震数据分析可视化 地震爬虫 大数据毕业设计 Spark 机器学习 深度学习 Flink 大数据

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (1) - 让 OpenGLES 应用跑起来

在正式移植 AWTK 之前&#xff0c;我们先尝试在 HarmonyOS 上运行一个简单的 OpenGLES 应用程序。虽然可以确定这一步肯定是可行的&#xff0c;但是作为一个 HarmonyOS NEXT 新手&#xff0c;还是先从简单的应用程序开始&#xff0c;把坑都踩一遍&#xff0c;遇到问题比较好解决…