【Deep Learning学习笔记】Learning meanings for sentences

总的来说,作者讨论了如何利用recursive neural network用word embedding来构建句子的句法结构,进一步将 一个句子表示成实数向量的形式,在此基础上,训练分类器,识别句子的情感倾向(正向或者负向)

详细内容如下:

1. Recursive definition of meaning
用二叉树来表示句子的句法结构,输入(叶子)节点是词语,词语用实数向量表示。句子的中间节点也用实数向量表示。
因为是二叉树,所以各节点有两个儿子节点(叶子节点除外)。用神经网络来做这样的事情,则,输入是两个词语(两个词语的实数向量),输出是一个节点的实数向量,向量维度与词语的向量维度相同。
为了简化问题,所有节点之间的关系,用同一个神经网络来做。
最后,句子归结成为一个语法树,由根节点来表示,根节点也由实数向量来表示。当判断句子的情感倾向的时候,输入就是根节点的实数向量,输出是一个二分类结果,则可以实用现有的分类器来做。
神经网络可以用bp来训练,分类器有自己的训练方法。
这个思路的难点是属于有监督的学习方法,无法找到训练集,尤其是对于节点的实数向量来讲,更无法确定正确的向量。

2. Autoencoders
首先考虑语法树的子结构,即两个词语叶子节点作为输入,输出为中间节点。用autoencoder来训练神经网络。句子中所有的节点recontructed结果与原始节点的差别,作为最小化的目标,准则函数记为E1。
这个思路有两个需要细调整的地方:
(1)避免中间节点的值都是0——通过修改准则函数来实现的
(2)该方法对短句有效,句子越长,方法错误越大——句子越长,信息量越大,但是root节点的维度没有变化,最终效果肯定比较差——这个也通过将句长因素加入到准则函数中实现

3. Selecting a tree structure
用贪心算法来构建二叉树,表示句子的语法结构。过程就是哈弗曼编码的过程。
从这个角度来看,这棵二叉树并不等同于语法树。
而且文章中也承认,参数的微小变化,就可能会引起二叉树结构的巨大变化。
个人想法:对于树结构,做autoencoder要根据树的高度来做N层,本身开销就比较大;如果树的结构还不固定,在训练的时候,会引起更大的开销。

4. Using meanings to predict labels
在训练出二叉树的结构,以及得到二叉树根节点的实数向量之后,就可以在上面加分类器,进行情感预测等高级问题了。
方法上,可以是仅仅用root节点的实数向量作为输入,来进行预测;学习的时候,也反推过来学习。
也可以,把所有非叶子结点,都当成样本。非叶子结点的“类别”(例如:情感倾向)与root节点(代表整个句子)的一样。这样,所有非叶子结点都可以作为样本参与训练。
此时,除了autoencoder所定义的准则函数E1之外,又有了一个准则函数E2,表示分类器的分类精度。
系统整个准则函数表示为E1和E2的线性加权。
个人想法:别看准则函数越来越复杂,不过在训练的时候分得很开。训练需要得到两类东西:(1)网络权重;(2)词语的向量表示。(2)要先于(1)得到。对于词语向量表示,单独用E2准则来训练;对于网络权重,用E1来得到。

5. Backpropagation
求导,推导训练公式

6. Numerical differentiation
因为目标函数很复杂,从公式推导导数也很复杂,Numerical differentiation是一种验证某个参数的导数是否正确的方法

完。

你可能感兴趣的:(【Deep Learning学习笔记】Learning meanings for sentences)