KIM2014_Convolutional Neural Networks for Sentence Classification
发布时间
阅读量:
阅读量
Convolutional Neural Networks for Sentence Classification
-
1. Abstract
-
2. Introduction
-
3. Model
-
4. Datasets and Experimental Set up
-
- 4.1 Hyperparameters and Training
-
5. Results and Discussion
-
总结
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 | x_i∈R^k | n | ⊕ | 输入文本 |
|---|---|---|---|---|
| 词向量维度 | 输入文本第i个词的词向量 | 输入文本长度(不足补全,超过截断) | 联接符 | x_{1:n}=x_1⊕x_2⊕...⊕x_n |
-
一次卷积操作:
- 给定一个filter:w∈R^{hk},代表对一个window=h的窗口内词语的卷积,并生成一个新的feature
- c_i=f(w·x_{i:i+h-1}+b),b为偏置,可加可不加,f为非线性函数
- 将这个w应用于一个输入文本,即窗口\{x_{1:h},x_{2:h},...,x_{n-h+1:n}\},可以得到一个feature map :c=[c_1,c_2,...,c_{n-h+1}]
- 进行一次最大池化,得到 \hat{c}=max\{c\},用以捕捉最重要的feature map
-
上述过程中,每个feature对应于一个filter,而模型会使用不同的filters(带有不同的window sizes)以得到不同的特征
-
对双通道(每个通道输入不同的词向量)CNN进行了仿真实验,一个通道为静止向量,另一个通道会在bp过程中不断微调,且每个filter会被用于每个通道,结果在计算c_i时进行累加,具体结构如下图所示

4. Datasets and Experimental Set up
4.1 Hyperparameters and Training
| filter windows | feature maps | droupout rate | l_2 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
全部评论 (0)
还没有任何评论哟~
