赞
踩
BiDAF采用多阶段的、层次化处理,使得可以捕获原文不同粒度的特征。同时使用双向的attention流机制以在without early summarization的情况下获得相关问句和原文之间的表征。
现有的端-端机器阅读理解中使用到attention机制有3类。
第一类是动态attention机制。attention权重的动态更新是基于给定的query、contex及其先前的attention。 Hermann et al. (2015) 通过实验表明动态attention模型在CNN& Daily Mail数据集上比采用单一固定的query vector注意到contex中词取得更好的结果。 Chen et al. (2016)采用简单的双线性项来计算attention权重能够大大提高准确率。
第二类attention,仅仅计算attention权重一次,再将输入到输出层用以最后的预测。Attention-over-attention模型采用query和contex词之间的2D的相似度矩阵,用以计算query-contex attention的平均权重。
第三类可以视为记忆网络的变体,通过多层网络重复多次计算组合query和contex之间的注意向量,典型的代表是multi-hop。结合记忆网络采用强化学习来动态控制跳数。
本文attention机制的独到之处:
第一:并不将contex编码进固定大小的 vector,而是根据前一层的表征计算每个time stepd的attention及其attended vector。计算得到的attention可以流到后续的网络层。如此可以减缓由于早期加权( early summarization)带来的的信息损失。
第二:采用memory-less机制。迭代过程中的每一个time step的attention计算仅仅依赖于query 和当前时刻的 context paragraph ,并不直接依赖上一时刻的 attention。我们推测,这种简化导致了注意层和建模层之间的分工。注意力层专注于学习query和contex之间的attention,建模层则专注于学习query-aware context representation(attention层的输出)之间的相关作用。同时这种机制使得后面的 attention 计算不会受到之前错误的 attention 信息的影响。
第三:在两个方向上都采用了attention机制,即计算了 query-to-context(Q2C) 和 context-to-query(C2Q)两个方向的 attention 信息。C2Q 和 Q2C 实际上能够相互补充。实验发现模型在开发集上去掉 C2Q 与 去掉 Q2C 相比,分别下降了 12 和 10 个百分点,显然 C2Q 这个方向上的 attention 更为重要
模型框架图:
模型是一个分阶段的多层过程,由6层网络组成。
(1)字符嵌入层:
用字符级CNNs将每个字映射到向量空间
(2)字嵌入层:
利用预训练的词嵌入模型,将每个字映射到向量空间
(3)上下文嵌入层:
利用周围单词的上下文线索来细化单词的嵌入。这前三层同时应用于问句和原文。
(4)注意力流层:
将问句向量和原文向量进行耦合,并为原文中每个词生成一个问句相关的特征向量集合。
(5)建模层:
使用RNN以扫描整个原文
(6)输出层:
输出问句对应的回答
字符嵌入是将词映射为一个高纬的向量空间。我们对每个词用CNN处理以获得字符嵌入。每个词由多个字符组成,则视为1D,将其输入到CNN。CNN的输出经过最大池化操作后即可获得每个词对应的字符级向量。具体细节可以参考Char-CNN论文的细节。
在词嵌入上我们采用的是预训练的词向量Glove。
将字符嵌入和词嵌入拼接后,输入到一个双层的Highway Network
,输出是两个d维度的向量。将原文对应的输出记为
X
∈
\rm X \in
X∈
R
d
×
T
R^{d \times T}
Rd×T,问句的输出记为
Q
∈
\rm Q \in
Q∈
R
d
×
J
R^{d \times J}
Rd×J
这层采用的是LSTM以建模单词之间的交互特征。这里采用的是双向LSTM,将两个方向的LSTM结果进行拼接,于是可以从原文词向量 X \rm X X得到对应的上下文向量 H \rm H H ∈ R 2 d × T \in R^{2d \times T} ∈R2d×T,同理从问句词向量 Q \rm Q Q得到对应的上下文向量 U \rm U U ∈ R 2 d × J \in R^{2d \times J} ∈R2d×J。
以上3层均是从不同粒度获得问句和原文的特征。这与计算机视觉领域中卷积神经网络的多阶段特征提取类似。
该层用于链接和融合来自原文和问句中词的信息。不同于以往的注意力机制,将问句和原文总结概括为单一的特征向量。本文每个时刻的注意力向量都与其之前层的嵌入相关,且都可以流向之后的网络层。这种设计方案可以减缓由于过早归纳总结而导致的信息缺失。
该层的输入是原文
H
\rm H
H和问句
U
U
U向量,输出是 context words 的 query-aware vector $G\rm
,
以
及
上
一
层
传
下
来
的
c
o
n
t
e
x
t
u
a
l
e
m
b
e
d
d
i
n
g
s
。
做
c
o
n
t
e
x
t
−
t
o
−
q
u
e
r
y
以
及
q
u
e
r
y
−
t
o
−
c
o
n
t
e
x
t
两
个
方
向
的
‘
a
t
t
e
n
t
i
o
n
‘
。
做
法
是
一
样
,
都
是
先
计
算
相
似
度
矩
阵
,
再
归
一
化
计
算
a
t
t
e
n
t
i
o
n
分
数
,
最
后
与
原
始
矩
阵
相
乘
得
到
修
正
的
向
量
矩
阵
。
c
2
q
和
q
2
c
共
享
相
似
度
矩
阵
,
原
文
(
,以及上一层传下来的 contextual embeddings。做 context-to-query 以及 query-to-context 两个方向的`attention`。做法是一样,都是先计算相似度矩阵,再归一化计算 attention 分数,最后与原始矩阵相乘得到修正的向量矩阵。 c2q 和 q2c 共享相似度矩阵,原文(
,以及上一层传下来的contextualembeddings。做context−to−query以及query−to−context两个方向的‘attention‘。做法是一样,都是先计算相似度矩阵,再归一化计算attention分数,最后与原始矩阵相乘得到修正的向量矩阵。c2q和q2c共享相似度矩阵,原文(H
)
和
问
句
)和问句
)和问句U
的
相
似
度
矩
阵
的相似度矩阵
的相似度矩阵S \in R^{T\times J}$计算如下:
S
t
j
=
α
(
H
:
t
,
U
:
j
)
∈
R
S_{tj}=\alpha(H_{:t}, U_{:j}) \in R
Stj=α(H:t,U:j)∈R
其中
S
i
,
j
S_{i,j}
Si,j:第 t 个 context word 和第 j 个 query word 之间的相似度。
α
\alpha
α: 可训练的scalar function,用以encode两个输入向量的相似度。
H
:
t
H_{:t}
H:t :
H
H
H 的第 t 个列向量
U
:
j
U_{:j}
U:j :
U
U
U 的第 j 个列向量
这里我们选择
α
(
h
,
u
)
=
w
(
S
)
T
[
h
;
u
;
h
∘
u
]
\alpha \rm (h,u)=w^T_{(S)}[h;u;h\circ u]
α(h,u)=w(S)T[h;u;h∘u]
其中
w
s
\rm w_{s}
ws
∈
R
6
d
\in R^{6d}
∈R6d是待训练的权重向量。
∘
\circ
∘表示element-wise multiplication。
[
;
]
[;]
[;]是向量在行上的拼接。隐式乘法是矩阵乘法。
下面我们介绍用
S
S
S获得两个方向上的attentions 和attended vectors。
Context-to-query Attention:
Context-to-query (C2Q) attention计算对每一个 context word 而言哪些 query words 和它最相关。前面得到了相似度矩阵,现在 softmax 对列归一化,然后计算 query 向量加权和得到
U
^
\hat U
U^
a
t
=
s
o
f
t
m
a
x
(
S
t
:
)
∈
R
J
a_t=softmax(S_{t:}) \in R^J
at=softmax(St:)∈RJ,其中
a
t
a_t
at表示第t个contex word对于query words的注意力权重。每个被注意到的query vector计算如下:
U
^
:
t
=
∑
j
a
t
j
U
:
j
\hat U_{:t}=\sum_ja_{tj}U_{:j}
U^:t=∑jatjU:j。可以看出
U
^
\hat U
U^是 2dxT 的矩阵,表示整个contex相关的query vector。
Query-to-context Attention:
query-to-context attention(Q2C): 计算对每一个 query word 而言哪些 context words 和它最相关,这些 context words 对回答问题很重要。取相似度矩阵每列最大值,对其进行 softmax 归一化得到
b
\rm b
b,即
b
=
s
o
f
t
m
a
x
(
m
a
x
c
o
l
(
S
)
)
∈
R
T
\rm b=softmax(max_{col}(S)) \in R^T
b=softmax(maxcol(S))∈RT。再通过加权和计算相关的 context 向量,
h
^
=
∑
t
b
t
H
:
t
∈
R
2
d
\rm \hat h=\sum_tb_tH_{:t} \in R^{2d}
h^=∑tbtH:t∈R2d。即在contex中将相对于query最重要的词进行加权求和。
然后
h
^
\rm \hat h
h^沿着列方向 tile T 次得到
H
^
∈
R
2
d
×
T
\hat H \in R^{2d \times T}
H^∈R2d×T。
最后,contextual embeddings和attention vectors拼接起来得到
G
\rm G
G。
G
\rm G
G中每个列向量可以视为每个contex word的query-aware表征。
G
:
t
=
β
(
H
:
t
,
U
^
:
t
,
H
^
:
t
)
∈
R
d
G
G_{:t}=\beta (H_{:t}, \hat U_{:t}, \hat H_{:t}) \in R^{d_G}
G:t=β(H:t,U^:t,H^:t)∈RdG
其中
G
:
t
\rm G_{:t}
G:t是第t个列向量(对应第t个 contex word)。
β
\beta
β是一个trainable vector function,它融合了3个输入向量。
d
G
{d_G}
dG是
β
\beta
β函数的输出维度。
β
\beta
β可以是任意的神经网络,如多层感知机。
不过在本文中简单的拼接效果也不错:
β
(
h
,
u
^
,
h
^
)
=
[
h
;
u
^
;
h
∘
u
^
;
h
∘
h
^
]
∈
R
8
d
∗
T
\beta \rm (h, \hat u, \hat h)=[h;\hat u; h\circ \hat u; h\circ \hat h] \in R^{8d*T}
β(h,u^,h^)=[h;u^;h∘u^;h∘h^]∈R8d∗T
上述公式
d
G
=
8
d
d_G =8d
dG=8d。
于是就得到了 context 中单词的 query-aware representation。
输入是
G
\rm G
G(即context中单词的 query-aware representation结果),
再经过一个双层的 Bi-LSTM 得到$ M\in R^{2d \times T}
,
捕
捉
的
是
在
给
定
q
u
e
r
y
下
c
o
n
t
e
x
w
o
r
d
s
之
间
的
关
系
。
注
意
和
c
o
n
t
e
x
t
u
a
l
e
m
b
e
d
d
i
n
g
l
a
y
e
r
区
分
开
,
c
o
n
t
e
x
t
u
a
l
e
m
b
e
d
d
i
n
g
l
a
y
e
r
捕
获
的
c
o
n
t
e
x
w
o
r
d
s
之
间
关
系
并
不
依
赖
于
q
u
e
r
y
。
由
于
每
个
方
向
的
输
出
结
果
尺
寸
为
,捕捉的是在给定query下contex words之间的关系。注意和contextual embedding layer区分开,contextual embedding layer捕获的contex words之间关系并不依赖于query。由于每个方向的输出结果尺寸为
,捕捉的是在给定query下contexwords之间的关系。注意和contextualembeddinglayer区分开,contextualembeddinglayer捕获的contexwords之间关系并不依赖于query。由于每个方向的输出结果尺寸为d
,
所
以
,所以
,所以M$的尺寸为
2
d
×
T
2d \times T
2d×T。
M
M
M的每一个列向量都包含了对应单词关于整个 context 和 query 的上下文信息。
输出层是面向具体任务的,所以可以根据具体任务而做相应修改。对于在原文中选取子片段作为回答的QA任务来说,需要预测开始位置 p1 和结束位置 p2:
p
1
=
s
o
f
t
m
a
x
(
W
(
p
1
)
T
[
G
;
M
]
)
,
p
2
=
s
o
f
t
m
a
x
(
W
(
p
2
)
T
[
G
;
M
2
]
)
\rm p^1=softmax(W^T_{(p^1)}[G; M]), \ \ \ p_2=softmax(W^T_{(p^2)}[G; M^2])
p1=softmax(W(p1)T[G;M]), p2=softmax(W(p2)T[G;M2])
对于结束位置,
M
M
M 再经过一个 Bi-LSTM 得到
M
2
∈
R
2
d
×
T
M^2 \in R^{2d \times T}
M2∈R2d×T,用来得到结束位置的概率分布。
最后的目标函数:
L
(
θ
)
=
−
1
N
∑
i
N
[
l
o
g
(
p
y
i
1
1
)
+
l
o
g
(
p
y
i
2
2
)
]
L(\theta)=-{1 \over N} \sum^N_i[log(p^1_{y_i^1})+log(p^2_{y_i^2})]
L(θ)=−N1i∑N[log(pyi11)+log(pyi22)]
预测:
对于答案span(k,l)选择
p
k
1
p
l
2
\rm p^1_k p^2_l
pk1pl2值最大下的k和l。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。