Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

石继豪作者

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的方法得到每个词xi的向量表示,向量的维度为k。对于长度为n的句子,其向量表示如下(即n*k的矩阵):

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

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

对于包含h个单词的滑动窗口,其数学符号表示为xi:i+h-1。w表示卷积核,每次通过滑动h个单词,得到特征ci。每个卷积核对句子进行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.

哈工大SCIR
哈工大SCIR

哈尔滨工业大学社会计算与信息检索研究中心

入门CNN特征抽取自然语言处理情感分类
9
相关数据
池化技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

最大池化技术

最大池化(max-pooling)即取局部接受域中值最大的点。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

词袋模型技术

词袋模型(英语:Bag-of-words model)是个在自然语言处理和信息检索(IR)下被简化的表达模型。此模型下,像是句子或是文件这样的文字可以用一个袋子装着这些词的方式表现,这种表现方式不考虑文法以及词的顺序。最近词袋模型也被应用在电脑视觉领域。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

特征抽取技术

图像处理技术

图像处理是指对图像进行分析、加工和处理,使其满足视觉、心理或其他要求的技术。 图像处理是信号处理在图像领域上的一个应用。 目前大多数的图像均是以数字形式存储,因而图像处理很多情况下指数字图像处理。

长距离依赖技术

也作“长距离调序”问题,在机器翻译中,比如中英文翻译,其语言结构差异比较大,词语顺序存在全局变化,不容易被捕捉

前馈神经网络技术

前馈神经网络(FNN)是人工智能领域中最早发明的简单人工神经网络类型。在它内部,参数从输入层经过隐含层向输出层单向传播。与递归神经网络不同,在它内部不会构成有向环。FNN由一个输入层、一个(浅层网络)或多个(深层网络,因此叫作深度学习)隐藏层,和一个输出层构成。每个层(除输出层以外)与下一层连接。这种连接是 FNN 架构的关键,具有两个主要特征:加权平均值和激活函数。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

推荐文章
暂无评论
暂无评论~