【论文笔记】Convolutional Neural Networks for Sentence Classification

文章目录
  1. 1. 前期知识补充
    1. 1.1. 文本分类
    2. 1.2. 文本表示
    3. 1.3. 基于规则的文本分类
    4. 1.4. 基于特征的文本分类
    5. 1.5. 基于神经网络的文本分类
    6. 1.6. 卷积神经网络之卷积
    7. 1.7. 卷积神经网络之池化
  2. 2. 论文主要内容
    1. 2.1. 模型
    2. 2.2. 实验
      1. 2.2.1. 数据集使用
      2. 2.2.2. 超参数和训练
      3. 2.2.3. 预训练词向量
      4. 2.2.4. 模型变化
    3. 2.3. 结果和讨论
      1. 2.3.1. 多通道模型 vs 单通道模型
      2. 2.3.2. 静态 vs 非静态表示

这篇笔记是基于Yoon Kim大神的论文《Convolutional Neural Networks for Sentence Classification》,TextCNN。
本文为使用神经网络进行文本分类的开山之作。

注:笔记学习参考深度之眼人工智能Paper训练营NLP方向第八课时课程。
-w-这篇文章简直可以算是我接触神经网络在NLP上应用的第一篇论文了,记忆深刻,这次学习是重新温习一遍文中的细节并且完成论文的复现。
第一次我看这篇论文的阅读笔记时来自这篇笔记Implementing a CNN for Text Classification in TensorFlow.

前期知识补充

文本分类

文本分类即给定分类体系,将文本分类到某个或者某几个类。情感分析也就是文本分类下面一个细节。
文本分类涵盖了二分类,多分类,多标签分类等,其中多标签分类指的是一个文本可能属于多个标签类别。

文本表示

文本表示即通过某种编码方式将文本处理为计算机可以处理的形式(向量),在前面的笔记中已经提到过以下几种编码方式:
(1)One-Hot.
(2)Word2Vec.

基于规则的文本分类

基于规则的文本分类流程如下:

规则的设定包括特定的词语,短语或者模式,当句子符合这些规则时就将其判断为对应的类别。

基于特征的文本分类

通过人工设计和提取特征(词法特征,句法特征)等,使用机器学习模型来捕获句子中的关键信息,从而减少噪声词对最终结果的影响。

基于神经网络的文本分类

流程如下:

卷积神经网络之卷积

关于CNN还是首先推荐这位大神的博客:卷积神经网络在NLP的应用
OK,回到课程笔记。
卷积神经网络:多层感知机是一种全连接的结构,但是全连接的网络会存在一定程度的冗余,卷积神经网络通过局部连接和权重共享的方法来实现对多层感知机的共享。

卷积的操作就是把当前感受野内的所有输入与滤波器对应位置的权重相乘后求和,在每一个时刻滤波器都会按照一定的步长向前移动。

图像示意:

卷积神经网络之池化

池化操作的意义就是降低特征维度并保留有效信息。

在NLP中,池化操作可以将任意长度的输入转化为固定长度的输入。

论文主要内容

模型

文章中用于句子分类的模型是基于卷积神经网络的微调:

上述模型是一个双通道的模型,但是在某种意义也相当于单通道的体系结构。

其中每个 xi 的输入相当于句子中的第 i 个单词,每个单词的维度是 k 维,一个包含 n 个单词的句子表示出来就是 n 个单词的链接。

一个滤波器(filter)的窗口通过 h 个单词来生成一个新的特征:

用一系列窗口单词{x1:h,x2:h+1,…,xn-h+1:n}来生成一个特征映射:

通过特征映射取特征的最大值max{c}作为与滤波器对应的特征。这些特征形成倒数第二层,并传递给一个完全连接的softmax层,其输出是标签上的概率分布。
在模型中作者使用了两个通道的词向量:
(1)一个是在训练时保持静止;
(2)另一个是在训练时通过反向传播进行微调。

为了规范化,作者在倒数第二层上采用了关于权重向量的L2-范数的约束。
dropout通过在向前反向传播期间随机丢失隐藏单元的比例p(即设置为零)来防止隐藏单元的过拟合。

所以倒数第二层 z 即:

而不是使用:

