最近有个分类任务要用c++完成,调研了目前开源的深度学习的文本分类方法,tencent的AILAB在ACL里面发表的《Deep Pyramid Convolutional Neural Networks for Text Categorization》是一种用c++实现的cnn/lstm文本分类系统,非常适合在c++平台上搭建。下面共享论文阅读感想。
1.特点。deep pyramid convolutional设计的目的,一是提高准确率,另一个,则是在提高准确率的前提下,尽量的提升计算效率。

2.设计亮点有三:1)减采样的设计。每层设计步长为2的卷积层,保持filter数目不变(默认250),像一个金字塔的形状(pyramid)。这样,可以将每层的计算量减半,保持filter(feature mapping)的数目不变,可以省去维度匹配的计算时间,实验证明,这种方式的准确率不会受影响,而增加层数,不会大幅度增加计算负担,layer在一定范围内增加,计算时长总是可以稳定在2倍的步长为1的卷积的计算时长。
2)残差连接的设计。改结构仿照了resnet的shortcut的设计思路,所做的改动有二:一是原有的卷积的计算是,而该方案的设计,是先将x进行激活(pre-activation),
,实验证明这样可以带来更好的效果;二是前面所提到的,filter数目不变,省略维度匹配的时间。
3)region embeeding层。改结构接在embedding层后面,首先,deep pyramid cnn的embedding层比较特殊,embeding是one-hot的形式。在region=k的范围内,对word 进行线性映射(),实质上,region embeding+ embedding 相当与cnn+one hot的实现。而方案中也提供了region embeding预训练的方法,基本loss原理是用region embeding的hidden layer 预测邻接region的embeding值。
3. 封装的方法:dpcnn:适合大数据集(默认15层,kenerl size =3)
shallow cnn: 适合小数据集(实质是regon embedding + embedding)
lstm
网友评论