赞
踩
《原始论文:Bidirectional Attention Flow for Machine Comprehension》
作者想要研究的问题是什么?一一在当下注意力机制迅速发展的时代,Attention机制在一定成都 上存在问题,比如都是最后得到一个固定的vectors,或者只有单向的。
如何对Attention机制进行改进,使其捕获更加丰富的语义信息。
针对单向的Attention机制,作者提出了双向Attention注意力机制用于MRC任务。
实验的结果在两个数据集上取得了好的效果。
在2016年,注意力机制已经被很广泛地应用,在机器阅读理解(machine comprehension, MC)中,注意力机制被用于聚焦上下文中与问题最相关的一段,从而实现一种信息提取的作用。以前工作中的attention机制通常具有以下一个或多个特征。
MRC模型主要包括 Embeeding层、Encoder编码层、Interaction交互层、Answer作答层。
抽取式MRC是要在文档中定位问题的答案。模型输入是【Passage,Question】,模型输出是【start_idx,end_idx】∈ [ 0, len(passage) ]。
BiDAF共有6层,分别是Character Embedding Layer、Word Embedding Layer、Contextual Embedding Layer、Attention Flow Layer、Modeling Layer和Output Layer。
假设context为 { x 1 , … , x T } \left\{ \boldsymbol { x } _ { 1 } , \dots , \boldsymbol { x } _ { T } \right\} {x1,…,xT} ,query为 { q 1 , … q J } \left\{ \boldsymbol { q } _ { 1 } , \ldots \boldsymbol { q } _ { J } \right\} {q1,…qJ}。
为context和query中每一个词使用字符级嵌入, 使用的是字符级的CNN,具体做法是:字符嵌入到向量中,可以将其视为CNN的1D输入,其大小是CNN的输入信道大小。CNN的输出在整个宽度上max-pooling,以获得每个字的固定大小的嵌入向量。
Character embedding组成一个word的话是一个matrix,对这个matrix进行卷积+池化操作就可以得到对应word的embedding了。
词嵌入层就是普通的词嵌入方法,这里使用的是Glove的预训练词向量。
然后将字符级的嵌入和词嵌入拼接在一起(按每一个词拼接)经过一个两层的Highway Network,从而得到context vector X ∈ R d × T \mathbf { X } \in \mathbb { R } ^ { d \times T } X∈Rd×T 和 query vector Q ∈ R d × J \mathbf { Q } \in \mathbb { R } ^ { d \times J } Q∈Rd×J。这时我们得到了问题和上下文中每一个词的 embedding。
对于Highway Network可以这么理解:
原本是y=f(x)
现在是y=αf(x)+(1-α)x
类似于一个Residual,据说ResNet有抄袭Highway Network之嫌。
Highway Network使得所有原始信息部分激活进入下一层、部分不激活直接进入下一层,保留了更多原始信息。同时反向传播的时候,可以避免梯度消失。
Highway Network的结构一般用在将char embedding卷积成word embedding时候,可以获得更好地词向量。
该层其实是一个编码器,分别对上一步得到的X和Q分别编码,编码的是X和Q句子内部的联系,与Match-LSTM类似,这一层是一层BiLSTM,输入上述embedding,输出hidden states,使得每个位置上获得上下文信息。
这样的到了上下文编码 H ∈ R 2 d × T \mathbf { H } \in \mathbb { R } ^ { 2 d \times T } H∈R2d×T 以及问题编码 U ∈ R 2 d × J \mathbf { U } \in \mathbb { R } ^ { 2 d \times J } U∈R2d×J。
到这层为止,上下文和问题原始文本已经整合成具有多层级不同粒度的表征(character, word, phrase)。
步骤1、2、3 使得Passage和Question同时具备了Word、Char、Sentence三层信息。
原文是这样介绍BiDAF:
The attention flow layer is not used to summarize the query and context into single feature vectors. instead, the attention vector at each time step, along with the embedding from previous layers, are allowed to flow through to the subsequent modeling layer. This reduces the information loss caused by early summarization.
交互层,用于融合Paasge和Question的信息。包括:
该层输入是 H H H 和 U U U,输出是具有问题感知的上下文表征 G G G。
首先计算 H H H 和 U U U 的相似度矩阵 S ∈ R T × J \mathbf { S } \in \mathbb { R } ^ { T \times J } S∈RT×J :
S t j = α ( H t , U i j ) ∈ R \mathbf { S } _ { t j } = \alpha \left( \mathbf { H } _ { t } , \mathbf { U } _ { i j } \right) \in \mathbb { R } Stj=α(Ht,Uij)∈R
后面用得到的 S S S 作为共享相似矩阵context-to-query(C2Q)以及query-to-context(Q2C)两个方向的 attention,其中每 i i i 行表示的是上下文文本中第 i i i 个词与问题文本中每一个词之间的相似度,第 j j j 列表示的是问题中第j个词与上下文文本中每一个词的相似度。
下面是两个方向的注意力的计算方式:
这时就得到了 U ~ \widetilde{U} U 和 H ~ \widetilde{H} H ,这两个矩阵都是 2 d × T 2d\times{T} 2d×T 的。
得到了
U
~
\widetilde{U}
U
、
H
~
\widetilde{H}
H
两个注意力方向的新的问题编码和文本编码之后,添加上第3层得到的上下文编码
H
:
t
H_{:t}
H:t,经过一个MLP的函数
β
\beta
β 将两者拼接起来得到问题感知的上下文文本表示
G
G
G,即
G
:
t
=
β
(
H
:
t
,
U
~
t
,
H
~
:
t
)
∈
R
d
G
G _ { : t } = \beta \left( H _ { : t } , \widetilde{ U } _ { t } , \widetilde{ H } _ { : t } \right) \in R ^ { d G }
G:t=β(H:t,U
t,H
:t)∈RdG
实验中尝试比较好的拼接方式为 β ( h , u ~ , h ~ ) = [ h ; u ~ ; h ⊙ u ~ ; h ⊙ h ~ ] ∈ R 8 d ∗ T \beta ( h , \widetilde{ u } , \widetilde{ h } ) = [ h ; \widetilde{ u } ; h \odot \widetilde{ u } ; h \odot \widetilde{ h } ] \in R ^ { 8 d * T } β(h,u ,h )=[h;u ;h⊙u ;h⊙h ]∈R8d∗T。
编码层输入是上层的输出 G G G,再经过一次 Bi-LSTM 得到 M ∈ R 2 d ∗ T M \in R ^ { 2 d * T } M∈R2d∗T,这一层的作用和第三层的作用一样,都是来捕获输入矩阵的在时序上依赖关系,从结果上看则是一层编码降维的过程,与第三层不同的是,这一层的编码向量里面是与问题相关的表征。
这一层和以往的QA任务使用的一样,输出层就是用来预测答案起始位置 p 1 \mathbf {p}^1 p1 和结束位置 p 2 \mathbf {p}^2 p2 的,起始位置计算公式如下:
p 1 = softmax ( W ( p 1 ) T [ G ; M ] ) p ^{ 1 } = \operatorname { softmax } \left( W _ { \left( p ^ { 1 } \right) } ^ { T } [ G ; M ] \right) p1=softmax(W(p1)T[G;M])
预测终止位置时M需要经过另一个双向LSTM得到 M 2 = B i L S T M ( M ) ∈ R 2 d × T \mathbf { M } ^ { 2 } =BiLSTM(M)\in \mathbb { R } ^ { 2 d \times T } M2=BiLSTM(M)∈R2d×T :
p 2 = softmax ( W ( p 2 ) T [ G ; M 2 ] ) p ^{ 2 } = \operatorname { softmax } \left( W _ { \left( p ^ { 2 } \right) } ^ { T } \left[ G ; M ^ { 2 } \right] \right) p2=softmax(W(p2)T[G;M2])
最后训练时的损失函数为:
L ( θ ) = − 1 N ∑ i N [ log ( p y i 1 1 ) + log ( p y i 2 2 ) ] L ( \theta ) = - \frac { 1 } { N } \sum _ { i } ^ { N } \left[ \log \left( p _ { y _ { i } ^ { 1 } } ^ { 1 } \right) + \log \left( p _ { y _ { i } ^ { 2 } } ^ { 2 } \right) \right] L(θ)=−N1i∑N[log(pyi11)+log(pyi22)]
其中 y i 1 y _ { i } ^ { 1 } yi1 和 y i 2 y _ { i }^2 yi2 是真实的起始终止位置。
这篇阅读笔记关注点在于模型的实现,因为时间较早,实验自然结果比以往模型取得的性能要好但是毕竟过去一年了尤其BERT出来以后,,,,它的结果更加。。。不再赘述。
在提交时,我们的BIDAF模型在竞争激烈的斯坦福问答数据集(SQuAD)测试集排行榜上的表现 优于以前的所有方法。
实验数据集使用的是SQuAD还有一个完形填空阅读理解任务(这里不在列出,有兴趣可以看原文)。SQuAD是斯坦福问题回答数据集,这是一个阅读理解数据集,最大特点是所回答的答案是给出段落的一个片段(现在已经出了SQuAD2.0,详细需要访问The Stanford Question Answering Dataset,比较详细而且给出了目前较新的性能)。
实验结果如图1所示:
目前该模型在SQuAD1.0的排行是42名,最高的如BERT的
F
1
F_1
F1 已经达到91.221,但是需要明白该模型的亮点在于双向注意力机制的提出,这种双向注意力机制在QA任务中充当编码器或者推理单元中的一环对后续的性能产生更大的影响,这才是最为重要的。
通过只修改输出层(将Pointer-Net改为一个线性层+Softmax用于Cloze Text的答案分类),BIDAF在CNN/DailyMail完形填空测试中获得了最先进的结果。
关键点:
创新点:
启发点:
参考资料:
Match-LSTM & BiDAF
机器阅读理解系列文章-BiDAF(Bi-Directional Attention Flow for Machine Comprehension)
基于R-Net、QA-Net和BiDAF实现中文观点型问题机器阅读理解
独家 | 图解BiDAF中的单词嵌入、字符嵌入和上下文嵌入(附链接)
阅读理解-bidaf模型
机器阅读理解之BiDAF模型
阅读理解之(bidaf)双向注意力流网络
BiDAF:机器理解之双向注意力流
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。