摘要
当前的端到端机器读取和问答(Q&A)模型,是主要基于具有注意力(Attention)的递归神经网络(RNN)。尽管取得了成功,但由于RNN的顺序性的性质,这些模型通常对于训练和推理都很慢。我们提出了一个名为QANet的新的Q&A架构——它不需要循环网络(Recurrent Network)。它的编码器完全由卷积(convolution)和自注意力模型(self-attention)组成,其中卷积对局部交互建模而自注意力模型对全局交互建模。在SQuAD数据集上,我们的模型的训练速度提高了3至13倍,而推理速度提高了4到9倍,且能和循环网络达到同样的准确率。速度上的增益使得我们可以用大得多的数据集来进行训练。因此,我们将我们的模型与神经机器翻译模型的反向翻译生成的数据结合起来。在SQuAD模型上,我们使用增强数据训练的单一模型,在测试集上获得了84.6的F1 Score,这明显优于公布过的最佳F1 Score 81.8。
人们对于机器阅读理解和智能问答越来越感兴趣。在过去的几年中,端到端模型取得了重大的进展,在许多具有挑战性的数据集上展现出让人乐观的结果。最成功的模型一般包括两个关键因素:(1)一个处理顺序性输入的循环网络模型(recurrent model),以及(2)一个应对长期交互的注意力(attention)模型组件。Seo等人研究的双向注意力流动模型(BiDAF,2016年)是对这两种元素的一个成功结合,它在SQuAD数据集上取得了良好的成绩。但是这一类模型往往有一个缺点,即翻译和推理都很慢,特别是处理长文本时,这是由于循环网络的性质所造成的。这样昂贵的训练成本不但会导致实验的周转时间长、研究人员受限于迭代速度,也会妨碍模型应用到更大的数据集上。与此同时,缓慢的推理速度也会妨碍机器理解(machine comprehension)系统部署到实时应用中。
在这篇论文中,我们建议移除这些模型中的循环网络以提高机器理解的速度。作为替代,我们仅使用卷积和自注意力模型作为问题和上下文的编码器的模块结构。然后我们通过standard attentions(Xiong 等人, 2016; Seo等人, 2016; Bahdanau等人,2015)。在最后解码成每个位置作为答案区间的开始位置和结束位置的概率之前,训练结果会被我们的无循环编码器再度编码。我们把这一结构称作QANet,如图1所示。
如下是我们设计这个模型的主要动机:卷积捕获了局部文本的结构,而自注意力模型学习每一对词语全局的相互影响(global interations)。附加的语境查询注意力模型是一个典型的为上下文段落中每个位置构建查询感知上下文向量的模块,它随后被用于为每一个层建模。我们的结构的前馈性质使得显著提升了模型的速度。在使用SQuAD数据集实验时,我们的模型在训练上快3至13倍,在推理上快4至9倍。作为一个简单的比较,我们的模型可以在3小时以内的训练后达到和BiDAF模型(Seo et al., 2016)同样的准确率(77.01 F1 Score),而后者则需要花费15个小时。加速增益使得我们可以用更多的迭代来训练模型,以获得比其它模型更好的结果。譬如,如果我们让模型训练18个小时,它将在开发集上获得82.7的F1 Score,这比(Seo et al., 2016)的模型要好得多,并且与公开过的最佳结果相当。
由于我们的模型速度很快,所以我们可以用比其它模型所使用的大得多的数据集来训练。为了进一步改良模型,我们提出了一种另外的数据增强技术来改善训练数据。这一技术通过将原始的句子从英文翻译成另一种语言来解释这些例子,然后翻译回英文,这样不但提高了训练样本的数量,也使得表达(的词语)多样化。
在SQuAD数据集上,使用增强数据训练的QANet在测试集上获得84.6 的F1 Score设置,显著优于Hu等人的81.8分的最佳公布结果。我们也进行了消融测试以证明我们的模型的每个组件都是有用的。总之,本文的成绩如下:
在本章中,我们首先提出(formulate)了机器阅读理解问题,然后介绍了我们提出的QANet模型:它是一个只由卷积(convolution)和自注意力(self-attention)组成的前馈模型,从经验上讲,这个组合有很高的效率,并且这也是我们工作的一个创新点。
在本文中考虑的阅读理解工作定义如下:给定一个有n个单词的上下文段落C={C1,C2,…,Cn},和有m个单词的问句Q=q1,q2,…,qm ,输出一个段落C的片段S={Ci,Ci+1,…,Ci+j}。接下来,对于每个x∈C,Q ,我们用x表示源单词或者它的嵌入向量(embedded vector)。
我们的模型结构和大多已知模型的结构是相似的,由五个部分组成:嵌入层(an embedding layer),嵌入编码器层(an embedding encoder layer),“上下文-问题”注意力层(a context-query attention layer),模型编码器层(a model encoder layer),输出层(an output layer)。如图1所示。这是大多数甚至所有的阅读理解模型的典型的模块结构。尽管如此,我们模型的方法和其他方法还是有不同之处的,主要差别如下:对于嵌入和模型编码模块(For both the embedding and modeling encoders),我们只用了卷积和自注意力机制(convolutional and self-attention mechanism),而丢弃了大部分阅读理解模型中用到的循环神经网络(RNNs)。结果表明,我们的模型很快,因为它可以并行处理输入符号。值得注意的是,尽管自注意力(self-attention)已经被广泛地用在Vaswani et al. (2017a),卷积和自注意力机制的混合模型还是很新颖的,它明显地比单独的自注意力模型要好,并且在我们的实验中获得了2.71 F1的增益(gives 2.7 F1 gain)。卷积的运用使我们可以利用在卷积神经网络(ConvNets)中常规的正则化方法,如随机深度(such as stochastic depth (layer dropout)) (Huang et al., 2016),它在我们的实验中获得了0.2 F1的额外增益。
图 1 - QANet结构概览(左),它有几个编码器块。我们在整个模型中使用相同的编码器块(右),仅改变每个块的卷积层数。我们在编码器中的每一层之间使用了layernorm和残差连接。我们还共享上下文和问题编码器以及三个输出编码器的权重。如(Vaswani et al., 2017a)所定义的,在每个由不同波长的sin和cos函数组成的编码器的开始处,将位置编码添加到输入中。(A positional encoding is added to the input at the beginning of each encoder layer consisting of sin and cos functions at varying wavelengths)。在编码器结构内部的位置编码(卷积,自注意或前馈网络之一)之后的每个子层被包裹在残余块内。
详细地来讲,我们的模型由如下五层组成:
1.Input Embedding Layer.
我们采用常规的技术,通过连接单词的词嵌入(word embedding)和字符嵌入(char embedding),来获取每个单词的嵌入。词嵌入在训练中是固定的(is fixed),用p1=300 维的预训练好的GloVe (Pennington et al., 2014)单词向量来初始化,这些单词向量在训练中是固定的。所有的不在词典中的单词都被映射到一个
2.Embedding Encoder Layer.
编码器层是以下基本块的堆砌:[卷积层 ×#+ 自注意力层 +前馈层]([convolution-layer × # + self-attention-layer + feed-forward-layer]),如右上图1所示。我们用深度可分离卷积结构(depthwise separable convolutions (Chollet, 2016) (Kaiser et al., 2017))而不是传统的结构,因为我们发现它内存效率高(memory efficient)并且有更好的泛化能力(has better generalization)。内核(kernel)的大小为7,过滤器(filters)数量为d=128 ,而且一个块(block)中的卷积层数(conv layers)是4。 对于注意力层(self-attention layer),我们采用了nulti-head机制(Vaswani et al,2017a),for each position in the input, called the query, computes a weighted sum of all positions, or keys, in the input based on the similarity between the query and key as measured by the dot product.(暂时不知道如何翻译)。在整个层中(throughout all the layers) heads的数量是8,每个这些基本的操作(卷积、注意力、前馈)都被放在了一个残差块里(a residual block),如图1右下所示。对于一个输入x和一个给定的操作f,输出是flayernormx+x ,也就是从每个块的输入到输出都有一个完整的标识路径(a full identity path),其中layernorm是指(Ba et al,2016)提出的层正规化(layer-normalization)。编码器块的总数为1。需要注意的是,对每一个单词来说,在这个层的输入是一个p1+p2=500 维的向量,这个向量会立即被一维卷积映射到d=128 。这一层的输出也是d=128 维。
3.Context-Query Attention Layer.
这个模块在几乎所有之前的阅读理解模型中都是标准的,如Weissenborn et al. (2017) 和 Chen et al. (2017)。我们用C和Q来表示编码后的上下文和问题。Context-to-query attention构造如下:我们首先计算每一对上下文和查询词的相似度,其后表示成为一个相似度矩阵S∈Rn×m。然后我们用softmax函数对S的每一行进行归一化,得到矩阵S。然后context-toquery attention计算如下:A=S∙QT∈Rn×d。在这里用的相似度函数是三线性函数(trilinear function Seo et al,2016):
fq,c=W0q,c,q⊙c
其中⊙是元素乘法(the element-wise multiplication),W0是可训练的变量。
大多数高性能模型还使用某种形式的query-to-context attention,比如BiDaF(Seo et al 2016)和DCN(xiong et al 2016)。从经验上讲,我们发现,相比于简单地采用context-to-query attention,DCN attention可以提供一些好处,所以我们采用了这个策略。更具体的来说,我们通过softmax函数计算了矩阵S的列标准化矩阵S,然后,query-to-context attention是B=S∙ST∙CT。
4.Model Encoder Layer.
与Seo et al.(2016)相似,在这一层的输入的每个位置是c,a,c⊙a,c⊙b,其中a和b分别是attention矩阵A和B中的一行。层的参数除了每一块的卷积层的个数是2,总的块数是7以外,其余编码层与嵌入编码层相同。模型编码层的3个重复模块有相同的权重。
5.Output layer.
这一层是功能性的。每一个SQuAD的样例都被一个文本中包含着答案的片段标记。我们采取Seo et al(2016) 的策略来预测每一个位置是答案片段的起始点和终止点的概率。更具体地说,起始点和终止点的概率被建模为:
p1=softmaxW1M0;M1
p2=softmaxW2M0;M2
其中W1和W2是两个可训练的变量,M0,M1,M2分别是从下到上3个模型编码器(model encoders)的输出。一个片段的得分是起始点概率和终止点概率的乘积。最后,目标函数被定义为由真正的开始和结束下标索引的预测分布的对数概率的负和(the negative sum of the log probabilities of the predicted distributions indexed by true start and end indices),在所有训练样本上取平均值:
Lθ=-1NiNlogpyi11+logpyi22
其中yi1和yi2分别是样例i的标定好的真实的起始和终止位置,θ包含了所有的可训练的变量。我们所提出的模型可以被定制专门用于其他的阅读理解任务,比如,通过相应地改变输出层,从候选答案中做选择。
在推断阶段,选择预测的片段s,e使得ps1pe2是最大的并且s≤e 。标准动态规划可以在线性时间内得到结果。
鉴于模型的速度很快,我们可以采用更多的数据来训练它。因此我们将我们的模型与一种简单的数据加强技术结合起来来丰富训练数据。思路是使用两个翻译模型来实现文章的释义,一个将文章从英语翻译成法语,一个将文章从法语翻译成英语。这种方法有助于自动地增加任何基于语言的任务的训练数据量,包括我们感兴趣的阅读理解任务。我们期望用更多的数据来更好地规范化我们的模型。改良过程如图2所示,法语是中枢语言。
在这项工作中,我们考虑使用基于注意力(attention-based)的机器神经翻译模型(NMT)Bahdanau et al. (2015); Luong et al. (2015),Wu et al. (2016),作为我们数据改良管道的核心模型,这些模型都表现出了非常优秀的翻译水准。具体来说,我们利用了Luong et al. (2017)提供的公开的代码库,这一代码库复现了谷歌的Wu et al. (2016)的NMT系统(GNMT)。我们在公开的WMT数据上为英语-法语(36M大小的句子对)和英语-德语(4.5M大小的句子对)两种组合都训练了一个四层的GNMT模型。所有数据都被符号化并被分离成子字(subword)单元,如同Luong et al. (2017)所描述。所有模型共享一样的超参数并且被训练不同的次数,其中英语-法语模型训练2M次,而英语-德语模型训练370K次。在newstesst2014数据集上,我们的英语-法语系统在从英语翻译到法语时达到36.7 BLEU,而在从法语翻译到英语时达到了35.9BLEU。而对于英语-德语模型,在翻译到德语时达到了27.6BLEU而在从德语翻译到英语时达到了29.9BLEU。
我们的释义过程如下,其中将法语作为中枢语言。首先,我们将输入序列馈送到英语-法语模型的波束编码器(beam encoder)中以获得k句法语翻译。然后,每句翻译的法语结果通过反向翻译模型的波束解码器以获得总共k^2个序列的释义。
与现有作品的关联。尽管之前已经引入了反向翻译的概念,但它通常要么用于改进Sennrich et al. (2016)的相同的翻译任务,要么用于Wieting et al. (2017); Mallinson et al. (2017).的内在释义评估。我们的方法是对反向翻译的一种新颖的应用,它能为数据向下流动的(down-stream)任务丰富训练数据,譬如问答(QA)任务。值得注意的是,(Dong et al., 2017)采用释义技术来改良QA,然而,他们只对问题作释义而不关注我们在这篇论文中所重视的数据改良概念。
处理SQuAD文档(Document)和答案(Answer)。我们现在来讨论我们针对SQuAD数据集的具体处理过程,这对于性能的提升尤为关键。SQuAD的每个训练样本都是一个三元组(d,q,a),其中文档d是具有答案a的一个多句组成的段落。当释义时,我们保持问题q不变(以避免不小心改变其含义)并产生(d’,q,a’)的新三元组,使得新文档d在其中具有新答案。这个过程由两步组成:(1)文档释义——把d释义为d’以及(2)答案提取——从d’中提取与答案a近似匹配的答案a’。
在文档释义步骤中,我们首先将段落划分成多个句子并将它们独立地进行释义。我们将k设为5,对每个句子我们就能得到25个释义结果可供选择。对于原文d中的每个句子,通过简单地随机选择一个释义来替换它,从而形成一篇新文章。这种朴素的方法的一个很明显的问题在于,原始答案a可能将不再位于新的文档d中。
答案提取步骤解决了上述问题。假定s是包含答案a的原始句子,s’是其释义。我们使用下述的简单的启发式规则识别新的释义后的答案。计算s中的每个单词和答案a的开始/结束字符之间的Character-level 2-gram分数,以找到s中有可能是答案起始和答案结束的位置。在所有可供选择的释义过的答案中,选择相对于a具有最高的Character-level 2-gram分数的那个作为新答案a’。表1展示了一个使用这种方法找到一个新答案的例子。
释义的质量和多样性对于数据改良方法至关重要。仍有可能改善该方法的质量和多样性。质量可以通过使用更好的翻译模型来提高。譬如,我们发现长度显著长于我们模型的最大训练序列长度的释义往往会在句子中间被切断。多样性可以通过波束搜索解码期间的采样以及在数据集中对问题和答案也释义来改善。此外,我们可以将这个方法和其它数据改良方法组合起来以获得更丰富的释义多样性,例如类型交换方法(Raiman & Miller, 2017)。
在我们的实验中,我们观察到我们所提到的数据改良方法可以在准确性方面带来非凡的改进。我们相信这种技术也适用于其它监督的自然语言处理任务,特别是当训练数据不足时。
在这一部分,我们进行试验以研究我们的模型和数据增强技术的的性能。我们将主要在SQuAD数据集(Rajpurkar et al., 2016)上进行基准测试,这一数据集被认为是Q&A领域中最具权威性的数据集之一。我们也同样在另一个Q&A数据集——TriviaQA (Joshi et al., 2017)上进行相似的研究来证明我们的模型的有效性和效率具有普适性。
数据集
我们考虑斯坦福问答数据集(Stanford Question Answering Dataset)用于机器阅读理解。SQuAD中包含107.7K个“问题-答案”对,其中87.5K对用于训练,10.1K用于验证,另外10.1K用于测试。段落(paragraph)的长度一般为250左右,问题长度一般为10左右,当然他们的长度也都有非常长的情况。只有训练数据和验证数据时公开的,而测试数据是隐藏的,必须提交代码到Codalab上并且与(Rajpurkar et al., 2016)这篇论文的作者一同操作以重现最终的测试得分。在我们的实验中,我们呈现了我们最好的单一模型的测试集结果。为了进一步分析,我们只呈现了验证集上的结果,因为我们不想大量频繁地提交来预测“看不见的”测试集。根据我们的实验结果和以前的工作,如(Seo et al., 2016; Xiong et al., 2016; Wang et al., 2017; Chen et al., 2017),验证分数与测试分数密切相关。
数据预处理
我们用NLTK tokenizer来预处理数据。最大上下文长度被设置为400,任何超过该长度的段落都被舍弃。在训练过程中,我们按长度批量处理示例,并使用特殊符号
训练细节
我们采用两种类型的标准正则化。首先,我们对所有可训练的参数使用L2权重衰减,参数λ=3×10-7。我们还在单词、字符嵌入和层之间用了dropout,单词和字符的dropout率分别是0.1和0.5,在两层之间的dropout率是0.1。我们还在每个嵌入或模型编码层中采用随机深度方法(layer dropout)(Huang et al., 2016),其中子层ι具有生存概率pι=1-ιL1-pL,其中L是最后一个层并且pL=0.9。
Hidden size和卷积滤波器数均为128,batch size为32,原始数据的训练步长为150K,“data augmentation×2”为250K,“data augmentation×3”为340K。Embedding 和 modeling encoder中的卷积层数分别为4和2,kernel size分别是7和5,编码器的块数量分别为1和7。
我们使用ADAM优化器(Kingma&Ba,2014),其中β1=0.8,β2=0.999,ϵ=10-7。我们还使用一个学习率预热方案(a learning rate warm-up scheme),在前1000个步骤中反向指数增加从0.0到0.001,然后在剩余的训练中保持恒定的学习率。指数移动平均值(Exponential moving average)适用于所有可训练变量,衰减率为0.9999。
准确性
F1和精确匹配(EM)是模型准确度的两个评估指标。F1测量的是预测的答案和groundtruth之间的重叠部分,而如果预测与groundtruth完全相同则精确匹配得分为1,否则为0。我们将结果与表2中的其他方法进行比较。为了进行公平和彻底的比较,我们会在最新的论文或初稿中呈现已发布的结果,并会在排行榜上呈现已更新但尚未成文的结果。我们认为后者是未发表的结果。从表中可以看出,我们模型的精度(EM / F1)性能与最先进的模型相当。特别地,我们在原始数据集上训练的模型在EM和F1得分方面优于文献中的所有记录结果(参见表2的第二列)。当使用适当的采样方案训练增强数据时,我们的模型可以在EM / F1上获得显著的增益1.5 / 1.1。最终,我们在官方测试集上的结果是76.2 / 84.6,这明显优于最佳记录结果73.2 / 81.8。
相比于RNNs的加速效果
为了测量我们的模型相对于RNN模型的加速,我们还测试相应的模型架构,其中每个编码器块替换为大多数现有模型中使用的双向LSTM堆栈。具体地来说,每个(嵌入和模型)编码器块分别用1,2或3层双向LSTM替换,因为这样的层数是阅读理解模型(Chen等人,2017)的通常取值。所有这些LSTM的hidden size为128。加速比较的结果如表3所示。我们可以看到我们的模型明显快于所有基于RNN的模型,训练时加速3-13倍,推理阶段快4-9倍。
相比于BiDAF的加速效果
此外,我们还用相同的硬件(NVIDIA p100 GPU),并比较我们的模型和BiADF模型(Seo et al., 2016),获得相同表现的训练时间。BiADF模型是SQuAD上基于RNN的经典模型。我们大多都采用源代码中的默认设置以取得最好的表现,其中对于训练和推断来说batch size都是60。The only part we changed is the optimizer, where Adam with learning 0.001 is used here, as with Adadelta we got a bit worse performance.(暂时不知道怎么翻译合适)。结果如表4所示,我们的模型在训练和推断上要比BiADF分别快4.3和7.0倍。此外,在开发集上我们只需要训练时间五分之一的时间就能达到BiADF最好的F1得分(77.0)。
我们对提出的模型的组成部分进行消融研究(abalation study),并研究增强数据的影响。开发集的验证分数如表5所示。从表中可以看出,在编码器中使用卷积是至关重要的:如果卷积被移除,F1和EM则会急剧下降近3%。编码器中的self-attention也是一个必要的组件,它可以为最终性能提供1.4 / 1.3的EM / F1增益。我们将这些现象解释如下:卷积捕获上下文的局部结构,而self-attention能够对文本之间的全局交互进行建模(model the global interactions between text)。因此,他们互补但不能互相替换。使用可分离卷积代替传统卷积也对性能有显著贡献,因为通过用正常卷积替换可分离卷积,精度就稍微差了一些。
数据增强的影响
我们另外进行了实验以了解当它们的数量增加时增强数据的价值。正如表中最后一行所示,数据增强有助于进一步提升性能。仅仅添加En-Fr-En数据来使训练数据扩大两倍(原始训练数据和增强数据之间的比率为1:1,如行“data augmentation × 2 (1:1:0)”所示),可以得到F1增加了5%。虽然使用法语作为枢纽添加更多的增强数据并不能有性能提升,但注入相同数量的额外增强数据En-De-En会使F1再次提高0.2,正如“data augmentation × 3 (1:1:1)”所示。我们可以将这种数据归因于新数据的多样性,这种多样性是由新语言的翻译器产生的。
抽样方案的效果
虽然注入超过 × 3的更多数据并不对模型产生增益,但我们发现在训练期间原始数据和增强数据之间的良好采样率可以进一步提高模型性能。特别是,当我们将增强数据的采样权重从1:1:1增加到1:2:1时,EM / F1性能下降0.5 / 0.3。我们推测这是因为增强数据因反向转换而产生噪声,所以它不应该是训练的主要数据。我们通过将原始数据的比率从1:2:1增加到2:2:1来确认这一点,获得了对EM / F1的0.6 / 0.5性能增益。然后我们修复部分增强数据(fix the portion of the augmented data),并探索原始数据的采样权重。从经验上讲,比率3:1:1能够获得最佳性能,在EM / F1上比基本模型增加1.5 / 1.1。这也是我们提交的用于测试集评估的模型。
4.1.4 模型健壮性探究(ROBUSTNESS STUDY)
在下文中,我们对对抗性数据集SQuAD (Jia & Liang, 2017)进行试验,来研究我们提出的模型的稳健性。在该数据集中,将一个或多个句子句子附加到测试集的原始SQuAD上下文中,以故意误导训练过的模型产生错误的答案。但是,在训练过程中,对于那些对抗性的样例来说模型是不可知的。我们关注两种类型的误导型句子,即AddSent和AddOneSent。AddSent生成与问题类似的句子,但与正确答案不矛盾,而AddOneSent添加了一个随机的人类认可的(human-approved)句子,该句子不一定和上下文有关。
使用的模型就是用原始SQuAD数据训练出的模型(在测试集上获得84.6的F1的分的模型),但是现在它被提交到了对抗服务器上(adversarial server)进行评估。结果如表6所示,其他模型的F1得分均来自Jia & Liang (2017)。同样,我们只比较单个模型的性能。从表6中我们可以看出,我们的模型与最先进的模型在伯仲之间(our model is on par with the state-of-the-art model Mnemonic),而且显著比其他模型要好。我们模型的稳健性可能是因为它是用增强数据训练得到的。
训练数据中注入的噪声可能不仅可以改善模型的泛化能力,还能使其对于对抗句来说更加健壮(but also make it robust to the adversarial sentences)。
在这一节,我们在另一个数据集TriviaQA上测试模型,这个数据集包含650K的文本——问题——答案三元组。有95K个不同的问答对,它们由Trivia爱好者编写,平均每个问题有6个文档(上下文)可以作为依据,这些文章可以从维基百科或者网页搜索中获得。与SQuAD相比,TriviaQA更具挑战性,因为(1)它的样本有着长得多的上下文(平均每篇文章2895个符号),并且可能包含多个段落,(2)由于缺少人工标记,所以它比SQuAD有更多噪音。(3)文章很有可能和答案毫无联系,因为它是通过关键字被获取到的。
在这篇论文中,我们将专注于在由维基百科的答案组成的子集上测试我们的模型。根据前人的工作(Joshi et al., 2017; Hu et al., 2017; Pan et al., 2017),同样的模型将在维基百科和Web搜索结果上由相似的性能,但是后者所花的时间要大五倍。为了使训练时间易于管理,我们省略了对Web数据机型实验。
由于文章多段落的性质,研究人员还发现运用一些简单的分层或多步阅读的小技巧可以显著提升TriviaQA的性能,譬如先预测要读哪个段落,然后使用像BiDAF之类的模型在那个段落中去确定答案(Clark & Gardner, 2017)。然而,在本论文中,我们只(将模型性能)和单段阅读的基准水平(baselines)比较。我们相信我们的模型可以被插入到其它多端阅读的方法中去,达到相似或更好的性能,但那超出了本文的范围。
维基百科部分的子数据集包含大约92K的训练集数据以及11K的开发集数据。文章和问题的长度分别为495和15。除了完整的开发集,Joshi et al. (2017)的作者还挑选出了一个验证过的集合,集合中所有的文章都能找到其对应问题的答案。由于文本可能很长,所以我们采用类似Hu et al. (2017); Joshi et al. (2017).的数据处理方法。特别地,对于训练集和验证集,我们分别随机选择一个包含256和400个数据的窗口,用于封装答案。除了训练步骤设置为120K之外,其它所有的设置都和使用SQuAD实验时一致。
准确率。开发集上的准确率如表7所示。同SQuAD实验,我们可以看到,模型在完整的(Full)开发集上的F1和EM优于基准水平,并在验证过的(Verified)开发集上与最优性能水平相当。
相对于RNN的提速。除了准确率,我们还测试了我们的模型相对于RNN模型的速度。如表8所示,我们的模型在训练时提速了3-11倍,而在推理时有3-9倍的加速,这和在SQuAD数据集上所发现的结果相似。
机器阅读理解和自动问答已经成为了NLP领域的一个重要主题。它们的发展得益于公开可用的数据集增加,譬如SQuAD (Rajpurkar et al., 2016), TriviaQA (Joshi et al., 2017), CNN/Daily News (Hermann et al., 2015), WikiReading (Hewlett et al., 2016), Children Book Test (Hill et al., 2015)等。大量的端到端神经网络模型被提出以应对这些挑战,包括BiDAF (Seo et al., 2016), r-net (Wang et al., 2017), DCN (Xiong et al., 2016), ReasoNet (Shen et al., 2017b), Document Reader (Chen et al., 2017), Interactive AoA Reader (Cuiet al., 2017) and Reinforced Mnemonic Reader (Hu et al., 2017)。
在过去纪念里,循环神经网络在自然语言处理中占主要地位。文本的连续性与RNN的设计理念相符合,所以他们很受欢迎。事实上,上面提到的所有阅读理解模型都是基于RNN的。尽管很常见,但是RNN的顺序性妨碍了其使用并行计算,因为所有的符号必须按顺序输入RNN中。RNN的另一个缺点是难以对长依赖建模,尽管使用Gated Recurrent Unit (Chung et al.,2014)或Long Short Term Memory architectures (Hochreiter & Schmidhuber, 1997)能对此有所缓解。对于类似文本分类的简单任务,(Yu et al., 2017)模型已被建议使用增强学习(RL)技术跳过不相关的符号以进一步解决长依赖问题并加快程序执行。然而,这一方法能否处理诸如Q&A的复杂任务并不明朗。本文中考虑的阅读理解任务往往需要处理长文本,因为文章段落可能长达几百个词。近年来,人们尝试了完全使用卷积和注意力结构(Kim, 2014; Gehring et al., 2017; Vaswani et al., 2017b; Shen et al., 2017a)来替换循环网络。人们发现这些模型不但比RNN结构快,在处理其它任务时也更高效,譬如文本分类,机器翻译或者情绪分析。
据我们所知,本文是第一个通过摒弃循环网络而使用前馈神经网络来来实现快而准确的阅读理解模型的(文章)。本文也首创了卷积和注意力模型的混合是使用,而这被证明效率极高并且能带来2.7 F1的显著增益。需要指出,Raiman & Miller (2017)近期提出通过避免双向注意力机制并使计算以搜索beams为条件来加速阅读理解。然而,他们的模型任然是基于RNN的并且精度不高,EM和F1分别为68.4和76.2。Weissenborn et al. (2017)也尝试了通过删除文本-问题模块来构建快的Q&A模型。然而,它也依赖于RNN并因此本质上比我们的模型慢。注意力模型的消除进一步牺牲了性能。(EM为68.4,F1为77.1)。
NLP领域也同样探索了数据改良技术。譬如Zhang et al. (2015)提出通过似乎用同义词来替换单词来优化数据集,并在文本分类领域展现了其高效性。 Raiman & Miller (2017)建议使用类型交换来优化SQuAD数据集,核心是将原段落中的词语用其它类型相同的词语来做替换。虽然它被证明可以提高准确性,但优化后的数据具有与原始数据相同的句法结构,因此不够多样化。Zhou et al. (2017)通过生成更多问题提高了SQuAD数据的多样性。然而,根据Wang et al.(2017)的报告,这一方法并不能帮助提高性能。本文提出的数据优化技术是基于通过来回翻译原文来对句子进行释义。主要的好处是它能为优化的数据带来更为丰富的句法结构。
文章由另一个同学和我翻译完成。
绪论 By Long
Chapter1 绪论 By Long
Chapter2 模型 By Jia
Chapter4 实验 4.1 By Jia 4.2 By Long
Chapter5 相关工作 By Long
6 总结&鸣谢&引用 尚未翻译,有空再补
PS. 1.有两句话不知道怎么翻译合适。
2.word直接复制过来的,公式和图片不能正常显示,先凑合看,有时间再说吧。