文章目录
论文链接地址
Enhanced LSTM for Natural Language Inference
github
to be continued
前言
\quad 本文主要介绍了一种复杂网络建立自然语言推理模型,创新点在于:基于链式的LSTM网络,进一步通过在局部推理建模和推理组合中明确考虑递归架构,同时合并了语法解析信息。
整体模型结构
\quad
整体结构如下图所示:
\quad
该模型为HIM模型(Hybrid Neural Inference Models),包括输入编码层(Input Encoding)、局部推理层(Local Inference Modeling)、推理组合层(Inference Composition)。其中左边是ESIM(Enhanced Sequential Inference Model)模型,右边是基于Tree-LSTM的网络模型,该模型使用了语法解析信息,整体结构和ESIM类似,最终以平均的方式组合两个模型的输出作为最终的结果。
\quad
对于两个句子
a
=
(
a
1
,
.
.
.
a
l
a
)
,
b
=
(
b
1
,
.
.
.
b
l
b
)
a=(a_1,...a_{l_a}),b=(b_1,...b_{l_b})
a=(a1,...ala),b=(b1,...blb),分别是前提
(
p
r
e
m
i
s
e
)
和
假
设
(
h
y
p
o
t
h
i
e
s
)
(premise)和假设(hypothies)
(premise)和假设(hypothies)文本,其中
a
i
和
b
j
a_i和b_j
ai和bj是维度为l的向量,该向量可以通过预训练模型或者句法解析树初始化,目标是获得正确的标签 y。
输入编码层(Input Encoding)
\quad
输入编码层左边使用了BiLSTM模型编码,这里我们用
a
i
⇀
和
b
i
⇀
\overrightharpoon{a_i}和\overrightharpoon{b_i}
ai和bi分别代表BiLSTM的隐藏状态,公式如下:
a
i
⇀
=
B
i
L
S
T
M
(
a
,
i
)
,
i
∈
[
1
,
2
,
.
.
.
,
l
a
]
.
.
.
.
.
.
.
.
.
.
(
1
)
\overrightharpoon{a_i} =BiLSTM(a,i) ,i \in [1,2,...,l_a] ..........(1)
ai=BiLSTM(a,i),i∈[1,2,...,la]..........(1)
b
i
⇀
=
B
i
L
S
T
M
(
b
,
i
)
,
i
∈
[
1
,
2
,
.
.
.
,
l
b
]
.
.
.
.
.
.
.
.
.
.
.
.
(
2
)
\overrightharpoon{b_i} =BiLSTM(b,i) ,i \in [1,2,...,l_b] ............(2)
bi=BiLSTM(b,i),i∈[1,2,...,lb]............(2)
\quad
输入编码层右边使用了tree-LSTM模型编码,公式为(3)~(10),整体结构如下图所示:
\quad
图中的每一个节点输入包含输入向量
X
t
X_t
Xt和左右两个子节点的隐藏向量
(
h
t
−
1
L
和
h
t
−
1
R
)
,
(h_{t-1}^L和h_{t-1}^R),
(ht−1L和ht−1R),经过公式3~10的操作以后获得输出向量
h
t
h_t
ht,结构整齐,理解起来并不难。论文见:
Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks
\quad
公式3为一个封装函数,输入为
X
t
、
h
t
−
1
L
和
h
t
−
1
R
,
输
出
为
h
t
X_t、h_{t-1}^L和h_{t-1}^R,输出为h_t
Xt、ht−1L和ht−1R,输出为ht。遗忘门中
c
t
−
1
L
和
c
t
−
1
R
c_{t-1}^L和c_{t-1}^R
ct−1L和ct−1R为左右子节点的隐藏向量,经过点乘操作以后更新当前的细胞状态,经过公式(4)输出
h
t
h^t
ht
局部推理层(Local Inference Modeling)
利用公式11计算出
a
i
⇀
和
b
i
⇀
\overrightharpoon{a_i} 和\overrightharpoon{b_i}
ai和bi的注意力权重,然后利用公式12、13计算出基于注意力权重的
a
i
⇀
和
b
i
⇀
\overrightharpoon{a_i} 和\overrightharpoon{b_i}
ai和bi向量。
e
i
j
=
a
i
T
⇀
b
i
⇀
.
.
.
(
11
)
e_{ij}=\overrightharpoon{a_i^T} \overrightharpoon{b_i} ...(11)
eij=aiTbi...(11)
a
i
~
=
∑
j
=
1
l
b
e
x
p
(
e
i
j
)
∑
k
=
1
l
b
e
x
p
(
e
i
k
)
b
j
⇀
,
i
∈
[
1
,
2
,
.
.
.
l
a
]
\widetilde{a_i} = \sum_{j=1}^{l_b} \frac{exp(e_{ij})}{\sum_{k=1}^{l_b} exp(e_{ik})}\overrightharpoon{b_j} ,i \in [1,2,...l_a]
ai
=∑j=1lb∑k=1lbexp(eik)exp(eij)bj,i∈[1,2,...la]
b
i
~
=
∑
i
=
1
l
a
e
x
p
(
e
i
j
)
∑
k
=
1
l
a
e
x
p
(
e
i
k
)
a
i
⇀
,
j
∈
[
1
,
2
,
.
.
.
l
b
]
\widetilde{b_i} = \sum_{i=1}^{l_a} \frac{exp(e_{ij})}{\sum_{k=1}^{l_a} exp(e_{ik})}\overrightharpoon{a_i},j \in [1,2,...l_b]
bi
=∑i=1la∑k=1laexp(eik)exp(eij)ai,j∈[1,2,...lb]
进一步增强局部推理信息,公式如14、15:
m
a
=
[
a
⇀
;
a
~
;
a
⇀
−
a
~
;
a
⇀
⨀
a
~
]
,
ma=[\overrightharpoon{a}; \widetilde{a};\overrightharpoon{a}-\widetilde{a};\overrightharpoon{a}\bigodot\widetilde{a}],
ma=[a;a
;a−a
;a⨀a
],
m
b
=
[
b
⇀
;
b
~
;
b
⇀
−
b
~
;
b
⇀
⨀
b
~
]
mb=[\overrightharpoon{b}; \widetilde{b};\overrightharpoon{b}-\widetilde{b};\overrightharpoon{b}\bigodot\widetilde{b}]
mb=[b;b
;b−b
;b⨀b
]
推理组合层(Inference Composition)
在ESIM中仍然使用公式(1)和(2),但是输入为
m
a
和
m
b
m_a和m_b
ma和mb,对于tree-LSTM,树节点由如下公式更新:
v
a
,
t
=
T
r
L
S
T
M
(
F
(
m
a
,
t
)
,
h
t
−
1
L
,
h
t
−
1
R
)
.
.
.
.
.
(
16
)
v_{a,t} =TrLSTM(F(m_{a,t}),h_{t-1}^L,h_{t-1}^R) .....(16)
va,t=TrLSTM(F(ma,t),ht−1L,ht−1R).....(16)
v
b
,
t
=
T
r
L
S
T
M
(
F
(
m
b
,
t
)
,
h
t
−
1
L
,
h
t
−
1
R
)
.
.
.
.
.
(
17
)
v_{b,t} =TrLSTM(F(m_{b,t}),h_{t-1}^L,h_{t-1}^R) .....(17)
vb,t=TrLSTM(F(mb,t),ht−1L,ht−1R).....(17)
其中,函数F为一层全连接神经网络,激活函数为ReLU。
然后将得到的向量做池化处理,这里分别进行最大池化和平均池化,公式如下:
v
a
,
a
v
e
=
∑
i
=
1
l
a
v
a
,
i
l
a
,
v
a
,
m
a
x
=
m
a
x
i
=
1
l
a
v
a
,
i
.
.
.
.
.
(
18
)
v_{a,ave} = \sum_{i=1}^{l_a} \frac {v_{a,i}}{l_a},v_{a,max} =max_{i=1}^{l_a} v_{a,i} .....(18)
va,ave=∑i=1lalava,i,va,max=maxi=1lava,i.....(18)
v
b
,
a
v
e
=
∑
i
=
1
l
b
v
b
,
i
l
b
,
v
b
,
m
a
x
=
m
a
x
j
=
1
l
b
v
b
,
i
.
.
.
.
.
.
(
19
)
v_{b,ave} = \sum_{i=1}^{l_b} \frac {v_{b,i}}{l_b},v_{b,max} =max_{j=1}^{l_b} v_{b,i}......(19)
vb,ave=∑i=1lblbvb,i,vb,max=maxj=1lbvb,i......(19)
v
=
[
v
a
,
a
v
e
;
v
a
,
m
a
x
;
v
b
,
a
v
e
;
v
b
,
m
a
x
]
v=[v_{a,ave};v_{a,max};v_{b,ave};v_{b,max}]
v=[va,ave;va,max;vb,ave;vb,max]
然后将向量v送入mlp分类器,激活函数为tanh,连接softmax输出结果。
相关训练参数
- 优化器:Adam
- 第一个动量:0.9,第二个0.999
- 学习率: 0.0004
- batch_size:32
- embedding_size :300
- drop out rate:0.5
- pretrain model :300-D Glove 840B
- oov:Gaussian samples