引言

本文介绍 了BERT之前的常见机器阅读理解模型,包含机器阅读理解开篇之作的论文解读。

Glove词向量

Glove​1​解决word2vec只依赖局部信息的问题,基于全局信息构建词向量。

GloVe(Global Vectors)模型认为语料库中单词出现的统计(共现矩阵)是学习词向量表示的无监督学习算法的重要资料。
问题在于如何基于这些统计生成单词向量表示。
GloVe模型给出了一个答案,它利用了全局(整个)语料库的统计信息。

共现矩阵的例子:
不管语料库有多少篇文档,矩阵的表示考虑的是整个语料库的信息。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重

为了得到词向量表示,首先定义一些标记符号。记【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_02为单词-单词的词频共现矩阵。

其中的元素【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_03表示单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_04 出现在单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05上下文(context)的次数;
并且令【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_06为任意单词出现在单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05上下文的次数之和;

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_08为单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_04出现在单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05上下文的概率。

通过一个简单的例子来展示是如何从共现概率抽取出某种语义的。考虑两个单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_04之间的某种特殊兴趣。具体地,假设我们对热力学感兴趣,然后我们令【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_13(冰)和【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_14(蒸汽)。这两个单词之间的关系能通过研究它们基于不同单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_15得到的共现矩阵概率之比。对于与ice有关但与steam无关的单词,比如说【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_16(固体),我们期望比值【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_17会很大;类似地,对于与steam有关但与ice无关的单词,比如【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_18(气体),该比值应该很小; 而对于那些与两者都相关或都不相关的单词,比如water(水)或fashion(时尚),比值应该接近于【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_19

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_20

上表显示了在大语料库中的这些概率值,以及它们的比值,这些比值肯定了我们的期望。与原始概率相比,比值更能区分相关的单词(比如solid与gas)和不相关的单词(water与fashion),并且也能更好地区分这两个相关的单词。

上面的论述说明词向量学习的好的开端是从共现矩阵概率的比值开始,而不是从共现矩阵概率本身。接下来我们来设计模型,注意,下面很长一部分都是模型的设计阶段,没有严格的论证。

注意到比值【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_17依赖于三个单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_22【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_15,那么最常见的模型应该是如下形式:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_24
其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_25是词向量,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_26是区分上下文词向量。然后【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27可能依赖于现在还未指定的参数。

可能的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27还是很广,但只要加入一些想法进去我们就能得到唯一的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27

首先,我们希望【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27能编码信息在词向量空间中表示比值【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_17。因为向量空间是天然的线性结构,进行向量差计算是很自然的。基于此,我们可以限制函数【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27只依赖于两个目标词的向量差,将【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_33式改写为
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_34
现在,我们注意到上式中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27的参数是向量,而等式右边是标量。那么【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27可以由一个复杂的函数,比如,神经网络表示,这样做会我们想要捕获的线性结构冲突。为了避免这个问题,我们让左边也变成标量,可以尝试取这些参数的点积。
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_37
这样可以防止【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27

接下来,注意到单词-单词的共现矩阵是对称的,即改变单词和上下文词位置得到的值是一样的。我们的最终模型应该在这转换下保持不变。要满足这种对称性,需要做以下几步。

第一步,把减法的函数变成函数的除法。
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_39
联立(3)式,可得
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_40

要想让【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_41式成立,可以让【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_27为指数函数,然后取【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_43
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_44
下面,我们注意到等式【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_45【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_46【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_47 ,就会满足对称的可交换性。然而,该项是与【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_15独立的,所以它可以吸收到【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_49的偏差【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_50中。最终,增加【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_51的偏差【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_52以保证可交换性。得到下面的等式:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_53
此时如果把【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_15对调,那么上式也成立。等式【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_56是等式【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_33的极大简化,但它实际上是有问题的,因为当它的参数为零时,对数就没发散了(【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_58)。一种解决方案类似拉普拉斯平滑,即增加一个小偏移,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_59,这样既维持了【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_02的稀疏性,又避免对数发散。

这样我们用词向量和偏差项表达了两个词共现的词频的对数。但是该模型的一个缺点是,它将所有的共现概率看成平等的,即使那些很少共现的情况。这些稀有的共现情形可能是噪音或者携带的信息不多。

