QANET: COMBINING LOCAL CONVOLUTION WITH GLOBAL SELF-ATTENTION FOR READING COMPREHENSION翻译

摘要

当前的端到端机器阅读和问答(Q&A)模型主要基于循环神经网络(RNN)。尽管获得了成功,但由于RNN的序列性质,这些模型在训练和推理上通常很慢。我们提出了一种新的被称为QANet的Q&A体系结构,它不需要循环网络:其编码器仅包含卷积和self-attention,其中卷积建模了局部交互,而self-attention建模了全局交互。在SQuAD数据集上,我们的模型在训练上快了3到13倍,在推理上快了4到9倍,同时获得与循环模型同等的准确性。加速增益使我们可以用更多数据训练模型。因此,我们将我们的模型与通过神经机器翻译模型进行反翻译而生成的数据结合在一起。在SQuAD数据集上,我们的单一模型经过增强数据训练,在测试集上达到84.6 F1得分1,明显优于最佳发布的F1得分81.8。

1.介绍

人们对机器阅读理解和自动问答的任务越来越感兴趣。在过去的几年中,端到端模型在许多具有挑战性的数据集上显示出可喜的结果,已经取得了重大进展。最成功的模型通常采用两个关键要素:(1)循环模型以处理顺序输入,以及(2)注意力组件以应对长期交互。这两种组件的成功组合来自Seo et al. (2016)提出的双向注意力流(BiDAF)模型,该模型在SQuAD数据集上获得了出色的结果。这些模型的一个缺点是,由于它们的循环特性,特别是对于长篇文章,它们在训练和推理上通常很慢。昂贵的训练导致实验耗时长并限制了研究人员进行快速迭代,而且还阻止了模型用于更大的数据集。同时,缓慢的推理会阻止机器阅读理解系统部署在实时应用程序中。
  在本文中,为了使机器理解更快,我们提出移除这些模型的循环特性。相反,我们仅使用卷积和self-attention作为编码器的构建块,这些编码器分别对问题和上下文进行编码。 然后我们通过标准注意力来学习上下文和问题之间的相互作用。在最终解码到每个单词是答案的开始或结束位置的概率之前,使用我们的无循环编码器再次对生成的表示进行编码。我们称这种架构为QANet,如图1所示。
  模型设计的主要动机如下:卷积捕获文本的局部结构,而self-attention则学习每对单词之间的全局交互作用。额外的上下文问题注意力是一个标准模块,用于为上下文段落中的每个位置构造基于问题的上下文向量,该向量将在后续建模层中使用。我们架构的前馈性质大大加快了模型的速度。在SQuAD数据集上进行的实验中,我们的模型在训练中的速度提高了3到13倍,推理速度提高了4到9倍。作为一个简单的比较,我们的模型可以在3个小时的训练中达到与BiDAF模型相同的准确性(77.0 F1分数),而后者需要15个小时。加速增益还使我们可以训练模型多次迭代,从而获得比竞争模型更好的结果。例如,如果我们允许模型训练18小时,那么在开发集上F1分数将达到82.7,这要好于BiDAF模型,并且可以与最佳发布结果相提并论。
  由于我们的模型速度很快,因此我们可以用比其他模型更多的数据来训练它。为了进一步改进模型,我们提出了一种数据增强技术来增强训练数据。该技术通过将原始句子从英语翻译成另一种语言然后再翻译回英语来对样例进行复述,这不仅增加了训练实例的数量,而且使措辞多样化
  在SQuAD数据集上,使用增强数据训练的QANet在测试集上达到84.6 F1分数,明显优于Hu et al. (2017)的最佳发布结果81.8。我们还进行了消融测试,以证明模型各部分的有效性。 总而言之,本文的贡献如下:

  • 我们提出了一种有效的阅读理解模型,该模型专门基于卷积和self-attention。据我们所知,我们是第一个这样做的人。与RNN同类模型相比,这种组合保持了良好的准确性,同时在训练中实现了高达13倍的加速,每次训练迭代达到了9倍。加速增益使我们能够为模型扩展更多数据集。
  • 为了改善我们在SQuAD上的结果,我们提出了一种新的数据增强技术,可以通过复述来丰富训练数据。它使模型能够获得比最新技术更好的精度。

