Motivation:
Razavian等人(2014)使用预训练特征提取器在图像分类任务上取得了不错的效果,同时CNN在自然语言处理的任务上的应用也很有效。受此启发,本文作者使用预训练的词向量搭建一个简单的CNN网络。实验表明:在句子分类任务上,预训练的词向量+简单CNN模型往往比复杂的大型神经网络的分类效果好。
核心思想:
一般情况下,使用CNN进行句子分类是先将单词用向量表示,这个向量是随机初始化的。然后在训练过程中逐渐对词向量进行更新,使相似的单词在距离上相近,最终识别输入句子的类型。(本文的Baseline)
本文使用Mikoliv等人在100 billion个单词上训练的词向量作为以下三个模型的输入:
- 在训练过程中,这些词向量始终不变(CNN-static);
- 在训练过程中,允许对词向量进行微调,即更新词向量(CNN-non-static);
- 综合上面两种情况,设置两个channel,一个channel的词向量不变,一个微调(CNN-multichannel)。
模型结构:
实验结果:
Baseline是效果最差,这也符合我们直观理解。因为从0训练词向量的效果,肯定不如使用大量预料训练过的词向量好。
虽然模型简单,但上面三种模型的分类效果都能达到业界顶尖水平。CNN-non-static还是比CNN-static的效果更好一点,因为CNN-non-static毕竟对词向量进行更新,学习到了和训练集相关的特征。
总的来看CNN-non-static的效果最好,对于CNN-multichannel性能下降的一个合理的解释是:不应该使用一整个非静态的channel而是只要增加一个可以修改的维度就可以了。
启发:
- 对于在训练集中未出现过的单词,模拟预训练单词的分布能够达到更好的效果。论文中考虑了方差,所以考虑均值+方差的会不会更好一点。
- 使用Dropout往往会有意想不到的效果。
- CNN网络的容量很大,能够提升模型性能。