同时我们希望等式【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_56两边越接近越好,因此我们利用均方误差(最小二乘法)计算损失,并引入了权重函数【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_62
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_63

其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_64是词典大小,权重函数应该满足下面条件:

  1. 【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_65,也就是说如果两个词如果没有共同出现过,权重就是0。
  2. 【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_66应该是非递减函数,所以经常出现的单词权重要大于很少一起出现的单词。
  3. 【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_66对于较大的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_68不能取太大的值,所以一些经常出现的词权重不会太大,比如一些停止词。

满足以上条件的函数很多,作者采用了下面的分段函数:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_69
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_70【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_71时,函数图像如下:

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_72

模型的表现有一点点依赖于【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_73的取值,在作者的实验中都取【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_74。作者发现【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_70【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_71要优于取【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_19时的线性函数。

该模型生成两组词向量,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_78【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_79。当【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_02是对称的时候,这两组词向量是等价的,唯一不同的是它们随机初始化的结果;另一方面,有证据表明,对于某些类型的神经网络,训练神经网络的多个实例,然后组合训练结果能有助于减少过拟合和噪声,通常也会改善结果。因此,作者采用【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_81之和作为词向量。

TextCNN

使用CNN来做句子级分类任务。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_82

作者提出了一种将简单的CNN应用在无监督方法(word2vec或Glove)得到的词向量上,来完成句子分类任务。

主要思想提现在上图。下面通过符号来描述一下。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_83表示句子中第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05个单词对应的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_15维向量,假设句子最大长度为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_86(短的则填充),表示为:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_87
其中$\oplus 【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_88x_{i:i+j}【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_89x_i,x_{i+1},\cdots, x_{i+j}$的拼接。

卷积操作用到的过滤器【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_90,应用到【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_91个单词的窗口上来产生一个新的特征。比如,特征【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_92由单词序列【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_93的窗口产生:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_94
这里【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_95是偏置项,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_96是非线性函数,得到的特征【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_92是一个实数。

重复应用该过滤器到句子中可能的单词窗口【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_98上得到特征向量(feature map):
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_99
其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_100,接着在特征向量上应用一个max-over time池化操作得到向量中值最大的元素【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_101作为该过滤器得到的特征,这为了得到最重要的特征。

这样一个过滤器得到了一个特征,通过应用多个过滤器(窗口大小不同)并进行池化后就得到了多个特征。

这些特征构成了模型的倒数第二层,然后传递到一个包含Softmax的全连接层就得到了最终的输出。

Attention机制

注意力(Attention)机制来源于人类的视觉注意力机制,即根据需要关注重要部分。赋予模型对于重要性区分+辨别能力,本质是一系列的权重分配。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_102

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_103

NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE​2​为Seq2Seq引入了注意力机制。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_104

注意力本质上是加权的和,给适当的单词赋予加大的权重。比如在上面的翻译例子中,翻译出单词“learning”的时候要给字“学”和“习”较大的权重,赋予更多的注意力在这两个字上。

常见的Attention类型:

  • Global Attention:所有的隐藏状态都被用于计算上下文向量的权重。
  • 【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_105

  • Local Attention: 预测source端对齐的位置pt,然后基于pt选择一个窗口,用于计算向量ct。
  • 【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_106

  • Self-Attention
  • 【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_107

相似度计算方法

在做Attention的时候,我们需要计算查询【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_108和某个【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_15的相似度(分数),常用方法有:

  • 一般形式【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_110(适用于【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_111【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_112的维度不匹配,加上一个【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_113来匹配维度)
  • 点乘【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_114(适用于【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_115维度匹配)
  • 余弦相似度【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_116
  • 串联方式:把【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_111【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_112拼接起来【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_119
  • 单层感知机【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_120

Attentive Reader & Impatient Reader

Teaching Machines to Read and Comprehend​3​是阅读理解一维匹配模型和二维匹配模型的开山鼻祖。

发布了CNN&Daily Mail数据集。

Attentive Reader

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_121

基于双向LSTM模型来编码文档(document)和查询(query)。

分别标记LSTM的正向和反向输出为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_122【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_123

长度为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_124查询的编码【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_125由最终的前向和反向输出拼接而成,即【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_126,其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_127是拼接操作。

