递归神经网络(recursive NN)结合自编码(Autoencode)实现句子建模

递归神经网络(recursive NN)结合自编码(Autoencode)实现句子建模


递归神经网络(recursive NN)

目前有两种RNN比较常用,一种是recurrent neural networks,另一种是recursive neural networks。这两种句子转换模型相似而又有所不同。


recurrent neural networks

recurrent neural networks,是markov提出来的,其模型如下:
递归神经网络(recursive NN)结合自编码(Autoencode)实现句子建模_第1张图片
隐藏层如下:
递归神经网络(recursive NN)结合自编码(Autoencode)实现句子建模_第2张图片
合成顺序:沿着序列进行
合成特点:每个结点的表示都包含之前所有历史信息
合成函数:LSTM/GPU/Vanilla
应用:建模句子


recursive neural networks

recursive neural networks,是Richard提出来的,其模型如下:
递归神经网络(recursive NN)结合自编码(Autoencode)实现句子建模_第3张图片
这个树的构成,有多种方法,常用且最实用的就是采用贪心思想,具体怎么实现,要结合模型。
合成顺序:沿着某种树结构
合成特点:每个结点的表示与其孩子结点相关
合成函数:Vanilla/Tensor/LSTM
应用:建模短语,句子

注:这两种表示方法到底哪个效果更好现在还没有定论(still cognitively debatable),用recurrent neural network来建模,就是假设句子后面的词的信息和前面的词有关,而用recursive neural network来建模,就是假设句子是一个树状结构,由几个部分(主语,谓语,宾语)组成,而每个部分又可以在分成几个小部分,即某一部分的信息由它的子树的信息组合而来,整句话的信息由组成这句话的几个部分组合而来。


自编码(Autoencode)

Auto-Encoder(AE)是20世纪80年代晚期提出的,它是一种无监督学习算法,使用了反向传播算法,让目标值等于输入值。基本的AE可视为一个三层神经网络结构:一个输入层、一个隐藏层和一个输出层,其中输出层与输入层具有相同的规模。具体如下图所示。
递归神经网络(recursive NN)结合自编码(Autoencode)实现句子建模_第4张图片
Auto-Encoder(AE)尝试学习一个 hW,b(x)x 的函数,来尽可能复现输入信号的神经网络。这么做的意义在于我们想发现输入数据中隐含的一些特定的结构,并训练出一种更好的表达输入数据的方法。


recursive autoencoder

这个模型是将recursive NN结合Autoencoder构成一个无监督的句子转换模型。可以将不定长的句子转换成句子向量。其结构如下:
递归神经网络(recursive NN)结合自编码(Autoencode)实现句子建模_第5张图片
具体算法如下:
准备工作:将句子的词训练成词向量
1. 将句子里面的词的词向量,两两结合,形成一个词向量对
2. 用这些词向量对去初始化Autoencoder,生成模型和参数
3. 将句子中邻近的词结合,输入初始化训练的Autoencoder模型,选择还原度最高的两个词生成的隐藏层输出,即x3,x4和对应的y1。
4. 将y1代替句子中的x3,x4,重复步骤3,直到句子所有词合并完成
5. 将选出的句子对,即[x3,x4],[x2,y1],[x1,y2]放入模型Autoencoder继续训练,更新参数
6. 直到所有还原度都大于阈值为止
7. 保留模型参数,计算句子向量


参考各位大牛的博客和论文
deep learning 自编码算法详细理解与代码实现(超详细)
人人都能用Python写出LSTM-RNN的代码
http://blog.csdn.net/pi9nc/article/details/27711441
CS224d lecture 9札记
这个大牛Richard Socher的课程和论文

你可能感兴趣的:(深度学习,神经网络,句子建模,深度学习,RAE)