天然语言处理中CNN模型几种常见的Max Pooling操做

CNN是目前天然语言处理中和RNN并驾齐驱的两种最多见的深度学习模型。图1展现了在NLP任务中使用CNN模型的典型网络结构。通常而言,输入的字或者词用Word Embedding的方式表达,这样原本一维的文本信息输入就转换成了二维的输入结构,假设输入X包含m个字符,而每一个字符的Word Embedding的长度为d,那么输入就是m*d的二维向量。html

                                                           1 天然语言处理中CNN模型典型网络结构数组

 

 

这里能够看出,由于NLP中的句子长度是不一样的,因此CNN的输入矩阵大小是不肯定的,这取决于m的大小是多少。卷积层本质上是个特征抽取层,能够设定超参数F来指定设立多少个特征抽取器(Filter),对于某个Filter来讲,能够想象有一个k*d大小的移动窗口从输入矩阵的第一个字开始不断日后移动,其中kFilter指定的窗口大小,dWord Embedding长度。对于某个时刻的窗口,经过神经网络的非线性变换,将这个窗口内的输入值转换为某个特征值,随着窗口不断日后移动,这个Filter对应的特征值不断产生,造成这个Filter的特征向量。这就是卷积层抽取特征的过程。每一个Filter都如此操做,造成了不一样的特征抽取器。Pooling 层则对Filter的特征进行降维操做,造成最终的特征。通常在Pooling层以后链接全联接层神经网络,造成最后的分类过程。网络

 

可见,卷积和PoolingCNN中最重要的两个步骤。下面咱们重点介绍NLPCNN模型常见的Pooling操做方法。post

 

|CNN中的Max Pooling Over Time操做性能

 

MaxPooling Over TimeNLPCNN模型中最多见的一种下采样操做。意思是对于某个Filter抽取到若干特征值,只取其中得分最大的那个值做为Pooling层保留值,其它特征值所有抛弃,值最大表明只保留这些特征中最强的,而抛弃其它弱的此类特征。学习

 

CNN中采用Max Pooling操做有几个好处:首先,这个操做能够保证特征的位置与旋转不变性,由于不论这个强特征在哪一个位置出现,都会不考虑其出现位置而能把它提出来。对于图像处理来讲这种位置与旋转不变性是很好的特性,可是对于NLP来讲,这个特性其实并不必定是好事,由于在不少NLP的应用场合,特征的出现位置信息是很重要的,好比主语出现位置通常在句子头,宾语通常出如今句子尾等等,这些位置信息其实有时候对于分类任务来讲仍是很重要的,可是Max Pooling 基本把这些信息抛掉了。spa

 

其次,MaxPooling能减小模型参数数量,有利于减小模型过拟合问题。由于通过Pooling操做后,每每把2D或者1D的数组转换为单一数值,这样对于后续的Convolution层或者全联接隐层来讲无疑单个Filter的参数或者隐层神经元个数就减小了。.net

 

 再者,对于NLP任务来讲,Max Pooling有个额外的好处;在此处,能够把变长的输入X整理成固定长度的输入。由于CNN最后每每会接全联接层,而其神经元个数是须要事先定好的,若是输入是不定长的那么很难设计网络结构。前文说过,CNN模型的输入X长度是不肯定的,而经过Pooling 操做,每一个Filter固定取1个值,那么有多少个FilterPooling层就有多少个神经元,这样就能够把全联接层神经元个数固定住(如图2所示),这个优势也是很是重要的。翻译

                                               2. Pooling层神经元个数等于Filters个数设计

 

 

可是,CNN模型采起MaxPooling Over Time也有一些值得注意的缺点:首先就如上所述,特征的位置信息在这一步骤彻底丢失。在卷积层实际上是保留了特征的位置信息的,可是经过取惟一的最大值,如今在Pooling层只知道这个最大值是多少,可是其出现位置信息并无保留;另一个明显的缺点是:有时候有些强特征会出现屡次,好比咱们常见的TF.IDF公式,TF就是指某个特征出现的次数,出现次数越多说明这个特征越强,可是由于Max Pooling只保留一个最大值,因此即便某个特征出现屡次,如今也只能看到一次,就是说同一特征的强度信息丢失了。这是Max Pooling Over Time典型的两个缺点。

 

