github:https://github.com/stanfordnlp/treelstm.
摘要
由于长短期记忆网络(LSTM)这种具有复杂单元的循环神经网络具有良好的表示序列信息的能力,其在多种序列模型任务中都取得了非常好的结果。到目前为止一直被使用的LSTM是一个线性结构。然而,自然语言表现出自然地将单词与短语组合在一起的句法属性。我们引入了Tree-LSTM,将LSTM推广到树状的网络拓扑结构。在两个任务的baseline上,Tree-LSTMs都要优于现有的系统:预测两个句子的语义相关性和情感分类。
1.介绍
用于短语和句子的分布式表示的大多数模型(即,使用实值向量来表示其意义的模型)为三个类别之一:词袋模型,序列模型和树形结构模型。在词袋模型中,短语和句子的表示与单词顺序无关;例如,他们可以通过单纯地将单词向量求均值得到。相反,序列模型构建了结合单词顺序的句子表示。最后,树形结构模型根据句子的给定的语法结构,从其构成的子词组成每个短语和句子的表示。
对于顺序无关的模型来说,其无法完全捕获自然语言的语义信息,因为他们无法解释由词序或句法结构的差异而导致的语义差异 (例如, “cats climb trees”和“trees climb cats”)。我们因而更多地去关注序列模型和树结构模型。特别地,在语言处理中,树状结构的模型应该优先选择,因为它们能够表示句子语法结构的关联。这因而产生了一个问题:我们可以在多大程度上(如果有的话)使用树状结构模型,而不是句子表示的顺序模型?在这篇文章中,我们通过直接比较最近用于实现几个NLP任务中具有最好结果的顺序模型与树结构模型来解决这个问题。
由于循环神经网络具有处理可变长度输入序列的能力,对于序列任务来说,其自然成为了最优选择。最近,具有长短期记忆单元(LSTM)的RNNs成为了一种受欢迎的网络结构,这主要因为它能够有效地解决和表示长期依赖问题。LSTM网络(我们将在第二节回顾)已经成功地应用于各种序列和预测任务中,例如机器翻译,语音识别,图像字幕生成以及程序执行。
在这篇文章中,我们将LSTM推广到树状的网络拓扑结构,并且展示出比序列LSTM更好的性能。尽管标准的LSTM的隐藏状态由当前时刻的输入和上一时刻的隐藏态构成,树结构的LSTM(Tree-LSTM),其隐藏态,由该单元的输入向量以及其各子节点单元的隐藏态构成。标准LSTM可以看作是Tree-LSTM的一种特殊情况,其中的每一个节点仅有一个子节点。
在我们的评估当中,我们证明了Tree-LSTM作为句子的表示模型,具有很好的效果。我们通过在两个任务上去评估Tree-LSTMs结构:句子对间的语义相关性的预测以及来自于电影影评的句子情感分类。我们的实验展示了Tree-LSTMs优于现有的方法,以及顺序LSTM的baseline。
2.长短期记忆网络
2.1 概述
循环神经网络(RNNs)能够通过在隐藏状态向量
h
t
h_t
ht上循环应用转移函数来处理任意长度的输入序列。在每一时刻
t
t
t,其隐藏态
h
t
h_t
ht是一个由当前时刻的输入向量
x
t
x_t
xt和上一时刻的隐藏态
h
t
−
1
h_{t-1}
ht−1构成的函数。例如,输入向量
x
t
x_t
xt可以是文本中第
t
t
t个单词的向量表示。隐藏态
h
t
h_t
ht能够被解释为
t
t
t时刻所观测到的由单词所组成的句子的多维分布式表示。
通常,RNN的转移函数是一个按元素相乘(point-wise)的非线性的仿射变换(Affine transformation) ,例如双曲正切函数:
h
t
=
t
a
n
h
(
W
x
t
+
U
h
t
−
1
+
b
)
h_t=tanh(Wx_t+Uh_{t-1}+b)
ht=tanh(Wxt+Uht−1+b)
然而,RNNs存在的一个问题是,在训练期间,具有这种形式的转移函数会导致梯度随着序列的长度呈指数型增长或减小。这种梯度爆炸或梯度消失的问题使得RNN非常难于去学习长距离序列的表示。
LSTM通过引入一个记忆单元解决了这个问题,其能够保证随时间转移的状态不会消失。尽管有许多的LSTM变种被提出,在这里我们描述由Zaremba和Sutskever (2014)使用的版本。
我们将每一时刻LSTM单元定义为d维空间中向量的集合:一个输入门
i
t
i_t
it,一个遗忘门
f
t
f_t
ft,一个输出门
o
t
o_t
ot,一个记忆单元
c
t
c_t
ct,以及一个隐藏态
h
t
h_t
ht。向量
i
t
i_t
it,
f
t
f_t
ft,
o
t
o_t
ot的输出范围为[0,1]。我们将LSTM的隐藏态的维度定义为
d
d
d。
LSTM的转移等式如下:
i
t
=
σ
(
W
(
i
)
x
t
+
U
(
i
)
h
t
−
1
+
b
(
i
)
)
i_t=\sigma(W^{(i)}x_t+U^{(i)}h_{t-1}+b^{(i)})
it=σ(W(i)xt+U(i)ht−1+b(i))
f
t
=
σ
(
W
(
f
)
x
t
+
U
(
f
)
h
t
−
1
+
b
(
f
)
)
f_t=\sigma(W^{(f)}x_t+U^{(f)}h_{t-1}+b^{(f)})
ft=σ(W(f)xt+U(f)ht−1+b(f))
o
t
=
σ
(
W
(
o
)
x
t
+
U
(
o
)
h
t
−
1
+
b
(
o
)
)
o_t=\sigma(W^{(o)}x_t+U^{(o)}h_{t-1}+b^{(o)})
ot=σ(W(o)xt+U(o)ht−1+b(o))
u
t
=
t
a
n
h
(
W
(
u
)
x
t
+
U
(
u
)
h
t
−
1
+
b
(
u
)
)
u_t=tanh(W^{(u)}x_t+U^{(u)}h_{t-1}+b^{(u)})
ut=tanh(W(u)xt+U(u)ht−1+b(u))
c
t
=
i
t
⊙
u
t
+
f
t
⊙
c
t
−
1
c_t=i_t\odot u_t+f_t\odot c_{t-1}
ct=it⊙ut+ft⊙ct−1
h
t
=
o
t
⊙
t
a
n
h
(
c
t
)
h_t=o_t\odot tanh(c_t)
ht=ot⊙tanh(ct)
其中,
x
t
x_t
xt是当前时刻的输入,
σ
\sigma
σ表示sigmod函数,
⊙
\odot
⊙表示按元素相乘。本质上,遗忘门负责控制上一时刻的记忆单元在多打程度上被遗忘,输入门控制每个单元的更新程度,输出门控制内部单元的输出程度。因此,LSTM单元中的隐藏状态向量是单元内部存储器单元状态的门控局部表示。由于门控变量的值对于每个矢量元素而变化,因此模型可以学习在多个时间尺度上表示信息。
2.2 变种
两种基于LSTM结构的变种是双向LSTM和多层LSTM(也称为stack-LSTM)。
3.树结构LSTMs
上一节所描述的LSTM结构的限制在于,其只允许顺序信息的传播。在这一节,我们提出了由基本LSTM扩展出的两种结构:Child-Sum Tree-LSTM和N-ary Tree-LSTM。这两个变种均允许更丰富的网络拓扑结构,其中每个LSTM单元能够联合来自多个子单元的信息。
正如标准的LSTM单元那样,Tree-LSTM中的每个单元(由
j
j
j标识)都包含输入输出门
i
j
,
o
j
i_j,o_j
ij,oj,一个记忆单元
c
j
c_j
cj,以及隐藏态
h
j
h_j
hj。其与标准LSTM单元的不同之处在于,门向量和记忆单元的更新依赖于许多子单元。另外,该单元并不只包含一个遗忘门,Tree-LSTM单元对每一个子单元均包含一个遗忘门
f
j
k
f_{jk}
fjk(此遗忘门相当于边的权重)。这有助于Tree-LSTM单元有选择地联合来自于每一个子单元的信息。例如,在语义相关性任务中,一个Tree-LSTM模型能够学习去关注语义头;在情感分类任务中,其能够获得具有更丰富语义表示的子节点的信息。
正如标准的LSTM单元那样,Tree-LSTM中的每一个单元都有一个输入向量
x
j
x_j
xj。在我们的应用当中,每一个
x
j
x_j
xj是一句话中一个单词的向量表示。每一个节点的输入单词依赖于当前网络的树结构。例如,在一个由依存树构成的Tree-LSTM中,树中每个结点都是以相应首要词的向量作为输入,而在一个由constituency tree构成的Tree-LSTM中,叶结点则以相应单词向量作为输入。
3.1 Child-Sum Tree-LSTMs
给定一棵树,令
C
(
j
)
C(j)
C(j)为节点
j
j
j的所有子节点的集合。Child-Sum Tree-LSTM的转移等式如下:
h
~
j
=
∑
k
∈
C
(
j
)
h
k
(
2
)
\tilde{h}_j=\sum_{k\in C(j)}h_k\qquad(2)
h~j=k∈C(j)∑hk(2)
i
j
=
σ
(
W
(
i
)
x
j
+
U
(
i
)
h
~
j
+
b
(
i
)
)
(
3
)
i_j=\sigma(W^{(i)}x_j+U^{(i)}\tilde{h}_j+b^{(i)})\qquad(3)
ij=σ(W(i)xj+U(i)h~j+b(i))(3)
f
j
k
=
σ
(
W
(
f
)
x
j
+
U
(
f
)
h
k
+
b
(
f
)
)
(
4
)
f_{jk}=\sigma(W^{(f)}x_j+U^{(f)}h_k+b^{(f)})\qquad(4)
fjk=σ(W(f)xj+U(f)hk+b(f))(4)
o
j
=
σ
(
W
(
o
)
x
j
+
U
(
o
)
h
~
j
+
b
(
o
)
)
(
5
)
o_{j}=\sigma(W^{(o)}x_j+U^{(o)}\tilde{h}_j+b^{(o)})\qquad(5)
oj=σ(W(o)xj+U(o)h~j+b(o))(5)
u
j
=
t
a
n
h
(
W
(
u
)
x
j
+
U
(
u
)
h
~
j
+
b
(
u
)
)
(
6
)
u_{j}=tanh(W^{(u)}x_j+U^{(u)}\tilde{h}_j+b^{(u)})\qquad(6)
uj=tanh(W(u)xj+U(u)h~j+b(u))(6)
c
j
=
i
j
⊙
u
j
+
∑
k
∈
C
(
j
)
f
j
k
⊙
c
k
(
7
)
c_j=i_j\odot u_j + \sum_{k\in C(j)}f_{jk}\odot c_k\qquad(7)
cj=ij⊙uj+k∈C(j)∑fjk⊙ck(7)
h
j
=
o
j
⊙
t
a
n
h
(
c
j
)
(
8
)
h_j=o_j\odot tanh(c_j)\qquad(8)
hj=oj⊙tanh(cj)(8)
其中等式(4)中,
k
∈
C
(
j
)
k\in C(j)
k∈C(j)。
本质上,我们能够将上述等式矩阵中的每个参数解释成用于对Tree-LSTM单元中的向量、输入
x
j
x_j
xj、以及子节点单元的隐藏态
h
k
h_k
hk进行相关性编码。例如,在一个依存树的应用中,当一个语义上非常重要的单词(例如动词)作为输入时,其输入门
i
j
i_j
ij能够接近于1,当输入单词是一个不重要的单词时,其输入门
i
j
i_j
ij能够接近于0。
Dependency Tree-LSTMs。由于Child-Sum Tree-LSTM单元根据子单元隐藏状态
h
k
h_k
hk的总和调整其组件,因此适用于具有多分支或其子节点无序的树。例如,它是依存树的一个很好的选择,其中头的依存数目可以是高度可变的 我们将应用于依存树的Child-Sum Tree-LSTM称为Dependency Tree-LSTM。