美文网首页
基于 CNN 的文本分类算法

基于 CNN 的文本分类算法

作者: NLP与人工智能 | 来源:发表于2020-01-13 00:15 被阅读0次

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

    1. CNN 文本分类模型

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

    CNN 文本分类模型

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

    1.1 输入层

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

    1.2 卷积层

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

    卷积层

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

    4 个卷积核

    1.3 最大池化层

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

    1.4 全连接层

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

    2. 模型的其他细节

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

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

    多个不同尺寸的卷积核

    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 通常在小数据集效果更好。

    实验结果

    3. CNN 文本分类总结

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

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

    参考文献

    论文:Convolutional Neural Networks for Sentence Classification
    Understanding Convolutional Neural Networks for NLP

    相关文章

      网友评论

          本文标题:基于 CNN 的文本分类算法

          本文链接:https://www.haomeiwen.com/subject/fbtgactx.html