使用卷积神经网络进行文本分类textCNN

使用卷积神经网络进行文本分类textCNN

一维卷积层

我们可以将文本当作一维图像,从而可以用一维卷积神经网络来捕捉临近词之间的关联。与二维卷积层一样,一维卷积层使用一维的互相关运算。在一维互相关运算中,卷积窗口从输入数组的最左方开始,按从左往右的顺序,依次在输入数组上滑动。当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组中相应位置的元素。

多输入通道的一维互相关运算也与多输入通道的二维互相关运算类似:在每个通道上,将核与相应的输入做一维互相关运算,并将通道之间的结果相加得到输出结果。由二维互相关运算的定义可知,多输入通道的一维互相关运算可以看作单输入通道的二维互相关运算。如图10.6所示,我们也可以将图10.5中多输入通道的一维互相关运算以等价的单输入通道的二维互相关运算呈现。这里核的高等于输入的高。

时序最大池化层

textCNN中使用的时序最大池化(max-over-time pooling)层实际上对应一维全局最大池化层:假设输入包含多个通道,各通道由不同时间步上的数值组成,各通道的输出即该通道所有时间步中最大的数值。因此,时序最大池化层的输入在各个通道上的时间步数可以不同。

为提升计算性能,我们常常将不同长度的时序样本组成一个小批量,并通过在较短序列后附加特殊字符(如0)令批量中各时序样本长度相同。这些人为添加的特殊字符当然是无意义的。由于时序最大池化的主要目的是抓取时序中最重要的特征,它通常能使模型不受人为添加字符的影响。

模型构成

假设输入的文本序列由 n n n个词组成,每个词用 d d d维的词向量表示。那么输入样本的宽为 n n n,高为1,输入通道数为 d d d

计算步骤如下:

  1. 定义多个一维卷积核,并使用这些卷积核对输入分别做卷积计算。宽度不同的卷积核可能会捕捉到不同个数的相邻词的相关性。
  2. 对输出的所有通道分别做时序最大池化,再将这些通道的池化输出值连结为向量。
  3. 通过全连接层将连结后的向量变换为有关各类别的输出。这一步可以使用丢弃层应对过拟合。

下面这个例子解释了textCNN的设计。假设我们需要进行情感分析任务。这里的输入是一个有11个词的句子,每个词用6维词向量表示。因此输入序列的宽为11,输入通道数为6。给定2个一维卷积核,核宽分别为2和4,输出通道数分别设为4和5。因此,一维卷积计算后,4个输出通道的宽为11−2+1=10,而其他5个通道的宽为11−4+1=8。尽管每个通道的宽不同,我们依然可以对各个通道做时序最大池化,并将9个通道的池化输出连结成一个9维向量。最终,使用全连接将9维向量变换为2维输出,即正面情感和负面情感的预测。

使用卷积神经网络进行文本分类textCNN_第1张图片

模型比较

在原paper中,作者训练了如下几种模型进行对比。

  • CNN-rand:基线模型,词向量需要从头进行训练
  • CNN-static:静态模型,直接使用了经过word2vec预训练后的词向量
  • CNN-non-static:非静态模型,对经过word2vec预训练后的词向量根据任务进行微调
  • CNN-multichannel:多通道模型,有两套单词向量,每一组向量当成一个通道。

实验证明使用预训练的词向量比基线模型有明显的提高。不过多通道模型对比单通道模型并未有压倒性的优势,有时候多通道模型性能更优,有时候单通道模型占优。

Reference

  • Dive Into Deep Learning,第10章

  • Convolutional Neural Networks for Sentence Classification, Yoon Kim

你可能感兴趣的:(自然语言处理(NLP)技术入门,卷积神经网络,深度学习,NLP,文本分类,textCNN)