写在前面:今天开始总结一下文本分类任务中常见的神经网络模型。
第一站textCNN
文本分类任务
文本分类任务是自然语言处理(NLP)中很重要的子任务,比如文本情感分类,对于一段话,比如评价,判断是积极的还是消极的。
在此我们用卷积神经网络来解决这个问题。
卷积神经网络
卷积神经网络最初是在14年左右应用到图像处理领域中的,由于卷积神经网络具有平移不变性和参数共享特点,有强大的特征提取能力(表征学习),在很多图像识别任务中取得了非常显著的效果,成为当时的STOA(最好的方案)。
在图像识别中,我们往往应用的是二维卷积核,我们想利用卷积神经网络提取到图像的空间特征,而由于图像有宽高两个维度,于是我们就是用二维卷积核。又如视频等输入,我们往往会用三维卷积来处理。
文本类的信息只有位置上的先后关系,我们就采用一维卷积核来处理
此部分简单介绍卷积的工作原理,会有专门一章来介绍卷积层。
二维卷积运算
上图所示,假设输入是一张图片方格内的值为其像素,*代表卷积运算,图片蓝色部分和内容和卷积核相对应的位置相乘,最后求和成为了第一个输出(蓝色部分)。
然后依次向右向下移动输入的选中部分,依次与卷积核进行运算得出全部的输出。
一维卷积运算
一维卷积运算如下图所示。
一维卷积可以将相邻的位置关联起来,这种方式就可以提取上下文特征。不同大小的卷积核可以提取不同范围的特征。
卷积层
在卷积层后缓解位置敏感的问题,我们会用到池化层进行下采样,池化层的计算方式和卷积类似。常见的池化层有最大池化层和平均池化层。此外,我们往往会在其中加上BatchNorm层以缓解卷积神经网络训练参数过多带来的过拟合问题。
TextCNN 模型实现
卷积块
我们是用tf2.0 中keras API实现的,我们将卷积+batchnorm+池化做成一个可以复用的块。
def conv1D_with_bn_gp(self,filters,kernel_size):
blk = K.models.Sequential(