2.模型

在本节中,我们首先提出阅读理解问题,然后描述提出的模型QANet:它是仅由卷积和self-attention组成的前馈模型,这种组合在经验上是有效的,也是我们工作的新颖贡献 。

2.1 问题定义

本文考虑的阅读理解任务定义如下。给定具有 n n 个单词 C = { c 1 , c 2 , , c n } C=\{c_1,c_2,\dots,c_n\} 的上下文段落和具有 m m 个单词 Q = { q 1 , q 2 , , q m } Q=\{q_1,q_2,\dots,q_m\} 的问题语句,从原始段落 C C 中输出的跨度为 S = { c i , c i + 1 , , c i + j } S=\{c_i,c_{i+1},\dots,c_{i+j}\} 。下面,对于任何 x C , Q x∈C,Q ,我们将使用 x x 表示原始单词及其嵌入的向量。

2.2 模型介绍

在这里插入图片描述
  我们模型的高层结构类似于大多数现有模型,其中包含五个主要组件:嵌入层,嵌入编码器层,上下文问题注意力层,模型编码层和输出层,如图1所示。这些是大多数(但不是全部)现有阅读理解模型的标准构建块。但是,我们的方法与其他方法之间的主要区别如下:对于嵌入编码器层和模型编码层,我们仅使用卷积和self-attention机制,舍弃了大多数现有阅读理解模型所使用的RNN。结果时,我们的模型更快,因为它可以并行处理输入字符。请注意,即使在 Vaswani et al. (2017a)中已经广泛使用了self-attention,但卷积和self-attention的组合是新颖的,并比单独的self-attention要好得多,而且在我们的实验中获得了2.7 F1的增益。卷积的使用还使我们能够利用ConvNets中常见的正则化方法,例如随机深度(层dropout),这在我们的实验中额外获得了0.2 F1的增益。
  详细地说,我们的模型由以下五层组成:
  (1)输入嵌入层
  我们采用标准技术,通过将每个单词w的单词嵌入和字符嵌入进行串联来获得每个单词 w w 的嵌入。
  单词嵌入来自于 p 1 = 300 p_1 = 300 维的预训练GloVe单词向量,该向量在训练过程中是固定的。所有的词典外字被映射到一个字符,其嵌入被随机初始化并且是可训练的。
  字符嵌入的获得方式如下:每个字符表示为一个维度为 p 2 = 200 p_2 = 200 的可训练向量,这意味着每个单词都可以看作是每个字符的嵌入向量的串联。每个单词的长度被截断或填充为16。我们采用此矩阵每一行的最大值,以获得每个单词的固定大小的矢量表示。最后,该层给定单词 x x 的输出是串联 [ x w ; x c ] R p 1 + p 2 [x_w;x_c]∈\pmb R^{p_1 + p_2} ,其中 x w x_w x c x_c 分别是单词嵌入和 x x 的字符嵌入的卷积输出。继Seo et al. (2016),我们还采用了两层highway网络。为简单起见,我们还使用 x x 表示该层的输出。
  (2)嵌入编码层
  编码器层是由以下基本构建块组成的堆栈: [ C o n v o l u t i o n L a y e r × # + S e l f A t t e n t i o n L a y e r + F e e d F o r w a r d L a y e r ] [ConvolutionLayer × \# + SelfAttentionLayer + FeedForwardLayer] ,如图1右上方所示。我们使用深度可分离卷积,而不是传统的方法,因为我们观察到它具有较高的存储效率并且具有更好的泛化性。内核大小为 7 7 ,过滤器数为 d = 128 d=128 ,一个块内的conv层数为 4 4 。对于self-attention,我们采用 (Vaswani et al., 2017a)中定义的多头注意力机制,它针对输入中的每个位置(称为query),根据query和key之间的相似度(由点积测量),计算输入中所有位置或key的加权总和。在所有层中,头数量为 8 8 。每个基本操作(conv/self-attention/ffn)都放在一个残差块内,如图1右下所示。对于输入 x x 和给定的操作 f f ,输出为 f ( l a y e r n o r m ( x ) ) + x f(layernorm(x)) +x ,表示从每个块的输入到输出都有完整的唯一路径,其中 l a y e r n o r m layernorm 表示(Ba et al., 2016)中提出的层正规化。编码器块的总数为 1 1 。请注意,此层的输入是每个单个单词的维 p 1 + p 2 = 500 p_1+p_2=500 的向量,该向量立即通过一维卷积映射到 d = 128 d=128 。该层的输出也是 d = 128 d=128
  (3)上下文问题注意力层
  在几乎所有以前的阅读理解模型中,该模块都是标准模块。我们使用 C C Q Q 表示编码的上下文和问题。上下文到问题的注意力构造如下:首先,我们对每对上下文和查询单词之间的相似度进行计算,以绘制相似度矩阵 S R n × m S∈\pmb R^{n×m} 。然后,我们通过应用 s o f t m a x softmax 函数对 S S 的每一行进行归一化,得到矩阵 S \overline S 。然后,将上下文到问题的注意力计算为 A = S Q T R n × d A=\overline S·Q^T∈\pmb R^{n×d} 。这里使用的相似性函数是三线性函数:
f ( q , c ) = W 0 [ q , c , q c ] , f(q,c)=W_0[q,c,q\odot c],
其中, \odot 是逐元素乘法,而 W 0 W_0 是可训练变量。
  大多数高性能模型还使用某种形式的问题到上下文注意,例如BiDaF和DCN。根据经验,我们发现,与仅应用上下文到问题的注意力相比,DCN的注意力能够提供一点好处,因此我们采用了这种策略。 更具体地说,我们通过softmax函数计算 S S 的列归一化矩阵 S \overline{\overline{S}} ,问题到上下文的注意力为 B = S S T C T B =\overline{S}·\overline{\overline{S}}^T·C^T
  (4)模型编码层
  与Seo et al. (2016)类似,该层在每个位置的输入为 [ c , a , c a , c b ] [c, a, c \odot a, c \odot b] ,其中a和b分别是一行注意矩阵 A A B B 。该层参数与“嵌入编码器层”相同,卷积层数在一个块内为 2 2 ,而块的总数为 7 7 。我们在模型编码层的3个重复块中的每个之间共享权重。
  (5)输出层
  该层是特定于任务的。SQuAD中的每个样例在包含答案的上下文中都标有一个跨度。我们采用Seo et al. (2016)的策略来预测上下文中每个位置作为答案范围的开始或结束的概率。更具体地说,开始位置和结束位置的概率建模为:
p 1 = s o f t m a x ( W 1 [ M 0 ; M 1 ] ) , p 2 = s o f t m a x ( W 2 [ M 0 ; M 2 ] ) , p^1 = softmax(W_1[M_0; M_1]), p^2 = softmax(W_2[M_0; M_2]),
其中 W 1 W_1 W 2 W_2 是两个可训练变量, M 0 , M 1 , M 2 M_0,M_1,M_2 从下到上分别是三个模型编码器的输出。跨度的分数是其开始位置和结束位置概率的乘积。最后,目标函数定义为由真实的开始和结束索引预测分布的负对数概率的和,在所有训练样例中取其平均值:
L ( θ ) = 1 N i N [ l o g ( p y i 1 1 ) + l o g ( p y i 2 2 ) ] , L(\theta)=\frac{1}{N}\sum^N_i[log(p^1_{y_i^1})+log(p^2_{y_i^2})],
其中 y i 1 y_i^1 y i 2 y_i^2 分别是样例 i i 的真实开始和结束位置, θ θ 包含所有可训练变量。可以将提出的模型定制为其他理解任务,例如,通过相应地更改输出层,从候选答案中进行选择。
  (6)推理
  在推理时,通过使 p s 1 p e 2 p^1_sp^2_e 最大化并且 s e s≤e 来选择预测范围 ( s , e ) (s,e) 。标准动态编程可以获得线性时间的结果。

3.通过反向翻译的数据增强

在这里插入图片描述
  由于我们的模型速度很快,因此我们可以使用更多数据进行训练。因此,我们将模型与简单的数据增强技术结合起来以丰富训练数据。这个想法是使用两种翻译模型,一种是英语到法语(或任何其他语言)的翻译模型,另一种是法语到英语的翻译模型,以获取文本的复述。这种方法有助于自动增加所有基于语言的任务(包括我们感兴趣的阅读理解任务)的训练数据量。随着数据的增加,我们期望更好地规范我们的模型。扩充过程在图2中以法语为中心语言进行了说明。
  在这项工作中,我们考虑了基于注意力的神经机器翻译(NMT)模型Bahdanau et al.(2015); Luong et al. (2015),作为我们数据增强渠道的核心模型,其显示出卓越的翻译质量。具体来说,我们利用y Luong et al. (2017)提供的可公开获得的代码库,该模型复制了Google的NMT(GNMT)系统。我们在公共WMT数据上针对英语-法语(3600万个句子对)和英语-德语(450万个句子对)训练了4层GNMT模型。所有数据都已字符化,并按Luong et al. (2017)的描述分词。所有模型都共享相同的超参数,并以不同的步数进行训练,英语到法语为2M,英语到德语为340K。我们的英语到法语系统在newstest2014上翻译成法语的水平达到36.7 BLEU,在相反的方向上达到35.9 BLEU。对于英语到德语,在newstest2014上,我们获得27.6 BLEU的翻译成德语,获得29.9 BLEU的反向翻译。
  我们的复述过程按以下方式工作,假设以法语为中心语言。首先,我们将输入序列输入到英语到法语模型的集束解码器中,以获得 k k 个法语翻译。然后,每个法语翻译都将通过反向翻译模型的集束解码器,以获得输入序列的总共 k 2 k^2 个复述。
  (1)相关工作
  虽然反向翻译的概念之前已经介绍过了,但它通常用于改进相同的翻译任务或内在复述评估。我们的方法是一种新颖的反向翻译应用,它可以丰富下游任务(在本例中为问答QA任务)的训练数据。 值得注意的是(Dong et al., 2017) 使用复述技术来改善QA;但是,它们只是解释问题,而不像我们在本文中那样关注数据增强方面。
  (2)处理SQuAD文档和答案
  现在,我们讨论处理SQuAD数据集的具体过程,这对于获得最佳性能至关重要。请记住,每个SQuAD训练样例都是一个三元组 ( d , q , a ) (d,q,a) ,其中文档 d d 是具有答案 a a 的多句段落。复述时,我们将问题 q q 保持不变(以避免意外更改其含义)并生成新三元组 ( d , q , a ) (d',q,a') ,以便新文档 d d' 中具有新答案 a a' 。该过程分为两个步骤:
  (a)文档复述。将d复述为 d d' ;
  (b)答案提取。从 d d' 中提取与 a a 紧密匹配的 a a'
  对于文档复述步骤,我们首先将段落拆分为句子,然后将其独立复述。我们使用 k = 5 k=5 ,因此每个句子有25个复述选择。通过简单地将 d d 中的每个句子替换为随机选择的复述即可形成新文档 d d' 。这种朴素方法的一个明显问题是原始答案 a a 可能不再存在于 d d' 中。
  答案提取解决了上述问题。令 s s 为包含原始答案 a a 的原始句子, s s' 为其复述。我们通过简单的启发式方法来确定新近解释的答案,如下所示。计算 s s' 中的每个单词与 a a 的开始/结束单词之间的字符级2-gram分数,以查找 s s' 中可能答案的开始和结束位置。在所有候选复述答案中,相对于 a a 具有最高字符2-gram得分的一个被选为新答案 a a' 。表1显示了此过程找到的新答案的示例。
在这里插入图片描述
  复述的质量和多样性是数据增强方法的关键。仍然有更好地方法增加数据增强的质量和多样性。使用更好的翻译模型可以提高质量。例如,我们发现复述比模型的最大训练序列长度明显长于中间。 通过在集束搜索解码期间进行采样以及对数据集中的问题和答案进行复述,可以改善多样性。此外,我们可以将此方法与其他数据增强方法(例如类型交换方法)结合使用,以获取更多的复述多样性。
  在我们的实验中,我们观察到所提出的数据增强可以在准确性方面带来不小的改进。我们认为该技术还可以应用于其他有监督的自然语言处理任务,尤其是在训练数据不足时。

猜你喜欢

转载自blog.csdn.net/qq_28385535/article/details/106113473
今日推荐