五篇机器阅读理解论文(Match-LSTM+Ptr,DCN,R-Net,QANet)介绍

以close-domain为例,MRC任务就是给定一篇文章和一些与文章相关的问题,要求模型给出问题的答案

MRC按照问答的形式不同大致可以分成四种任务

  • 填空型
  • 多项选择型
  • 片段抽取型
  • 自由答案型

首先来看一看数据集

填空型问答

所谓填空型问答是指给定一篇文章和一个缺失某个单词的句子作为问题,要求模型在阅读文章后预测出问题中缺失的单词,注意问题并不是文章中的句子。
在这里插入图片描述

多项选择型问答

这个任务大家最熟悉了,从多个选项中选择出一个正确选项,注意多项选择型问答不是说题是多选题。

上图是RACE数据集,就是从初高中考试题里做出来的数据集。

片段抽取型问答

片段抽取型问答是指问题的答案是原文中连续的某个片段。

上图是SQuAD的第一个版本,这是16-18年之间MRC领域最权威、最为广泛使用的数据集。

自由答案型问答

自由答案型问答是指问题的答案不是原文中固定的某个片段,而是模型生成出来的,并且要保持语言的连贯性和正确性。其中还有一类任务叫对话式问答,它不仅仅是自由答案型的任务,它还属于多轮对话式的问答任务,因为后面所问到的问题依赖于前面的问题和答案。
在这里插入图片描述

模型的整体框架

在这里插入图片描述
上图是填空型问答的整体框架,一篇文章一个问题。我们将问题和文章通过词嵌入得到两个张量,question_length表示问题长度,passage_length表示文章长度,dim就是词嵌入的维度,然后输入到模型中,模型的输出是一个长度为passage_length的向量,表示文章中每一个单词是答案的概率,标签是one_hot张量,只有答案单词的位置是1。
然后计算交叉商作为模型的损失函数。

在这里插入图片描述
上图是片段抽取式问答的模型整体框架,同样是一个问题对应一篇文章,然后各自词嵌入输入到模型中,模型的输出是两个passage_length的张量,这是因为片段抽取式问答的特点就是答案是文章中连续的片段,所以我们只需要预测答案的起始位置和终止位置的单词即可,而不是预测答案的每一个单词。
标签也自然是两个one_hot张量,分别代表答案的起始位置和终止位置,损失函数是两个位置损失函数之和。
在这里插入图片描述
当我们预测出来答案的两个位置之后,如上图,我们将起始位置和终止位置两个向量相乘,注意不是向量的乘法,而是起始位置的每一个单词都要和终止位置的所有单词坐乘积,乘积之后是一个方针,我们把下三角置0,因为下三角表示起始位置在终止位置之后,比如第二行第一列表示起始位置是2,终止位置是1.对于上三角我们选出来概率最大的,作为答案的预测结果,这个值的两个下标就是答案的位置,注意数字都是随便写的。

多项选择式问答与其余的问答任务略有不同,因为它是三个句子,不同其它的问答任务都是两个句子,多项选择问答的模型整体结构如下图
在这里插入图片描述
输入是一篇文章+一个问题+一个选项。choice_length表示选项长度,词嵌入之后输入模型,模型输出一个标量值代表对这个选项预测的分数。
在这里插入图片描述
如上图,把所有的选项类似的做法输入模型,注意是(一篇文章+一个问题+一个选项,不是所有选项放一起),如果是四个选项,那么模型就输出四个分值,最大的表示预测的正确选项。标签自然就是one_hot形式的向量,长度就是选项个数。
自由答案型问答稍微复杂,稍后讨论。

评测方式

在这里插入图片描述
多项选择和填空问答都是客观题,准确率就可以衡量。
对于区间答案型,第一个指标就是精确匹配,只有所有单词都预测正确才是1,这个太苛刻了。
另一个常用的就是F1分数,其中,精确率的表示是预测的答案中的单词有多少个出现在标准答案中,召回率说的是标准答案中的单词有多少个出现在预测的答案中,
F1=2accrecallacc+recall F_1=\frac{2*acc*recall}{acc+recall}
对于自由答案型,因为它属于一种生成问题,因此要用生成任务的评估方法,ROUGE(Recall-Oriented Understudy for Gisting Evaluation)的意思是面向召回的摘要评估方法。
ROUGE的评分有很多个标准,其中一个较为常用的叫ROUGE-L
在这里插入图片描述
如图,注意的是最长公共子序列不要求序列的单词是连续的。

