KIM2014_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 k x i R k x_i∈R^k n n 输入文本
词向量维度 输入文本第 i i 个词的词向量 输入文本长度(不足补全,超过截断) 联接符 x 1 : n = x 1 x 2 . . . x n x_{1:n}=x_1⊕x_2⊕...⊕x_n
  • 一次卷积操作:
    • 给定一个 f i l t e r filter w R h k w∈R^{hk} ,代表对一个 w i n d o w = h window=h 的窗口内词语的卷积,并生成一个新的feature
    • c i = f ( w x i : i + h 1 + b ) c_i=f(w·x_{i:i+h-1}+b) b b 为偏置,可加可不加, f f 为非线性函数
    • 将这个 w w 应用于一个输入文本,即窗口 { x 1 : h , x 2 : h , . . . , x n h + 1 : n } \{x_{1:h},x_{2:h},...,x_{n-h+1:n}\} ,可以得到一个feature map c = [ c 1 , c 2 , . . . , c n h + 1 ] c=[c_1,c_2,...,c_{n-h+1}]
    • 进行一次最大池化,得到 c ^ = m a x { c } \hat{c}=max\{c\} ,用以捕捉最重要的feature map
  • 上述过程中,每个feature对应于一个 f i l t e r filter ,而模型会使用不同的 f i l t e r s filters (带有不同的window sizes)以得到不同的特征
  • 对双通道(每个通道输入不同的词向量)CNN进行了仿真实验,一个通道为静止向量,另一个通道会在bp过程中不断微调,且每个 f i l t e r filter 会被用于每个通道,结果在计算 c i c_i 时进行累加,具体结构如下图所示
    在这里插入图片描述

4. Datasets and Experimental Set up

4.1 Hyperparameters and Training

f i l t e r filter w i n d o w s windows f e a t u r e feature m a p s maps d r o u p o u t droupout r a t e rate l 2 l_2 constraint mini-batch size
[ 3 , 4 , 5 ] [3,4,5] 100 maps for each filter 0.5 0.5 3 3 50 50

5. Results and Discussion

在这里插入图片描述

  • 所有词的词向量均随机初始化,在训练过程中不断调整的baseline模型CNN-rand,果不其然效果比较差
  • 在baseline基础上加了个静态向量的CNN-static,果然提升很大
  • 原以为使用多通道的CNN-multichannel能够防止过拟合,(尤其在小数据集的情况下)比单通道的性能更好,结果发现并不尽然
  • CNN-non-static相比CNN-static,在一些情况下还是很有用的

总结

  • 尽管没怎么对超参做调整,一个简单的单卷积层CNN已经很牛逼了
  • 如何用Pytorch实现一个Text CNN

猜你喜欢

转载自blog.csdn.net/Real_Brilliant/article/details/83830631