文章目录
ABSTRACT
机器阅读理解(machine comprehension,MC),即根据上下文段落回答问题,要求对上下文和问题之间的复杂交互进行建模。最近,注意力机制成功应用在MC上。特别是这些模型使用attention对context的部分内容进行专注,并简化成特定大小的向量,有时结合attention,或是构造uni-directional attention。本文介绍Bi-Directional Attention Flow (BIDAF),多阶段的多层次的处理,把文本表现成不同级别上的粒度,并使用bidirectional attention flow mechanism 获得没有摘要抽取的问题的文本表示。实验表示,模型在Stanford Question Answering Dataset (SQuAD) 和CNN/DailyMail cloze test获得最好的结果。
1 INTRODUCTION
机器阅读理解machine comprehension (MC) 和问答系统question answering (QA)在NLP和CV获得很大的发展。系统在text和image上训练end-to-end模型,获得预期结果。促进进步的重要因素是neural attention的使用,允许系统专注context的部分内容(MC),或是图像的一部分(Visual QA),这和回答问题相似。之前和attention相关的工作有如下的特征:
- 1 、计算好的attention权重通常用来抽取上下文最相关的特征来回答问题,并把上下文概括成特定长度的向量。
- 2、在text领域中,他们通常是temporally dynamic,因此当前time step的attention weight是之前time step的获得向量的函数。
- 3、通常使用uni-bidirectional 模型,问题通常在上下文或图像获得。
本文介绍了Bi-Directional Attention Flow (BIDAF)网络,一个层次级多阶段架构,在不同粒度上对上下文段落的表示进行建模。BIDAF包括了字符级,词级和上下文词嵌入,并使用 bi-directional attention flow获得具有问题意识的上下文表示。我们的attention具有以下的改进:
- attention层不是用来概括上下文段落,并获得特定大小的向量。而是在每步计算attention,并获得向量,伴随之前的层,允许流通到接下来的层。这降低了概括造成的损失。
- 使用内存占用更少的attention机制。当顺着时间计算attention时,在每个time step的attention是当前time step的问题和上下文段落的函数,不依赖于之前time step的attention。我们假设这个简化导致attention层和建模层的分工合作。这迫使attention层专注学习query和context之前的attention,允许建模层专注学习具有问题意识的上下文表示(即attention层的输出)query-aware context representation (the output of the attention layer)。这允许每个time step的attention不受之前time step的错误结果的影响。
- 在两个方向上使用attention机制,query-to-context and context-to-query,提供互补信息。
2 MODEL
模型包括6层:
- 1 Character Embedding Layer:通过character-level的CNNs,把每个词映射到向量空间。
- 2 Word Embedding Layer:通过训练好的word embedding将每个词映射到一个向量空间。
- 3 Contextual Embedding Layer :从周围词中使用情境线索过滤词嵌入。query和context都使用了3个层。
- 4 Attention Flow Layer:结合query和context向量获得具有context中每个词具有query-aware特征的向量。
- 5 Modeling Layer:使用RNN扫描context。
- 6 Output Layer:对query提供一个答案。
1 Character Embedding Layer
字符嵌入层主要把每个词映射到高维向量空间。 x 1 , . . . , x T x_1, ..., x_T x1,...,xT和 q 1 , . . . , q J {q_1, ..., q_J} q1,...,qJ输入上下文段落和query的词语,每个词语使用CNN获得字符级的词嵌入。字符映射成向量,可以认为是CNN的1D输入,大小是CNN的输入通道的大小。CNN的输入进行max-pooled获得每个词的特定长度的向量。
2 Word Embedding Layer
把每个词映射到高维向量空间。使用训练好的向量,GloVe,获得每个词的固定词嵌入。
character和word的向量进行concatenation,输入到两层的highway网络,highway网络的输入时d维向量,也就是矩阵,即context输出 X ∈ R d ∗ T X \in R^{d*T} X∈Rd∗T和query输出 Q ∈ R d ∗ J Q \in R^{d*J} Q∈Rd∗J
3 Contextual Embedding Layer
在前两层的后面使用LSTM,获得词语之间的时间信息。LSTM使用双向,对两个LSTM的输出进行concatenation,从上下文词的向量 X X X获得 H ∈ R 2 d ∗ T H \in R^{2d*T} H∈R2d∗T,query的词向量 Q Q Q获得 U ∈ R 2 d ∗ J U \in R^{2d*J} U∈R2d∗J, H H H和 U U U是2d,因为是前向LSTM和后向LSTM的concatenation,每个都是d维的输出。
前三层都是从不同的粒度计算query和context的特征,和CNN的多尺度特征相似。
4 Attention Flow Layer
这层是连接和融合context和word的信息。和之前流行的attention机制不同, attention flow layer不用来概括query和context获得单个特征向量。相反的,每个time step的attention向量,和前一层的embedding可以传入到模型接下来的其他层,这可以降低由于概括而导致的信息损失。
这层的输入是上下文 H H H和问题 U U U的上下文向量表示。输出是具有问题意识的上下文词语的向量表示,还有前一层的上下文的词嵌入。
这层从两个方向计算attention:context到query和query到context,共享同一个矩阵 S ∈ R T ∗ J S \in R^{T*J} S∈RT∗J,在context H H H和query U U U的上下文embedding之间。 S t j S_{tj} Stj表示第 t t t个context词和第 j j j个query词的相似度,相似矩阵的计算如下:
(1) S t j = α ( H : t , U : j ) ∈ R S^{tj}=\alpha(H_{:t}, U_{:j}) \in R \tag{1} Stj=α(H:t,U:j)∈R(1)
α \alpha α是可训练数量,表示两个输入向量的相似度, H : t H_{:t} H:t是 H H H的第 t t t列向量, U : j U_{:j} U:j是 U U U的第 j j j列向量
5 Modeling Layer
建模层的输入是 G G G,它对上下文单词的查询感知表示进行编码。 建模层的输出捕获以查询为条件的上下文单词之间的交互。 这与上下文嵌入层不同,上下文嵌入层捕获独立于查询的上下文单词之间的交互。 我们使用两层双向LSTM,每个方向的输出大小为 d d d。 因此,我们获得矩阵 M ∈ R 2 d ∗ T M \in R^{2d*T} M∈R2d∗T,其被传递到输出层以预测答案。 期望M的每个列向量包含关于整个上下文段落和查询的词的上下文信息
6 Output Layer
输出层是特定于应用程序的。 BIDAF的模块化特性允许我们可以根据任务轻松更换输出层,其余的架构保持完全相同。 在这里,我们描述了QA任务的输出层。 在第5节中,我们对此输出图层进行了略微修改,以实现完美形式的理解。
QA任务要求模型查找段落的子短语以回答查询。该短语是通过预测段落中短语的开始和结束索引得出的。 我们得到整个段落的起始索引的概率分布,如下:
(3) p 1 = s o f t m a x ( w ( p 1 ) T [ G ; M ] ) p^1=softmax(w^T_{(p^1)}[G;M]) \tag{3} p1=softmax(w(p1)T[G;M])(3)
w ( p 1 ) ∈ R 10 d w_{(p^1)} \in R^{10d} w(p1)∈R10d是可训练权重向量,在答案短语的最好一个下标,把 M M M传递到另一个双向LSTM层,获得 M 2 ∈ R 2 d ∗ T M^2 \in R^{2d*T} M2∈R2d∗T。然后使用、 M 2 M^2 M2依据相似的方式,获得最后下标的概率分布:
(4) p 2 = s o f t m a x ( w p 2 T [ G ; M 2 ] ) p^2=softmax(w^T_{p^2}[G;M^2]) \tag{4} p2=softmax(wp2T[G;M2])(4)
训练 我们将训练损失(最小化)定义为真实开始和结束指数的负对数概率与预测分布的总和,在所有示例中取平均值:
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_ilog(p^1_{y^1_i})+log(p^2_{y^2_i}) L(θ)=−N1i∑Nlog(pyi11)+log(pyi22)
其中 θ \theta θ是模型中所有可训练权重的集合(CNN滤波器和LSTM单元的权重和偏差, w ( S ) w_{(S)} w(S), w p 1 w_{p^1} wp1和 w p 2 w_{p^2} wp2), N N N是数据集中的示例数, y i 1 y^1_i yi1和 y i 2 y^2_i yi2分别是第i个例子的真开始和结束索引,pk表示向量p的第k个值。
测试 选择答案跨度 ( k , l ) (k,l) (k,l),其中 k < = l k <=l k<=l,最大值为 p k 1 p l 2 p^1_kp^2_l pk1pl2,可以通过动态编程以线性时间计算。
3 RELATED WORK
机器理解。 推动MC模型的一个重要因素是大型数据集的可用性。 早期的数据集如MCTest(Richardson等,2013)太小,无法训练端到端的神经模型。 大规模完形填空测试数据集(Hermann等人的CNN / ailyMail(2015)和Hill等人的儿童书籍测试(2016))使深度神经架构的应用成为可能。 最近,Rajpurkar等人。 (2016)发布了超过100,000个问题的斯坦福问答(SQUAD)数据集。 我们在SQuAD和CNN / DailyMail数据集上评估我们的理解系统的性能。
以前在端到端机器理解方面的工作以三种不同的方式使用注意机制。 第一组(主要受到Bahdanau等人(2015)的启发)使用动态注意机制,其中注意权重在查询和上下文以及先前的注意力下动态更新。 赫尔曼等人。 (2015)认为动态关注模型比使用单个固定查询向量更好地参与CNN和DailyMail数据集上的上下文单词。 陈等人。 (2016)表明,简单地使用双线性项来计算同一模型中的注意力量可以大大提高准确性。 Wang&Jiang(2016)反转了SQuAD的关注方向(作为上下文RNN进展的查询词)。 与这些模型相比,BIDAF使用无记忆的注意机制。
第二组计算注意权重一次,然后将其输入到输出层以进行最终预测(例如,Kadlec等人(2016))。 注意力过度关注模型(Cui et al。,2016)使用
查询和上下文词之间的二维相似度矩阵(类似于等式1),以计算查询到上下文关注的加权平均值。 与这些模型相比,BIDAF没有总结注意层中的两种模态,而是让注意向量流入建模(RNN)层。
第三组(被视为存储网络的变体(Weston等,2015))重复通过多层(通常称为多跳)计算查询和上下文之间的注意向量(Sordoni等,2016; Dhingra) 等人,2016)。 沉等人。 (2016)将Memory Networks与强化学习相结合,以动态控制跳数。 我们还可以扩展我们的BIDAF模型以包含多个跃点。
视觉问题回答。问答的任务也引起了人们对计算机视觉社区的极大兴趣。关于视觉问答(VQA)的早期工作涉及使用RNN对问题进行编码,使用CNN对图像进行编码并将它们组合以回答问题(Antol等,2015; Malinowski等,2015)。注意机制也已成功用于VQA任务,并且可以基于其注意力的粒度和构建注意矩阵的方法进行广泛聚类。在粗略的粒度级别,问题出现在图像中的不同斑块(Zhu等人,2016; Xiong等人,2016a)。在更精细的层面上,每个问题词都出现在每个图像块上,并且每个空间位置的最高注意力值都被采用(Xu&Saenko,2016)。混合方法是将问题表示组合在多个粒度级别(unigrams,bigrams,trigrams)(Yang et al。,2015)。已经使用了几种构建注意矩阵的方法,包括元素乘积,元素和,串联和多模紧致双线性池(Fukui等,2016)。
Lu等人。 (2016)最近已经表明,除了从问题出现到图像补丁之外,从图像回到问题词还提供了对VQA任务的改进。视觉领域的这一发现与我们在语言领域的发现是一致的,我们在查询和上下文之间的双向关注提供了改进的结果。然而,他们的模型直接在输出层使用注意力,并没有利用建模层的注意力流。