端到端问答新突破:百度提出RocketQA,登顶MSMARCO榜首

源 | 机器之心


开放域问答(Open-domain QA)一直是自然语言处理领域的重要研究课题。百度从面向端到端问答的检索模型出发,提出了RocketQA训练方法,大幅提升了对偶式检索模型的效果,为实现端到端问答迈出了重要的一步。RocketQA已逐步应用在百度搜索、广告等核心业务中,并将在更多场景中发挥作用。

近日,百度提出了面向端到端问答的检索模型训练方法 RocketQA,该方法针对模型训练中存在的问题,通过跨批次负采样(cross-batch negatives)、去噪的强负例采样(denoised hard negative sampling)与数据增强(data augmentation)等技术,大幅提升了对偶式检索模型的效果。RocketQA 不仅在多个问答相关数据集中取得了 SOTA,同时也刷新了微软 MSMARCO 数据集段落排序任务的榜单,超越谷歌、微软、Facebook、阿里、美团、卡内基梅隆大学、清华大学、滑铁卢大学等企业和高校位居第一,为实现 “端到端问答” 迈出了重要的一步。

  • 论文名称 RocketQA:
    《An Optimized Training Approach to Dense Passage Retrieval for Open-Domain Question Answering》

  • 论文地址:
    https://arxiv.org/abs/2010.08191

开放域问答系统

开放域问答(Open-domain QA)是自然语言处理领域的重要研究课题。它的任务是,基于用户用自然语言提出的问题,从海量候选文本中快速、精准地找出答案。开放领域问答在智能搜索、智能助手、智能客服等多个场景下,都发挥着重要作用。特别是近些年,随着各种智能手机、智能音箱的普及,智能搜索快速进化,通过开放域问答系统直接给出唯一的精准答案(如图 1 所示),可以帮助用户在这些小屏和无屏设备上更快速、准确的获取有用信息。

百度搜索的 TOP1 结果:将问题的答案展现在搜索结果的首位,提升用户体验。

传统的开放域问答主要采用级联的检索式问答系统,包含了段落检索、段落排序、答案定位等多个步骤。随着近些年预训练语言模型的发展,研究人员开始探索基于深度语义表示的对偶式检索模型(dual-encoder),希望其能够替代传统的检索式问答系统中级联的检索和排序等模块,与基于机器阅读理解模型的答案定位一起实现“端到端问答”。

不同于传统的级联式问答系统,“端到端问答”摒弃了传统系统中繁杂的构件,系统复杂性大大降低,并且其中每个模块(段落检索和答案定位)都是可学习的,这样的设计能够让整个系统实现端到端训练。这意味着问答系统可以基于用户实时的反馈实现在线训练,而不是只在封闭的数据集上闭门造车。这是智能问答技术的发展趋势,可能会引发问答系统的新一代技术变革。

基于此,百度从面向端到端问答的检索模型出发,针对对偶式检索模型训练中存在的问题,提出了 RocketQA 训练方法,并基于百度自研的预训练模型ERNIE进行训练,大幅提升了对偶式检索模型的效果,为实现端到端问答迈出了重要的一步。

基于稠密向量表示的对偶模型

RocketQA

不同于传统的检索模型使用基于关键词的稀疏表示对问题和候选段落进行建模,基于深度语义表示的对偶式检索模型(如图 2 所示)通过两个对称的网络分别对问题和候选段落进行编码并计算语义相似度。这样能够利用强大的网络结构进行更深层次的学习,同时基于预训练语言模型,使语义理解更加丰富。在过去的工作中,对偶模型大多采用批次内负采样 (in-batch negatives) 的方式进行训练,将批次内其他问题的正确答案作为当前问题的错误答案(负例),从而减少重复计算和提高训练效率。然而,由于检索场景不同于常见的分类问题,对偶式检索模型的训练仍然存在如下的挑战:

训练场景和预测场景中样本数量存在较大差异

在开放域问答的应用场景中,模型需要从大规模的候选集合中找出问题的答案。但是按照批次内负采样的方法训练时,每个问题的候选段落个数与批次大小相同。受到单 GPU 显存大小的限制,训练过程中见到的候选段落远小于预测时的候选段落,从而导致模型即使在训练时表现良好,在实际应用当中却差强人意。

数据集中存在大量漏标注的正确答案

开放域问答场景下候选段落的数量往往非常大,标注出问题的全部正确答案几乎是不可能的。在 MSMARCO 数据集中,候选段落的总数为 880 万,但每个问题平均只标注了 1.1 个正确答案。研究人员发现,在使用对偶模型检索出的首条结果中,70% 的错误结果其实是漏标的正确答案。这种情况下,构造训练数据中的强负例时很容易引入假负例(false negative),给模型训练带来负面影响。

