本篇将分享一个有监督学习句子表示的方法,文章是Convolutional Neural Networks for Sentence Classification,作者是Harvard NLP组的Yoon Kim,并且开源了代码 sent-conv-torch。
卷积神经网络(CNN)在计算机视觉中应用广泛,其捕捉局部feature的能力非常强,为分析和利用图像数据的研究者提供了极大额帮助。本文作者将CNN引用到了NLP的文本分类任务中。
本文模型架构图:
熟悉CNN结构的童鞋们看这个图就会非常眼熟,单通道图像可以表示为一个矩阵,输入到CNN中,经过多组filter层和pooling层,得到图像的局部特征,然后进行相关任务。本文用拼接词向量的方法,将一个句子表示成为一个矩阵,这里矩阵的每一行表示一个word,后面的步骤仅采用一组filter、pooling层来得到句子的特征向量,然后进行分类。
这里,模型根据词向量的不同分为四种:
- CNN-rand,所有的词向量都随机初始化,并且作为模型参数进行训练。
- CNN-static,即用word2vec预训练好的向量(Google News),在训练过程中不更新词向量,句中若有单词不在预训练好的词典中,则用随机数来代替。
- CNN-non-static,根据不同的分类任务,进行相应的词向量预训练。
- CNN-multichannel,两套词向量构造出的句子矩阵作为两个通道,在误差反向传播时,只更新一组词向量,保持另外一组不变。
在七组数据集上进行了对比实验,证明了单层的CNN在文本分类任务中的有效性,同时也说明了用无监督学习来的词向量对于很多nlp任务都非常有意义。
这里需要注意的一点是,static模型中word2vec预训练出的词向量会把good和bad当做相似的词,在sentiment classification任务中将会导致错误的结果,而non-static模型因为用了当前task dataset作为训练数据,不会存在这样的问题。具体可参看下图:
CNN最初应用在图像领域,将文本进行一些处理之后,也可以应用在nlp中,同样的思路,attention mechanism最初也是应用在图像识别领域中,现在seq2seq+attention的模型横扫了很多nlp task。其实很多问题在某个维度上看,是相似的问题,是可以用类似的方法进行解决的。
来源:paperweekly