利用段落检索和生成模型进行开放域问答12.2

利用段落检索和生成模型进行开放域问答

  • 摘要
  • 引言
  • 2 相关工作
  • 3 方法

摘要

事实证明,开放域问答的生成模型具有竞争力,无需借助外部知识。虽然很有希望,但这种方法需要使用具有数十亿个参数的模型,而这些模型的训练和查询成本很高。在本文中,我们研究了这些模型可以从检索可能包含证据的文本段落中获益多少。我们在 Natural Questions 和 TriviaQA 开放基准测试中获得了最先进的结果。有趣的是,我们观察到当增加检索的段落数量时,该方法的性能显着提高。这证明序列到序列模型提供了一个灵活的框架,可以有效地聚合和组合来自多个段落的证据。

引言

最近,一些工作表明,可以从经过大量数据训练的大规模语言模型中提取事实信息。基于这一观察和自然语言处理模型预训练的进展。2020年引入了开放域问答的生成模型。在不依赖外部知识的情况下,该方法在多个基准测试中获得了有竞争力的结果。然而,它需要包含数十亿个参数的模型,因为所有信息都需要存储在权重中。这使得模型的查询和训练成本高昂。在本文中,我们研究了这种方法可以从访问外部知识源(例如维基百科)中获益多少。

基于检索的方法之前曾在使用提取模型的开放域问答的背景下被考虑过。在这种情况下,系统首先检索支持文档,然后从这些文档中提取答案。我们考虑了不同的检索技术,要么使用基于 TF/IDF 的稀疏表示,要么使用密集嵌入。提取答案的模型通常基于上下文化的单词表示,例如 ELMo 或 BERT,并预测一个范围作为答案。使用提取模型时,聚合和组合来自多个段落的证据并不简单,并且已经提出了多种技术来解决这一限制。

在本文中,我们基于开放域问答的生成建模和检索方面令人兴奋的发展,探索了一种两全其美的简单方法。该方法分两个步骤进行,首先使用稀疏或密集检索支持段落交涉。然后,序列到序列模型生成答案,除了问题之外,还将检索到的段落作为输入。虽然概念上很简单,但该方法在 TriviaQA 和 NaturalQuestions 基准上设置了新的最先进结果。特别是,我们表明,当检索到的段落数量增加时,我们的方法的性能显着提高。我们认为,这证明生成模型比提取模型更擅长结合多个段落的证据。

2 相关工作

开放领域问答 是回答一般领域问题的任务,其中证据不作为系统的输入给出。虽然这是自然语言处理中的一个长期存在的问题,但随着 Chen 等人的工作,这项任务最近重新引起了人们的兴趣,在该版本的问题中,学习系统可以以与答案相对应的跨度的形式进行强有力的监督。陈等人(2017)提出通过首先从维基百科检索支持文档来解决该问题,然后再从检索到的文档中提取答案。人们提出了不同的方法来解决系统没有给出黄金跨度但只给出正确答案的情况。 Clark 和 Gardner(2018)提出在与答案相对应的所有范围内使用全局归一化,后来应用于基于 BERT 的模型。敏等人 (2019) 引入了一种基于硬期望最大化的方法来解决此设置中的噪声监督问题。王等人 (2018) 描述了一种使用置信度和覆盖率得分来汇总不同段落的答案的技术。

段落检索 是开放域问答的重要一步,也是改进 QA 系统的一个活跃的研究领域。最初,基于 TF/IDF 的稀疏表示用于检索支持文档。李等人引入了一种基于 BiLSTM 的监督学习方法来对段落进行重新排序,而 Wang 等人 (2018) 通过强化学习训练了一个排名系统。改进 QA 系统检索步骤的第二种方法是使用额外信息,例如维基百科或维基数据图。最近,多项研究表明,完全基于密集表示和近似最近邻的检索系统与传统方法具有竞争力。此类模型可以使用问答对形式的弱监督进行训练,或者使用完形填空任务和端到端微调进行预训练。