其实,咱们常说“危机危机”,对这个词汇乐观的解读是“危险就是机遇”。同理,发现模型的缺点是个好事情,由于创新每每就是经过改进模型的缺点而引起出来的。那么怎么改进Pooling层的机制可以缓解上述问题呢?下面两个常见的改进Pooling机制就是干这个事情的。

 

 

|K-Max Pooling

 

K-MaxPooling的意思是:原先的Max Pooling Over TimeConvolution层一系列特征值中只取最强的那个值,那么咱们思路能够扩展一下,K-Max Pooling能够取全部特征值中得分在Top –K的值,并保留这些特征值原始的前后顺序(图32-max Pooling的示意图),就是说经过多保留一些特征信息供后续阶段使用。

                                  3 .2-max pooling

 

 

很明显,K-Max Pooling能够表达同一类特征出现屡次的情形,便可以表达某类特征的强度;另外,由于这些Top K特征值的相对顺序得以保留,因此应该说其保留了部分位置信息,可是这种位置信息只是特征间的相对顺序,而非绝对位置信息。

 

|Chunk-Max Pooling

 

Chunk-MaxPooling的思想是:把某个Filter对应的Convolution层的全部特征向量进行分段,切割成若干段后,在每一个分段里面各自取得一个最大特征值,好比将某个Filter的特征向量切成3Chunk,那么就在每一个Chunk里面取一个最大值,因而得到3个特征值。(如图4所示,不一样颜色表明不一样分段)

                              4. Chunk-Max Pooling示意图

 

 

乍一看Chunk-Max Pooling思路相似于K-Max Pooling,由于它也是从Convolution层取出了K个特征值,可是二者的主要区别是:K-Max Pooling是一种全局取Top K特征的操做方式,而Chunk-Max Pooling则是先分段,在分段内包含特征数据里面取最大值,因此实际上是一种局部Top K的特征抽取方式。

 

至于这个Chunk怎么划分,能够有不一样的作法,好比能够事先设定好段落个数,这是一种静态划分Chunk的思路;也能够根据输入的不一样动态地划分Chunk间的边界位置,能够称之为动态Chunk-Max方法(这种称谓是我随手命名的,非正式称谓,请注意)。

 

Chunk-Max Pooling很明显也是保留了多个局部Max特征值的相对顺序信息,尽管并无保留绝对位置信息,可是由于是先划分Chunk再分别取Max值的,因此保留了比较粗粒度的模糊的位置信息;固然,若是屡次出现强特征,则也能够捕获特征强度。

 

Event Extraction via Dynamic Multi-Pooling Convolutional Neural Networks这篇论文提出的是一种ChunkPooling的变体,就是上面说的动态Chunk-Max Pooling的思路,实验证实性能有提高。Local Translation Prediction with Global Sentence Representation 这篇论文也用实验证实了静态Chunk-Max性能相对MaxPooling Over Time方法在机器翻译应用中对应用效果有提高。

 

若是思考一下,就会发现,若是分类所须要的关键特征的位置信息很重要,那么相似Chunk-Max Pooling这种可以粗粒度保留位置信息的机制应该可以对分类性能有必定程度的提高做用;可是对于不少分类问题,估计Max-Pooling over time就足够了。

 

好比咱们拿情感分类来讲,估计用Chunk-max策略应该有帮助,由于对于这种表达模式:

 

Blablabla….表扬了你半天,BUT…..你本质上就是个渣”

 

与这种表达模式

 

“虽说你是个渣,可是…..Blablabla…..欧巴我仍是以为你最好,由于你最帅”

 

明显位置信息对于判别总体情感倾向是有帮助做用的,因此引入位置信息应该有帮助。

 

因此,你分析下你手头的问题,看看位置是否是重要特征,若是是,那么套用一下Chunk-Max策略,估计性能会有提高,好比上面举的情感分类问题估计效果会有提高。

 

 

 

转自:http://blog.csdn.net/malefactor/article/details/51078135(做者:张俊林)

相关文章
相关标签/搜索