赞
踩
本文介绍常见机器阅读理解模型中的R-NET、FusionNet和QA-Net。
R-Net1在Attention计算中加入门机制。
作者引入了一个端到端的网络模型来解决基于给定文章回答问题的阅读理解问答任务。首先使用门控的基于注意力的循环网络来匹配问题和文章,以获得问题感知的文章表示。
作者提出了一个自匹配的注意力机制来改善文章表示,通过与文章自己进行匹配,这能有效的编码整个文章的信息。
最后应用指针网络来从文章中定位答案。
主要贡献在三个方面:
模型由四部分组成:
下面我们分别看下具体四部分的细节。
首先,一个双向RNN分别为文章和问题编码。然后基于门控注意力RNN匹配问题和文章,获取文章的问题感知表示。接着,应用自匹配注意力从整篇文章中获得信息来修正文章表示。最后喂给输出层去预测答案片段的边界。
给定一个问题 Q = { w t Q } t = 1 m Q=\{w^Q_t\}_{t=1}^m Q={wtQ}t=1m和一篇文章 P = { w t P } t = 1 n P=\{w_t^P\}_{t=1}^n P={wtP}t=1n,首先将这些单词转换为相应的单词级嵌入向量(分别是 { e t Q } t = 1 m \{e^Q_t\}_{t=1}^m {etQ}t=1m和 { e t P } t = 1 n \{e_t^P\}_{t=1}^n {etP}t=1n)和字符级嵌入向量( { c t Q } t = 1 m \{c^Q_t\}_{t=1}^m {ctQ}t=1m和 { c t P } t = 1 n \{c_t^P\}_{t=1}^n {ctP}t=1n)。
通过将单词中的字符嵌入喂给双向RNN,得到最后的隐藏状态作为单词的字符级嵌入。这种字符级嵌入能很好地处理未登录词问题。
然后使用双向RNN来分别产生问题和文章中每个单词的新的表示
u
1
Q
,
⋯
,
u
m
Q
u_1^Q,\cdots,u_m^Q
u1Q,⋯,umQ和
u
1
P
,
⋯
,
u
n
P
u_1^P,\cdots,u_n^P
u1P,⋯,unP:
u
t
Q
=
BiRNN
Q
(
u
t
−
1
Q
,
[
e
t
Q
,
c
t
Q
]
)
(1)
u^Q_t = \text{BiRNN}_Q (u^Q_{t-1},[e^Q_t,c_t^Q]) \tag{1}
utQ=BiRNNQ(ut−1Q,[etQ,ctQ])(1)
u t P = BiRNN P ( u t − 1 P , [ e t P , c t P ] ) (2) u^P_t = \text{BiRNN}_P (u^P_{t-1},[e^P_t,c_t^P]) \tag{2} utP=BiRNNP(ut−1P,[etP,ctP])(2)
论文中使用具体使用的RNN模型为GRU。
作者提出了一个门控注意力循环网络将问题信息融入文章表示中。门控用来控制文章中单词对于问题的重要性。给定义一个问题和文章表示
{
u
t
Q
}
t
=
1
m
\{u_t^Q\}_{t=1}^m
{utQ}t=1m和
{
u
t
P
}
t
=
1
n
\{u_t^P\}_{t=1}^n
{utP}t=1n,Rocktäschel等人提出了通过软对齐问题和文章中的单词生成句子对表示
{
v
t
P
}
t
=
1
n
\{v_t^P\}_{t=1}^n
{vtP}t=1n:
v
t
P
=
RNN
(
v
t
−
1
P
,
c
t
)
(3)
v_t^P=\text{RNN}(v_{t-1}^P,c_t) \tag{3}
vtP=RNN(vt−1P,ct)(3)
其中
c
t
=
a
t
t
(
u
Q
,
[
u
t
P
,
v
t
−
1
p
]
)
c_t=att(u^Q,[u^P_t,v^p_{t-1}])
ct=att(uQ,[utP,vt−1p])是一个整个问题
(
u
Q
)
(u^Q)
(uQ)的注意力池化(attention-pooling)向量:
s
j
t
=
v
T
tanh
(
W
u
Q
u
j
Q
+
W
u
P
u
t
P
+
W
v
P
v
t
−
1
P
)
a
i
t
=
exp
(
s
i
t
)
/
∑
j
=
1
m
exp
(
s
j
t
)
c
t
=
∑
i
=
1
m
a
i
t
u
i
Q
(4)
s_j^t = v^T \tanh(W^Q_u u_j^Q + W_u^P u_t^P + W_v^P v_{t-1}^P)\\ a_i^t =\exp(s_i^t)/\sum_{j=1}^m \exp(s^t_j) \\ c_t = \sum_{i=1}^m a_i^t u_i^Q \tag{4}
sjt=vTtanh(WuQujQ+WuPutP+WvPvt−1P)ait=exp(sit)/j=1∑mexp(sjt)ct=i=1∑maituiQ(4)
每个文章表示
v
t
P
v^P_t
vtP动态地融入从整个问题中聚集的匹配信息。Wang等人2引入了match-LSTM,使用
u
t
P
u_t^P
utP作为RNN的一个额外的输入:
v
t
P
=
RNN
(
v
t
−
1
P
,
[
u
t
P
,
c
t
]
)
(5)
v_t^P = \text{RNN}(v_{t-1}^P,[u_t^P,c_t]) \tag{5}
vtP=RNN(vt−1P,[utP,ct])(5)
为了确定文章各部分的重要性,并注意与问题相关的部分,作者为RNN的输入(
[
u
t
P
,
c
t
]
[u_t^P,c_t]
[utP,ct])增加了另一个门:
g
t
=
sigmoid
(
W
g
[
u
t
P
,
c
t
]
)
[
u
t
P
,
c
t
]
∗
=
g
t
⊙
[
u
t
P
,
c
t
]
(6)
g_t = \text{sigmoid}(W_g[u^P_t ,c_t]) \\ [u_t^P,c_t]^* =g_t \odot [u_t^P,c_t] \tag{6}
gt=sigmoid(Wg[utP,ct])[utP,ct]∗=gt⊙[utP,ct](6)
与LSTM或GRU中的门不同,该额外的门是基于当前文章单词和它关于问题的注意力池化向量,侧重于问题和当前文章单词的相关性。该门有效地建模了阅读理解和问答中只有部分段落与问题相关的现象。
[
u
t
P
,
c
t
]
∗
[u_t^P,c_t]^*
[utP,ct]∗就是用来替换原来的
[
u
t
P
,
c
t
]
[u_t^P,c_t]
[utP,ct]在后面使用。作者称之为门控注意力循环网络。
经过上一层得到了关注文章重要部分的问题感知的文章表示 { v t P } t = 1 n \{v_t^P\}_{t=1}^n {vtP}t=1n。一个问题是这样的文章表示对上下文的知识非常有限。文章上下文是回答问题的重要条件。
为了解决这个问题,作者提出了直接让问题感知的文章表示与自己匹。这样能动态地从整个文章中收集单词的信息,并将与当前文章相关的信息及其匹配的问题信息编码到文章表示
h
t
P
h^P_t
htP中:
h
t
P
=
BiRNN
(
h
t
−
1
P
,
[
v
t
P
,
c
t
]
)
(7)
h^P_t =\text{BiRNN}(h^P_{t-1},[v^P_t,c_t]) \tag{7}
htP=BiRNN(ht−1P,[vtP,ct])(7)
其中
c
t
=
att
(
v
P
,
v
t
P
)
c_t=\text{att}(v^P,v^P_t)
ct=att(vP,vtP)是整个文章表示
v
P
v^P
vP的注意力池化向量:
s
j
t
=
v
T
tanh
(
W
v
P
v
j
P
+
W
v
P
~
v
t
P
)
a
i
t
=
exp
(
s
i
t
)
/
∑
j
=
1
n
exp
(
s
j
t
)
c
t
=
∑
i
=
1
n
a
i
t
v
i
P
(8)
s^t_j = v^T \tanh(W^P_vv_j^P + W_v^{\tilde{P}}v^P_t) \\ a^t_i =\exp(s_i^t)/\sum_{j=1}^n \exp(s^t_j) \\ c_t = \sum_{i=1}^n a^t_i v_i^P \tag{8}
sjt=vTtanh(WvPvjP+WvP~vtP)ait=exp(sit)/j=1∑nexp(sjt)ct=i=1∑naitviP(8)
将门控注意力循环网络应用于
[
v
t
P
,
c
t
]
[v^P_t,c_t]
[vtP,ct],以自适应地控制RNN的输入。
自匹配根据当前文章的单词和问题信息,从整个文章中提取信息。
输出层采用了指针网络来预测答案的起止位置。同时,作者在问题表示上使用一个注意力池化来生成指针网络的初始隐藏向量。
给定文章表示
{
h
t
P
}
t
=
1
n
\{h^P_t\}_{t=1}^n
{htP}t=1n,注意力机制被当成一个指针来从原文中选择开始位置
p
1
p^1
p1和结束位置
p
2
p^2
p2,可以通过以下公式表示:
s
j
t
=
v
T
tanh
(
W
h
P
h
j
P
+
W
h
a
h
t
−
1
a
)
a
i
t
=
exp
(
s
i
t
)
/
∑
j
=
1
n
exp
(
s
j
t
)
p
t
=
arg
max
(
a
1
t
,
⋯
,
a
n
t
)
(9)
s^t_j = v^T\tanh(W^P_hh^P_j + W^a_hh^a_{t-1}) \\ a^t_i =\exp(s^t_i)/\sum_{j=1}^n \exp(s^t_j)\\ p^t = \arg\,\max(a^t_1,\cdots,a^t_n) \tag{9}
sjt=vTtanh(WhPhjP+Whaht−1a)ait=exp(sit)/j=1∑nexp(sjt)pt=argmax(a1t,⋯,ant)(9)
这里
h
t
−
1
a
h^a_{t-1}
ht−1a表示指针网络的上一个隐藏状态。指针网络的输入是基于当前预测概率
a
t
a^t
at的池化向量:
c
t
=
∑
i
=
1
n
a
i
t
h
i
P
h
t
a
=
RNN
(
h
t
−
1
a
,
c
t
)
(10)
c_t = \sum_{i=1}^n a^t_i h^P_i \\ h^a_t = \text{RNN}(h^a_{t-1},c_t) \tag{10}
ct=i=1∑naithiPhta=RNN(ht−1a,ct)(10)
当预测开始位置时,
h
t
−
1
a
h^a_{t-1}
ht−1a表示指针网络的初始隐藏状态。我们使用问题向量
r
Q
r^Q
rQ作为指针网络的初始状态。
r
Q
=
att
(
u
Q
,
V
r
Q
)
r^Q=\text{att}(u^Q,V^Q_r)
rQ=att(uQ,VrQ)是基于参数
V
r
Q
V^Q_r
VrQ问题注意力池化向量:
s
j
=
v
T
tanh
(
W
u
Q
u
j
Q
+
W
v
Q
V
r
Q
)
a
i
=
exp
(
s
i
)
/
∑
j
=
1
m
exp
(
s
j
)
r
Q
=
∑
i
=
1
m
a
i
u
i
Q
(11)
s_j = v^T \tanh(W^Q_uu^Q_j + W^Q_v V^Q_r) \\ a_i = \exp(s_i)/\sum_{j=1}^m \exp(s_j) \\ r^Q = \sum_{i=1}^m a_i u_i^Q \tag{11}
sj=vTtanh(WuQujQ+WvQVrQ)ai=exp(si)/j=1∑mexp(sj)rQ=i=1∑maiuiQ(11)
为了训练指针网路,作者最小化预测答案开始和结束位置的负对数似然损失之和。
FusionNet3引入了一种全新的网络结构,它从三个方法扩展了现有的注意力方法。首先,提出了一个新颖的“单词历史”概念,以描述从最低单词级别嵌入到最高语义级别表示的注意力信息。其次,确定了更好地利用“单词历史”概念的注意力评分函数。最后,提出了一种全感知(fully-aware)的多层次注意力机制,以捕获一个文本(如问题)中的完整信息,并相应地(比如在上下文或文章中)逐层利用它。
重要贡献之一便是对各种注意力方法对一个总结。
首先介绍一下机器阅读理解的概念架构图,然后引入了单词历史的概念,并提出了一种轻量级的实现。
在所有最先进的机器阅读理解架构中,都会有如下的重复模式。给定两组向量,A和B,我们使用集合B中的信息增强或修改集合A中的每个向量。我们称之为融合过程,其中集合B融合到集合A中。融合过程通常基于注意力,但有些不是。当时的MRC工作的主要改进方向在于融合过程的设计方式。
图2显示了最先进架构的概念架构,该架构由三个组件构成。
现在主要的三种融合过程。上图左边的表显示了不同网络结构使用的融合过程。
(1)单词级融合 通过向上下文(Context,或者说文章)提供直接的单词信息,我们可以快速放大上下文中更相关的区域。然而,如果一个单词基于上下文有不同的语义,此时可能用处不大。许多单词级别的融合不是基于注意力,例如有人在上下文单词中添加二进制特征,指示每个上下文单词是否出现在问题中。
(2)高层融合 融合问题中语义信息的上下文可以帮助我们找到正确的答案。但高层信息没有单词信息准确,这可能会导致模型对细节的了解不够。
(2’)高层融合(可选) 类似地,我们也能将问题的高层信息融入上下文的单词信息中。
(3)自提升融合 由于上下文可能会很长,而较远部分的文本可能需要互相依赖来充分理解文本信息。最近的研究建议将上下文融合到自身。由于上下文包含过多的信息,一个常见的选择是在融合问题Q后执行自提升融合(self-boosted fusion)。这使我们能够更好地了解与问题相关的区域。
(3’)自提升融合(可选) 另一种选择是直接在问题Q上调整自提升融合过程,比如DCN4论文中提出的共同注意力机制(coattention mechanism)。然后,我们可以在融合问题信息之前执行自提升融合。
现有融合机制的一个共同特点是,它们都没有同时使用所有层的表示。作者认为,应用所有层的表示信息是对达到更好的文本理解来说至关重要。
上图是一个展示单词历史的例子。下面给出它的翻译,方便分析:
上下文 高山莱茵河(Alpine Rhine)是莱茵的一部分,莱茵河是欧洲著名的河流。高山莱茵河始于瑞士格劳宾登州最西部,后来形成了瑞士西部和列支敦士登(Liechtenstein)之间的边界,后来是奥地利东部的边界。另一方面,多瑙河(Danube)将罗马尼亚和保加利亚分开。
问题 莱茵河(Rhine)将瑞士和哪个国家一起分开了?
答案 列支敦士登(Liechtenstein)
见上面的译文,我们阅读上下文的时候,每个单词都会转换成更抽象的表示。比如,从低层到高层概念。总之,它们构成了我们脑海中每个单词的历史。作为人类,我们经常使用单词历史的信息,但我们总是忽略它的重要性。比如,问了回答上面的问题,我们需要同时关注“形成边界(forms the borders)”的高层概念和高山莱茵河的低层概念。如果我们只关注高层概念,我们会被高山莱茵河与多瑙河困扰,因为它们都是欧洲大陆的河流,同时都分开了国家。因此,作者强调整个单词历史对于完全理解文本的重要性。
在网络结构中,作者定义第 i i i个单词的历史为: H o W i HoW_i HoWi,为这个单词生成的所有表示的拼接。可能包含单词嵌入,RNN中的多个中间和输出隐藏向量,和其他层的对应表示。为了将单词历史融入到神经网络模型中,作者提出了一个轻量级实现,被称为 全感知注意力。
本文作者关注的是,从一个东西(比如,向量)融合信息到另一个东西这种注意力应用场景。考虑两个文本中的单词隐藏向量集合
A
A
A和
B
B
B:
{
h
1
A
,
⋯
,
h
m
A
}
,
{
h
1
B
,
⋯
,
h
n
B
}
⊂
R
d
\{h^A_1, \cdots, h^A_m\},\{h^B_1,\cdots,h^B_n\} \subset \Bbb R^d
{h1A,⋯,hmA},{h1B,⋯,hnB}⊂Rd。它们关联的单词历史是
{
HoW
1
A
,
⋯
,
HoW
m
A
}
,
{
HoW
1
B
,
⋯
,
HoW
n
B
}
⊂
R
d
h
\{\text{HoW}^A_1,\cdots, \text{HoW}^A_m\}, \,\, \{\text{HoW}^B_1,\cdots, \text{HoW}^B_n\} \subset \Bbb R^{d_h}
{HoW1A,⋯,HoWmA},{HoW1B,⋯,HoWnB}⊂Rdh
其中
d
h
≫
d
d_h \gg d
dh≫d。通过标准的注意力方法融合
B
B
B到
A
A
A中,针对
A
A
A中的每个
h
i
A
h^A_i
hiA,
在全感知注意力中,通过单词历史来计算注意力得分
S
(
h
i
A
,
h
j
B
)
⟹
S
(
HoW
i
A
,
HoW
j
B
)
(12)
S(h^A_i,h^B_j) \implies S(\text{HoW}^A_i, \text{HoW}^B_j) \tag{12}
S(hiA,hjB)⟹S(HoWiA,HoWjB)(12)
为了在注意力中充分利用单词历史信息,我们需要一个合适的注意力打分函数
S
(
x
,
y
)
S(x,y)
S(x,y)。
常见的做法是:
x
T
U
T
V
y
x^TU^TVy
xTUTVy,
S
i
j
=
(
HoW
i
A
)
T
U
T
V
(
HoW
j
B
)
(13)
S_{ij} = (\text{HoW}_i^A)^TU^TV(\text{HoW}_j^B) \tag{13}
Sij=(HoWiA)TUTV(HoWjB)(13)
其中
U
,
V
∈
R
k
×
d
h
U,V \in \Bbb R^{k \times d_h}
U,V∈Rk×dh;
k
k
k是注意力隐藏层大小。然而,如果我们直接使用这两个这么大的矩阵会使得模型很难训练。所以作者增加了一个限制,
U
T
V
U^TV
UTV必须是对称的。对称矩阵能被分解为
U
T
D
U
U^TDU
UTDU,即
S
i
j
=
(
HoW
i
A
)
T
U
T
D
U
(
HoW
j
B
)
(14)
S_{ij} = (\text{HoW}_i^A)^TU^TDU(\text{HoW}_j^B) \tag{14}
Sij=(HoWiA)TUTDU(HoWjB)(14)
其中
U
∈
R
k
×
d
h
U \in \Bbb R^{k \times d_h}
U∈Rk×dh;
D
∈
R
k
×
k
D \in \Bbb R^{k \times k}
D∈Rk×k;同时
D
D
D是对角矩阵。对称形式有利于为不相似的
HoW
i
A
,
HoW
j
B
\text{HoW}^A_i,\text{HoW}_j^B
HoWiA,HoWjB得到高注意力得分。同时,将非线性与对称形式相结合,以在单词历史的不同部分之间提供更丰富的相互作用。
最终计算注意力得分的公式为:
S
i
j
=
f
(
U
(
HoW
i
A
)
)
T
D
f
(
U
(
HoW
j
B
)
)
(15)
S_{ij} = f(U(\text{HoW}^A_i))^TDf(U(\text{HoW}^B_j)) \tag{15}
Sij=f(U(HoWiA))TDf(U(HoWjB))(15)
其中
f
(
x
)
f(x)
f(x)是逐元素应用激活函数。在下午中,作者令
f
(
x
)
=
max
(
0
,
x
)
f(x) = \max(0, x)
f(x)=max(0,x)。
基于全感知注意力,作者提出了一个端到端架构:全感知融合网络(FusionNet)。给定文本A和文本B,FusionNet将文本B中的信息融合到文本A中,并生成两组向量:
U
A
=
{
u
1
A
,
⋯
,
u
m
A
}
,
U
B
=
{
u
1
B
,
⋯
,
u
n
B
}
(16)
U_A = \{u^A_1,\cdots,u^A_m\}, \,\,\,\, U_B = \{u^B_1,\cdots,u_n^B\} \tag{16}
UA={u1A,⋯,umA},UB={u1B,⋯,unB}(16)
下面,我们考虑特殊情况,文本A是阅读理解中的上下文C,文本B是问题Q。
FusionNet图示。每个向上的箭头代表BiLSTM的一层。右边的每个圆圈都是FusionNet中相应组件的详细说明。
圆圈1: C和Q之间的全感知注意力。描述了下面的公式(C1)
圆圈2: 将C中的所有信息与多层次的Q信息连接起来,然后经过BiLSTM。描述了下面的公式(C2)
圆圈3:上下文C的自全感知注意。描述了下面的公式(C3)
圆圈4: 将C的理解向量和自注意信息拼接起来,然后经过BiLSTM。描述了下面的公式(C4)
FusionNet的示意图如上,它包含以下组件:
输入向量 首先,每个C和Q中的单词被转换为一个输入向量
w
w
w。这里使用了300维的GloVe嵌入和600维的contextualized向量。在SQuAD任务中,作者还为上下文C增加了12维的POS嵌入和8维的NER嵌入,以及C的归一化的词频。一起形成了
{
w
1
C
,
⋯
,
w
m
C
}
⊂
R
900
+
20
+
1
,
{
w
1
Q
,
⋯
,
w
n
Q
}
⊂
R
900
\{w_1^C,\cdots,w^C_m\} \subset \Bbb R^{900+20+1}, \{w^Q_1,\cdots,w^Q_n\} \subset \Bbb R^{900}
{w1C,⋯,wmC}⊂R900+20+1,{w1Q,⋯,wnQ}⊂R900
全感知多层融合:单词级 在多层融合时,作者分别考虑了单词级融合和高层融合的情况。单词级融合告诉C关于Q中有什么类型的单词。如Figure 2中的箭头(1)所示。首先,为C中的每个单词创建一个特征向量
e
m
i
em_i
emi,以指示该单词是否出现在问题Q中。其次,对GloVe嵌入
g
i
g_i
gi采用基于注意力的融合技术:
g
^
i
C
=
∑
j
α
i
j
g
j
Q
,
α
i
j
∝
exp
(
S
(
g
i
C
,
g
j
Q
)
)
,
S
(
x
,
y
)
=
ReLU
(
W
x
)
T
ReLU
(
W
y
)
(17)
\hat g_i^C =\sum_j \alpha_{ij} g_j^Q, \,\, \alpha_{ij} ∝ \exp(S(g_i^C,g^Q_j)), \,\, S(x,y) = \text{ReLU}(Wx)^T \text{ReLU}(Wy) \tag{17}
g^iC=j∑αijgjQ,αij∝exp(S(giC,gjQ)),S(x,y)=ReLU(Wx)TReLU(Wy)(17)
其中
W
∈
R
300
×
300
W \in \Bbb R^{300 \times 300}
W∈R300×300。此时单词历史是输入向量本身,所以没有应用全感知注意力。最终得到上下文的增强的入向量
w
^
i
C
=
[
w
i
C
;
e
m
i
;
g
^
i
C
]
\hat w_i^C = [w_i^C;em_i;\hat g_i^C]
w^iC=[wiC;emi;g^iC]
阅读 在阅读组件中,作者分别为C和Q使用一个BiLSTM来形成低层和高层信息。
h
1
C
l
,
⋯
,
h
m
C
l
=
BiLSTM
(
w
^
1
C
,
⋯
,
w
^
m
C
)
,
h
1
Q
l
,
⋯
,
h
n
Q
l
=
BiLSTM
(
w
^
1
Q
,
⋯
,
w
^
n
Q
)
(18)
h_1^{Cl},\cdots,h_m^{Cl} = \text{BiLSTM}(\hat w_1^C,\cdots, \hat w_m^C),\,\, h_1^{Ql},\cdots,h_n^{Ql} = \text{BiLSTM}(\hat w_1^Q,\cdots, \hat w_n^Q) \tag{18}
h1Cl,⋯,hmCl=BiLSTM(w^1C,⋯,w^mC),h1Ql,⋯,hnQl=BiLSTM(w^1Q,⋯,w^nQ)(18)
h 1 C h , ⋯ , h m C h = BiLSTM ( h 1 C l , ⋯ , h m C l ) , h 1 Q h , ⋯ , h n Q h = BiLSTM ( h ^ 1 Q l , ⋯ , h ^ n Q l ) h_1^{Ch},\cdots,h_m^{Ch} = \text{BiLSTM}(h_1^{Cl},\cdots,h_m^{Cl}),\,\, h_1^{Qh},\cdots,h_n^{Qh} = \text{BiLSTM}(\hat h_1^{Ql},\cdots, \hat h_n^{Ql}) h1Ch,⋯,hmCh=BiLSTM(h1Cl,⋯,hmCl),h1Qh,⋯,hnQh=BiLSTM(h^1Ql,⋯,h^nQl)
这样就得到了每个单词的低层和高层信息 h l , h h ∈ R 250 h^l,h^h \in \Bbb R^{250} hl,hh∈R250
问题理解 作者应用一个新的BiLSTM,同时输入
h
Q
l
h^{Ql}
hQl和
h
Q
h
h^{Qh}
hQh去获得最终的问题表示
U
Q
U_Q
UQ:
U
Q
=
{
u
1
Q
,
⋯
,
u
n
Q
}
=
BiLSTM
(
[
h
1
Q
l
;
h
1
Q
h
]
,
⋯
,
[
h
n
Q
l
;
h
n
Q
h
]
)
(19)
U_Q = \{u^Q_1,\cdots,u_n^Q\} = \text{BiLSTM}([h_1^{Ql};h_1^{Qh}],\cdots, [h_n^{Ql};h_n^{Qh}]) \tag{19}
UQ={u1Q,⋯,unQ}=BiLSTM([h1Ql;h1Qh],⋯,[hnQl;hnQh])(19)
其中
{
u
i
Q
∈
R
250
}
i
=
1
n
\{u^Q_i \in \Bbb R^{250}\}_{i=1}^n
{uiQ∈R250}i=1n是问题Q的理解向量。
全感知多层融合:高层 这个组件通过对单词历史的全感知注意力,将问题Q中的所有高层信息与上下文C融合。由于所提出的针对全感知注意的注意力评分函数被限制为对称的,因此我们需要识别C,Q的共同历史单词,得到
HoW
i
C
=
[
g
i
C
;
c
i
C
;
h
i
C
l
;
h
i
C
h
]
,
HoW
i
Q
=
[
g
i
Q
;
c
i
Q
;
h
i
Q
l
;
h
i
Q
h
]
∈
R
1400
(20)
\text{HoW}_i^C =[g_i^C;c^C_i;h_i^{Cl};h_i^{Ch}],\,\, \text{HoW}_i^Q=[g_i^Q;c^Q_i;h_i^{Ql};h_i^{Qh}] \in \Bbb R^{1400} \tag{20}
HoWiC=[giC;ciC;hiCl;hiCh],HoWiQ=[giQ;ciQ;hiQl;hiQh]∈R1400(20)
其中
g
i
g_i
gi为GloVe嵌入,
c
i
c_i
ci为CoVe嵌入。然后,我们通过全感知注意力,将从Q到C的低层、高层和理解层的信息融合起来。通过注意函数
S
l
(
x
,
y
)
,
S
h
(
x
,
y
)
,
S
u
(
x
,
y
)
S^l(x,y),S^h(x,y),S^u(x,y)
Sl(x,y),Sh(x,y),Su(x,y)计算不同层的注意力权重,以融合低层、高层和理解层的信息。这三个函数都是前文提出的非线性对称形式,但参数独立,以关注不同层次的不同区域。注意隐藏大小设置为
k
=
250
k = 250
k=250。
低层融合:
h
^
i
C
l
=
∑
j
α
i
j
l
h
j
Q
l
,
α
i
j
l
∝
exp
(
S
l
(
HoW
i
C
,
HoW
j
Q
)
)
(C1)
\hat h_i^{Cl} = \sum_j \alpha_{ij}^l h_j^{Ql}, \,\, \alpha_{ij}^l ∝ \exp \left(S^l(\text{HoW}_i^C,\text{HoW}_j^Q )\right) \tag{C1}
h^iCl=j∑αijlhjQl,αijl∝exp(Sl(HoWiC,HoWjQ))(C1)
高层融合:
h
^
i
C
h
=
∑
j
α
i
j
h
h
j
Q
h
,
α
i
j
h
∝
exp
(
S
h
(
HoW
i
C
,
HoW
j
Q
)
)
(C1)
\hat h_i^{Ch} = \sum_j \alpha_{ij}^h h_j^{Qh}, \,\, \alpha_{ij}^h ∝ \exp \left(S^h(\text{HoW}_i^C,\text{HoW}_j^Q )\right) \tag{C1}
h^iCh=j∑αijhhjQh,αijh∝exp(Sh(HoWiC,HoWjQ))(C1)
理解融合:
u
^
i
C
=
∑
j
α
i
j
u
u
j
Q
h
,
α
i
j
u
∝
exp
(
S
u
(
HoW
i
C
,
HoW
j
Q
)
)
(C1)
\hat u_i^C = \sum_j \alpha_{ij}^u u_j^{Qh}, \,\, \alpha_{ij}^u ∝ \exp \left(S^u(\text{HoW}_i^C,\text{HoW}_j^Q )\right) \tag{C1}
u^iC=j∑αijuujQh,αiju∝exp(Su(HoWiC,HoWjQ))(C1)
这种多层次的关注机制独立捕获不层级别的信息,同时考虑到所有层级的信息。应用新的BiLSTM来获取完全融合了问题Q信息的上下文C的表示:
{
v
1
C
,
⋯
,
v
m
C
}
=
BiLSTM
(
[
h
1
C
l
;
h
1
C
h
;
h
^
1
C
l
;
h
^
1
C
h
;
u
1
C
]
,
⋯
,
[
h
m
C
l
;
h
m
C
h
;
h
^
m
C
l
;
h
^
m
C
h
;
u
m
C
]
)
(C2)
\{v^C_1,\cdots, v_m^C\} = \text{BiLSTM}([h_1^{Cl};h_1^{Ch};\hat h_1^{Cl};\hat h_1^{Ch};u_1^{C}], \cdots, [h_m^{Cl};h_m^{Ch};\hat h_m^{Cl};\hat h_m^{Ch};u_m^{C}]) \tag{C2}
{v1C,⋯,vmC}=BiLSTM([h1Cl;h1Ch;h^1Cl;h^1Ch;u1C],⋯,[hmCl;hmCh;h^mCl;h^mCh;umC])(C2)
全感知自提升融合 我们现在使用自提升(self-boosted)融合来考虑上下文中的远距离部分,如Figure 2中的箭头(3)所示。同样,我们通过全感知注意历史单词来达到这一点。我们确定历史单词为:
HoW
i
C
=
[
g
i
C
;
c
i
C
;
h
i
C
l
;
h
i
C
h
;
h
^
i
C
l
;
u
^
i
C
;
v
i
C
]
∈
R
2400
\text{HoW}_i^C = [g_i^{C};c_i^{C}; h_i^{Cl};h_i^{Ch};\hat h_i^{Cl};\hat u_i^{C}; v_i^C] \in \Bbb R^{2400}
HoWiC=[giC;ciC;hiCl;hiCh;h^iCl;u^iC;viC]∈R2400
然后应用全感知注意,
v
^
i
C
=
∑
j
α
i
j
s
v
j
C
,
α
i
j
s
∝
exp
(
S
s
(
HoW
i
C
,
HoW
j
C
)
)
(C3)
\hat v_i^C = \sum_j \alpha_{ij}^s v_j^C, \,\, \alpha_{ij}^s ∝ \exp \left(S^s(\text{HoW}_i^C,\text{HoW}_j^C) \right) \tag{C3}
v^iC=j∑αijsvjC,αijs∝exp(Ss(HoWiC,HoWjC))(C3)
最终的上下文表示由以下方法获得:
U
C
=
{
u
1
C
,
⋯
,
u
m
C
}
=
BiLSTM
(
[
v
1
C
;
v
^
1
C
]
,
⋯
,
[
v
m
C
;
v
^
m
C
]
)
(C4)
U_C = \{u_1^C,\cdots, u_m^C\} = \text{BiLSTM}([v_1^C;\hat v_1^C], \cdots, [v^C_m;\hat v_m^C]) \tag{C4}
UC={u1C,⋯,umC}=BiLSTM([v1C;v^1C],⋯,[vmC;v^mC])(C4)
其中
{
u
i
C
∈
R
250
}
i
=
1
m
\{u^C_i \in \Bbb R^{250}\}_{i=1}^m
{uiC∈R250}i=1m是C的理解向量。
在经过FusionNet中的这些组件之后,我们为上下文C创建了理解向量 U C U_C UC,这些向量与问题Q完全融合。我们还有问题Q的理解向量 U Q U_Q UQ。
QANet5是谷歌大脑团队18年推出的,融合了之前的重要突破:
在此论文之前端到端的机器阅读和问答模型(像之前介绍的BiDAF)主要基于带注意力的RNN网络,这种架构有一个很重要的缺点是训练和推理速度慢。此论文提出了一个不含RNN网络的架构,其编码器仅包含卷积和自注意力(self-attention),称为QANet。带来了显著的训练和推理速度提升,让我们可以训练更多的数据。
卷积用于捕获文本的局部结构,而自注意力用于学习单词间的全局交互。额外的上下文-查询(context-query)注意力用于构建查询感知的(query-aware)的上下文(context)向量。
模型架构如上图左。
首先介绍符号定义。给定一个包含 n n n个单词的上下文段落 C = { c 1 , c 2 , ⋯ , c n } C=\{c_1,c_2,\cdots,c_n\} C={c1,c2,⋯,cn}和包含 m m m个单词的查询语句 Q = { q 1 , q 2 , ⋯ , q m } Q=\{q_1,q_2,\cdots,q_m\} Q={q1,q2,⋯,qm},以及从原始段落 C C C中抽取的输出片段(span) S = { c i , c i + 1 , ⋯ , c i + j } S=\{c_i,c_{i+1},\cdots,c_{i+j}\} S={ci,ci+1,⋯,ci+j}。
模型包含五个组件:嵌入层、嵌入编码器层、上下文-查询注意力层、模型编码器层和输出层。
下面来详细介绍。
作者通过拼接字符嵌入(character embedding)和词嵌入得到每个单词的嵌入向量。词嵌入用的是预训练好的GloVe向量,并且不会随着训练进行更新。而字符嵌入是可学习的,对于英文单词来说,字符就是组成每个单词的字母。因此每个单词可以看成是其包含字符(字母)向量的拼接。但是每个单词长短不一怎么办,作者设置了一个最大长度16,多截少补(pad)。
最终得到的嵌入向量为这两个向量的拼接: x = [ x w ; w c ] x =[x_w;w_c] x=[xw;wc]。
编码器层由以下构建块堆叠而成:[卷积层×# +自注意层 + 前馈层],如图1右所示。卷积层×#表示重复堆叠了#次。卷积层基于深度可分离卷积;自注意层基于多头注意力机制。每个基础操作层(卷积/自注意/前馈)周围都有残差连接。同时应用了层归一化(layer norm),对于每个操作 f f f,输出是 f ( l a y e r n o r m ( x ) ) + x f(layernorm(x)) + x f(layernorm(x))+x。
上下文和查询编码器的权重是共享的。
该模块几乎是阅读理解模型的标配。使用 C C C和 Q Q Q来表示编码的上下文和查询。上下文到查询之间的注意力基于如下方式构建:首先计算上下文和查询单词对之间的相似度,得到一个相似矩阵 S ∈ R n × m S \in R^{n \times m} S∈Rn×m。然后应用softmax函数对 S S S的每行进行归一化,得到新的矩阵 S ‾ \overline{S} S。然后上下文-查询注意力计算为 A = S ‾ ⋅ Q T ∈ R n × d A= \overline{S} \cdot Q^T \in R^{n \times d} A=S⋅QT∈Rn×d。
相似度函数为:
f
(
q
,
c
)
=
W
0
[
q
,
c
,
q
⊙
c
]
(21)
f(q,c) = W_0[q, c, q \odot c] \tag{21}
f(q,c)=W0[q,c,q⊙c](21)
接着像DCN模型还计算了查询到上下文的注意力。具体做法是对
S
S
S的列进行归一化,得到矩阵
S
~
\tilde{S}
S~,然后查询到上下文的注意力矩阵
B
=
S
‾
⋅
S
~
T
⋅
C
T
B=\overline{S} \cdot \tilde{S}^T \cdot C^T
B=S⋅S~T⋅CT。
类似Bi-DAF,该层每个位置的输入为 [ c , a , c ⊙ a , c ⊙ b ] [c,a,c \odot a, c \odot b] [c,a,c⊙a,c⊙b],其中 a a a和 b b b分别是上面计算的注意力矩阵 A A A和 B B B的一行。
注意这里有3个模型编码器,它们是权重共享的。
该层是任务相关的。在解决SQuAD任务中,作者采用了Bi-DAF的策略来预测上下文每个位置作为答案片段开始和结束的概率。具体做法为:
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
]
)
(22)
p^1 = softmax(W_1[M_0;M_1]), \quad p^2=softmax(W_2[M_0;M_2]) \tag{22}
p1=softmax(W1[M0;M1]),p2=softmax(W2[M0;M2])(22)
其实
W
1
W_1
W1和
W
2
W_2
W2是可训练的权重,
M
0
,
M
1
,
M
2
M_0,M_1,M_2
M0,M1,M2分别是前面三个 模型编码器的输出,由下到上。
然后用这两个概率相乘得到片段得分。
最后,定义训练损失为预测分布对应的真实开始和结束位置的负对数似然的之和,并求所有样本上的均值:
L
(
θ
)
=
−
1
N
∑
i
N
[
log
(
p
y
i
1
1
)
+
log
(
p
y
i
2
2
)
]
(23)
L(\theta) = -\frac{1}{N} \sum_i^N \left[\log(p^1_{y_i^1}) + \log(p^2_{y_i^2}) \right] \tag{23}
L(θ)=−N1i∑N[log(pyi11)+log(pyi22)](23)
其中
θ
\theta
θ是模型的可训练权重参数集合,
N
N
N是数据集的样本总数,
y
i
1
y^1_i
yi1和
y
i
2
y_i^2
yi2是第
i
i
i个样本的真实开始和结束位置。
在推理时,预测的块 ( s , e ) (s,e) (s,e)选择使得 p s 1 p e 2 p^1_sp^2_e ps1pe2最大者,同时要满足 s ≤ e s \leq e s≤e,能在线性时间内获得结果。
R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS ↩︎
MACHINE COMPREHENSION USING MATCH-LSTM AND ANSWER POINTER ↩︎ ↩︎
FusionNet: Fusing via Fully-Aware Attention with Application to Machine Comprehension ↩︎
QANET: COMBINING LOCAL CONVOLUTION WITH GLOBAL SELF-ATTENTION FOR READING COMPREHENSION ↩︎
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。