摘要:我们报告了一系列在预训练的单词向量之上用卷积神经网络(CNN)训练的实验,用于完成句子级分类任务。我们展示了一个具有很少超参数调整和静态向量的简单的CNN,它可以在多个基准测试中获得出色的结果。学习特定任务的向量通过微调可以进一步有很好的表现。为了使用特定任务向量和静态向量,我们对架构进行了简单的修改。我们在这里讨论的七个任务中,有四个取得了目前最好的结果,其中包括情感分析和问题分类。
模型
Figure 1.是本文的模型,一个略有变化的CNN架构,左边是一个n*k的矩阵表示一个包含n个单词的句子,每个单词为k维向量。
包含n个单词的句子表示为:
这里⊕表示拼接操作。一个卷积操作涉及一个滤波器w(设置一个滑窗的长度h,用这个滑窗滑过整个矩阵)产生一个新的特征,形成这个向量,称为feature map,通过以下公式计算
这里b是偏移量,f是一个非线性函数,每一个窗口产生一个可能的映射特征
然后对于每个feature map,采取选出这个向量中的最大值,(最大池化策略,意在找到最重要的特征),同时也解决了每个feature map不等长,统一了维度的问题。
我们可以通过改变h的大小,生成很多feature maps,这些特征组成了倒数第二层并且传给全连接的softmax层,输出标签的概率分布。
在两个通道的模型变种中,一个将word2vec得到的结果直接static的传入整个模型,另一个channel在BP训练过程中要进行fine-tune。每一个filter都要分别应用到这两个channels上。例如上图中就能看出,系统有2 filters,对2个channels分别卷积后得到4 stacks。
数据集相对较小,很容易就会发生过拟合现象所以这里引如dropout来减少过拟合现象,Dropout通过随机丢弃——例如在前向传播的过程中,每个隐层单元有p的概率被丢弃。代替公式(4),我们使用公式(5)
这里○是元素级的乘法操作并且r∈R^m是一个“掩盖”向量,向量中的元素都是一个伯努利随机变量有p的概率变为1。另外用S来限制权重向量的二范式,每一次梯度下降,调整参数的时候,依靠这个阈值s来约束中间的参数。
模型变种
- CNN-rand:所有的词向量随机初始化,在训练过程中会作为参数调节。
- CNN-static:使用预训练的词向量——Word2vec。若有单词不在预训练好的词典中,则用随机数代替,所有词向量在训练过程中保持不变。
- CNN-non-static:基本与CNN-static相同,只是在训练过程中会针对不同的任务做细微调节。
- CNN-multichannel:有两个词向量集合的模型。每套词向量形成的句子矩阵作为一个通道,在训练的过程中一个通过反向传播做细粒度调节,一个保持不变。
CNN用在NLP
上图中,一个句子相当于一个原始图像,图像处理中经常看到的卷积核都是正方形的,比如4*4,然后在整张图上沿宽和高逐步移动进行卷积操作,在用于短文本分类时,我们也需要很快的捕捉句子中的一些局部特点,上图中有7个词,假设每个词向量的方法维度为n,那么这个“原始图像”即为7n的矩阵,为了不把词切坏,卷积核在高度上滑动,在宽度上保持与词向量维度相同。
结论
CNN在NLP领域的尝试,效果很好,将深度学习应用在NLP领域,非监督预训练的词向量是一个非常重要的因素。