论文笔记:Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank 递归神经网络总结

“Recursive Deep Models for Semantic Compositionality Over Sentiment Treebank”这篇论文发表于 EMNLP 2013,主要作者是 Richard Socher,非常响当当的人物,在NLP方向的论文中,经常可以看到这个名字, Socher的在2010-2015年间的很多工作都与递归神经网络有关,Recursive Neural Network 很多地方会把它也简写为 RNN ,与循环神经网络同名,为了区别,我一般会写成 RvNN。
Socher在这篇论文之前已经有好几篇关于 RvNN 的论文了(如果感兴趣可以看文中的参考文献部分,其中 Socher 为第一作者的基本上都是RvNN相关的工作),我没有仔细看他之前的论文,这些相关的工作在斯坦福大学的有关深度学习的公开课中都有提及,例如CS224N之类的。实际上,这篇论文就像是之前一系列工作的一个总结,之前的一些工作在本文中都可以找到介绍。

1.主要解决问题

论文中有两项工作:

  • 提出 RNTN 模型,也是 RvNN 的一个变种。
  • 介绍 Stanford Sentiment Treebank(SST),也是后面论文中广泛使用的一个数据集

根本来说, RNTN 的提出还是解决 Semantic Composition 的问题,简单来说就是,如何从单词出发,得到句子或者短语的表示,例如,在之前的工作中我们有 word2vec 和 Glove等词向量,那么现在的问题就是如何从这些词向量得到句子的向量表示

2. 背景介绍

关于 Semantic Composition 的问题,之前(之后)的很多论文中都会有所介绍,一般来说,有三种方式(意思是这个意思,名称翻译可能就不准确了):

  • 词袋模型(BOW),也就是不计较文本中单词的顺序信息,例如将所有单词的词向量取平均,就可以看作是句子含义的一种表示,但是缺点显而易见,“I have an apple” 和 “An apple have I”, 是一样的。
  • 序列模型,也就是 RNN 以及相关的模型们处理的方式,将文本看作是字符序列,依次输入 RNN或者它的改进版本LSTM等单元进行处理,这种方式得益于记忆信息的保存可以很好的反应整个句子的含义。
  • 结构模型,对于有歧义的句子来说,序列显然只有一个,但是它对于不同的含义,结构却不同,因此,对于句子的含义表示,很自然的方式是如何引入结构信息,这也就是递归神经网络的处理方式。

3.RNTN以及其之前的模型

在论文中,Socher 对之前所建立的 RvNN 模型做了总结,所以实际上这一篇论文已经够详细了,对于这一部分,个人觉得最好记录一下公式中不同的权重矩阵或者向量等等的维数信息,一般也就只有几种 dxd, nxd之类的,这样会更好理解。

3.1 RvNN

也就是论文中 4.1 部分中介绍的模型(文中写的是RNN),也就是最基础的递归神经网络模型,整个模型还是很好理解的,也就是使用 bottom-up 的方式递归往上计算即可。

3.2 MV-RNN

这是Socher之后的工作对 RvNN 的改进,改动的部分实际上就是对 composition function 进行了改变,同时使用了一个矩阵和一个向量来表示一个单词,实验结果表明模型的效果比 RvNN 要好,这样的代价非常明显,每个单词又增加了一个矩阵的表示,显然这个参数量增加的非常大。

3.3 RNTN

这是本文中提出的模型,论文中也写明了,这一个模型主要是对于 MV-RNN 参数量过大的改进(之前的MV-RNN是参数量是根据句子中的单词数量变化而变化的,所以寻找一种固定参数数量的模型),我个人的理解其实就是把不确定数量的每个单词的信息抽出来合成在一个 V 矩阵中,从 Figure-5 中可以看出,Neural Tensor Layer 含有两个部分:Slice of tensor layer 和 standard layer, 对于要进行组合的两个向量而言,实际上 V 中的每个切片都是一个组合的方式,这部分也就是 slice of tensor layer进行的处理,同时,standard layer做的处理就是之前的RvNN进行的处理,论文中认为,对于 V 的不同 slice,其实就代表的是不同的组合方式,大概意思就是通过更多的组合提高了最后的结果。 其实模型的结构还是比较清楚的。

4. 实验部分

Semantic Composition 总之还是会作为其他任务的上游任务,得到了句子的表示,论文在提出的 Stanford Sentiment Treebank上进行了 Sentiment Classification 的测试,当然,SST这个数据集我感觉比前面的模型还要有名,毕竟之后的那么多论文都使用了这个数据集进行实验。
SST的具体信息论文中有详细介绍,它对于每个句子都提供了 ParseTree,并且在 root 和 每个节点上都提供了情感分类,所以可以用来测试最后整体的句子 Sentiment Classification 和 在低层次上进行分类,对于这些情感分类,数据集提供了不同粒度的分类,粗粒度上是二分类,细粒度则是五分类。这是数据集的情况。

在实验设计上,比较有意思的是测试了模型对于特殊情况的几种句子,主要是 5.3- 5.4 中的几种情况,首先是句子中连词前后对比的情况,也就是 :“X but Y” 并且 X Y的情感不同,第二种是 Negative Positive 的句子,也就是句子只改变了少量词,但是情感不同,第三种是 Negative Negative 的情况,与第二种类似,只不过是修改后 由 negative 变成了 less negative,这部分在FIgure -9 的例子中看的比较清楚。
总之,这几组实验设计的很有意思,反映了一些特殊情况下模型的鲁棒性依旧好,以后可以尝试这样设计的思路。

参考

论文:Recursive Deep Models for Semantic Compositionality Over a Sentiment Treebank
很建议一看:零基础入门深度学习(7)递归神经网络
以及这个问题:如何有效的区分和理解RNN循环神经网络与递归神经网络?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章