QANET: COMBINING LOCAL CONVOLUTION WITH GLOBAL SELF-ATTENTION FOR READING COMPREHENSION 论文阅读笔记

原文链接:https://openreview.net/pdf?id=B14TlG-RW


Abstract


  目前的端到端机器阅读和问答模型主要基于包含注意力的循环神经网络,抛开优点。这些模型的主要缺点:在训练和推理方面效率较低。 因此我们提出了一种名为QANet的问答架构,这个网络不需要使用递归网络,它的编码器完全由卷积和self-attention组成,卷积网络处理局部信息,self-attention处理全局范围内的信息。在SQuAD数据集中,我们模型的训练速度提高了3至13倍,推理速度提高了4至9倍,同时达到了与循环模型相媲美精确度。加速增益(speed-up gain)使我们能够用更多的数据来训练模型。因此,我们将我们的模型,与由神经机器翻译模型的反向翻译生成的数据结合起来。在SQuAD数据集上,我们使用增强数据训练的单一模型在测试集中F1值达到 84.6,这显著优于过去公布的F1最佳值81.8。

Introduction


  人们对机器阅读理解和自动回答问题的工作越来越感兴趣,在过去几年中最成功的模型通常采用了两项关键要技术:

(1)使用循环网络模型处理序列化数据(2)在长期交互的过程中引入注意力机制。Seo等人于2016年提出的的双向注意力流(Bidirectional Attention Flow,BiDAF)模型将这两项要素成功地结合在了一起,该模型在SQuAD数据集上取得了显著的效果。这些模型的一个缺点是,它们的循环特性使得它们在训练和推理方面的效率通常较低,特别是对于长文本而言。昂贵的训练不仅会导致实验的周期延长,限制研究人员进行快速迭代,还会使模型难以被用于更大的数据集中。与此同时,缓慢的推理速度阻碍了机器理解系统在实时应用中的部署。 
  在本文中,为了使机器理解更高效,我们提出去掉这些模型的循环性质,仅将卷积和自注意力作为编码器的构成模块,分别对问题和文章进行编码。然后,我们通过标准注意力(Xiong et al., 2016; Seo et al., 2016; Bahdanauet al., 2015)来学习文章和问题之间的交互。在最终对每个作为答案范围的开始或结束位置的概率进行解码之前,用我们的无循环编码器再次对结果表征进行编码。我们将该架构称为QANet。 如图1所示:


  模型设计的主要思想:卷积捕获文本的局部结构,而自注意力则学习每对单词之间的全局交互。此外在随后的建模过程中使用问题-文章attention机制来来对文章中每个位置构建query-aware context vector。我们的前馈网络架构极大地提高了模型的效率。在SQuAD数据集的实验中,我们模型的训练速度提高了3至13倍,推理速度提高了4至9倍。作一个简单的比较,我们的模型可以在3个小时的训练中达到与BiDAF模型(Seo等人于2016年提出)相同的精确度(F1值为77.0),在此之前,这一过程需花费15个小时的时间。加速增益还允许我们使用更多的迭代来训练模型,以获得比竞争模型更好的结果。例如,如果我们允许我们的模型进行18个小时的训练,它在开发集(dev set)上的F1值达到了82.7,这比Seo等人于 2016年提出的模型,表现得要好很多,并且与已发布过的最佳结果相媲美。

       在SQuAD数据集上,使用数据进行训练后的QANe模型在测试集上的F1值为84.6,明显优于Hu et al. (2017).发表的81.8的最好成绩。我们还进行ablation test,以证明我们的模型的每个组件的有效性。综上所述,本文的贡献如下:

  • 我们提出了一种高效的阅读理解模式,它完全建立在卷积和self-attention基础上。据我们所知,我们是第一个这样做的。这种组合保持了较好的准确性,同时与RNN的对应算法相比,在每次训练迭代中,可以实现高达13倍的训练加速和9倍的训练迭代。训练速度使我们的模型最有希望扩展到更大的数据集。
  • 为了提高模型在SQuAD数据集上的成绩,我们提出了一种新的数据增强技术,通过转述来丰富训练数据。它使模型达到比最先进的技术更高的精度。

THE MODEL

        在这一节中,我们首先将阅读理解问题公式化的表示,然后阐述QANet模型:它是一个前馈模型,只包含卷积和自注意力机制,通过验证得出这是一个有效的组合,也是我们工作的一个贡献。

PROBLEM FORMULATION

        阅读理解问题在本文中做出如下的定义,给出一个问题段落使用C表示,其中C包含n个word,问题句子由m个word组成, 通过这些在原文中产生一个范围S,在后续的文章中,我们使用x既表示word也表示其词向量。

MODEL OVERVIEW