生成式问答 在之前的工作中主要被考虑用于需要生成答案的数据集。这些数据集的生成方式使得答案与支持文档中的范围不对应,因此需要抽象模型。拉斐尔等人 (2019) 表明,生成模型对于阅读理解任务具有竞争力,例如 SQuAD (Rajpurkar et al., 2016),其中答案是跨度。罗伯茨等人(2020)建议使用大型预训练生成模型,而不使用额外的知识来进行开放域问答。最接近我们的工作,Min 等人(2020)和刘易斯等人 (2020) 引入了用于开放域问答的检索增强生成模型。我们的方法与这些作品的不同之处在于生成模型如何处理检索到的段落。这允许扩展到大量文档,并从大量证据中受益。

3 方法

在本节中,我们将描述我们的开放域问答方法。它分两个步骤进行,首先检索支持段落,然后使用序列到序列模型对其进行处理。

检索
对于支持段落的检索,我们考虑两种方法:BM25(Robertson et al., 1995)和 DPR(Karpukhin et al., 2020)。
在 BM25 中,段落被表示为词袋,排名函数基于术语和逆文档频率。我们使用带有默认参数的 Apache Lucene1 实现,并使用 SpaCy.2 对问题和段落进行标记。
在 DPR 中,段落和问题被表示为密集向量表示,并使用两个 BERT 网络计算。排名函数是查询和段落表示之间的点积。使用 FAISS 库的近似最近邻进行检索。

阅读
我们的开放域 QA 生成模型基于序列到序列网络,在无监督数据上进行预训练,例如 T5 或 BART。该模型将问题以及支持段落作为输入,并生成答案。更准确地说,每个检索到的段落及其标题都与问题连接在一起,并由编码器独立于其他段落进行处理。我们在每段文章的问题、标题和文本之前添加特殊标记 Question:,title: 和 context: 。最后,解码器对所有检索到的段落的结果表示的串联执行。因此,该模型仅在解码器中执行证据融合,我们将其称为解码器中的融合。

通过在编码器中独立处理通道,但在解码器中联合处理通道,该方法不同于 Min 等人(2020)和刘易斯等人(2020)。在编码器中独立处理段落可以扩展到大量上下文,因为它一次仅对一个上下文执行自关注。这意味着模型的计算时间随着通道数线性增长,而不是二次增长。另一方面,在解码器中联合处理段落可以更好地聚合来自多个段落的证据。
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

opencv知识库:利用cv2.resize()函数进行图像缩放

引言 在numpy知识库:深入理解numpy.resize函数和数组的resize方法中,小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看,numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

结构体||联合体

1.结构体 1.1实际生活中一些东西往往有多个元素组成。如一名学生有身高、体重、名字、学号等。这时候就需要用到结构体。 结构体是一些值的结合,这些值被称为成员变量。结构体的每个成员可以是不同类型的变量,如:标量、数组、指针、甚至是其…

Mysql行格式(记录格式)详解

1.InnoDB行格式简介: 我们平时向表中插入数据,是以行为基本单位,这些行在磁盘上的存储方式成为行格式。在innodb中有四种行格式:Compact、Redundant、Dynamic和Compressed。 默认的行格式是Dynamic: 1.1 Compact行格式 1.1.1 …

Linux 匿名页反向映射

1. 何为反向映射 正向映射: 用户进程在申请内存时,内核并不会立刻给其分配物理内存,而是先为其分配一段虚拟地址空间,当进程访问该虚拟地址空间时,触发page fault异常,异常处理流程中会为其分配物理页面&am…

Docker部署Plik临时文件上传系统并且实现远程访问

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik8. 结语 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问,实现随时随地在任意设备上…

【预计IEEE出版|EI征稿通知】第六届下一代数据驱动网络国际学术会议 (NGDN 2024)

第六届下一代数据驱动网络国际学术会议 (NGDN 2024) The Sixth International Conference on Next Generation Data-driven Networks 2024年4月26-28日 | 中国沈阳 基于前几届在英国埃克塞特 (ISPA 2020) 、中国沈阳 (TrustCom 2021) 和中国武汉 (IEEETrustCom-2022) 成功举…

【Qt开发流程】之事件系统1:事件系统描述及事件发生流程

Qt的事件系统 在Qt中,事件是对象,派生自抽象的QEvent类,它表示应用程序内部发生的事情或作为应用程序需要知道的外部活动的结果。事件可以由QObject子类的任何实例接收和处理,但它们与小部件特别相关。以下描述了在典型应用程序中…

