Recursive network(递归神经网络)
摘要:
这节课学习了Recursive network,RNN是Recursive network的特殊情况。
主要以句子的情感分析为例,讲了Recursive network是如何对句子进行分析的。
对于recursive network中的f函数,有几种不同的做法:
1.recursive neural tensor network:将两个word串接在一起,组成vector x,用xTwx来表示两个word合并在一起的意思。
2.matrix-vector recursive network:将每个word分成两部分,一部分表示本身含义,一部分表示影响其他word的含义。这样可以更加准确的表达意思。
3.tree—lstm:将f函数用lstm表示。因为它们的输入和输出都是多个vector。
目录
三、recursive neural tensor network
四、matrix-vector recursive network
一、什么是Recursive network
Recursive network是Recurrent Neural Network(RNN)的泛化版本。
以句子的情感分析为例
输出一个句子,机器要评价这个句子是正面,负面还是中性的。
对于rnn来说:
先将句子转化为一组vector,每个word vector依次输入到一个rnn(图片中的function f)。将得到的结果丢到function g中,最后得到最终的输出。
对于Recursive network来说:
先确定四个word之间的关系,由上图来看,将x1,x2关联得到h1,x3,x4关联得到h2,然后h1和h2关联得到h3……
这里要注意h和x的维度是一样的。
这里可以发现,Rnn其实recursive network的一种特例
二、分析实例:
以“not very good”为例,分析句子表达的情感
1.从syntactic structure(文法结构)可以看的出这句话的结合方式
2.用Word Embedding将每一个Word用Vector来表示。
3.根据文法结构来结合:将Very, Good丢入function f得到输出(词向量维度等于z)
输入向量维度2| Z |,输出向量维度| Z |。
F 不是两个vector的简单运算,因为有很多复杂的情况,所以需要f是一个network
复杂情况:
not是中性,good是积极,not good就成了消极
棒是积极,好棒也是积极,好棒棒就成了消极
红色表示消极,蓝色表示积极,加上not之后,词义发生了反转。
加上very之后,表示加强后面的词性。
那机器是如何训练的呢?
因为我们有训练数据,给机器输入label data,机器将整句话按文法结构,输入到network中,得到输出结果,将结果与reference相比较,根据output与ref的差距,回过头来训练 f和g。
经过这样的训练流程,就可以实现我们上面提到的复杂情况了。
三、recursive neural tensor network
上边提到的f function是如何实现的?
1.可以将a和b的vector串接在一起,乘以系数w,在通过激活函数,最终得到结果p
但是,这样做没有办法表示出a和b之间可能存在的联系。
比如good是积极地,not good就是消极的。加上not之后,整个词义反转,通过这个方法是没办法实现的。
2.改进:
要让a,b两个向量是有相乘的关系,调整为图片下边的样子,两个向量堆叠之后转置XT乘上权重W再乘上X,这么计算之后得到的是一个数,而后面所得项是一个2x1矩阵,无法相加,因此同样的事再做一次,将两个数串起来就成了2 x1矩阵。
要注意到两个W颜色不同代表的是不同的weight。
四、matrix-vector recursive network
实现f 函数的另一种方法
想法:一个word vector包含两部分,一是它本身的意思,一个是它影响其他word的意思。
做法:
将每个word拆成两部分,小写字母表示本身的含义,大写字母表示影响其他word的意思。
以not good为例,not的本身不表达情感,所以a为0,而A表示改变其他word的情感,所以是图上的矩阵。同理可得,good的b表达积极的情感,B则不会影响其他word。
这样将B*a和A*b接在一起,再乘以参数w,就得到not good的本身含义。
将A*B,再乘以另一个参数w,就得到not good影响其他word的矩阵。
将这两个结果拉成一个vector,就表示not good的vector
五、tree lstm
更复杂的一种方法
典型的LSTM:
输入一个h和m,得到输出h和m,但是h的输入输出差别很大,m的不大
Tree LSTM:
就是把那个f换成LSTM,上图表示tree lstm和Recursive network的对应关系
六、应用
侦测两个句子是不是同一个意思,把两个句子分别得到word embedding,然后再丢到f训练出来关系来预测
总结:
尽管递归神经网络具有更为强大的表示能力,但是在实际应用中并不太流行。
其中一个主要原因是,递归神经网络的输入是树/图结构,而这种结构需要花费很多人工去标注。想象一下,如果我们用循环神经网络处理句子,那么我们可以直接把句子作为输入。
然而,如果我们用递归神经网络处理句子,我们就必须把每个句子标注为语法解析树的形式,这无疑要花费非常大的精力。很多时候,相对于递归神经网络能够带来的性能提升,这个投入是不太划算的。