在介绍MRC领域的方法之前,需要先回顾下机器翻译中的seq2seq with attention机制。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
整个流程如上图,就是拿decoder每一时间步的状态和encoder做注意力,得到一个向量作为decoder下一步的输入。,这种注意力的计算方式也叫基于注意力的RNN,因为RNN每一时间步的输入都是关注了encoder端的向量。

那对于机器阅读理解而言,文章和问题,这两个都可以做encoder或者decoder,所以它有两个方向的注意力,而不像机器翻译只有decoder到encoder端的注意力。
在这里插入图片描述

所谓文章到问题注意力,如下图在这里插入图片描述

所谓文章到问题注意力就是指,文章作为decoder,拿文章去和问题encoder做注意力,目的是想知道问题中哪个词汇文章是重要的。
在这里插入图片描述
如上图,所谓问题到文章注意力自然就是问题作为decoder,文章作为encoder,拿问题去和文章做注意力,目的是想知道文章中哪一个单词和问题是最相关的

机器阅读理解的典型架构

在没有预训练模型之前,15-18年几乎所有的MRC模型的架构都类似于下面这张图
在这里插入图片描述
单词嵌入层自然是指把文本中的单词嵌入到一个向量空间中,语义编码层是为了获取一个单词的上下文信息后对这个单词进行编码得到一个新的语义向量表示,而此时这个语义向量是关注了上下文的
信息交互层是指对问题和文章的语义信息进行交互,获得文章与问题之间的关联关系。
答案输出层自然是输出答案的,其中答案输出层是任务具体形式的,也就是不同形式的问答任务输出层的设计不同。

接下来一起看看这五篇经典的没有预训练模型之前的模型:

MatchLSTM+Ptr

单词嵌入层没什么好说的,最普通的词嵌入或者加一些字符嵌入来缓解OOV问题,因为这五篇都没有用到预训练模型,所以词嵌入采用的不是word2vec就是GloVe。
语义编码层采用的是BiLSTM。

接下来重点来了:

Match-LSTM Layer

首先经过语义编码层,
在这里插入图片描述
之后,Match-LSTM的目的是拿文章的每一个单词以及一个LSTM的隐藏状态和问题做注意力的计算,计算的结果和文章的单词的向量拼接然后再输入到这个LSTM中
如下几个图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是MatchLSTM整个过程:
在这里插入图片描述
之所以叫Match是因为LSTM每一个时间步的输入都包含了问题的语义信息和文章的语义信息,达到了Match匹配的目的。
在这里插入图片描述
公式如上图中的公式所示,这种运算机制非常的类似于机器翻译中的注意力计算方式。
在这里插入图片描述
下面我们来看答案输出层。
传统的注意力在输出时是将decoder的隐藏状态映射到一个vocab_size的词汇表中,如下:
在这里插入图片描述
如下图中的例子:
在这里插入图片描述
由于二月和一月、三月之间的语义相近,所以模型很有可能预测二月为答案,尤其是当你用的词向量是word2vec时候。
解决这个问题的方法就是指针网络,之所以能用指针网络是因为,片段抽取式的问答,输出是输入的一部分
,而指针网络要解决的问题就是输出来源于输入的问题
在这里插入图片描述
如上图,当我们计算完注意力权重后直接取权重最大的值作为输出,这样就确保了输出来源于输入。
指针网络的思想来源于seq2seq with attention
在这里插入图片描述

如上图就是MatchLSTM+Ptr论文的输出层,我们先假设有个初始向量,然后拿这个向量h0ah_0^a和语义交互层的输出做注意力得到注意力权重α\alpha,注意力的计算方式就是Bahdanau注意力的计算方式,
在这里插入图片描述
我们就利用这个注意力权重的最大值作为预测答案起始位置的概率。
在这里插入图片描述
然后用注意力权重对encoder加权求和后输入到decoder中,得到h1ah_1^a
在这里插入图片描述
然后h1ah_1^a和encoder再次和encoder计算注意力权重得到β\betaβ\beta的最大值就是预测答案终止位置的概率值。

以上就是MatchLSTM+ptr论文的结构。

R-Net

