Advertisement

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
  • 一次卷积操作:

    • 给定一个filterw∈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 mapc=[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)

还没有任何评论哟~