文档由每个时刻【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_128内的双向输出拼接而成,其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_129,文档的表示【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_130是由这些输出进行加权和而得。权重可以看成是回答查询【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_131时关于文档中每个单词的注意力,首先计算问题表示【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_125和文档表示中每个单词的相似度,相似度越多表示赋予的注意力越多:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_133
接着进行归一化,注意还有一个计算相似度的权重移动到了【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_134函数里面。

上式就是我们上节中介绍的相似度计算方法里面的最后一种。

得到注意力得分,我们把所有时刻的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_135放到一起,组成了矩阵【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_136。然后文档编码【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_130就是所有时刻的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_135的加权和:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_139
模型的输出同时联合了【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_130【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_125
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_142
该输出可用于计算答案的单词概率分布。

Attentive Reader可以看成是内存网络做问答任务的一般应用,属于一维匹配模型:问题编码成固定长度的向量,计算文档【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_143每个词在特定问题上下文向量中作为答案的概率

Impatient Reader

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_144

Impatient Reader不是拿【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_125和文档中每个单词去计算权重,而是直接拿查询中的每个单词去计算文档中每个单词的权重。对于查询中每个单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05,模型都会使用查询单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05的双向嵌入向量拼接的结果,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_148,去计算一个文档表示向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_149,同时在计算相似度和【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_149时都依赖【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_151

首先初始化【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_152【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_149的计算为:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_154
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_155是查询中的单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05对文档中每个单词的注意力(权重),计算为:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_157
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_158计算为:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_159
可以看到计算【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_158时也融入了【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_151的信息。

最后的输出是用最后一个【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_162【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_125综合得到的结果:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_164

Impatient Reader属于二维匹配模型:问题【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_165每个词编码,计算问题【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_165中每个词对【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_143中每个词的注意力,形成词-词的二维匹配结构,模型效果要稍微优于一维匹配模型。

Bi-DAF

BiDAF​4​是阅读理解的开山之作。

作者提出了双向注意力流网络(Bi-Directional Attention Flow,BiDAF),是一种层级架构的多粒度文本表示建模方法,可以表示不同粒度级别的上下文,使用双向注意流机制获取查询感知(query-aware)的上下文表示,而不是压缩上下文到定长向量。

核心思想

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_168

BiDAF包含字符级、单词级和上下文嵌入,并使用双向注意力流获取查询感知的上下文表示。

  • 这里的注意力层没有将上下文压缩到定长向量,而是在每个时间步上计算注意力,并允许每层的向量表示能传递到后续层,减少了信息损失。
  • 采用无记忆的注意力机制,在当前时间步的注意力并不依赖之前(时间步)的注意力的值。这可以强制注意力层专注于在查询和上下文间学习注意力,并使建模层专注于学习查询感知的上下文表示内的交互(注意层的输出)。
  • 采用的注意力是双向的,既有从上下文(文章)到查询(问题)的注意力,又有从查询到上下文的注意力。

作者提出的模型是一种多阶段的层级架构,由六层组成(如上图所示)。我们来详细看下每层。

字符级嵌入层(Character Embedding Layer)

使用字符级CNN映射每个单词到高维向量空间。主要用于解决未登陆词问题,和BERT时代的BBPE有异曲同工之妙。

假设【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_169【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_170分别代表输入的上下文和查询中的单词。使用CNN网络获取每个单词的字符级嵌入向量。

把上下文和查询中的每个单词输入到1D-CNN后,我们会分别得到下上文和查询的嵌入矩阵,这些矩阵的长度与上下文或查询的长度相同,矩阵的高度依赖于1D-CNN中应用的卷积核数量。

本小节图片来自于https://nlp.seas.harvard.edu/slides/aaai16.pdf

为了更好的理解字符级CNN,我们一起看一个例子。

假设我们想要在单词“absurdity”(荒谬)上应用1D-CNN。首先单词中的每个字符表示为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_171维的向量,这些向量可以是随机初始化的。单词中的所有字符会形成一个【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_172的矩阵【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_173【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_174是单词中字符数量。

假设我们这里的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_175,我们刚开始得到如下矩阵。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_176

然后,我们应用一个卷积核【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_177来扫描单词,卷积核的高度与【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_173相同,它的宽度通常小于【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_174,并且不同的卷积核是不同的。卷积核中的值也是随机初始化,并且可学习的。这里假设该卷积核的宽度为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_180

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_181

