介绍了CNN表示文本的模型之后,本篇将会分享一篇用CNN结合RNN的模型来表示文本。paper题目是Recurrent Convolutional Neural Networks for Text Classification,作者是来自中科院大学的来斯惟博士。
本文要解决的问题是文本分类,文本分类最关键的问题是特征表示,传统的方法经常会忽略上下文信息和词序,无法捕捉到词义。近几年随着深度学习的火热,研究者们通过借助神经网络模型来解决传统方法存在的问题。比如:Socher提出的Recursive Neural Network(递归神经网络)模型,通过一种树结构来捕捉句子语义,取得了不错的效果,但时间复杂度是O(n2),并且无法用一棵树来表示两个句子之间的关系。再比如:Recurrent Neural Network(循环神经网络)模型,时间复杂度是O(n),每个单词的表示都包含了之前所有单词的信息,有很强的捕捉上下文的能力,但该模型有偏,后面的单词比前面的单词更重要,但这与常识并不相符,因为句中关键的词不一定在最后面。为了解决RNN的有偏性问题,有的研究者提出了用CNN(卷积神经网络)来表示文本,并且时间复杂度也是O(n),但是CNN存在一个缺陷,卷积窗口的大小是固定的,并且这个窗口大小如何设置是一个问题,如果设置小了,则会损失有效信息,如果设置大了,会增加很多的参数。
于是,针对上述模型存在的问题,本文提出了RCNN(循环卷积神经网络)模型,模型架构图如下:
首先,构造CNN的卷积层,卷积层的本质是一个BiRNN模型,通过正向和反向循环来构造一个单词的下文和上文,如下式:
得到单词的上下文表示之后,用拼接的方式来表示这个单词,如下式:
将该词向量放入一个单层神经网络中,得到所谓的潜语义向量(latent semantic vector),这里卷积层的计算结束了,时间复杂度仍是O(n)。接下来进行池化层(max-pooling),即将刚刚得到的所有单词的潜语义向量中每个维度上最大的值选出组成一个新的向量,这里采用max-pooling可以将向量中最大的特征提取出来,从而获取到整个文本的信息。池化过程时间复杂度也是O(n),所以整个模型的时间复杂度是O(n)。得到文本特征向量之后,进行分类。
为了验证模型的有效性,在四组包括中文、英文的分类任务中进行了对比实验,取得了满意的结果。
本文灵活地结合RNN和CNN构造了新的模型,利用了两种模型的优点,提升了文本分类的性能。这也提供了一种研究思路,因为每一种model都有其鲜明的优点和无法回避的缺点,如何利用别的model的优点来弥补自身model的缺点,是改进model的一种重要思路。
来源:paperweekly