1. 概述
卷积神经网络(Convolutional Neural Networks,CNN)的提出使得深度学习在计算机视觉领域得到了飞速的发展,大量基于CNN的算法模型被提出,同时深度学习算法在多个视觉领域实现了突破。最初在文本领域,主要使用的深度学习模型是RNN,LSTM等,既然CNN在图像领域得到广泛的应用,能否将CNN算法应用于文本分类中呢?Kim在2014的文章《Convolutional Neural Networks for Sentence Classification》成功将CNN模型应用在文本分类中。
2. 算法原理
2.1. 卷积神经网络
卷积神经网络中最重要的两个操作是卷积和池化,由卷积+池化构成CNN的基本操作,通过堆叠卷积+池化的过程实现图像深层语义特征的抽取。卷积神经网络的基本结构如下图所示:
在图中的CNN网络由两组基本操作(卷积Convolutions和池化Subsampling)和全连接层构成。卷积操作是CNN 中最为重要的部分,与全连接层不同,卷积层中每一个节点的输入只是上一层神经网络中的一小块,如下图所示:
通过卷积核(如图中的卷积核大小为)对二维的图像(图像大小为)进行卷积操作,得到的大小为。池化操作可以有效地缩小特征图的大小,池化又可以分为最大池化(max-pooling)和平均池化(average-pooling),以最大池化为例,池化层的操作如下:
2.2. TextCNN的算法原理
为了能够将CNN应用在文本建模上,需要对图像和文本的特征做比较。有了如上对卷积神经网络的基本了解,对于图像特征,可以看成是二维的,又长和宽构成(通常还有深度,此处以二维的为例),对应的卷积核也是二维的。然而对于文本的特征,通常是一维的,只存在时间维度。对于将CNN应用在文本建模上如下图所示:
其中,表示的每个词的词向量维度。TextCNN的网络结构如下图所示:
如上如所示,TextCNN的模型结构中主要包含如下的几个部分:
- Embedding层:将词映射成对应的向量。以上图为例,7个词被影射到对应的维向量中,构成的矩阵;
- Convolutional层:对词映射后的特征做一维卷积操作;
- Pooling层:对卷积后的结果做pooling操作,如图中采用的是max-pooling;
- 全连接层:最后接一层全连接的 softmax 层,输出每个类别的概率。
对于TextCNN的详细的计算过程,如下图所示:
如上图所示,假设输入的文本为“I like this movie very much!”,假设每一个词的维度为,则输入的特征大小为,如图中设计个卷积核,从上到下大小分别为:,,,,和,计算得到个特征图,从上到下的大小分别为:,,,,,,采用最大池化,最终得到的语义特征,最终通过全连接网络得到最终分类目标。
2.3. 词向量的计算方法
词向量的计算方法主要有两种方式:
- 动态:通过随机初始化词向量,并在模型的训练过程中同步学习词向量的表示,适用于数据量比较大的情况;
- 静态:利用word2vec等词向量训练方法,通过预先训练得到固定的词向量,在使用的时候通过查表的方式取得,不参与模型的训练。
参考文献
[1] Y. Kim, “Convolutional neural networks for sentence classification,” in Proceedings of EMNLP 2014
[2] Modern Deep Learning Techniques Applied to Natural Language Processing