相对于开放域全集,人工标注训练数据的规模小、成本大

尽管目前已有较多大规模的问答数据集,但是相较于开放域的用户问题来说,仍然是冰山一角。有限的标注数据集无法覆盖到全面的领域和类型,导致模型泛化性差。想要增大标注数据的规模和质量,需要很高的人工成本。

因此百度提出了一种对偶式检索模型的增强训练方法 RocketQA,通过跨批次负采样、去噪的强负例采样与数据增强三项技术,解决上述挑战。接下来将对这三个技术进行详细的介绍。

跨批次负采样(cross-batch negatives)

采用传统的批次内负采样方法训练时,每个问题的候选段落个数与批次大小相同。为了进一步增加训练过程中候选段落的数量,百度提出了跨批次负采样方法(如图 3 所示)。该方法能够在使用多 GPU 并行训练时,将其它 GPU 批次内的全部段落作为当前问题的负样本。这样可以直接复用各个 GPU 上已经计算好的段落表示,不额外增加计算量;同时基于飞桨分布式训练扩展工具包 FleetX 的 all-gather 算子实现,只需要使用很少的通信量和内存开销,就达到了增加每个问题候选段落的目的。随着 GPU 个数的增加,每个问题的候选段落个数线性增加,训练场景中的任务难度也更加接近真实场景。百度在 MSMARCO 数据集上进行了实验,在使用跨批次负采样后,随着训练时候选段落数量增加,模型的效果稳步提升(如图 4 所示)。

批次内负采样(上)和跨批次负采样(下)的对比

MSMARCO数据集中,训练阶段候选段落的个数对模型效果的影响

去噪的强负例采样(denoised hard negative sampling)

在对偶模型的训练中,适当增加训练数据中的强负例的难度,有助于提升模型效果。一般的做法是,从一个排序的候选段落中进行采样,越靠前的负例对模型来说难度越大。但是由于难以避免的漏标注情况,直接采样很大概率会引入假负例。为了解决这一问题,百度使用交互模型(cross-encoder)的打分作为监督信息进行去噪。在选择强负例时,避开交互模型给出高置信度的样例。相较于对偶模型,交互模型具有结构上的优势,能够编码更多的交互信息,从而给出可靠的监督信号,帮助对偶模型选取更可靠的强负例。如表 1 的第三行和第四行所示,去噪的强负例采样可以显著提升模型效果。

数据增强(data augmentation)

交互模型可以过滤强负例中的噪声,也可以用来选取未标注的正确答案。因此,当引入大量无标注的问题时,便可以利用交互模型以极低的成本得到大量弱监督数据,进一步增强对偶模型的能力。在 MSMARCO 数据集的实验中,百度引入了 Yahoo!Answers 和 ORCAS 数据集中的 150 万未标注问题,用交互模型在对偶模型检索出的候选段落上进行打分,并根据置信度选取正负样本。如表 1 第四行和第五行所示,通过这种方式,对偶模型的效果得到进一步提升。

MSMARCO数据集中,去噪的强负例采样与数据增强策略对模型效果的影响

训练流程和实验结果

上述三项技术是层层递进的关系,将它们整合成一套完整的训练方法,类比多级火箭,称之为 RocketQA,其完整实现流程如图 5 所示。在实现中,使用了百度研发并开源的大规模英文预训练模型 ERNIE 初始化模型参数,然后使用标注数据进行微调。

RocketQA 训练流程

如表 2 所示,最终的实验结果表明,RocketQA 在微软 MSMARCO 和谷歌 Natural Question 数据集的效果均大幅超过了已经发表的最好的检索模型。同时,百度也在答案抽取任务上验证了 RocketQA 检索结果的有效性。如表 3 所示,在 RocketQA 做检索的基础上,使用训练好的阅读理解模型,百度在 Natural Questions 的答案抽取任务上取得了 42.0 的 EM 值,超过了已有的相关工作,而这其中的增益来自检索效果的提升。

RocketQA在微软MSMARCO和谷歌Natural Questions数据集上段落检索的效果

RocketQA 在 Natural Questions 数据集上做阅读理解任务的效果

RocketQA——段落排序

MSMARCO(Microsoft Machine Reading Comprehension)是微软提出的大规模阅读理解数据集,包含约 100 万问题、880 万相关段落以及人工标注的问题答案。数据集的问题来自 Bing 搜索引擎的日志, 是真实搜索场景中用户提出的问题,段落来自 Bing 的搜索结果。基于 MSMARCO 数据集,微软举办了包括阅读理解、段落排序在内的多个问答相关任务的评测任务。由于数据集规模大、贴近真实场景,MSMARCO 的各项任务已经吸引了包括 Google、微软、Facebook、阿里巴巴等知名企业,以及清华、CMU 等国内外著名高校的参与。如图 6 所示,百度基于 RocketQA 检索模型的结果进一步训练了段落重排序模型,在 MSMARCO 的段落排序(Passage Ranking)任务中排名第一,超越了谷歌、微软、Facebook、阿里、美团、卡内基梅隆大学、清华大学、滑铁卢大学等企业和高校。

微软MSMARCO Passage Ranking 数据集leaderboard截图

飞桨分布式训练加持

飞桨框架通过持续迭代升级,在分布式训练方面真正做到了从产业实践中来,回到开源社区和产业实践中去。在飞桨框架最新版本中,分布式训练继承了之前版本高性能、高扩展的能力,在易用性方面进行了精心的优化。

paddle.distributed.fleet 是飞桨框架 2.0 新 API 体系下通用分布式训练 API,千亿规模稀疏参数服务器和大规模 GPU 多机多卡训练都可以通过几行代码轻松配置完成。DistributedStrategy 作为用户配置并行策略的统一入口,支持大规模异步训练、自动混合精度、深度梯度压缩、重计算、梯度累计、计算算子自动融合、通信梯度智能融合以及自动并行等功能,极大的满足了研究人员日常训练的加速需求。飞桨框架的最新版本同时也开放了能够面向高级编程用户的分布式底层通信接口 paddle.distrbuted,使用户能够自主构建诸如自动并行、模型并行等高级并行训练功能。目前,飞桨大规模分布式训练已经在百度日常业务中进行过深入锤炼,并每天都在根据业务的痛点进行改进和优化。

RocketQA 的实现完全基于飞桨深度学习框架,特别在研发算法的过程中飞桨的高性能并行训练助力了各种想法的快速尝试。研究人员在使用飞桨官方提供的 paddle.distributed.fleet 进行训练的同时,也采用了飞桨分布式训练扩展工具 FleetX。FleetX 作为飞桨框架分布式训练扩展工具,提供数据分片并发下载,快速定义模型,快速提交集群任务等功能,极大的提升了研发人员的使用效率。RocketQA 采用 paddle.distributed.fleet API 提供的经典数据并行训练方案,并采用自动混合精度、算子融合进行纵向扩展性的提升,同时采用梯度融合,计算与通信自动并发等策略提升横向的扩展性,从而大幅度提升实验效率。

为了实现 RocketQA 的跨批次负采样,对单卡能够见到的负样本规模有较大的需求,研究人员使用了飞桨 paddle.distributed 提供的底层集合通信操作 all-gather 算子,将数据并行训练中各块卡的隐层向量进行汇总,扩大单卡可以见到的负例数量达到 GPU 卡数倍;为了进一步增加每块卡可以见到的全局负例样本,研究人员还使用了重计算(recompute)策略,该策略以 20% 左右的计算开销将整个模型的训练使用的显存占用从 O(N)降低到 O(LogN),在该模型中使用 Recompute 使训练数据批次大小提升 5 倍以上,对训练计算图的改写结果如图 7 所示。这样,跨批次负采样方法与传统的纯数据并行方法相比,实现了负例数量 5 x GPU 卡数的倍数增长,从而加快了收敛速度和收敛效果。

Multi-Head Self Attention利用重计算后的计算图

总结

百度提出的 RocketQA 训练方法,通过对经典对偶模型进行优化训练,显著提升了模型的检索能力,为实现端到端问答迈出了重要一步。目前,RocketQA 已逐步应用在百度搜索、广告等核心业务中,并将在更多场景中发挥作用。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

有顶会审稿人、大厂研究员、知乎大V和妹纸

等你来撩哦~

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

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

相关文章

深度剖析RPC框架的核心设计

做过分布式服务端的Java工程师,随着对技术底层的认知的加深,都会或多或少的会去想: 一个RPC框架需要考虑的问题有哪些,如何来解决? 下面我们围绕RPC通信框架,从如何实现这个角度做一个剖析,以及每个环节能…

LeetCode 200. 岛屿数量(图的遍历)

文章目录1. 题目信息2. 解题2.1 DFS2.2 BFS1. 题目信息 给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你…

论文浅尝 | 引入“引用”的语言模型

笔记整理:杨帆,浙江大学硕士,研究方向知识图谱.论文链接:https://arxiv.org/pdf/1611.01628.pdf动机Referring expression(RE)在自然语言中十分常见,并且在信息交流中扮演了十分重要的角色&…

短文本语义匹配/文本相似度框架(SimilarityNet, SimNet),基于bow_pairwise模式及框架原理介绍

用PaddlePaddle实现段文本语义匹配Simnet模型 https://aistudio.baidu.com/aistudio/projectdetail/124373 Hinge loss: https://blog.csdn.net/hustqb/article/details/78347713 原文链接:https://blog.csdn.net/qq_33187136/article/details/10677043…

卖萌屋招人啦!

萌萌的小夕突然出现~这次来寻找小伙伴一起建设小屋啦!本期提供四种通道可直达卖萌屋核心腹地!小编/作者日常:发现,拍脑袋,然后写写写外部投稿的审核与编辑基本条件:对NLP、CV、IR、Rec、Ads、DM…

LeetCode 36. 有效的数独(哈希)

文章目录1. 题目信息2. 解题2.1 暴力3次遍历查找2.2 一次遍历查找1. 题目信息 判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线…

如何从0到1设计一个类Dubbo的RPC框架

之前分享了如何从0到1设计一个MQ消息队列,今天谈谈“如何从0到1设计一个Dubbo的RPC框架”,重点考验: 你对RPC框架的底层原理掌握程度。 以及考验你的整体RPC框架系统设计能力。 RPC和RPC框架 1.RPC(Remote Procedure Call&#x…

shell脚本实现命令的自动执行

背景:在我傻傻的手工执行命令整整一天手腕都有点疼之后发现shell这个大宝贝简直开心的不得了 1. 关于shell脚本的使用: 一、编写完成的shell脚本放到脚本要执行的文件的相同目录下 二、注意shell脚本的编码问题(windows和mac下编写的脚本格式…

论文征集 | 2019 Joint International Semantic Technology Conference

第九届国际语义技术联合会议将于今年十一月在美丽的杭州召开,现在征集优秀的研究论文,本届会议还专门设置了special session track,优秀论文将被推荐到SCI期刊发表,敬请赐稿!http://jist2019.openkg.cn/The Joint Inte…

阿里P8架构师谈:主流RPC框架详解,以及与SOA、SOAP、REST的区别

什么是RPC RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 简言之,RPC使得程序能够像访问本地系统资源一样,去…

LeetCode 322. 零钱兑换(DP)

文章目录1. 题目信息2. 解题2.1 回溯穷举2.2 动态规划1. 题目信息 给定不同面额的硬币 coins 和一个总金额 amount。 编写一个函数来计算可以凑成总金额所需的最少的硬币个数。 如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins [1, 2, 5], …

服务器使用

杀死用户lyli的所有进程 killall -u lyli杀是PID为19347的进程 kill -s 9 19347查看CPU的使用情况 free -h 查看进程实时情况 top一般有用的就这两个,RES是实际占了多少内存,%CPU除以100%就是占了多少块CPU

可以闭眼入的O'REILLY机器学习神书出新版了!

传说中的机器学习“四大名著”中最适合入门的一本——“蜥蜴书”新版来了!这本书的英文原版是美国亚马逊AI霸榜图书,在人工智能、计算机神经网络、计算机视觉和模式识别三大榜单中,均为榜首!国内外好评率均超过90%!读者…

论文浅尝 | 基于知识库的神经网络问题生成方法

论文笔记整理:谭亦鸣,东南大学博士生,研究方向为跨语言知识图谱问答。来源:NLPCC2018链接:http://tcci.ccf.org.cn/conference/2018/papers/EV7.pdf问题背景与动机作者认为,目前的问题语料生成主要依赖于人…

何使用BERT模型实现中文的文本分类

原文网址:https://blog.csdn.net/Real_Brilliant/article/details/84880528 如何使用BERT模型实现中文的文本分类前言Pytorchreadme参数表算法流程1. 概述2. 读取数据3. 特征转换4. 模型训练5. 模型测试6. 测试结果7. 总结前言 Google官方BERT代码(Tenso…

LeetCode 152. 乘积最大子序列(DP)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1:输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2:输入: [-2,0,-1] 输出: 0 解释…

YouTube深度学习推荐系统的十大工程问题

文 | 王喆源 | https://zhuanlan.zhihu.com/p/52504407这篇文章主要介绍了YouTube深度学习系统论文中的十个工程问题,为了方便进行问题定位,我们还是简单介绍一下背景知识,简单回顾一下YouTube的深度推荐系统论文Deep Neural Networks for Yo…

RPC框架的实现原理,及RPC架构组件详解

RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时,只需一个应…

论文浅尝 | 时序与因果关系联合推理

论文笔记整理:李昊轩,南京大学硕士,研究方向为知识图谱、自然语言处理。来源:ACL2018链接:https://www.aclweb.org/anthology/P18-1212动机理解事件之间的时间和因果关系是一项基本的自然语言理解任务。由于原因一定先…

LeetCode 64. 最小路径和(DP)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例:输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释…