机器阅读理解之推理网路(一)End-To-End Memory Networks全文翻译
作者:Sainbayar Sukhbaatar,Arthur Szlam,Jason Weston,Rob Fergus
原文链接:[1503.08895v4] End-To-End Memory Networks
译者总结:本文其实是机器阅读推理模型的一种,属于比较早期,比较经典的论文,在此之后,衍生出了本模型的很多变体,我将在后续进行翻译。
本文作者将memory network的思想应用到了本模型,即引入外部知识进入memory,与问题进行交互,得到答案后不断重复此过程,即经历多次计算步骤,多次推理后,得到预测的答案a^后,计算与真实答案a的交叉熵,通过缩小这个损失来进行梯度下降,实现端到端的训练。
如下图:
首先根据原始问题的Word Embedding表达方式以及文档的原始表达,通过f函数计算文档单词的Attention概率,然后g函数利用文章原始表达和Attention信息,计算文档新的表达方式,这里一般g函数是加权求和函数。而t函数则根据文档新的表达方式以及原始问题表达方式,推理出问题和文档最终的新表达方式,这里t函数实际上就是通过两者Word Embedding的逐位相加实现的。t函数的输出更新下一层网路问题的表达方式。这样就通过隐式地内部更新文档和显示地更新问题的表达方式实现了一次推理过程,后续每层网路推理过程就是反复重复这个过程,通过多层网路,就实现了不断通过推理更改文档和问题的表达方式。
这个作者比较啰嗦,喜欢把一句话来回说几遍,他论文中除了上面那个阅读推理机的演算法外,还有的小细节我直接可以做总结:
1、这模型比memory network好,直接端到端,直接训练,不用人力。
2、使用多计算步骤的方式对于长期依赖的阅读理解推理问题有奇效。
3、为了减少参数数量,可以将一些训练矩阵共享。
4、训练时候先把softmax拿掉,收敛再加上去有奇效
5、为了考虑语言的词序问题,PE方法比Bow更好。
基本就是这么多,下面是正文,有我写错或者看不明白的,大家可以回复我哦,每问必答。我基本没有哪天不看知乎。
正文:
End-To-End Memory Networks
摘要:本文提出了一种可以引入外部知识的循环attention神经网路模型。本文的架构是Memory Network的一种,但是是端到端的训练方式,意味著可以减少人力,在实际应用中更实用。本文同时可以被看做是RNNsearch的一种扩展,在每次输出结果前都要进行多轮的计算步骤。这个模型的灵活性允许我们将这其应用于问答系统和语言模型。这个模型对于Memory Network来说,需要更少的监督,而对于一些应用来说,模型展现了对于rnn良好的兼容性。本文的关键概念在于使用多计算步骤来提升阅读推理性能。
1、介绍
机器阅读理解两大挑战在于:
(1)如何构建可以有多此计算步骤的模型
(2)如何构建具有长期依赖的模型,使机器不至于忘记很久远的文本
本文的rnn架构可以在得到输出结果前引入外部知识,并且是Memory network的一种多次实现重复实现来达到多个计算步骤的方式。Memory nerword并不易于进行反向传播,需要在每一层进行监督学习,而本文模型可以简单实现端到端训练,所以他可以直接应用于各种任务。同时这模型也可以视为RNNsearch的一种变体。我们将在后文用实验证明长期依赖下的机器推理任务的多次计算步骤对于提高任务性能相当关键。
2、方法
模型的单个数据集由文本{x1,x2...,xn},一个query作为q,还有answer a作为输入文
本将由词向量编码后写入memory中,文本中的每个x1(字元级别或词级别或句级别的嵌入)经过编码后将与q进行attention匹配,最后得到文本和问题的统一表示,这个向量接著会经历多次计算步骤来输出预测a。
2.1 单层模型
Input memory representation:文本{xi}被编码成{mi},使用矩阵A(d*v)。query也被编码成一个内部状态u,使用和A同样size的矩阵B。在嵌入的空间中,我们计算u和mi之间的交互关系通过计算他们的内积以及一个softmax。
p是输出这个向量的可能性。
Output memory representation: 每一个xi都会通过另一个矩阵C得到一个对应的输出向量ci。这个向量将和之前计算得到的pi依次相乘求和得到向量o(其实就是文本向量)。
Generating the final prediction: 在这个单层样例中,输出向量之和o与query编码后的向量u将通过一个矩阵W(v*d)和一个softmax去得到预测标签:
单层模型的架构图如下图a所示。在训练过程中,所有的可训练矩阵(A,B,C,W)将联合学习去最小化预测的标签a与真实a之间的交叉熵。训练使用stochastic gradient descent方式。
2.2
Multiple Layers
现在我们扩展我们的模型到多步骤操作,记忆层按如下方式堆积:
(1)第二层的输入是上一层k层的ok 和uk 的和(有很多种其他结合方法我们将在之后提及):
(2)每一层都有自己的AK,CK。但是,为了减少参数的数量简化训练过程,他们彼此间会建立一些约束关系。
(3)在网路的最顶层,计算标签a概率时,W要结合顶层的输入和输出
我们探索了可训练矩阵约束的两种方式:
(1)Adjacent: 输出嵌入矩阵和上一层的输入嵌入矩阵相同,比如Ak+1 =Ck。我们同时约束问题预测矩阵去和最后的输出矩阵相同,比如WT=CK,或者问题嵌入矩阵去和第一层的输入嵌入矩阵相同,比如B = A1。
(2)Layer-Wise(RNN-like):每一层的输出输入嵌入矩阵相同,比如A1 = A2 =... = AK以及C1 =C2 = ... =CK。我们同时发现增加一些线性映射去更新在不同层之间的u相当有用,类似于,uk+1 = Huk + ok。这种映射将自动调整u和o之间的权重。
一个三层的模型版本已经在上图的b图中展示。
3、相关工作
4、Synthetic Question and Answering Experiments
我们在synthetic任务上进行实验。这是一个包含一系列statement,以及一个问题,一个答案的数据集,答案一般是一个单词(有些是多个单词)一共有20多种不同形式的推理问题,下面是一些样例:
对于每一个问题来说,只有一个statement的一小部分子集能提供答案的信息,其他基本可忽略。在Memory Networks中,这个子集将直接提供给模型,而这个任务并不是。因此,这个模型必须学会去推断哪些句子与问题相关。
正式来说,对于这20个我们提供样例问题的QA任务来说,每一个都有一个大小为I的句子集合(xi),I<=320;一个问题句子q和一个答案a。让第i个句子的第j个单词变成xij,表示成一个长度为v的one-hot向量。对于q和a中的词我们也做同样的处理。我们有两个版本的数据,一个其中每个任务都有1000个训练问题,另一个更大每个都有10000个问题。
4.1 模型细节
我们的模型基本都采用k=3的计算步骤,并使用adjacent权重分享方案。对于answer是多个单词的数据,我们考虑了每一种可能的结果,并且记录他们为单独的答案辞汇。
Sentence Representation: 我们考虑了两种句子表示方法,一是bow,但这种方法对于语序这个信息没有考虑,丢失了太多信息。二是PE方法,考虑了句子词中的相互影响。(译者注:因为本文是15年的,这种方法可能比较早,对于此段译者进行了精简)
Temporal Encoding: 许多问题需要考虑句子上下文的影响,比如刚刚给的第一个样例,模型需要理解sam现在处在卧室在他在厨房之后。为了解决这问题我们修改了模型向量,变成
TA(i)是TA的第i行,用来编码暂时的信息,输出嵌入矩阵也同理变成:
TA和TC都是可训练矩阵。
Learning time invariance by injecting random noise: 为了正则化TA,我们发现添加一些假的记忆非常有效。在训练时候我们可以往memory中添加10%的空记忆,即杂讯。我们称呼这方法为随机杂讯(RN)。
4.2 训练细节
10%的数据被分作验证集,来找到模型的最佳拟合点。学习率是0.01,每25个epoch学习率自动减半,直到到100个epoch。在梯度下降中,没有采用动量和权重衰减。矩阵采用Gaussian distribution随机初始化,均值为0,方差为0.1。Batch size是32。采用l2正则。
在一些实验中,我们试著不使用softmax,使模型除了最后答案预测的sofmax以外,所有的部分都更线性化。当验证集损失停止下降时,我们再重新加入softmax。我们称这个过程为线性开始训练(LS)。在LS训练中,学习率开始被设为0.005.
在一些任务上,我们的模型会有很大的方差(有时候是,有时候不是,取决于初始化)。
为了解决这个问题,我们重复训练十次用不同的初始化,然后选择最低训练误差那个。
4.3 Baselines
4.4 Results
我们用了如下一系列方案
(1) BoW vs Position Encoding (PE) sentence representation
(2) 20个任务独立训练vs20个任务联合训练,联合训练d=20,独立训练d=50。
(3) LS vs softmax一开始便参与训练
(4) 改变计算步骤从1到3
下表展示了所有结果,是10k条训练数据的平均性能,我们发现了几个有趣的点:
(1)最好的MemN2N模型接近监督模型。
(2)所有我们提议的模型的变种都击败了弱监督的baseline方法
(3)PE性能强于Bow
(4)LS方法似乎可以帮助避免local minima
(5)加入杂讯(RN),对于训练有小但是持续的帮助,尤其是训练集小样本时
(6)联合训练性能更好
(7)最重要的,更多计算步骤可以提升性能。
5、语言模型实验
6、结论和未来的工作
在本文我们展示了一种带有明确的记忆和一个循环attention机制的神经网路模型,可以使用反向传播演算法来解决问答问题和语言模型问题。相比于Memory network本模型更实用于各项任务。我们的模型可以达到其他模型相同甚至更好的表现。在语言模型任务中,他比rnns和lstms的性能更好,并且计算步骤(hops)越多,性能越好。
但是,仍然有很大未来的工作需要去完成。我们的模型始终无法匹敌在强监督情况下的memory network模型,并且在1k 大小的QA任务上表现不好。此外,smooth lookups不能在一些很大的memory需要的地方scale的很好。
来自专栏
深度学习经典论文翻译(nlp方向)推荐阅读: