前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TreeLSTM Sentiment Classification

TreeLSTM Sentiment Classification

作者头像
zenRRan
发布2018-04-10 11:13:21
1.1K0
发布2018-04-10 11:13:21
举报

昨天的周日讨论班讲的是TreeLSTM Sentiment Classification,主讲人:王铭涛

今天我来做一下总结。

下面的图片来自于 王铭涛的ppt

导读

我们一步一步来。先说最基础的RNN结构:

公式为:

就一个简单的隐层h。

但是RNN的缺点是会有梯度爆炸或者梯度消失问题。这里我就不详细解释了。下面推荐阅读有我之前的RNN,LSTM详细讲解,想更深一步了解的可以去看看。

因为这个致命的问题,有人提出了LSTM网络,改善了RNN的缺点,我们来回顾下:

重新添加了输入门i,输出门o,遗忘门f和记忆单元C,外加之前的一个隐层h(此h非RNN的h,公式可见区别,但都是隐层)。

这种普通的LSTM都是解决线性问题的。例如常用的应用之句子分类:

每个词在随着时间序列的增加而不断地依次进入LSTM网络。

这种方法有明显的局限性:当前词的输入需要依赖前一步词的输入。但是如果我当前词要进行运算,而此时前一步词还没有进行计算可怎么办?比如下面的基于依存树的情感分类。(依存树的详细讲解在今晚凌晨的推文。)

TreeLSTM

比如,这是一棵依存树的抽象表达(如果暂时不知道依存树的就把这个当成一棵树):

空白方框就LSTM的一个单元。文本序列为x1,x2,x4,x5,x6。(x3ppt中少画了,谅解)

x是输入的序列,y是每个x输入后经过LSTM一个时间片段的预测输出。我们可以看出(y5你们能看出是哪个),y4的产生依靠于x4的输入,y5的产生依靠于x5的输入,y6的产生依靠于x6的输入;y3产生需要依赖于y4,y5,y6的输入,y2的产生依靠于x2的输入;y1的产生依靠于y2,x1,y3的输入。这个显然就不能用到普通LSTM了。这时候TreeLSTM就登场上了历史舞台,开始绽放放光彩!

既然TreeLSTM和普通LSTM不一样了,那么咱们怎么计算他们呢?

虽说不一样,其实也是有相同的地方。比如普通LSTM当前时间段需要的输入是在执行在本时间段以前就产生了。这样就能一个接一个的运行下去。

TreeLSTM也一样,我们看图:

我们先找y2,y4,y5,y6的产生依赖于的x2,x4,x5,x6都已经存在,那么我们就能通过x2,x4,x5,x6分别过自己的隐层,得到对应的y2,y4,y5,y6;类似的,y2,y3也能相继产生;接着最终的y1也产生了。

计算逻辑

那这样的到底怎么个呢?暂时我知道的有两种方法

前提:

如果当前节点的孩子节点有了值(就是有了y),那么我们就将该孩子节点与当前节点的度去掉。

方法一

当前节点入度为0的时候,也就是计算它的所有准备条件都有了的时候,就能对它进行计算了。

所以,这个方法总结就是入度为0的节点都可以计算,然后更新每个节点的入度,再重复该操作。

方法二

层次遍历。最下面的从最下面的开始计算,最下面的肯定是可以直接计算的。然后刷新,再计算。

这两种方法在自己以后优化batch的时候很有用的。

具体TreeLSTM计算分析

我们找具体找一个分析:

y1的产生依靠于y2,x1,y3的输入。那具体怎么计算的呢?

这里有张计算图,请看:

其中h为LSTM的隐层,c为LSTM的记忆单元。

公式为(在普通LSTM上稍微修改了下):

根据公式,我们来梳理下上面计算图:

h2,h3求和再与x1进行

得到u1。

c2,f2与c3,f3分别按位相乘再求和,再加上u1,i1按位相乘,最后两个和相加即可,得到c1。(i1怎么算,公式里有。)

最后通过该公式

得到隐层h1。

计算loss

每个隐层y都要经过一个线性层,映射到具体的类别上,就是每个x对应一个类别,公式为:

最终的损失函数为:

这个损失函数用的是交叉熵,最后是一个正则化。我之前也讲过,放到下面的推荐里了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深度学习自然语言处理 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档