用于自然语言推理的可分解注意力模型
github : https://github.com/daiyizheng/shortTextMatch/blob/master/src/DL_model/classic_models/models/DecomposableAttention.py
本文作者提出了一种用于自然语言推理的简单神经架构。 使用注意力将问题分解为可以单独解决的子问题,从而使其可以简单地并行化。在斯坦福自然语言推理 (SNLI) 数据集上,获得了SOTA的结果。
方法
模型分为了四个部分:Input representation,Attend,Compare,Aggregate:
Input representation
模型的输入为 a = ( a 1 . . . . , a l a ) a= (a_1...., a_{l_a}) a=(a1....,ala)和 b = ( b 1 , . . . , b l b ) b=(b_1,...,b_{l_b}) b=(b1,...,blb),分别代表前提和假说, y ( n ) = { y 1 ( n ) , . . . , y C ( n ) } y^{(n)} = \{y_1^{(n)},...,y_C^{(n)}\} y(n)={y1(n),...,yC(n)}表示a和b之间的关系标签, C C C是输出类的数量。训练目标就是根据输入的 a a a和 b b b正确预测出他们的关系标签 y y y。
Attend
使用神经注意的变体对a和b的句子进行软对齐,并将问题分解为对齐子短语的比较。
F是一个激活函数为ReLU的前馈神经网络。
attention权重如下:
Compare
其次,分别比较每个对齐的子短语,生成一组向量
{
v
1
,
i
}
i
=
1
l
a
\{v_{1,i}\}^{l_a}_{i=1}
{v1,i}i=1la对于
a
a
a,以及
{
v
2
,
j
}
j
=
1
l
b
\{v_{2,j}\} ^{l_b}_{j=1}
{v2,j}j=1lb对于b。每个
{
v
1
,
i
}
\{v_{1,i}\}
{v1,i}都是
a
i
a_i
ai及其(软)对齐子短语在
b
b
b中的非线性组合(
v
2
,
j
v_{2,j}
v2,j也类似)。
G也是一个前馈神经网络
Aggregate
聚合上一步中的集合
{
v
1
,
i
}
i
=
1
l
a
\{v_{1,i}\}^{l_a}_{i=1}
{v1,i}i=1la和
{
v
2
,
j
}
j
=
1
l
b
\{v_{2,j}\} ^{l_b}_{j=1}
{v2,j}j=1lb,并使用结果预测标签
y
y
y。
将两个向量concatenate后使用前馈神经网络进行分类。
损失函数利用交叉熵损失函数。
Intra-Sentence Attention
通过句内注意来增强这种输入表示,以编码每个句子中单词之间的组成关系。
F
i
n
t
r
a
F_{intra}
Fintra也是一个前馈神经网络
d
i
−
j
d_{i-j}
di−j表示当前词
i
i
i与句子中的其他词
j
j
j之间的距离偏差,所有距离大于10的词共享一个距离偏差,这样每一个时刻的输入就变为原始输入跟self-attention后的值的拼接所得到的向量
a
‾
i
:
=
[
a
i
,
a
i
′
]
,
b
‾
j
:
=
[
b
j
,
b
j
′
]
\overline{a}_i:=[a_i, a'_i], \overline{b}_j:=[b_j,b'_j]
ai:=[ai,ai′],bj:=[bj,bj′]
结果
结论
基于注意力的自然语言推理方法,可以简单地并行化。该方法在文本理解方面的表现比更复杂的神经方法要好得多。结果表明,至少在这个任务中,两两比较比整体句子级表征更重要。