CNN介绍及代码实现

一、介绍

 

1.1 文章组织

 

本文简要介绍CNN的基本原理,并以句子级情感分类任务为例介绍使用CNN方法进行特征抽取建模。文章的最后,我们给出Pytorch下CNN的实现代码,供读者参考。

 

1.2 情感分类任务

 

自然语言处理中情感分类任务是对给定文本进行情感倾向分类的任务,粗略来看可以认为其是分类任务中的一类。对于情感分类任务,目前通常的做法是先对词或者短语进行表示,再通过某种组合方式把句子中词的表示组合成句子的表示。最后,利用句子的表示对句子进行情感分类。

 

举一个对句子进行褒贬二分类的例子。

 

句子:我爱赛尔

 

情感标签:褒义

 

1.3 什幺是CNN

 

CNN的全称是Convolutional Neural Network, 是一种前馈神经网络。由一个或多个卷积层、池化层以及顶部的全连接层组成,在图像处理领域表现出色。本文主要讲解CNN如何在自然语言处理方面的运用。

 

1.4 为什幺使用CNN

 

卷积神经网络主要用于提取卷积对象的局部特征,当卷积对象是自然语言文本时,比如一个句子,此时其局部特征是特定的关键词或关键短语,所以利用卷积神经网络作为特征提取器时相当于词袋模型,表示一个句子中是否出现过特定的关键词或关键短语。用在分类任务上,相当于提取出对于分类最有用的特征信息。

 

相比其他模型,卷积神经网络的参数更少。还有一个优点是CNN不存在序列依赖问题,可以并行计算。

 

二、CNN原理简介

 

以早期将CNN引入NLP的一篇工作为例(EMNLP 2014. Convolutional Neural Networks for Sentence Classification),进行讲解。

 

 

我们将上图分成4部分,分别进行介绍:

 

第一部分,将句子“wait for the video and do n’t rent it”向量化。利用word embedding的方法得到每个词x i 的向量表示,向量的维度为k。对于长度为n的句子,其向量表示如下(即n*k的矩阵):

 

 

这里的static channel和non-static channel分别指词向量固定(即在训练过程中不进行调节)和词向量更新(通过反向传播进行fine-tuning)。

 

第二部分,带有多个卷积核的卷积层以及特征映射。图中红颜色和黄颜色的虚线代表着卷积操作提取出来的特征,映射得到的输出。图示中展示了4个卷积核。下面介绍一下卷积操作的公式:

 

 

对于包含h个单词的滑动窗口,其数学符号表示为x i:i+h-1 。w表示卷积核,每次通过滑动h个单词,得到特征c i 。每个卷积核对句子进行h个单词的窗口滑动,分别得到对应的特征映射。

 

 

第三部分,最大池化。本文采用的是最大池化的方法,还可以采用平均池化。针对每个卷积核得到的特征映射向量,从中分别挑选出最大的值。这种想法的出发点是提取出每个特征映射中最重要的信息,池化过程还可以应对句子长度可变的情况。

 

 

第四部分,全连接层。将池化层得到的特征通过全连接softmax层后,能够得到每个类别的概率。

 

三、CNN代码实现样例

 

代码地址: https://github.com/Shijihao/CNN_for_classification

 

3.1 模型搭建

 

 

 

示例代码使用了两个卷积核,卷积核的滑动窗口分别为2个词和3个词。本示例的数据采用的是MR数据(Movie Review Data),该数据用于情感分析任务,利用电影评论文本进行情感极性(positive或negtive)的分类。

 

3.2 模型训练

 

 

3.3 模型测试

 

 

 

 

四、总结

 

本文介绍了卷积神经网络模型如何与NLP任务相结合的早期运用。随着近几年的不断发展,CNN模型不断完善,也出现了一系列的改进,例如可以用dilated卷积、增加网络深度等方法捕获长距离依赖特征。感兴趣的读者可参阅参考资料中的相关文献。

 

五、参考资料

 

[1]  KIM Y. Convolutional Neural Networks for Sentence Classification[C]//Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing (EMNLP). Association for Computational Linguistics, 2014: 1746–1751.

 

[2]  YU F, KOLTUN V. Multi-scale context aggregation by dilated convolutions[J]. arXiv preprint arXiv:1511.07122, 2015.

 

[3]  KALCHBRENNER N, ESPEHOLT L, SIMONYAN K et al. Neural Machine Translation in Linear Time[J]. CoRR, 2016, abs/1610.10099.

 

[4]  GEHRING J, AULI M, GRANGIER D et al. Convolutional Sequence to Sequence Learning[C]//PRECUP D, TEH Y W. Proceedings of the 34th International Conference on Machine Learning. International Convention Centre, Sydney, Australia: PMLR, 2017, 70: 1243–1252.

发表评论

电子邮件地址不会被公开。 必填项已用*标注