把卷积核【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_177覆盖到矩阵【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_173的最左边,应用卷积运算得到一个标量。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_184

如上图所示,我们框住了该矩阵中前三个字符,经过卷积运算得到标量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_185,作为输出的新向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_96的第一个元素值。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_187

把卷积核向右移动一步,得到第二个标量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_188,作为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_96向量的第二个元素。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_190

重复该步骤,直到卷积核移动到了最右端,这样就得到完整的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_96向量,它的长度是【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_192。该向量时我们通过这个卷积核得到的单词数值表示。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_193

接着,再应用一个最大池化操作到【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_96上,最大池化可以看成是取最重要的信息。我们这里最大池化后的输出为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_188

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_196

假设我们再应用另一个宽度【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_197的卷积核【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_198,又可以得到另一个向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_199

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_200

虽然【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_199的长度和【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_96不同,但是经过最大池化后还是得到一个标量。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_203

我们可以使用不同宽度的卷积核重复这种扫描操作,每个卷积核可以得到一个标量。把这些标量拼在一起就可以看成是该单词的嵌入向量。

这里获得了一个单词的嵌入向量,把整个上下文或问题的单词都操作一遍,就可以得到它们的嵌入矩阵。嵌入矩阵的高度和卷积核的数量相同,宽度等同于上下文或问题中的单词数量。

至此,字符级嵌入层分析完毕,我们来看单词级嵌入层。

单词级嵌入层(Word Embedding Layer)

使用预训练的词嵌入模型映射单词到高维向量空间。作者使用的预训练词嵌入模型是GloVe。

得到了GloVe输出的定长词嵌入向量之后。燃料后将上面得到的字符级嵌入和这里的单词级嵌入进行垂直拼接(叠加),输入到一个两层的高速网络(Highway network)​5​​,该网络的输出是两个矩阵,分别是对应上下文的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_204和对应问题的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_205

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_206

整个过程如上图所示,我们来看下高速网络。

其实思想很简单,启发于LSTM中,使用门阀函数来选择性的传递信号到下一层。
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_207
通常【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_177是普通前馈神经网络中的仿射变换(affine transform),然后输入到非线性激活函数中。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_209是输入,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_210是权重。

仿射变换:线性变换+平移

如果此时将该值输入到非线性激活函数然后继续传递到下一层,就是普通的前馈网络。

而高速网络引入了一个门【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_211,与LSTM中的门一样,经过Sigmoid函数将输出压缩到【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_212之间。

引入了【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_213之后,上式【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_214的计算方式变成了:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_215
使用高速网络,可以让模型学习到在遇到未登录词的时候,抑制GloVe的输出,而增强CNN的输出。

上下文嵌入层(Contexual Embedding Layer)

使用来自周围单词的上下文来改善单词的嵌入。前三层同时应用于查询和上下文。

使用LSTM在第二层提供的词嵌入之上来模拟单词之间的时间交互。这里使用了双向LSTM,同时拼接了两个方向上的输出。因此,我们基于下文词向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_02上得到【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_217,基于问题词向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_165得到了【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_219

这里的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_220是拼接两个方向上的输出得来的。

值得一提的是,模型的前三层是基于查询和上下文从不同层级、不同粒度计算特征表示,类似于计算机视觉领域中卷积网络多阶段特征计算。

注意力流层(Attention Flow Layer)

融合查询和上下文向量,并为上下文中的每个单词生成一组查询感知特征向量。

注意力流层负责连接并融合上下文和查询中单词的信息,注意力流层并没有将查询和上下文编码到单个特征向量中,而是在每个时间步,和来自前一层的嵌入向量,都可以流向后续的建模层。这减少了由于过早压缩导致的信息丢失。

该层的输入是下上文【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_177和查询【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_222的向量表示。该层的输出是上下文单词【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_223的查询感知的向量表示,以及来自前一层的嵌入向量。

在本层中,我们以两个方向计算注意力:从上下文到查询以及从查询到上下文。这些注意力都是由上下文嵌入向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_177和查询嵌入向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_222计算的共享相似矩阵【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_226计算而来的。其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_227表示第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_128个上下文单词和第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_04个查询单词之间的相似度。相似度矩阵计算公式为:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_230
其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_70是可学习的基于两个输入向量的编码函数;【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_232【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_177的第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_128列向量;【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_235【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_222的第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_04列向量。

