从DPCNN出发,撩一下深层word-level文本分类模型

如今深度学习已经成为NLP领域的标配技术,在图像中大为成功的卷积神经网络(CNN)也开始广泛渗透到文本分类机器翻译、机器阅读等NLP任务中。但是,在ACL2017以前,word-level的文本分类模型(以单词为语义单位)自2014Kim等人提出的TextCNN模型后,就没有再出现过显著有效的CNN系模型,尤其是深层模型。

图1 TextCNN(ShallowCNN)模型

而在2017年的ACL上有这么一篇文章,Deep Pyramid Convolutional Neural Networks for Text Categorization [1],论文中提出的深层金字塔卷积网(DPCNN)是严格意义上第一个word-level的广泛有效的深层文本分类卷积神经网,其性能表如下:

当然,这篇论文里还使用了two-view embedding来进一步提升模型性能,不过从模型性能上纵向比较来看,其也比经典的TextCNN(表格第二行ShallowCNN)有了明显提高,在Yelp五分类情感分类任务中提升了近2个百分点。也是第一次真正意义上证明了在word-level的文本分类问题上,深层CNN依然是有想象空间的。

好啦,直接搬来DPCNN、ShallowCNN、ResNet的对比图,正文开始~

图2 DPCNN、TextCNN与ResNet

Region embedding

从图中的a和c的对比可以看出,DPCNN与ResNet差异还是蛮大的。同时DPCNN的底层貌似保持了跟TextCNN一样的结构,这里作者将TextCNN的包含多尺寸卷积滤波器的卷积层的卷积结果称之为Region embedding,意思就是对一个文本区域/片段(比如3gram)进行一组卷积操作后生成的embedding。

对一个3gram进行卷积操作时可以有两种选择,一种是保留词序,也就是设置一组size=3*D的二维卷积核对3gram进行卷积(其中D是word embedding维度);还有一种是不保留词序(即使用词袋模型),即首先对3gram中的3个词的embedding取均值得到一个size=D的向量,然后设置一组size=D的一维卷积核对该3gram进行卷积。显然TextCNN里使用的是保留词序的做法,而DPCNN使用的是词袋模型的做法,DPCNN作者argue前者做法更容易造成过拟合,后者的性能却跟前者差不多(其实这个跟DAN网络(Deep averaging networks)中argue的原理和结论差不多,有兴趣的可以下拉到下一部分的知乎传送门中了解一下)。

卷积层or全连接层?

产生region embedding后,按照经典的TextCNN的做法的话,就是从每个特征图中挑选出最有代表性的特征,也就是直接应用全局最大池化层(max-over-time-pooling layer),这样就生成了这段文本的特征向量(假如卷积滤波器的size有3,4,5这三种,每种size包含100个卷积核,那么当然就会产生3*100幅特征图,然后将max-over-time-pooling操作应用到每个特征图上,于是文本的特征向量即3*100=300维)。

但是显然TextCNN这样做会有很严重的问题诶,这样做的意义本质上与词袋模型(含ngram)+weighting+NB/MaxEnt/SVM的经典文本分类模型没本质区别,只不过one-hot表示到word embedding表示的转变避免了词袋模型遭遇的数据稀疏问题罢了。可以说,TextCNN本质上收益于词向量的引入带来的“近义词有相近向量表示”的bonus,同时TextCNN恰好可以较好的利用词向量中的知识(近义关系)罢了。这意味着,经典模型里难以学习的远距离信息(如12gram)在TextCNN中依然难以学习。那么这些长距离复杂模式如何让网络学习到呢?

显然,要么加深全连接层,要么加深卷积层。加深哪个更好呢?小夕埋下了一个伏笔哦,答案就在小夕这个知乎回答里:

卷积层和分类层,哪个更重要?www.zhihu.com图标

等长卷积

在得到Region embedding后,为了避免后续想象太抽象,我们不妨还是把Region embedding看成word embedding,假想为交给网络后面的就是word embedding序列哦。

首先交代一下卷积的一个基本概念——等长卷积。我们在文本分类里最常用的可能是窄卷积,输入序列长度为seq_len,卷积核大小为n的话,窄卷积后的输出序列的长度就是seq_len-n+1。而等长卷积顾名思义就是输出序列的长度等于输入序列长度seq_len。没有想像出来的同学自行Google一下哦,就不展开讲啦。

那么对文本,或者说对word embedding序列进行等长卷积的意义是什么呢?

既然输入输出序列的位置数一样多,我们将输入输出序列的第n个embedding称为第n个词位,那么这时size为n的卷积核产生的等长卷积的意义就很明显了,那就是将输入序列的每个词位及其左右((n-1)/2)个词的上下文信息压缩为该词位的embedding,也就是说,产生了每个词位的被上下文信息修饰过的更高level更加准确的语义。

好,回到DPCNN上来。我们想要克服TextCNN的缺点,捕获长距离模式,显然就要用到深层CNN啦。那么直接等长卷积堆等长卷积可不可以呢?

显然这样会让每个词位包含进去越来越多,越来越长的上下文信息,但是这样效率也太低了喂,显然会让网络层数变得非常非常非常深,这样笨拙的操作怎么能有呢哼。不过,既然等长卷积堆等长卷积会让每个词位的embedding描述语义描述的更加丰富准确,那么当然我们可以适当的堆两层来提高词位embedding的表示的丰富性。

所以region embedding层(这里假想为word embedding层,对应序列为“小娟 姐姐 带来 的 抹茶 青团 好 好吃 哦”)之上就可以如图3这样设计啦:

图3

固定Feature Map的数量

在表示好每个词位的语义后,其实很多邻接词或者邻接ngram的词义是可以合并的,例如“小娟 姐姐 人 不要 太好”中的“不要”和“太好”虽然语义本来离得很远,但是作为邻接词“不要太好”出现时其语义基本等价为“很好”,这样完全可以把“不要”和“太好”的语义进行合并哇。同时,合并的过程完全可以在原始的embedding space中进行的,毕竟原文中直接把“不要太好”合并为“很好”是很可以的哇,完全没有必要动整个语义空间

而实际上,相比图像中这种从“点、线、弧”这种low-level特征到“眼睛、鼻子、嘴”这种high-level特征的明显层次性的特征区分,文本中的特征进阶明显要扁平的多,即从单词(1gram)到短语再到3gram、4gram的升级,其实很大程度上均满足“语义取代”的特性。而图像中就很难发生这种”语义取代“现象(例如“鼻子”的语义可以被”弧线“的语义取代嘛?)。

因此(划重点),DPCNN与ResNet很大一个不同就是,在DPCNN中固定死了feature map的数量,也就是固定住了embedding space的维度(为了方便理解,以下简称语义空间),使得网络有可能让整个邻接词(邻接ngram)的合并操作在原始空间或者与原始空间相似的空间中进行(当然,网络在实际中会不会这样做是不一定的哦,只是提供了这么一种条件)。也就是说,整个网络虽然形状上来看是深层的,但是从语义空间上来看完全可以是扁平的。而ResNet则是不断的改变语义空间,使得图像的语义随着网络层的加深也不断的跳向更高level的语义空间。

1/2池化

好啦,所以提供了这么好的合并条件后,我们就可以用pooling layer进行合并啦。每经过一个size=3, stride=2(大小为3,步长为2)的池化层(以下简称1/2池化层),序列的长度就被压缩成了原来的一半(请自行脑补)。这样同样是size=3的卷积核,每经过一个1/2池化层后,其能感知到的文本片段就比之前长了一倍。

例如之前是只能感知3个词位长度的信息,经过1/2池化层后就能感知6个词位长度的信息啦,这时把1/2池化层和size=3的卷积层组合起来如图4所示。

图4

好啦,看似问题都解决了,目标成功达成。剩下的我们就只需要重复的进行等长卷积+等长卷积+1/2池化就可以啦,也就是重复如图5的Block:

图5

残差连接

但是!如果问题真的这么简单的话,深度学习就一下子少了超级多的难点了。

首先,由于我们在初始化深度CNN时,往往各层权重都是初始化为一个很小的值,这就导致最开始的网络中,后续几乎每层的输入都是接近0,这时网络的输出自然是没意义的,而这些小权重同时也阻碍了梯度的传播,使得网络的初始训练阶段往往要迭代好久才能启动。

同时,就算网络启动完成,由于深度网络中仿射矩阵(每两层间的连接边)近似连乘,训练过程中网络也非常容易发生梯度爆炸或弥散问题(虽然由于非共享权重,深度CNN网络比RNN网络要好点)。

当然,上述这两点问题本质就是梯度弥散问题。那么如何解决深度CNN网络的梯度弥散问题呢?当然是膜一下何恺明大神,然后把ResNet的精华拿来用啦~

ResNet中提出的shortcut-connection/skip-connection/residual-connection(残差连接)就是一种非常简单、合理、有效的解决方案。看着图5想一下,既然每个block的输入在初始阶段容易是0而无法激活,那么直接用一条线把region embedding层连接到每个block的输入乃至最终的池化层/输出层不就可以啦!

想象一下,这时的shortcut connection由于连接到了各个block的输入(当然为了匹配输入维度,要事先经过对应次数的1/2池化操作),这时就相当于一个短路连接,即region embedding直接短路连接到了最终的池化层或输出层。等等,这时的DPCNN不就退化成了TextCNN嘛。深度网络不好训练,就一层的TextCNN可是异常容易训练的。这样模型的起步阶段就是从TextCNN起步了,自然不会遭遇前面说的深度CNN网络的冷启动问题了。

同样的道理,有了shortcut后,梯度就可以忽略卷积层权重的削弱,从shortcut一路无损的传递到各个block手里,直至网络前端,从而极大的缓解了梯度消失问题

所以DPCNN里的Block里加上了shortcut connection后,就完美多啦。即设计出了如下最终版的网络形态:

最后点一下题目,由于前面所述的1/2池化层的存在,文本序列的长度会随着block数量的增加呈指数级减少,即

num\_blocks=log_2seq\_len

这导致序列长度随着网络加深呈现金字塔(Pyramid)形状:

因此作者将这种深度定制的简化版ResNet称之为Deep “Pyramid” CNN。

入门
3
相关数据
神经网络技术
Neural Network

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

词袋模型技术
Bag of words

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

卷积神经网络技术
Convolutional neural network

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

机器翻译技术
Machine translation

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

过拟合技术
Overfitting

过拟合是指为了得到一致假设而使假设变得过度严格。避免过拟合是分类器设计中的一个核心任务。通常采用增大数据量和测试样本集的方法对分类器性能进行评价。

池化技术
Pooling

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

感知技术
perception

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

文本分类技术
text classification

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

梯度消失问题技术
Vanishing Gradient Problem

梯度消失指的是随着网络深度增加,参数的梯度范数指数式减小的现象。梯度很小,意味着参数的变化很缓慢,从而使得学习过程停滞,直到梯度变得足够大,而这通常需要指数量级的时间。这种思想至少可以追溯到 Bengio 等人 1994 年的论文:「Learning long-term dependencies with gradient descent is difficult」,目前似乎仍然是人们对深度神经网络的训练困难的偏好解释。

权重技术
Weight

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

深度学习技术
Deep learning

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。 近年来监督式深度学习方法(以反馈算法训练CNN、LSTM等)获得了空前的成功,而基于半监督或非监督式的方法(如DBM、DBN、stacked autoencoder)虽然在深度学习兴起阶段起到了重要的启蒙作用,但仍处在研究阶段并已获得不错的进展。在未来,非监督式学习将是深度学习的重要研究方向,因为人和动物的学习大多是非监督式的,我们通过观察来发现世界的构造,而不是被提前告知所有物体的名字。 至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

夕小瑶
夕小瑶

深邃又好吃的机器学习与自然语言处理干货

夕小瑶的科技屋
夕小瑶的科技屋

深邃又好吃的机器学习与自然语言处理干货

返回顶部