电子学会C/C++编程等级考试2022年03月(四级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:拦截导弹 某国为了防御敌国的导弹袭击, 发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷: 虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。 某天, 雷达捕捉到敌国的导弹来袭。…

Java高级技术-反射

认识反射、获取类 获取类的方法 获取类的构造器 获取类的构造器、并对其进行操作 获取构造器的作用:依然是初始化对象返回 获取成员变量 获取成员变量的方法 获取成员变量的作用:赋值、取值 获取类的成员方法 方法 作用:依然是执行 作用、…

什么是DDoS攻击

DDoS攻击 1. 定义2. DDoS攻击类型2.1 网络层攻击2.2 传输层攻击2.3 应用层攻击 3.DDoS攻击态势特点 1. 定义 分布式拒绝服务(DDoS)攻击是一种常见的网络攻击形式。攻击者利用恶意程序对一个或多个目标发起攻击,企图通过大规模互联网流量耗尽…

【Element-ui】Icon 图标与Button 按钮

文章目录 前言一、Icon 图标1.1 作用1.2 使用方法1.3 图标集合 二、Button 按钮2.1 基础用法2.2 禁用状态2.3 文字按钮2.4 图标按钮2.5 按钮组2.6 加载中2.7 不同尺寸 总结 前言 在前端开发中,界面的设计和交互是至关重要的一部分。一个直观、易用的界面往往离不开…

HarmonyOS应用开发——程序框架UIAbility、启动模式与路由跳转

前言 UIAbility简单来说就是一种包含用户界面的应用组件,用于和用户进行交互。每一个UIAbility实例,对应于一个最近任务列表中的任务。 一个应用可以有一个UIAbility,也可以有多个UIAbility。一个UIAbility可以对应于多个页面,建议…

集成开发环境PyCharm的使用【侯小啾python领航计划系列(三)】

集成开发环境 PyCharm 的使用【侯小啾python领航计划系列(三)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

MySQL 性能优化

未完待续... 1. 分库、分表结构优化 1.1 数据库设计 1.2 选择数据类型 1.3 数字类型 1.3.1 整数类型 1.3.2实数类型 1.4 字符串类型 1.4.1 CHAR与VARCHAR 1.4.2 BINARY与VARBINARY 1.4.3 TEXT与BLOB 1.4.4 ENUM类型 1.4.5 SET类型 1.5日期时间类型 1.5.1 日期类型 1.5.2 时间类…

监测tcp连接状态

using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks;namespace 检测tcp连接状态 {public class TCPClient{private TcpClient client;private bool con…

C++核心编程——类与对象基础

C核心编程——类与对象基础 类与对象封装构造函数普通构造拷贝构造初始化成员列表(补充) 析构函数对象数组对象指针指向对象的指针指向对象成员的指针this指针 静态成员静态数据成员静态成员函数 友元普通函数做友元函数友元成员函数友元类 类与对象 C面…

Fiddler抓包工具之fiddler的composer可以简单发送http协议的请求

一,composer的详解 右侧Composer区域,是测试接口的界面: 相关说明: 1.请求方式:点开可以勾选请求协议是get、post等 2.url地址栏:输入请求的url地址 3.请求头:第三块区域可以输入请求头信息…

Java实战案例————ATM

需求分析 首先ATM银行系统包括两个基础大功能:开户和登陆账户(当然在系统中没有一个账户时不能登录,需要先开户)。 一名用户有6项基本信息描述:姓名、性别、银行卡号、银行卡密码、账户余额、取款限额。 在登录账户…

MyBatis的创建,简单易懂的一篇blog

文章目录 一、MyBatis是什么二、操作流程三.配置resource总结 一、MyBatis是什么 MyBatis 是⼀款优秀的持久层框架,它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注…

Docker常见命令介绍

命令说明 docker pull 拉取镜像 docker push 推送镜像到DockerRegistry docker images 查看本地镜像 docker rmi 删除本地镜像 docker run 创建并运行容器(不能重复创建) docker stop 停止指定容器 docker start 启动指定容器 docker rest…