输出单元y在前向传播中,dropout使用的是:

其中◦是按元素方向的乘法算子,r∈RM是一个概率p为1的伯努利随机变量的“掩蔽”向量。梯度仅通过未屏蔽的单元反向传播。在测试时,学习到的权重向量用p进行缩放,使wˆ=PW,wˆ(无dropout)来为看不见的句子打分。
作者还使用l2范式来约束权重向量w时候有||w||2=s,使其在梯度下降后的任何情况下都会有||w||2>s。

实验

数据集使用

实验一共使用了7个数据集:
(1)MR:电影评论,每篇评论一句。分类包括检测正面/负面评论。
(2)SST-1:斯坦福情感树库–扩展了MR,但有训练/验证/测试拆分为细粒度的标签(very positive, positive, neutral, negative, very negative),由Socher等人重新标记。
(3)SST-2:与SST-1相同,但是去掉了中立的评论和二分类标签。
(4)Subj:主观性数据集,其中的任务是将句子归类为主观或客观。
(5)TREC:TREC数据集将问题分为六种类型(问题包括person,location,数字信息等)。
(6)CR:顾客关于大量产品的评论,任务是预测 postive 或者 negtive评论。
(7)MPQA:MPQA数据集的意见极性检测子任务。

训练集的设置:

超参数和训练

对于作者使用的所有数据集:校正线性单元,过滤窗口(h)为3,4,5,每个特征映射100个,dropout rate(P)为0.5,L2约束(S)为3,mini-batch大小为50。通过在SST-2DEV集合上的网格搜索来选择这些值。
除早期停止开发集之外,我们不执行任何DataSetSpecificTuning(任何数据特定调整)。对于没有标准开发集的数据集,我们随机选择10%的培训数据作为开发集。列车通过随机梯度下降与Adelta更新规则进行混洗迷你批次的随机梯度下降。

预训练词向量

作者使用的是Mikolov大神的word2vc中的cbow模型训练好的词向量,维度是300维。在预先训练的单词集合中不存在的单词被随机地初始化。

模型变化

作者使用了不同的CNN的模型:
(1)CNN-rand:作者使用的基准模型,所有的词都是随机初始化的,当作在训练中需要优化的参数。
(2)CNN-static:这个模型使用了通过word2vec预训练的词向量。所有的单词包括未知的单词都是随机初始化的并且保持静止并且只学习模型的其他参数。
(3)CNN-non-static:与上面相同,但预先训练的向量对每个任务都进行了微调。
(4)CNN-multichannel:一个模型有两种设置的词向量。每种设置的向量被当作一个通道(channel),每一个滤波器被应用在两个通道中,但是反向传播的梯度仅通过一个通道。因此这个模型可以微调一部分向量并保持其他部分静止。两个通过都通过word2vec初始化。

为了区分上述变量对其他随机因素的影响,作者通过在每个数据集中保持它们的一致性来消除其他随机因素的来源——cv -fold赋值、未知字向量的初始化、CNN参数的初始化。

结果和讨论

CNN的分类结果和其他模型对比如下:

使用随机初始化的向量分类结果不理想,但是使用预训练的词向量之后得到的结果让人感到惊喜。即使是一个简单的模型CNN-static也表现得非常好。

多通道模型 vs 单通道模型

作者最初希望多通道的结构能防止过拟合(通过确定学习的向量不会偏离初值太远)并且因此比单通道的模型表现更好,尤其是在小型数据集上。
然而,结果参差不齐,因此有必要进一步研究微调过程的正规化.例如,代替使用非静态部分的附加通道,可以维持单个通道,但是采用允许在训练期间修改的额外维度。

静态 vs 非静态表示

与单通道非静态模型的情况一样,多通道模型能够微调非静态通道,使其更适合于手头的任务。举个栗子,在word2vec中good和bad更接近,大概是因为它们(几乎)在语法上是等价的。但是在SST-2上微调非静态通道就不是这样的情况了,相似地,good在表达情感上更接近与nice而不是great,这确实反映在学习的向量中。

下图是在SST-2数据集AF上的多通道模型的静态通道(左)和非静态通道(右)中的矢量中,基于余弦相似性的前4个相邻字(基于余弦相似性)训练。