作者选择的函数【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_238,其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_239是可训练的权重向量,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_240是元素相乘;【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_241是沿着行的向量拼接。这里【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_242【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_243【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_244,与【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_245相乘刚好得到一个标量。

我们就可以使用【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_246来计算两个方向上的注意力。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_247

上下文到查询注意力(Context-to-query Attention, C2Q) C2Q注意力代表对于每个上下文单词,哪个查询单词与之最相关。令【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_248表示第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_128个上下文单词上所有查询单词的注意力权重,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_250。注意力权重计算为:【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_251,接着用【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_252【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_222计算加权和,得到注意的查询向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_254。因此【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_255是一个【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_256的矩阵,包含整个上下文的注意的查询向量,我们相当于把查询信息融入到上下文当中了。

【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_257

查询到上下文注意力(Query-to-context Attention,Q2C) Q2C注意力代表哪个上下文单词与某个查询单词最相关,然后对回答查询(问题)最重要。我们基于上下文单词获得注意力权重为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_258,其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_259是沿着【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_246矩阵列的方向计算最大值。然后注意的上下文向量是【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_261。该向量表示上下文中与查询相关的最重要单词的加权和。【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_262沿着列复制【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_213次,得到【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_264

最终,上下文嵌入向量和注意力权重结合生成【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_223,其中每列向量可以看成每个上下文单词查询感知的表示。我们定义【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_223为:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_267
其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_268是第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_128列向量(对应第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_128个上下文单词),【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_271是可学习的向量函数,融合了它的三个输入向量,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_272【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_271函数的输出维度。尽管【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_271函数可以用任意的神经网络,比如多层感知机,但如下这种简单的拼接仍然可得到好的表现:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_275
这里【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_276

建模层(Modeling Layer)

应用一个RNN来提取上下文中的信息。

输入到建模层的是【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_223,它编码了上下文单词查询感知的表示。该层的输出捕获了基于查询的上下文单词之间的交互。这与上下文嵌入层不同,上下文嵌入层捕获的是独立于查询的上下文单词之间的交互。这里使用了两层双向LSTM,每个方向上的输出大小为【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_171。因此我们得到了一个矩阵【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_279,它会传递到输出层去预测答案。

M的每个列向量包含关于关于整个上下文和查询信息的上下文信息表示。

输出层(Output Layer)

生成基于查询的答案。

输出层是应用相关的。BiDAF 的模块化特性允许我们轻松地基于任务改变输出层,而保存其他层不变。这和现在的BERT有点像了。

这里我们以问答任务为例来描述输出层,问答任务需要模型从文章中找到一个连续的片段来回答问题,通过预测答案的开始和结束位置来从文章中抽取答案。我们通过一下公式在整个文章上计算开始位置的概率分布:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_280
其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_281是可训练的权重向量。对于答案的结束位置,我们将【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_282传递到另一个双向LSTM以得到【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_283。然后以类似的方式用【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_284来获得结束位置的概率分布:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_285
训练 定义训练损失为预测分布对应的真实开始和结束位置的负对数似然的之和,并求所有样本上的均值:
【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_286
其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_287是模型的可训练权重参数集合,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_288是数据集的样本总数,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_289【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_290是第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_05个样本的真实开始和结束位置,【Day 2】机器阅读理解——常见机器阅读理解模型(上)_深度学习_292表示向量【Day 2】机器阅读理解——常见机器阅读理解模型(上)_自然语言处理_293的第【Day 2】机器阅读理解——常见机器阅读理解模型(上)_权重_15个值。

测试 答案片段【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_295,其中【Day 2】机器阅读理解——常见机器阅读理解模型(上)_2d_296,是最大的【Day 2】机器阅读理解——常见机器阅读理解模型(上)_机器阅读理解_297,可以用动态规划以线性时间计算出来。

Reference


  1. ​GloVe: Global Vectors for Word Representation​​​ ​​↩︎​
  2. ​NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE​​​ ​​↩︎​
  3. ​Teaching Machines to Read and Comprehend​​​ ​​↩︎​
  4. ​BI-DIRECTIONAL ATTENTION FLOW FOR MACHINE COMPREHENSION​​​ ​​↩︎​
  5. ​Highway Networks​​​ ​​↩︎​