Convolutional Neural Networks for Sentence Classification
1. Abstract
- 证实了:
- 一个简单的CNN结构 + 微调少许超参 + 静态向量 = 性能超好
- 在fine-tuning阶段学习task-specific向量能进一步提升性能
- 为了能同时使用静态向量和task-specific向量,对结构进行小调整,提出了Text CNN
- 在情感分析、问题分类等4个领域达到了十分好的效果
所谓静态向量就是指预训练好的词向量;task-specific向量是指词向量也可以在下游任务中,随着模型一同微调。
2. Introduction
- Kim之前利用预训练好的词向量(全程保持不变,也就是静态向量)加载到具体任务中,并只对模型的少许参数做微调,发现仿真结果也很好,证实了词向量可以作为一个通用的特征提取部件,并可被广泛用于各类分类任务中。当然从今天的角度来看,这已经是共识了。
- 不过Kim认为工作不止于此,如何在fine-tuning中学习task-specific向量更加重要。
3. Model
k |
xi∈Rk |
n |
⊕ |
输入文本 |
词向量维度 |
输入文本第
i个词的词向量 |
输入文本长度(不足补全,超过截断) |
联接符 |
x1:n=x1⊕x2⊕...⊕xn |
- 一次卷积操作:
- 给定一个
filter:
w∈Rhk,代表对一个
window=h的窗口内词语的卷积,并生成一个新的feature
-
ci=f(w⋅xi:i+h−1+b),
b为偏置,可加可不加,
f为非线性函数
- 将这个
w应用于一个输入文本,即窗口
{x1:h,x2:h,...,xn−h+1:n},可以得到一个feature map:
c=[c1,c2,...,cn−h+1]
- 进行一次最大池化,得到
c^=max{c},用以捕捉最重要的feature map
- 上述过程中,每个feature对应于一个
filter,而模型会使用不同的
filters(带有不同的window sizes)以得到不同的特征
- 对双通道(每个通道输入不同的词向量)CNN进行了仿真实验,一个通道为静止向量,另一个通道会在bp过程中不断微调,且每个
filter会被用于每个通道,结果在计算
ci时进行累加,具体结构如下图所示
4. Datasets and Experimental Set up
4.1 Hyperparameters and Training
filter
windows |
feature
maps |
droupout
rate |
l2 constraint |
mini-batch size |
[3,4,5] |
100 maps for each filter |
0.5 |
3 |
50 |
5. Results and Discussion
- 所有词的词向量均随机初始化,在训练过程中不断调整的baseline模型CNN-rand,果不其然效果比较差
- 在baseline基础上加了个静态向量的CNN-static,果然提升很大
- 原以为使用多通道的CNN-multichannel能够防止过拟合,(尤其在小数据集的情况下)比单通道的性能更好,结果发现并不尽然
- CNN-non-static相比CNN-static,在一些情况下还是很有用的
总结
- 尽管没怎么对超参做调整,一个简单的单卷积层CNN已经很牛逼了
- 如何用Pytorch实现一个Text CNN