Abstract
作者在句子级的分类任务上做了一系列基于预训练词向量的CNN实验。
实验结果说明了:
- 一个简单的(单层神经网络)、有一点超参数的调节(Filter的个数)和static word vector的CNN模型在多个benchmarks上效果都很好。
- 通过微调学习特定任务的向量(task-specific
vectors)可提升性能。
作者还提出了一个架构上的简单修改来允许task-specific vector和static vector。
non-static就是词向量随着模型训练变化,这样的好处是词向量可以根据数据集做适当调整。
static就是直接使用word2vec训练好的词向量即可。
1 Instruction
深度学习在机器视觉和语音识别上有很多成果。在NLP领域,深度学习会涉及到用神经网络来学习词向量。
词向量本质上是对词语的语义特征进行维度编码的特征编码器。
这部分就讲了讲词向量、CNN在NLP中的应用,本文的模型,都是概述。
2 Model
一个句子是由多个词拼接而成的,如果一个句子有 n n 个词,且第i个词表示为,词 xi x i 通过embedding后表示为k维的向量,即 xi∈Rk x i ∈ ℜ k ,则一个句子 x1:n x 1 : n 为 n∗k n ∗ k 的矩阵,可以形式化如下:
一个包含 h h 个的词的词窗口表示为:
一个filter是大小为 h∗k h ∗ k 的矩阵,表示为:
通过一个filter作用一个词窗口提取可以提取一个特征 ci c i ,如下:
卷积操作:通过一个filter在整个句子上从句首到句尾扫描一遍,提取每个词窗口的特征,可以得到一个特征图(feature map) ,表示如下(这里默认不对句子进行padding):
池化操作:对一个filter提取到的feature map进行max pooling,得到 c^∈R c ^ ∈ ℜ 即:
若有 m m 个filter,则通过一层卷积、一层池化后可以得到一个长度为的向量 z∈Rm z ∈ ℜ m :
最后,将向量 z z 输入到全连接层,得到最终的特征提取向量 (这里的 W W 为全连接层的权重,注意与filter进行区分):
在一个模型变种中,作者进行了两个“通道”词向量的实验,一个在训练中保持静止,一个通过BP微调。
在多通道的结构中,每一个filter都应用在两个通道上并且结果相加来计算
ci
c
i
。
2.1 Regularization
- Dropout: 对全连接层的输入
z
z
向量进行dropout 其中 r∈Rm r ∈ ℜ m 为masking向量(每个维度值非0即1,可以通过伯努利分布随机生成),和向量 z z 进行元素与元素对应相乘,让向量值为0的位置对应的 z z 向量中的元素值失效(梯度无法更新)。
- 在测试时,权重向量按比例缩小,and is used (without dropout) to score unseen sentences。
- L2-norms: 对L2正则化项增加限制:当正则项时, 令 ∥W∥2=s ‖ W ‖ 2 = s ,其中 s s 为超参数。
3 Datasets and Experimental Setup
- MR:电影评论,正负面评价
- SST-1:更细颗粒标签的MR
- SST-2:无中立评价、binary labels的SST-1
- Subj:把句子分为主观和客观
- TREC:与人、位置、数字信息相关的6分类问题
- CR:对商品的正负面评价
- MPQA:Opinion polarity detection subtask
of the MPQA dataset
3.1 Hyperparameters and Training
超参数通过在SST-2上的网格搜索设置
- Activation function(): rectified linear units (ReLu)
- Filter windows(
h
h
): 3,4,5 with 100 feature maps each
- Dropout rate(): 0.5
- L2 constraint(
s
s
): 3
- Mini-batch size: 50
- Dev set: randomly select 10% of the train data (for datasets without a standard dev set)
- Optimizer: stochastic gradient descent(SGD) over shuffled mini-batches with the Adadelta update rule
3.2 Pre-trained Word Vectors
- Pre-trained words : word2vec vectors from Google News
3.3 Model Variations
- CNN-rand:words随机初始化
- CNN-static:预训练词向量(word2vec)进行初始化,在训练过程中固定
- CNN-non-static:预训练词向量进行初始化,在训练过程中进行微调
- CNN-multichannel(多通道):将固定的预训练词向量和微调的词向量分别当作一个通道(channel),卷积操作同时在这两个通道上进行,可以类比于图像RGB三通道。
4 Results and Discussion
- MR:CNN-non-static 81.5
- SST-1: Paragraph-Vec (Le and Mikolov, 2014), 48.7
- SST-2:CNN-multichannel 88.1
- Subj : MNB (Wang and Manning, 2012) F-Dropout (Wang and Manning, 2013), 93.6
- TREC: SVMS (Silva et al., 2011) 95.6
- CR:CNN-multichannel 85.0
- MPQA:CNN-static 89.6
4.1 Multichannel vs. Single Channel Models
虽然作者一开始认为多通道可以预防过拟合,从而应该表现更高,尤其是在小规模数据集上。但事实是,单通道在一些语料上比多通道更好;
4.2 Static vs. Non-static Representations
在大部分的语料上,CNN-non-static都优于CNN-static,一个解释:预训练词向量可能认为‘good’和‘bad’类似(可能它们有许多类似的上下文),但是对于情感分析任务,good和bad应该要有明显的区分,如果使用CNN-static就无法做调整了.
4.3 Further Observations
- 其他相似结构的CNN没有本文中的模型表现好;
- Dropout可以提高2%–4%性能(performance);
- 对于不在预训练的word2vec中的词,使用均匀分布随机初始化,并且调整 a a 使得随机初始化的词向量和预训练的词向量保持相近的方差,可以有微弱提升;
- 可以尝试其他的词向量预训练语料,如Wikipedia[Collobert et al. (2011)]
- Adadelta(Zeiler, 2012)和Adagrad(Duchi et al., 2011)可以得到相近的结果,但是所需epoch更少。
5 Conclusion
略。
作者本人的实现代码(基于Theano):https://github.com/yoonkim/CNN_sentence
Denny Britz的基于TensorFlow的实现代码:https://github.com/dennybritz/cnn-text-classification-tf
Denny本人的代码讲解:http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/
其他人的基于TensorFlow的实现代码的讲解:论文Convolutional Naural Networks for Sentence Classification–TensorFlow实现篇