在这里插入图片描述
RNet的结构如上图,还是重点看后两层,直接讲R-Net是因为R-Net和MatchLSTM+Ptr很类似。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面几张图片回顾MatchLSTM,在这里插入图片描述
RNet其实就是在拼接后加了一个门控单元,输入给门控单元的张量有两个,分别表示文章中当前单词的语义信息向量和关注了问题的语义信息向量。目的是让门控单元自己学会取舍信息,也就是当前我们应该文章的信息多一些还是问题的语义信息多一些。
在这里插入图片描述
除了有上述的类似于MatchLSTM的门控的基于注意力的RNN外还接了一层self-attention,接self-attention的目的是由于上一步的RNN不很处理长距离的依赖问题,也就是后面的单词可能忘记了前面单词学习到的信息,所以接一个自注意匹配后可以使得模型从全局上把握文章的整体语义信息。
在这里插入图片描述
所谓self-attention,就是自己和自己做注意力,从公式8可以看出来,然后仍然是利用注意力权重对自己的语义向量加权求和再送到一个双向GRU中,这种方式其实很麻烦,transformer中的计算方式要简洁的多。
接下来是输出层,很简单,和上一篇论文一样,只不过上一篇论文没有指明那个初始向量怎么来的,而RNet指明初始向量利用对问题的加权求和得到。
在这里插入图片描述
回顾上一篇,那个h0ah_0^a没有指明怎么来的,
在这里插入图片描述
那这篇论文指明了。
RNet就介绍到这里。

Dynamic Co-attention Network(DCN)

在这里插入图片描述

只需要看最后两层。
在这里插入图片描述

回顾前两篇模型的注意力计算,只有拿文章去和问题做注意力,也就是只有C2Q的注意力,第二个就是都是Bahdanau注意力。
那Bahdanau注意力的特点就是如下:
在这里插入图片描述
显然前面计算的注意力结果会影响后面时间步做注意力计算
在这里插入图片描述
,如果前面的注意力计算有误,那就会出现误差传播的问题。
所以DCN的注意力采用另一种计算方式:
在这里插入图片描述
有如上两个矩阵代表文章和问题
在这里插入图片描述
第一步如上图,直接拿两个矩阵做乘积,因为向量的乘积反映了向量之间的相关性,可以看出,这种计算方式第一特别快,第二前一时间步计算的注意力不会影响到后面,因为它们是并行计算的。
在这里插入图片描述
然后利用AQA^QAQA^Q表示的就是文章中的单词对问题的重要程度,利用它将文章的语义信息加权融合得到CQC^QCQC^Q就是Q2C注意力,它的意义是文章中哪些单词对问题是重要的
在这里插入图片描述
CDC^D是将问题的语义信息融合到文章中,使得文章中每一个单词都关注了问题的语义信息。
在这里插入图片描述
因为CQC^Q的意义是文章中哪些单词对问题是重要的,它是在文章的编码空间中,它的形状和Q是一样的,但是我们的目的是要文章的语编码,所以
上图这一步的目的是将关注了文章的问题的语义编码再次融合到文章中,
在这里插入图片描述

接下来来讲输出层
在这里插入图片描述

输出层采用动态迭代的方式,多次迭代评估答案的预测位置,而不是仅仅计算一次。

输出层需要的张量如上图,UU就是信息交互层的输出。
它是文章的语义信息表示。
假如上一次计算得到了两个预测位置si1,ei1s_{i-1},e_{i-1},我们利用他们去UU中找到对应单词的语义向量,然后输入到一个RNN中,这个RNN保存的就是每次迭代的状态。
输入给RNN后,就会输出这一次迭代的状态,然后利用这一次的状态,上一次迭代的预测位置的单词的语义信息和文章的语义信息送入到一个叫HMN的网络计算输出这一次迭代下所预测的答案的起始位置在这里插入图片描述
就是sis_i,然后利用这一次迭代下预测的起始位置的单词语义信息和上一次预测的终止位置的单词语义信息以及文章的语义信息UU送入另一个HMN,预测输出这一次迭代答案的终止位置。在这里插入图片描述

然后进行下一次迭代:
在这里插入图片描述

HMN网络是highway networks+maxout。高速路网络其实很好理解,残差网络就是高速路网络的一个特例。
至于maxout网络,maxout网络可以看做是一个可学习的激活函数,不同于传统的激活函数sigmoid,tanh,relu等,maxout单元对于任意的凸函数都具有分段线性的描述能力。具体的就是:
普通的网络层是Wx+bWx+b
其中WRm×n,xRn×t,bRmW \in R^{m\times n},x\in R^{n\times t},b\in R^{m}
但是在maxout单元中WRk×m×n,bRk×mW\in R^{k\times m \times n},b\in R^{k\times m}
也就是说用K组参数(W,b)去和输入x做乘积,然后每组参数取最大值
即:
zj=Wjx+bjout=max(zj)j=1,2,k z_j=W_jx+b_j \\ out=\max(z_j) \quad j=1,2,\cdots k
所以说有k组参数就有k组分段线性函数。

之所以要用maxout网络是因为论文作者认为,阅读理解任务有多种不同的问题形式和文章主题,因此可能对网络来说需要不同的激活单元,也因此用了maxout,主要就是因为maxout的激活函数是自己学出来的。

到此介绍完了Dynamic Co-attention Network
接下来是

QANet

QANet与前面几个模型最大的不同之处就是采用的不再是RNN作为编码层。
在这里插入图片描述
它的结构是conv+self-attention,conv用来建模局部交互,self-attention用来全局交互
在这里插入图片描述
它的self-attention采用的就是transformer中的self-attention。
在这里插入图片描述
回顾seq2seq with attention结构,所谓attention,可以用三个矩阵描述attention的过程,attention的目的是想要对V加权求和得到一个向量,这个向量关注了V的语义信息,而权重是Q和K通过某种运算得到的。那么在seq2seq+attention中,Q就是decoder,K和V是encoder。
回顾self-attention的结构,按照上述说法,Q,K,V是一个张量。
在这里插入图片描述

那transformer就是seq2seq with self-attention。
我们重点关注transformer的encoder
在这里插入图片描述
而encoder中重点关注的是如何计算self-attention.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
transformer的计算方式非常简单,只需要矩阵内积
至于为什么要scaled
在这里插入图片描述
虽然值越大表示两个向量越近,越相关,但是softmax后这种相关性放大了很多,我们不想让那些值比较小的一点关注没有。
以下图片截取自李宏毅老师讲课的课件
在这里插入图片描述transformer中的self-attention就是如图所示的过程,
a1,,a4a^1,\cdots,a^4是上一层的输出,
对于这一层而言,把它们各自分别的通过三个矩阵每一个向量都会变为三个向量q,k,v,然后利用每一个q和所有的k乘积得到注意力分数,然后softmax得到注意力权重,利用注意力权重和所有的v加权求和得到b1b^1
在这里插入图片描述
这个b1b^1的含义就是指对于第一个单词,他关注了其余三个单词和他的相关性得到的一个新的向量表示。
在这里插入图片描述

对于其他三个同理,输入一个sequence输出一个sequence。
在这里插入图片描述

在这里插入图片描述
而多头的目的是因为实验证明不同的注意力头可以从不同的角度关注不同的语义信息。
在这里插入图片描述
回到QANet,可以看到与transformer的区别在于,self-attention之前加了一层conv,注意这个conv不是普通的conv
,也叫深度可分离卷积,目的是为了减少卷积的计算量
在这里插入图片描述

如图是正常的卷积计算,这个图也是截取别人的不是我自己做的。对于一个773的输入张量,卷积核的大小是333,个数是128个,那么一个卷积核的计算乘积次数显然是333*(55),333是卷积的体积,因为它是在所有通道上同时卷积的,所以每移动一步计算的次数就是自身的体积,步长是1的情况下,一个方向上的移动步数就是(7-3+1=5),那么总计移动25次,所以最后的计算总次数是12827*25。
所谓深度可分离卷积是指将卷及步骤分成两步:
第一个在通道上分离卷积:
在这里插入图片描述
如图,将三个通道分离开,然后用3个3*3*1的卷积核
分别独立的在三个通道上卷积
计算次数如图,不再赘述。
在这里插入图片描述
第二步也叫pointwise卷积,是指将deepwise的输出在通道这一维度上联合卷积,用128个1*1*3的卷积核,此时的步骤类似于传统的卷积,但是计算次数是128*3*25
3是指1*1*3,也就是卷积核的体积,而卷积核移动的次数是25次。
显然减少了计算量。
在这里插入图片描述
那么QANet的整个网络架构就是这样,值得一提的是输出层不是指针网络。而是全连接层。
在这里插入图片描述
上图就是在SQuAD第一个版本上各个模型的结果比较,QANet的data augmentation是指数据增强,因为QANet没有用RNN,所以计算速度快于其它的模型。它将整个SQuAD预料中的文章输入给一个翻译系统,先翻译成法语,然后再翻译回来,翻译回来时采用集束搜索
,就是beam search,x3指的就是束的个数是3,也就是每一个法语句子都会翻译出三个英语句子,这样就相当于把数据集一下子扩充了三倍,当然翻译回来之后答案的位置也变了,论文的做法是选取翻译回来的句子中与原始答案具有最大单词重叠数目的文本跨度作为新的标准答案。
在这里插入图片描述