从总体来看,我们模型的结构与大多数现有模型相似,它们包含五个主要部分:

  • an embedding layer,
  • an embedding encoder layer,
  • a context-query attention layer, a
  • model encoder layer
  • an output layer
     

        嵌入层、嵌入编码器层、上下文查询注意层、模型编码器层和输出层,如图1所示。这些是大多数现有阅读理解模型的标准组成部分。然而,我们的方法与其他方法的主要区别在于:无论是embedding还是encoder,我们都只使用卷积网络和self-attention,抛弃了大多数现有阅读理解模型使用的rnn机构。因此,我们的模型更快,因为它可以并行处理输入的单词。值得一提的是,虽然自self-attention在Vaswani et al. (2017a)中已经得到了广泛的应用,但是卷积与自我注意的结合是首次提出的,明显优于单独的自我注意力机制,在我们的实验中得到了2.7 F1的增益。卷积的使用也使得我们可以利用普通的对流网络正则化方法,如stochastic depth (layer dropout) Huang et al., 2016),这在我们的实验中增加了0.2 F1的增益。

Input Embedding Layer.
        embedding部分大同小异,通过将词w的词嵌入和字符嵌入连接起来得到w的词嵌入。embedding在训练过程中是固定的,使用初始大小为300D的Glove词向量 作为初始化向量,(Pennington et al., 2014)。对于OOV的词,都映射到一个随机初始化的UNK向量。character-level的训练过程如下:每个字符表示为维度200D的可训练向量,即每个单词可以看作是每个字符的嵌入向量的连接。每个单词的长度要么被截断,要么被填充为16。我们取这个矩阵的每一行的最大值,得到每个单词的固定大小的向量表示。最后,该层给出的单词x的输出是连接[x_w;x_c] ,其中x_w和x_c分别是单词嵌入和字符嵌入的卷积输出。在Seo等(2016)之后,我们还在此表示之上采用了two-layer highway network(Srivastava等,2015)。为了简单起见,我们还使用x表示这一层的输出。

