CNN文本分类《Convolutional Neural Networks for Text Categorization: Shallow Word-level vs. Deep Charact》
原文链接
本文仅在axive上发表
摘要
在文本分类领域,主要都是基于CNN和LSTM来做的,但是LSTM的复杂度比CNN高得多,一旦进行长文本或大量文本的训练,就会特别耗时,而CNN就要快得多。故本文在长文本分类领域对比了在字符级别和词语级别的CNN模型分别的效果:
- Our earlier work (2015) [3, 4]: shallow word-level CNNs (taking
sequences of words as input), which we abbreviate as word-CNN. - Conneau et al. (2016) [1]: very deep character-level CNNs (taking
sequences of characters as input), which we abbreviate as char-CNN.
前人的工作中已经证实了:
very deep character-level CNNs在的文本数据集非常大(260万条数据)的情况下表现良好,但在数据集比较小(仅12万条数据)的情况下表现欠佳。
shallow word-level CNNs在较小规模的数据集(仅2.5万条数据)上就能表现良好。
但这只能说明在小规模数据集上shallow word-level CNNs效果要优于very deep character-level CNNs,前人并没有测试它们两个同在大规模数据集上的对比。
故本文在相同的大规模数据集上对比了这两者的效果,填补了前人工作的空白。
模型
1.Very deep character-level CNNs
实验证明Very deep character-level CNNs比浅层CNN的效果要好,它的结构如下:
- 将每个字embedding为16维
- 多达29层卷积层,卷积核个数可取为64,128,256,512
- 卷积核的size为3
- 卷积层之后接了两个有2048个神经元的全连接隐藏层
- 使用pooling的方法来加速训练
- batch normalization
2.Shallow word-level CNNs
本文讨论了两种word-level CNN,如下图所示:
一种base model是直接用CNN提取文本的特征然后接pooling再接全连接输出层,还有一种是使用了tv-embedding的CNN,所谓tv-embedding就是two-view embedding,采用了两种视角的embedding,下面来介绍一下这种模型该如何训练:
首先我们使用当前词去预测相邻的词,用这种方法训练出tv-embedding(原文中可以使用无监督的方法来训练,难道是训练当前词与相邻的词是否属于同一种类型的分类器?),然后再将tv-embedding与原输入一起作为base model的输入进行训练。
实验证明效果比单纯使用basemodel要好。这种模型的目标函数如下:
其中 是第 个词语在tv-embedding步骤中训练出的embedding,由于该模型可以使用无监督的数据来增强模型效果,故该模型可以认为是一种半监督的模型。
实验
对比实验结果如下:
结论
1.一般而言,word CNN比char CNN的错误率要低
2.浅层CNN比深CNN训练要快