CNN在文本建模中的应用TextCNN

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 中最为重要的部分,与全连接层不同,卷积层中每一个节点的输入只是上一层神经网络中的一小块,如下图所示:

在这里插入图片描述

通过卷积核(如图中的卷积核大小为3×33\times 3)对二维的图像(图像大小为6×66\times 6)进行卷积操作,得到的大小为4×44\times 4。池化操作可以有效地缩小特征图的大小,池化又可以分为最大池化(max-pooling)和平均池化(average-pooling),以最大池化为例,池化层的操作如下:

在这里插入图片描述

2.2. TextCNN的算法原理

为了能够将CNN应用在文本建模上,需要对图像和文本的特征做比较。有了如上对卷积神经网络的基本了解,对于图像特征,可以看成是二维的,又长和宽构成(通常还有深度,此处以二维的为例),对应的卷积核也是二维的。然而对于文本的特征,通常是一维的,只存在时间维度。对于将CNN应用在文本建模上如下图所示:

在这里插入图片描述

其中,xx表示的每个词的词向量维度。TextCNN的网络结构如下图所示:

在这里插入图片描述

如上如所示,TextCNN的模型结构中主要包含如下的几个部分:

  • Embedding层:将词映射成对应的向量。以上图为例,7个词被影射到对应的kk维向量中,构成7×k7\times k的矩阵;
  • Convolutional层:对词映射后的特征做一维卷积操作;
  • Pooling层:对卷积后的结果做pooling操作,如图中采用的是max-pooling;
  • 全连接层:最后接一层全连接的 softmax 层,输出每个类别的概率。

对于TextCNN的详细的计算过程,如下图所示:

在这里插入图片描述

如上图所示,假设输入的文本为“I like this movie very much!”,假设每一个词的维度为d=5d=5,则输入的特征大小为7×57\times 5,如图中设计66个卷积核,从上到下大小分别为:4×54\times 54×54\times 53×53\times 53×53\times 52×52\times 52×52\times 5,计算得到66个特征图,从上到下的大小分别为:4×14\times 14×14\times 15×15\times 15×15\times 16×16\times 16×16\times 1,采用最大池化,最终得到6×16\times 1的语义特征,最终通过全连接网络得到最终分类目标。

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

[3] cs231n.github.io/convolutional-networks