18年发布了SQuAD发布了第二个版本,加了五万多个貌似有答案但是却没有答案的问题。
在这里插入图片描述

那么如何利用上述模型在这个数据集上呢,只需要在输出层多加一个全连接层,损失函数多加一个预测值为null的情况。此时有两个概率,一个是预测答案位置的概率,一个是答案为null的概率。
测试的时候选取两个概率中最大的最为预测输出。

热门文章

暂无图片
编程学习 ·

8080端口被占怎么办 ,解决方法

用后端springboot启动,8080端口 报错 8080 in use 打开 控制台 win+R 输入 cmd 进入后输入netstat -ano 肉眼能找到找就完事了如果找不到 输入netstat -aon|findstr “8080”找到最后一列的那个数字 “26252”, 就是PID 码 然后打开系统的 任务管理器 ,你要是任务管理器都不…
暂无图片
编程学习 ·

动态规划(二)

大佬的第二个视频代码 视频链接 题目一: 题目描述: 在一个数组中(只包含正整数)找出一组不相邻的数,使得其和最大 解题思路: 关键思想: 每个数有选和不选两种选择。按前i个数的最优解来说,如果选这个数,则这个数的前一个数就不能选,因此此时的最优解就是前i-2个数的最…
暂无图片
编程学习 ·

Android视频的操作

上节课我们着重介绍了Android中的音频的处理,通过学习,我们已经熟悉并掌握了多媒体开发的几个操作,大致可以分为:a播放和采集编解码处理算法处理,实现特殊功能标准协议以及播放器工具类的开发 本节课我们来看一下Android的视频的相关操作。Android提供了常见的视频的编码、…
暂无图片
编程学习 ·

git命令大全

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git官方网站:https://git-scm.com/ 原理图Workspace:工作区 Index / Stage:暂存区 Repository:仓库…
暂无图片
中恒嘉业 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
cgfy ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息,消息是不定长,首先所有信息先放入 Commitlog中,每一条消息放入Commitlog的时候都需要上锁,确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…
暂无图片
coreui ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
未来博客 ·

Heap Sort 讲解

Heap Sort sorts a group of unordered elements using the Heap data structure. The sorting algorithm using a Min Heap is as follows: Heapify all elements into a Min HeapRecord and delete the top elementPut to top element into an array T that stores all so
暂无图片
建站日记 ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快?它有哪些限制? 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库,像vue内置了动画处理、keep-alive等功能,react则需要去找第三方库…
暂无图片
mfbz ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法! 拓扑排序的过程中,由于需要查找所有以某顶点为尾的弧,即找到该顶点的所有出边,故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同,由于要查找入度为0的点…
暂无图片
mfbz ·

[react] 你觉得react上手快不快?它有哪些限制?

[react] 你觉得react上手快不快?它有哪些限制? 相对vue来说不快。 限制 需要学习JSX需要工程化的配置需要对原生JavaScript有相当的掌握react只是一个UI层面的库,像vue内置了动画处理、keep-alive等功能,react则需要去找第三方库…
暂无图片
珊珊日记 ·

AOV网是否存在回路-拓扑排序-C++

拓扑排序是对测试AOV网是否存在回路的方法! 拓扑排序的过程中,由于需要查找所有以某顶点为尾的弧,即找到该顶点的所有出边,故图要采用邻接表的存储方式。但拓扑排序较邻接表的存储方式有一点不同,由于要查找入度为0的点…
暂无图片
珊珊日记 ·

8. 源码分析之ConsumeQueue

源码分析之ConsumeQueue 消息发送时数据在ConsumeQueue的落地 ​ 连续发送5条消息,消息是不定长,首先所有信息先放入 Commitlog中,每一条消息放入Commitlog的时候都需要上锁,确保顺序的写入。 ​ 当Commitlog写成功了之后。数据…