关注公众号【算法码上来】,每日算法干货马上就来!
首先给大家说明一下,前两天因为新入手了一个ukulele(就是下图这玩意),所以痴迷于学习弹奏,没有更新博客。照这个节奏下去,PaperDaily恐怕是要变成PaperWeekly了。(囧。。。)寒假一定要学会《小幸运》,嗯。
好了,今天开始恢复吧(说不准过两天我又鸽了,嘻嘻嘻)。
今天要讲的这篇是TACL2017的,是关于树状LSTM的。
介绍
前两年已经有人提出了树状LSTM的概念,之前一直不知道是个啥高大上的结构。其实就是递归神经网络中的结点单元替换成LSTM的结点单元。那有人要问了,LSTM不是有$x$输入吗,还有一个$h_{t-1}$输入,那这树状的哪来这两个输入?其实很简单,只要把这两个输入替换成左右儿子的输出表示就行了。瞬间感觉也没啥意思,就是换了结点函数,使得树状LSTM具有了遗忘功能,从而能够处理很长的句子罢了。
今天介绍的这篇paper就是在这基础上做了两点改进。
- 除了左右儿子作为输入之外,还增加了$x$输入。$x$是啥呢?就是左右儿子中的头结点,头结点的话传统方法是根据规则来判断谁是头结点的,这里省去了这些复杂的步骤,直接将头结点的判断丢进神经网络中训练。
- 增加了反向的树状LSTM,也就是top-down的LSTM。那有人就很好奇了,一个结点分解成两个结点,怎么可能?其实从头结点到任意一个其他结点的路径都可以看成一个独立的LSTM,如果向左参数就是$U_L$,否则就是$U_R$。
模型
图1是序列LSTM和树状LSTM的结构区别,这个树状LSTM是之前传统的树状LSTM,不带head结点的。
之前的基本的树状LSTM的结点单元的具体公式如下:
具体我就不解释了(懒。。。),自行类比序列LSTM。
加入head结点之后,公式区别如下(加粗所示):
那么top-down是怎么做的呢?
这里可以看出来,向左向右是用的两套不同的参数。注意到,top-down方向的LSTM前提是一定要用head机制作为支撑!不然头结点的$x$算不出来的话是没有办法计算的哦。
具体训练过程等等就不再阐述了。
总结
这个模型主要是用在了文本分类和情感分类上,我在想能不能用在我的毕设上面。
我觉得head机制可以加进去,但是反向LSTM貌似是不可行的,因为这里的短语结构树全部是给定的,所以向下计算知道什么时候停止。但是我是做句法分析任务的,没有给定句法树,向下计算无法知道什么时候停止扩展,情况有无数种!向上计算倒是无所谓,最多卡特兰数级别,加上动态规划,可以缩小到$n\log n$级别。