基于 CNN 的文本分类算法

CNN 是卷积神经网络,通常用于图像领域,并且在图像分类取得非常好的效果。2014 年 Yoon Kim 在论文《Convolutional Neural Networks for Sentence Classification》中将 CNN 的思想应用到文本处理中,后续很多把 ConvNet 用在 NLP 任务上的工作都是基于这篇论文进行的。

1. CNN 文本分类模型

本文主要是对原始论文《Convolutional Neural Networks for Sentence Classification》内容的整理,首先了解 CNN 文本分类模型整体结构,下图是论文中的模型图。

基于 CNN 的文本分类算法

CNN 文本分类模型

可以看到模型比较简单,主要分为四个部分:输入层、卷积层、最大池化层、全连接层。

1.1 输入层

给定一个句子,输入层接收的输入是一个句子单词词向量矩阵 XX 是一个 (n×k) 的矩阵,n 表示句子中单词数量,k 表示词向量维度。可以看到 X 的每一行对应了一个单词的词向量,而单词的词向量按照它们在句子中的顺序进行排列。

1.2 卷积层

在得到输入的词向量矩阵 X 之后,需要对 X 进行卷积操作。卷积核是一个 (h×k) 的矩阵,注意卷积核的列数是固定的 (为 k),与词向量维度一样。卷积核不断地向下移动,得到卷积后的值。

基于 CNN 的文本分类算法

卷积核

因为卷积核的列数与词向量矩阵 X 是一样的,所以经过卷积后的 feature map 也只有一列。有多个卷积核会生成多列向量,如下图所示,下图为 4 个卷积核卷积后的输出。

基于 CNN 的文本分类算法

卷积后的输出

1.3 最大池化层

在卷积层中,多个不同的卷积核会生成多列向量 (feature map),最大池化会取出每一列中的最大值,最终形成一个一维向量。

1.4 全连接层

最后一层是全连接层,全连接层使用了 Dropout 防止过拟合,然后利用 Softmax 进行分类。

2. 模型的其他细节

2.1 使用多个不同尺寸的卷积核

刚刚我们了解到这个模型的卷积核列数必须为 k,但是其高度 (行数) 是可以变的,在使用的过程中可以采用不同高度的卷积核进行卷积操作,如下图所示。

基于 CNN 的文本分类算法

采用不同尺寸的卷积核

2.2 模型的变种

作者在论文中还提出了模型的 4 种变种

  • CNN-rand,单词的词向量是随机初始化的,并且在训练的过程中不断地更新。
  • CNN-static,使用已经训练好的词向量,例如 Word2Vec,并且在后续训练中保持词向量不变。
  • CNN-non-static,与 CNN-static 类似,都是使用已经训练好的词向量,但是在后续的训练中还会继续微调词向量。
  • CNN-multichannel,使用两套词向量,均是用 Word2Vec 进行初始化,其中一套词向量在训练中保持不变,另一套会在训练中微调。输入的句子可以获取两种不同的词向量。可以理解为类似图像中的 RGB 通道,在这里两个通道分别表示两种词向量。

下图是 4 种模型的结果,可以看到 CNN-static 比 CNN-rand 效果更好,说明使用预训练的词向量比较有效;另外 CNN-non-static 比 CNN-static 效果要好,说明微调会使词向量更加适合当前任务。在实验中 CNN-multichannel 通常在小数据集效果更好。

基于 CNN 的文本分类算法

4 种 CNN 模型的效果

3. CNN 文本分类总结

CNN 用于 NLP 任务中与 N-Gram 有相似之处,我们定义卷积核的高度为 3,则相当于使用卷积核在句子中进行一个 3-Gram 的操作,同时 CNN 具有很高的效率,比传统 N-Gram 要快很多。

CNN 中的卷积核宽度要与词向量的维度一样大,并且卷积核是在句子中单词的方向上进行移动的。

参考文献

1.论文:Convolutional Neural Networks for Sentence Classification

https://aclweb.org/anthology/D14-1181

2.Understanding Convolutional Neural Networks for NLP

http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/


分享到:


相關文章: