文本分类模型(二)——DPCNN
文章目录
一、概述
DPCNN(Deep Pyramid Convolutional Neural Networksfor Text Categorization),是RieJohnson和腾讯AI-Lab等提出的一种深度卷积神经网络,可以称之为"深度金字塔卷积神经网络"。相关论文链接Deep Pyramid Convolutional Neural Networks for Text Categorization。
文献中提出了一种基于word-level级别的网络——DPCNN。由于TextCNN不能通过卷积获得文本的长距离依赖关系,而论文中DPCNN通过不断加深网络,可以抽取长距离的文本依赖关系。实验证明在不增加太多计算成本的情况下,增加网络深度就可以获得最佳的准确率。
DPCNN的深度与padding后的最大句子长度有关系,例如 m a x _ l e n = 64 = 2 5 max\_len=64=2^5 max_len=64=25,即长度为64的句子只够5次pooling/2,因此DPCNN更加适合长文本。
二、背景
Deep Pyramid Convolutional设计的目的,一是提高准确率;另一个则是在提高准确率的前提下,尽量的提升计算效率。
文本分类是一个十分重要的任务,其应用场景包括垃圾邮件检测,情感和主题分类等。研究显示:深度为32层字符级CNN显示出优于深度为9层字符级CNN;非常浅的1层单词级CNN被证明比非常深的字符级CNN更加准确且快得多。结合这两点,对深度的单词级CNN进行探究,文献中提出了一种深度但低复杂度的网络架构,名为DPCNN(深度金字塔卷积神经网络)。
DPCNN主要的特色是引入了残差结构,增加了多尺度信息,并且增加了用于文本分类CNN的网络深度,以提取文本中远程关系特征,并且并没有带来较高的复杂度。
三、DPCNN特点
- 1.减采样的设计。每层设计步长为2的卷积层,保持filter数目不变(默认250),像一个金字塔的形状(pyramid)。研究发现下采样时增加feature map的数量除了白白增加了工作量以外,对提升准确率没有很大的帮助。DPCNN中将每层的计算量减半,保持filter(feature mapping)的数目不变,省去维度匹配的计算时间,而且准确率不会受影响,
- 2.残差连接的设计。该结构仿照了resnet的shortcut的设计思路,并且将原有的卷积计算 σ ( W x + b ) \sigma(Wx+b) σ(Wx+b),修改为先将x进行激活 W σ ( x ) + b W\sigma(x)+b Wσ(x)+b,这样可以带来更好的效果;此外filter数目不变,可以省略维度匹配的时间。这种设计使得网络可以扩展为深层网络进行参数的训练。
- 3.Region Embeeding层。该结构接在embedding层后面。DPCNN的embedding层是one-hot的形式。在region=k的范围内,对word进行线性映射( W x + b Wx+b Wx+b),实质上相当于CNN+one-hot的实现。
- 4.Block结构:在每个卷积块之后都用大小为3的feature map进行stride为2的max-pooling。这样可以得到相邻3个文本区域的之间特征表示,而且stride为2的pooling操作将每个文本的中间表示直接减少了一半,从而使得每个卷积层的计算复杂度直接减少一半。此外pooling操作使得卷积操作的有效覆盖面积加倍。
四、DPCNN原理
4.1 模型结构
DPCNN主要的组成结构包括:
- Redion embedding层(文本区域嵌入层)
- 两个convolution block,每层block由两个固定卷积核为3的conv卷积函数构成,两个block构建的层可以pre-activation直接连接
- Repeat结构,与上一层相似,只不过在conv之前、pre-activate之后增加了Max-polling层
4.2 结构细节
1.模型输入:输入词维度为[batch_size, seq_len]。
2.Region Embeeding层
将TextCNN的包含多尺寸卷积滤波器的卷积层的卷积结果称之为Region embedding,意思就是对一个文本区域/片段(比如3-gram)进行一组卷积操作后生成的embedding。
此外为了进一步提高性能,还使用了tv-embedding (two-views embedding)进一步提高DPCNN的accuracy,也就是引入预训练的词向量.
经过embedding层,词向量维度为:[batch_size, seq_len, embedded_size]
3.等长卷积层
等长卷积(equal-width convolution):步长 s = 1 s=1 s=1,两端补零 p = ( m − 1 ) / 2 p=(m-1)/2 p=(m−1)/2,卷积后输出长度为 n n n。DPCNN模型中采用两层(+relu)每层均为250个尺寸为3的卷积核。
该层采用了pre-activation的做法,卷积运算是 W σ ( x ) + b W\sigma(x)+b