本文章主要是利用的是斯坦福的SQuAD的问答数据进行的实验,曾经获取高分,本次阐释论文两个核心思想,并且编写代码在第二数据集的结果进行尝试。
首先通过以下论文概述:
图(1)
从上图可以看出,论文共有两部分构成,第一部分是caottention encoder ,主要是负责利用文档以及问题对文档进行语义理解表示;第二部分是dynamic pointer decoder 主要是进行迭代方式不断对对答案进行位置确定更新。两部分共同确定了答案的位置;
接下来就两个部分分别解释:
一、document与question的encoder以及attention方法
1.文档与问题encoder
首先问题表示:
表示有n个单词组成的question,(默认此时已经用词向量映射)
表示为m个单词组成的document
首先我们对文档用lstm层进行encoder得到:
这个很常规,不再解释,由此公式,最终得到document为:,其中表示哨兵,同理问题也做同样的处理,作者说为了使得问题与文档之间的encoding空间能够进行变换,对问题的最后表示又增加了一个操作:
这是通过lstm层获得,并且与文档的lstm层是共享的,那么再加一层映射层如下公式:
就是映射之后的question表示。其维度没有发生变化,所以的参数维度应该是
2。作者讲解了一个coattention机制
首先计算了一个affinity矩阵,包含了document与question所有两两对的单词之间的affinity分数,用如下公式 表示:
(1)
由(1)获取到的D和Q矩阵想乘求得,affinity矩阵逐行进行正则化产生文档document对于问题的每一个单词的权重,以及按照逐列进行归一化,针对每一个文章的单词进行归一化。
具体如下 and
计算出来对应文档对于问题的权重以及问题对应文档的权重,然后就可以获得综合attention,计算document的上下文对于问题的每一个单词的linght如下:
(2)
由此可以知道试说明文档document每一个单词认为问题每一个单词的重要程度,所以感觉作者是否有错误,应该是逐列进行归一化,这样才有道理,应为矩阵想乘的维度是m+1,所以应该是这个维度进行归一化,最后得到的是经过document过滤的。
同样的道理我们可以得到:
document=也是经过问题attention之后的文档表示,可以暂时这样理解;另外也利用document之后的与得到过滤之后的,那么得到文档的attention之后的表示如下:
(3)
公式(3)很明显,就是两种过滤文档重要性represention进行concat,连接 ,至此对于文档document的文档过滤重要表示完成 ,文章又做了最后一步就是重新进入双向lstm进行 encoder,所说的就是信息融合,表示公式如下:
(4)
作者 把之前encoder的D与经过attention之后的C 形成最终的信息融合在一起。来表示document为选择正确答案做出了一个基础定义为:
以上整个过程如图所示,不过建议看公式要比图片简单的多:
图(2)
以上是作者的第一大部分,对文档做综合表示,以下部分就是如何根据representation来选择正确的答案
二、dynamic pointing decoder(动态位置解码)
之所以称为动态原因是由于,对于位置的确定时代用iterate,迭代模式进行更新,由于对于一个问题question和document对可能在文档多个可能答案的位置,这个迭代的方式可以允许模型从局部最优解答案也就是错误的答案中跳转出来,这个迭代方式的预测是仿照lstm的state状态完成的,每一次迭代加入前一时刻的状态以及start和end位置通过lstm进行预测新的start和end位置用公式表示如下:
(5)
其中和分别表示前一时刻状态的start和结束end位置对应的U的encoder,如果看图你或许会迷惑他是怎么进行更新
和的,仔细阅读文章以及仔细看图一部分一部分的看,其实作者介绍的非常详细,如图所示和作为输入HMN得到新的预测答案开始位置,有第二个红色HMN,输入、、得到由此得到了第二次迭代的、新的h状态由公式(5)可以明显知道。接下来我们作者的描述过程。
图(3)
作者的描述是由上到下的过程描述,也就是由抽象函数到具体实现解释的,由概括到具体,
2.1 新的开始结束位置更新公式如下:
(6)
(7)
分别表示在文档document中第t个单词为开始结束的score,我们用以下network进行计算这些分数,network结构相同但是不同模型不同,至于计算,作者讲解的也非常详细,所以说这个作者是非常希望说明问题的关键点,所以感谢作者的思想,采用的network方法被作者称为Hightway Maxout Network(HMN)计算公式(8)
(8)
由此结合上图已经非常清楚了共需要四个输入表示当前单词的U的encoder,可以理解为用LSTM存储整个模型的迭代状态,为前一时刻预测的答案开始位置的U的encoder,同理为前一时刻答案预测的结束位置的U的encoder。那么HMN是什么样的模型如下图:
、、经过MLP得到前一次以及前几次迭代的融合信息r,分别于U每一个encoder进行信息融合经过三层MAXOUT得到最终文档每一个位置的分数
图(4)
结合图(4)我们先把公式罗列出来然后作解释:
(9)
(10)
(11)
(12)
r为当前lstm的输出状态和前一时刻预测位置的encoder的信息融合以及映射,很容易理解,那么r的维度为,由第一部分知道的维度分别是(忘了的,可以往上边看一下),的维度是,所以总concat维度为,那么的维度是;公式(11),其中同样的维度为,其中的维度为,则在max之前的输出维度为,MAX操作类似于pooling的操作,对于p个数值求其最大值,这里猜想是否可以用卷积网络替代,所以的输出维度为,同理的维度依然是。
在训练的时候,使用了迭代的累积 croos entroy损失。
至此所有的过程已经解释完了,有什么不明白的,可以一起探讨;
接下来是实验部分我们主要关注的是作者的模型参数设置
首先利用了Starford CoreNLP来分词,用了Glove与训练词向量。作者发现一致词向量的训练会导致过拟合,hence only report fixed word embedding .
最大预料长度为600,神经元的个数为200对于所有的网络结构,设置搜索答案的次数为4,max——pooling size为16,用到了dropout操作。
至此已经把整个文章1全部解释完毕,之所以翻译这篇文章是由于google的q-net貌似attention利用这篇论文,并且这篇论文讲解的诶长详细,另外一个目的想着基于别人实现的qa-net来实现这篇论文,看在第二数据集效果,接下来的工作就是代码实现,请关注我的账号,
对应的r-net在斯坦福第二个数据集的代码在https://github.com/chenmingwei00/SQuAD ,目前已经可以运行并且我是把没有答案的问题,把其中的y1,y2对应的答案开始和结束位置的标记记为-1.