首页 > > > 5.2.2 用TextCNN做文本分类
前言
在前面章节中,我们花了很大的篇幅讲述了卷积神经网络(CNN)的原理,相信大家已经对卷积神经网络有了一个清晰的认识。在之前,CNN大多应用在语音识别以及图像处理领域。在最近几年,几乎所有图像、语音识别领域的重要突破都是卷积神经网络取得的,比如谷歌的GoogleNet、微软的ResNet等,打败李世石的AlphaGo也用到了这种网络。那么,这个网络能不能应用在NLP领域呢?也不是不可以,在Word Embedding技术比较成熟后,一个词会有几百个维度,而且每个维度上的数据都是连续的实数值,当一篇几百个汉字的文章出现后,在空间上其实就可以形成一个几百乘以几百的二维图像。只不过图像上的“像素点”是每个汉字在这些编码维度上的量化表示值—— 一些人肉眼看不懂但是客观上有意义的值。既然是这样,那么NLP的问题就可以转化为图像问题使用CNN去解决了。
TextCNN
我们之前提前CNN时,通常会认为是属于CV领域,用于计算机视觉方向的工作,但是在2014年,Yoon Kim针对CNN的输入层做了一些变形,提出了文本分类模型textCNN。与传统图像的CNN网络相比, textCNN 在网络结构上没有任何变化(甚至更加简单了), 从下图可以看出TextCNN就是这样一种可以用来基于Word Embedding技术的二维卷积网络,简单说就是卷积层后面加全连接层,再加Softmax——图像分类怎么做它就几乎是一模一样地怎么做。

与图像当中CNN的网络相比,textCNN 最大的不同便是在输入数据的不同:
1、图像是二维数据, 图像的卷积核是从左到右, 从上到下进行滑动来进行特征抽取。
2、自然语言是一维数据, 虽然经过word-embedding 生成了二维向量,但是对词向量做从左到右滑动来进行卷积没有意义。 比如 “wait” 对应的向量[0, 0, 0, 0, 1], 按窗口大小为 1* 2 从左到右滑动得到[0,0], [0,0], [0,0], [0, 1]这四个向量, 对应的都是”今天”这个词汇, 这种滑动没有帮助。所以,TextCNN采取的方式是向下滑动。

如图所示,这里是以英文为例,比如输入了“I like this movie very much!”这样的一篇文章(一个语句),那么这篇文章就会通过查Word Embedding表的方式转换成一个7列,d行(图中写的是5行,也就是示意一个单词只有5个Embedding后的维度)的矩阵——对,就卷它。
后面的卷积层会有不同尺寸的卷积核来对它进行卷积,比如2d尺寸的,3d尺寸的,4d尺寸的,甚至有必要还可以有更多别的尺寸的卷积核。卷积层当然是做特征提取,这2d、3d、4d的尺寸不同产生的不同影响主要是一个“视野”的问题。在这个例子中那就是一个卷积核提取到的是“我喜欢”、“我喜欢这个”、“我喜欢这个电影”这三种不同的特征量化表达。
这些提取后的Feature Map会经过Max Pooling和Concat(首尾连接)操作,再Reshape拉直成一个高层的特征向量。再后面就是直接用全连接和Softmax做分类就可以了。
TextCNN网络结构十分简单,导致参数数目少, 计算量少, 训练速度快,使得它的工作效率非常高效。它通过引入已经训练好的词向量在文本分类上有着很不错的效果。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69954080/viewspace-3171347/ ,如需转载,请注明出处,否则将追究法律责任。