文章目录
本文内容整理自深度之眼《GNN核心能力培养计划》
公式输入请参考: 在线Latex公式
Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks
这期内容需要有LSTM的基础,没学过LSTM直接看估计又会蒙,所以还是看这里比较容易理解:李宏毅学习笔记13.RNN Part I:
RNN
LSTM
Bi-LSTM
多层LSTM
摘要
从LSTM的特点入手(可以记忆序列的信息),夸夸LSTM的优点(处理序列任务效果好)
Because of their superior ability to preserve sequence information over time, Long Short-Term Memory (LSTM) networks, a type of recurrent neural network with a more complex computational unit, have obtained strong results on a variety of sequence modeling tasks.
再说说LSTM的局限(目前的LSTM主要用在线性的链式结构)
The only underlying LSTM structure that has been explored so far is a linear chain.
转折:自然语言里面存在类似树形的语法属性
However, natural language exhibits syntactic properties that would naturally combine words to phrases.
为了解决这个问题,我们咋做?引入Tree-LSTM
We introduce the Tree-LSTM, a generalization of LSTMs to tree-structured network topologies.
介绍实验结果
Tree-LSTMs outperform all existing systems and strong LSTM baselines on two tasks: predicting the semantic relatedness of two sentences (SemEval 2014, Task 1) and sentiment classification (Stanford Sentiment Treebank).
Introduction
第一段:
先讲词表征的定义:
bag-of-words models
sequence models
tree-structured models
分别讲三种词表征的特点,套路:
In bag-of-words models,。。。。In contrast, 。。。。Lastly,。。。。
第二段:
bag-of-words models属于词序无关的表示方法(Order-insensitive models),缺点是。。。。We therefore turn to后面两种模型。In particular, tree-structured models又比第二种模型好在哪里哪里,最后提出本文的目标,就是要弄出一个Tree LSTM模型来生成tree-structured表征。
第三段:
从模型角度来看,介绍LSTM,及其特点,这段属于过度,因为本文模型是LSTM的扩展。
第四段:
简单介绍本文模型
第五段:
介绍实验
Long Short-Term Memory Networks
原文第二节,这里不展开,相当于Related Work,有两个小节,第一小节介绍LSTM,第二小节介绍LSTM变种:双向LSTM和多层LSTM
关于语法树的例子可以看这里还有这里
StandFord也提供了一些自动生成语法树的工具。
然后在实作的时候,通常要把树转成二叉树,将所有单词都放到叶子节点上。
Tree-Structured LSTMs
先过渡句讲下LSTM有缺点,然后先总后分,总的说明本文模型相对于原始的LSTM有什么改进:
- the Child-Sum Tree-LSTM
- the N-ary Tree-LSTM.
然后总体上给出Tree-Structured LSTM的数学表达,比起原始的LSTM,针对树的孩子节点,每个都分配一个遗忘门:
Additionally, instead of a single forget gate, the Tree-LSTM unit contains one forget gate
f
j
k
f_{jk}
fjk for each child
k
k
k.
这里要说明一下,树和图的关系,学过数据结构的同学应该知道,树其实是图的一种特殊情况,因此将树看做图当然是没有问题的,例如当前节点的邻居当然是他的父节点和子节点,除此之外,还可以加入其他的一些额外的边信息,例如兄弟节点,也可以有二跳邻居:父节点的父节点。
Child-Sum Tree-LSTMs
对于结点
j
j
j而言,
C
(
j
)
C(j)
C(j)表示节点
j
j
j的孩子节点的集合,那么Child-Sum Tree-LSTMs可以表示为:
h
~
j
=
∑
k
∈
C
(
j
)
h
k
\tilde h_j =\sum_{k\in C(j)} h_k
h~j=k∈C(j)∑hk
就是把所有孩子节点的信息求和(类别GNN的消息汇聚)得到
h
~
j
\tilde h_j
h~j
对于输入门和输出门表达式都直接用孩子节点汇聚的信息进行计算:
i
j
=
σ
(
W
(
i
)
x
j
+
U
(
i
)
h
~
j
+
b
(
i
)
)
i_j = \sigma\left(W^{(i)}x_j+U^{(i)}\tilde h_j+b^{(i)}\right)
ij=σ(W(i)xj+U(i)h~j+b(i))
o
j
=
σ
(
W
(
o
)
x
j
+
U
(
o
)
h
~
j
+
b
(
o
)
)
o_j = \sigma\left(W^{(o)}x_j+U^{(o)}\tilde h_j+b^{(o)}\right)
oj=σ(W(o)xj+U(o)h~j+b(o))
更新门:
u
j
=
tanh
(
W
(
u
)
x
j
+
U
(
u
)
h
~
j
+
b
(
u
)
)
u_j = \tanh\left(W^{(u)}x_j+U^{(u)}\tilde h_j+b^{(u)}\right)
uj=tanh(W(u)xj+U(u)h~j+b(u))
对于遗忘门,由于每个孩子节点都有,因此每个孩子节点的遗忘门打开程度不一样,这里借鉴了attention机制,如果有孩子节点比较重要,那么忘记少点,反之忘记多点:
f
j
k
=
σ
(
W
(
f
)
x
j
+
U
(
f
)
h
k
+
b
(
f
)
)
f_{jk} = \sigma\left(W^{(f)}x_j+U^{(f)}h_k+b^{(f)}\right)
fjk=σ(W(f)xj+U(f)hk+b(f))
可以看到,由于是针对每一个孩子分别进行计算的,因此用的
h
k
h_k
hk,不是求和结果
h
~
j
\tilde h_j
h~j,这里得到的结果相当于attention里面的权重(遗忘门打开的大小)
然后遗忘门打开的大小计算当前节点
j
j
j的self-state:
c
j
=
i
j
⊙
u
j
+
∑
k
∈
C
(
j
)
f
j
k
⊙
c
k
c_j = i_j\odot u_j+\sum_{k\in C(j)}f_{jk}\odot c_k
cj=ij⊙uj+k∈C(j)∑fjk⊙ck
最后算隐藏层状态hidden-state:
h
j
=
o
j
⊙
tanh
(
c
j
)
h_j = o_j\odot\tanh (c_j)
hj=oj⊙tanh(cj)
最后文章总结了一下3.1,提到这个模型通常用在孩子节点数量较大,且孩子节点无序的情况,这样弄出来的树也叫:dependency tree,整个模型就叫Dependency Tree-LSTM.
N-ary Tree-LSTMs
如果树中节点的子节点数量最大为
N
N
N,那么,且子节点有序,那么可以标识为1到
N
N
N,对于节点
j
j
j可以把他的第
k
k
k个子节点的隐藏状态和当前状态记为
h
j
k
h_{jk}
hjk和
c
j
k
c_{jk}
cjk
对于输入门和输出门表达式都直接用
N
N
N个孩子节点信息进行计算:
i
j
=
σ
(
W
(
i
)
x
j
+
∑
l
=
1
N
U
l
(
i
)
h
j
l
+
b
(
i
)
)
i_j = \sigma\left(W^{(i)}x_j+\sum_{l=1}^NU_l^{(i)}h_{jl}+b^{(i)}\right)
ij=σ(W(i)xj+l=1∑NUl(i)hjl+b(i))
o
j
=
σ
(
W
(
o
)
x
j
+
∑
l
=
1
N
U
l
(
o
)
h
j
l
+
b
(
o
)
)
o_j = \sigma\left(W^{(o)}x_j+\sum_{l=1}^NU_l^{(o)}h_{jl}+b^{(o)}\right)
oj=σ(W(o)xj+l=1∑NUl(o)hjl+b(o))
更新门:
u
j
=
tanh
(
W
(
u
)
x
j
+
∑
l
=
1
N
U
l
(
u
)
h
j
l
+
b
(
u
)
)
u_j = \tanh\left(W^{(u)}x_j+\sum_{l=1}^NU_l^{(u)}h_{jl}+b^{(u)}\right)
uj=tanh(W(u)xj+l=1∑NUl(u)hjl+b(u))
可以看到,公式明显比3.1的复杂,每个孩子节点有一套参数,因此表达能力变强。
对于遗忘门,也是对每个子节点都会计算一个
f
j
k
f_{jk}
fjk
f
j
k
=
σ
(
W
(
f
)
x
j
+
∑
l
=
1
N
U
k
l
(
f
)
h
j
l
+
b
(
f
)
)
f_{jk}=\sigma\left(W^{(f)}x_j+\sum_{l=1}^NU_{kl}^{(f)}h_{jl}+b^{(f)}\right)
fjk=σ(W(f)xj+l=1∑NUkl(f)hjl+b(f))
例如:当
k
=
1
k=1
k=1时
∑
l
=
1
N
U
1
l
(
f
)
h
j
l
\sum_{l=1}^NU_{1l}^{(f)}h_{jl}
l=1∑NU1l(f)hjl
这里可以看到
k
k
k和
j
j
j是固定的,就是算节点
j
j
j的1号节点与其他所有
j
j
j的子节点的参数
U
k
l
U_{kl}
Ukl(相当于self attention里面的权重)
然后计算当前节点
j
j
j的self-state:
c
j
=
i
j
⊙
u
j
+
∑
l
=
1
N
f
j
l
⊙
c
l
c_j = i_j\odot u_j+\sum_{l=1}^Nf_{jl}\odot c_l
cj=ij⊙uj+l=1∑Nfjl⊙cl
最后算隐藏层状态hidden-state:
h
j
=
o
j
⊙
tanh
(
c
j
)
h_j = o_j\odot\tanh (c_j)
hj=oj⊙tanh(cj)
Models
这里开始描述模型用到两个任务上怎么做,包括损失函数等。
Softmax加Crossentropy,常规操作,不展开。
思考:
生成中文语法树的工具有哪些?
为什么Tree LSTM只汇聚孩子节点信息,不汇聚父节点信息?
看下语法树就知道,都是由子节点单词拼成父节点的短语的,因此不需要汇聚父节点信息