博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Recurrent Chunking Mechanisms for Long-Text Machine Reading Comprehension》--论文分享
阅读量:4290 次
发布时间:2019-05-27

本文共 1822 字,大约阅读时间需要 6 分钟。

作者:Sjw

时间:2021年4月30日     

今天要分享的是来自ACL2020的一篇论文,作者是:Hongyu Gong, Yelong Shen, Dian Yu,Jianshu Chen, Dong Yu 


目录


1.解决的问题

现在的机器阅读理解模型大多数都是使用预训练模型(例如BERT)对文档和问题的联合上下文信息进行编码。但是这些基于transformer架构的模型只能采用固定长度(例如512,文本长度不足会进行填充)的文本作为输入。 需要处理更长的文本输入时,以前的方法通常将它们分成等距的段(比如通过设置滑窗大小为128),并根据每个段独立地预测答案,而不考虑其他段的信息。就像下图这种情况:

设滑窗长度为128,最大句长为512,那么长度为700的本文经过处理后会被切分为3段,第一段为0-512,第二段为128-640,第三段为256-700。

这种情况下,会产生需要预测的答案处在被分割的边界位置,导致丢失用于推理答案的上下文信息,而且片段与片段之间缺乏交互,又丢失了一部分信息。

为了说明上下文信息对答案预测的影响,作者还展示了答案片段的中心位置与文章的中心位置距离对F1值的影响:

可以看到,随着答案片段的中心位置与文章的中心位置的距离增大,F1值有着明显的下降。


2.方法

于是乎,作者就提出了一种更加科学的长文本分段方法,也就是本文要讲的: RCM(recurrent chunking mechanisms)通过强化学习的方式学习分段长度,并使用一种循环机制让片段之间得到交互,为真实答案的预测提供更多的上下文信息。

2.1循环机制

由于该工作是基于BERT等transformer架构的模型进行的,作者取出了每个段落中的[CLS]位置向量作为该段落的语义向量v_{c},并在循环机制中进行交互,得到最终生成的向量 \tilde{v}_{c} = f(v_{c}, \tilde{v}_{c-1})。其中f( \cdot ) 可以为Gated recurrence(GRU)或者LSTM,公式如下:

最后,不管以何种方式,最终都会得到经过不同段交互后的段落语义向量\tilde{v}_{c}。获取到\tilde{v}_{c}后就可以计算对该段落是否正确答案的概率估计值q_{c},其计算公式如下:

2.2基于强化学习的分段策略

首先简单的介绍一下强化学习。

“强化学习是用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题......强化学习是智能体(Agent)以“试错”的方式进行学习,通过与环境进行交互获得的奖赏指导行为,目标是使智能体获得最大的奖赏,强化学习不同于连接主义学习中的监督学习,主要表现在强化信号上,强化学习中由环境提供的强化信号是对产生动作的好坏作一种评价(通常为标量信号),而不是告诉强化学习系统RLS(reinforcement learning system)如何去产生正确的动作。”

那对应在本文中,强化学习的环境就是我们的深度学习模型结构,状态s是已被分好的段落,动作a则为分段时的步长大小和方向。在状态s下执行a动作的概率为:

针对状态s和动作a产生的奖励值为R(s,a),其公式如下。R({s}',{a}')是下一段的奖励值,q_{c}是之前得出的模型根据段落语义向量\tilde{v}_{c}得出的对该段落是否正确答案的概率估计值。式子中的第一项q_{c}r_{c}是从该段落中提取出正确答案的奖励值。考虑一下,在所有段落中只有一段包含答案,在计算奖励时,不仅要在分对具有答案的段落时进行奖励,还要奖励分对不包含答案的段落,所以要添加后边的一项。通过最大化奖励值,就可以训练分段方法啦。

其中r_{c}的取值是根据当前段落c提取出答案的可能性,其公式如下。可以从公式中看出,r_{c}的取值是根据模型预测出的真实答案位置概率值计算所得。

最后,将两种方法总结起来,算法整体的结构见下图所示:

分出的段落送入BERT当中经过段落之间的交互后得到\tilde{v}_{c},用于Answer Extractor 和 Policy Network。Answer Extractor最终得出评分q_{c}。Policy Network得出执行动作a的概率p^{act}(a|s)

3.实验

最后,作者在 CoQA 、 QuAC 和TriviaQA上进行了实验,三个数据集的统计数据如下图所示。

实验的结果如下,可以看到,该方法在较短输入长度上的准确率有着比较大的提升,而在512长度上提升较小。因为CoQA与QuAC的平均长度接近或小于512,大部分文本可能不需要再次分段。而在文本较长的TriviaQA数据集上具有更好的效果。

TriviaQA数据集上的结果

最后附上该论文的代码:

论文链接:

转载地址:http://dqmgi.baihongyu.com/

你可能感兴趣的文章
用递归方法建立二叉树
查看>>
用递归方法对二叉树进行先序、中序和后序遍历
查看>>
翻转二叉树
查看>>
逆序链表
查看>>
epoll 使用详解
查看>>
stl 中 set容器用法
查看>>
有序数组求交集
查看>>
文字常量区与栈
查看>>
非阻塞connect 编写方法
查看>>
epoll 边沿触发
查看>>
String类 默认生成的函数
查看>>
Linux 软连接与硬链接
查看>>
视音频数据处理入门:H.264视频码流解析
查看>>
视音频数据处理入门:AAC音频码流解析
查看>>
视音频数据处理入门:UDP-RTP协议解析
查看>>
视音频数据处理入门:FLV封装格式解析
查看>>
最简单的基于FFMPEG的封装格式转换器(无编解码)
查看>>
base64 编码原理
查看>>
单链表是否有环的问题
查看>>
判断两个链表是否相交并找出交点
查看>>