Embedding Encoder Layer.
编码器层以下基本构件组成:[convolution-layer×# + self-attention-layer + feed-forward-layer],如图1中所示。我们使用深度可分卷积网络(Chollet, 2016) (Kaiser et al.,2017)而不是传统卷积,因为我们认为它具有更好的记忆效率和更好的通用性。内核大小为7,filters的数量为d = 128,块中的conv层的数量为4。self-attention-layer,我们采用多头注意力机制(Vaswani et al .,2017),对于输入的每个位置被称为query,通过点乘的方式计算query与keys之间的相似性,然后通过所有位置来计算权重,所有层的头数是8。这些基本操作(conv/self-attention/ffn)都放在一个块中,如图1右下角所示。对于输入x和给定的操作f,输出为f(layernorm(x))+x,即每个块从输入到输出有一个完整的标识路径,其中layernorm表示(Ba et al., 2016)中提出的分层规范化。编码器块的总数是1。注意,这一层的输入是每个单词的维数p1 + p2 = 500的向量,它通过一维卷积立即映射到d = 128。这一层的输出也是维度d = 128

Context-Query Attention Layer

这个模块在之前的阅读理解模型中基本都有使用,如Weissenborn et al.(2017)和Chen et al.(2017)。我们使用C和Q来表示编码的文章和问题。context-to-query attention通过如下方法获得,我们计算每一对文章和问题词之间的相似之处通过相似性矩阵S表示, 然后通过softmax函数进行归一化,得到S一拔,然后context-to-query attention通过以下公式计算得到,

这里使用的trilinear function(Seo et al., 2016): 

 式中为元素点乘,W0为可训练变量。

大多数高性能模型还使用某种形式的问题文章attention,例如BiDaF (Seo et al., 2016)和DCN (Xiong et al., 2016)。从经验上讲,我们发现DCN注意力比简单地应用context-to-query attention有一丢丢好处,所以我们采用了这种策略。更具体地说,我们用softmax函数计算S的列标准化矩阵S,得到context-to-query attention矩阵

Model Encoder Layer
与Seo等(2016)类似,该层在各个位置的输入为

其中a和b分别是注意矩阵a和b的一排,层参数与嵌入编码器层相同,只是在一个块内卷积层数为2,块总数为7。我们在模型编码器的3次重复之间共享权重。


Output layer

这一层是特定于任务的。SQuAD的每个例子都在包含答案的上下文中标记了一个span。我们采用Seo et al.(2016)的策略来预测在回答跨度的开始或结束的上下文中每个位置的概率。更具体地说,开始和结束位置的概率被建模为

其中W1和W2为可训练变量和M0;M1;M2分别是三个模型编码器的输出,从下到上。span的得分是其起始位置和结束位置概率的乘积。最后,目标函数被定义为由真实的开始和结束索引的预测分布的对数概率的负和,在所有的训练例子中取平均值: 

y1和y2分别是真是的开始和结束位置。

DATA AUGMENTATION BY BACKTRANSLATION

由于我们的模型是快速的,我们可以用更多的数据来训练它。因此,我们将模型与一种简单的数据增强技术相结合,以丰富训练数据。这个想法是使用两种trans- 4作为会议论文发表在ICLR 2018翻译模型,一种从英语到法语(或任何其他语言)的翻译模型和另一种从法语到英语的翻译模型,以获得文本的意译。这种方法可以帮助自动增加任何基于语言的任务的训练数据量,包括我们感兴趣的阅读理解任务。有了更多的数据,我们希望能更好地规范我们的模型。图2以法语为关键语言说明了增强过程

在本研究中,我们考虑了基于注意力的神经机器翻译(NMT)模型Bahdanau等(2015);Luong et al.(2015),其中Wu et al.(2016)翻译质量优秀,是我们数据扩充管道的核心模型。具体来说,我们使用了Luong et al.(2017)提供的公开可用的codebase3,它复制了谷歌的NMT (GNMT)系统Wu et al.(2016)。我们在公开的WMT数据上为英法(36M对)和英德(4500 m对)训练了4层GNMT模型。如Luong et al.(2017)所述,所有数据都被标记化并分解为子词单元。所有的模型都使用相同的超参数,并使用不同的步数进行训练,英语法语为2M,英语德语为340K。我们的英法系统在newstest2014上实现了36.7 BLEU的法文翻译和35.9 BLEU的反向翻译。对于英语德语和newstest2014,我们获得了27.6 BLEU的翻译成德语和29.9 BLEU的相反方向。

 我们的释义过程如下,假设法语是一种关键语言。首先,我们将输入序列输入到英法模式的波束译码器中,得到k个法文翻译。然后将每一个法文翻译通过反向翻译模型的波束译码器,得到输入序列的共k2个释义。

Relation to existing Works.
与现有工程的关系。虽然反向翻译的概念以前已经被引入,但它经常被用来改进相同的翻译任务Sennrich et al.(2016)或内在意译评价Wieting et al. (2017);马林森等(2017)。我们的方法是一种新的应用反向翻译丰富训练数据的下行任务,在这种情况下,问答(QA)任务。值得注意的是(Dong et al., 2017)采用意译技术改进QA;但是,他们只是转述问题,并没有像我们在本文中所做的那样专注于数据扩充方面

Handling SQuAD Documents and Answers.

我们现在讨论我处理SQuAD 数据集的具体过程,这是最重要的性能提高。记住,SQuAD 的训练样本都是(d;q;a)其中d文档是一个多句的段落,答案是a。在改述的时候,我们保持问题q不变(为了避免不小心改变它的意思),生成新的三元组(d0;q0;a0)这样新文档d0中就有了新的answe a0。该过程分为两个步骤:

(i)文档释义-将d释义为d0,

(b)答案提取-从d0中提取与a匹配度非常接近的a0。

对于文档释义步骤,我们首先将段落分割成句子,分别进行释义。我们用k = 5,所以每个句子有25个意译选项。一个新的文档d0是通过简单地用随机选择的意译替换d中的每个句子而形成的。一个明显的问题与这个方法最初的回答在d0可能不再存在。答案提取解决了上述问题。让我们以包含原答案a的原句为例,以s0为释义。我们用简单的启发式来识别新释义的答案如下。计算s0中每个单词与a的开始/结束单词之间的字符级2克分数,找出s0中可能答案的开始和结束位置。在所有转述答案中,选择字符2克分数最高的一个作为新的答案a0。表1显示了这个过程找到的新答案的示例。

 意译的质量和多样性是数据增强方法的关键。改进该方法的质量和多样性仍然是有可能的。使用更好的翻译模型可以提高翻译质量。例如,我们发现转述明显长于我们的模型的最大训练序列长度的内容往往在中间被切断。在波束搜索解码过程中,对数据集中出现的问题和答案进行释义和采样,可以提高数据集的多样性。此外,我们还可以将该方法与其他数据增强方法相结合,例如type swap方法(Raiman & Miller, 2017),以获得更多的释义多样性。在我们的实验中,我们观察到所提出的数据扩充可以在准确性方面带来不小的改善。我们认为这种方法也适用于其他受监督的自然语言处理任务,尤其是在训练数据不足的情况下。

4 EXPERIMENTS

在这一节中,我们进行了实验来研究我们的模型和数据增强技术的性能。我们将主要在团队数据集(Rajpurkar et al., 2016)上对我们的模型进行基准测试,这被认为是问答中最具竞争力的数据集之一。我们还对另一个Q&A数据集TriviaQA (Joshi et al., 2017)进行了类似的研究,表明我们模型的有效性和效率是一般的。
 

4.1 EXPERIMENTS ON SQUAD


4.1.1 DATASET AND EXPERIMENTAL SETTINGS


Dataset.
我们考虑用于机器阅读理解的斯坦福问答数据集(SQuAD) (Rajpurkar et al., 2016)。SQuAD包含107.7K对查询答案,其中87.5K对用于培训,10.1K对用于验证,10.1K对用于测试。段落的长度通常在250左右,而问题是10个标记,虽然有特别长的情况。只有培训和验证数据是公开可用的,而测试数据是隐藏的,必须将代码提交给Codalab,并与(Rajpurkar et al., 2016)的作者一起检索最终测试

在我们的实验中,我们提交了我们最好的单一模型的测试集结果。为了进一步分析,我们只报告验证集的性能,因为我们不想通过频繁提交来探测不可见的测试集。根据我们实验和前期工作的观察,如s (Seo et al., 2016; Xiong et al., 2016; Wang et al., 2017; Chen et al., 2017),验证得分与测试得分之间存在较好的相关性。

Data Preprocessing.

我们使用NLTK分词对数据进行预处理。最大的上下文长度设置为400,超过400的段落将被丢弃。在训练过程中,我们按长度对例子进行批处理,并动态填充特殊符号< pad >的短句子。最大回答长度设置为30。我们使用训练好的300D单词向量(Pennington et al., 2014),将所有词汇外的单词替换为<UNK>,这个词向量在培训期间进行更新。每个字符嵌入被随机初始化为一个200维的向量,并在训练中进行更新。我们生成两个额外的数据集,其中包含140 k和240 k的例子。

Training details.

我们采用两种类型的标准正则化。首先,我们使用L2重量衰变在所有可训练的变量,参数λ= 3×10−7。此外,我们还对word、character embedded和layer之间使用dropout,其中word和character的辍学率分别为0.1和0.05,每两层之间的dropout率为0.1。我们也采用stochastic depth method (layer dropout) (Huang et al., 2016)在每个嵌入或模型编码器层

隐藏的大小和卷积过滤器都是128,批量大小是32,训练步骤是原始数据的150 k,250 k“数据增强×2”,和340 k”数据增强×3”。嵌入和建模编码器的卷积层数分别为4和2,卷积大小分别为7和5,编码器的块号分别为1和7。我们用Adam优化器(Kingma & Ba, 2014)
 β1 = 0:8;β2 = 0:999; e= 10−7。我们使用一个学习速率热身方案,在前1000步从0.0增加到0.001,然后在剩余的训练中保持一个恒定的学习速率。指数移动平均适用于所有衰减率为0.9999的可训练变量。最后,我们使用Tensorflow (Abadi et al., 2016)在Python中实现了我们的模型,并在NVIDIA p100 GPU上进行了实验

4.1.2 RESULTS

准确性。F1和precision Match (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模型的加速,我们还测试了相应的模型体系结构,每个编码器块都被替换为一个双向LSTMs堆栈,就像在大多数现有模型中使用的那样。具体来说,每一个(嵌入和模型)编码器块分别被替换为1层、2层或3层双向LSTMs,因为这些层号属于阅读理解模型的通常范围(Chen et al., 2017)。所有这些LSTMs都隐藏了128大小。加速比的结果如表3所示。我们可以很容易地看到,我们的模型比所有基于RNN的模型都要快得多,并且在训练中,我们的速度差在3到13倍之间,在推理中,我们的速度差在4到9倍之间。

在BiDAF模型上的加速。此外,我们还使用相同的硬件(NVIDIA p100 GPU),并将我们的模型与经典的基于SQuAD模型BiDAF model14(Seo et al., 2016)进行了相同性能的训练时间比较。为了获得最佳性能,我们通常在原始代码中采用默认设置,其中用于训练和推理的批大小都是60。我们唯一改变的部分是优化器,这里使用了Adam with learning 0.001,与Adadelta一样,我们得到了更差的性能。结果如表4所示,我们的模型在训练和推理速度上分别比BiDAF快4.3和7.0倍。此外,我们只需要1 / 5的训练时间就可以在dev set上取得BiDAF F1的最好成绩(77:0)。

CONCLUSION
 

本文提出了一种快速、准确的机器阅读理解端到端模型QANet。我们的核心创新是完全去除编码器中的重复网络。得到的模型是完全前馈的,完全由可分卷积、注意、线性层和层归一化组成,适用于并行计算。结果模型既快又准确:它超过了在班组数据集上发布的最好结果,同时比训练/推理迭代的竞争性重复模型快13/9倍。此外,我们发现,我们可以利用由翻译上下文和段落对构成的数据扩充来解释问题和上下文,从而获得显著的收获。

猜你喜欢

转载自blog.csdn.net/maka_uir/article/details/84652442