本文主要是介绍使用CNN进行句子分类(Convolutional Neural Networks for Sentence Classification),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification提出TextCNN。
文章地址:https://arxiv.org/pdf/1408.5882.pdf
以下是翻译内容
摘要:
一个简单的CNN需要很少的超参和静态的vector就能够获得很好的结果,如果将静态的vector改为针对任务的vector,效果又会进一步提升。
本文的目的是对CNN的结果进行很少的改动就能够使其在静态和task-specific的vector上都能够使用。这里讨论的CNN,在7个任务中有4个比以往的结果表现的要好,包括情感分析和问题分类。
近些年来,深度学习模型在图像和语音识别的任务中已经取得了惊人的成就,随着自然语言处理的发展,越来越多人使用深度学习方法,运用神经语言模型来学习词向量的表示。词向量,由稀疏的one-hot模式,通过一层隐藏层映射到了低维向量空间。这本质上是在提取特征,用以在单词维度上编码语义特征。在稠密向量标识中,语义相近的向量同样在空间上也会很相近(欧式距离或者是cosine距离)。
CNN使用卷积层来处理局部特征,原本是为了计算机图像而发明。紧接着,CNN模型在NLP任务上也被证明是有效的,包括语义分析和搜索问题检索、句子见面和其他传统的NLP任务。在现阶段的任务中,我们训练一个简单的CNN模型,在无监督的神经语言模型训练出的词向量上加一层卷积层,这些词向量是由 Mikolov etal. (2013)在100w的谷歌新闻上训练,目前是可以公开获取到的。我们初始保持这些词向量不变,仅仅学习这个模型的其他参数。仅仅调了几个超参之后,这个简单的模型在几个基准上都取得了非常出色的成绩。这表明,提前训练出的向量是一种通用的特征提取器,可以在各种分类任务中使用。
2.模型
2.1正则化
那就是给倒数第二层,z = [ˆc1, . . . , cˆm] (注意,这里我们有m个过滤器), 而非使用y = w · z + b,对于前向反馈网络,dropout使用
y = w · (z ◦ r) + b,其中◦ 代表的是点积,而r属于Rm,是一个“掩藏”向量,它是一个概率p为1的伯努利随机变量(没整明白)。
梯度只会由那些没有被掩藏的单元反馈。在测试阶段,学到的权重向量要乘以p,例如twˆ = pw, wˆ 被用来(不加dropout)对那些未出现的句子打分。我们额外加上了l2范式限制,在梯度下降步骤之后,对于那些||w||2 > s ,我们令||w||2 = s
3.数据集和实验步骤
我们在几个基准上测试了我们的模型,结果如表格1所示。
表格1:每个数据集的统计数据
c:目标类目的个数
l:句子的平均长度
N:数据集的大小
|V|:词汇的大小
|Vpre|:有多少词语出现在预训练的词向量集合中
Test:测试集的大小(CV意味着没有固定的大小,使用10折交叉验证)
MR:Movies reviews,影评,每个影评只有1句,目标是区分正向情感和负向情感。
SST-1:Stanford Sentiment Treebank,MR的升级,提供了train/dev/test三个部分,并且被Socher et al. (2013).4微调成了5种标签(非常正向,正向,中立,负向,非常负向)。
SST-2:和SST-1一致,但是去除了中立标签,只留下了正向、负向2种标签。
Subj: Subjectivity dataset,判断一个句子是主观的还是客观的 (Pang and Lee, 2004).
TREC:TREC question dataset,判断问题是属于人类、地点、数字信息或者是其他(一共6种分类),(Li and Roth, 2002).5
CR: Customer reviews,数据集是用户对多个产品的评价,目标是预测正向、负向评价。
MPQA: MPQA dataset (Wiebe et al., 2005).7,对数据集上评价两极化的检测。
上述数据集地址:
3 https://www.cs.cornell.edu/people/pabo/movie-review-data/
4 http://nlp.stanford.edu/sentiment/ (Data is actually provided at the phrase-level and hence we train the model on both phrases and sentences but only score on sentences at test time, as in Socher et al. (2013), Kalchbrenner et al. (2014), and Le and Mikolov (2014). Thus the training set is an order of magnitude larger than listed in table 1.)
5 http://cogcomp.cs.illinois.edu/Data/QA/QC/
6 http://www.cs.uic.edu/∼liub/FBS/sentiment-analysis.html
7 http://www.cs.pitt.edu/mpqa/
3.3模型变种
• CNN-rand:基准模型,所有单词随机初始化,在训练中可变。
• CNN-static:模型使用word2vec预训练好的向量,之前未预先训练好的向量则随机初始化。所有向量在训练过程中均保持不变,只训练其他参数。
• CNN-non-static:基本同上,唯一的区别是提前训练好的向量是可被微调的。
• CNN-multichannel:该模型有2组词向量,每组词向量都可以看作是一个通道,都会使用所有的过滤器,但是只有一个通道可以反馈梯度。因而,这个模型就是对一组向量进行微调,同时保持另一组向量不变。两组向量都是由word2vec预训练好的。
为了避免随机因素对实验的干扰,我们消除了实验中可能存在的随机性,比如训练数据的划分、未知词语的初始化,CNN参数的初始化,保证在每个数据集中,这些模型的这几个因素都保持一致。
4.结果与讨论
表格2:Results of our CNN models against other methods.
RAE: Recursive Autoencoders with pre-trained word vectors from Wikipedia (Socher et al., 2011).
MV-RNN: Matrix-Vector Recursive Neural Network with parse trees (Socher et al., 2012).
RNTN: Recursive Neural Tensor Network with tensor-based feature function and parse trees (Socher et al., 2013).
DCNN: Dynamic Convolutional Neural Network with k-max pooling (Kalchbrenner et al., 2014).
Paragraph-Vec: Logistic regression on top of paragraph vectors (Le and Mikolov, 2014).
CCAE: Combinatorial Category Autoencoders with combinatorial category grammar operators (Hermann and Blunsom, 2013).
Sent-Parser: Sentiment analysis-specific parser (Dong et al., 2014).
NBSVM, MNB: Naive Bayes SVM and Multinomial Naive Bayes with uni-bigrams from Wang and Manning (2012).
G-Dropout, F-Dropout: Gaussian Dropout and Fast Dropout from Wang and Manning (2013).
Tree-CRF: Dependency tree with Conditional Random Fields (Nakagawa et al., 2010).
CRF-PR: Conditional Random Fields with Posterior Regularization (Yang and Cardie, 2014).
SVMS: SVM with uni-bi-trigrams, wh word, head word, POS, parser, hypernyms, and 60 hand-coded rules as features from Silva et al. (2011).
我们模型与其他模型的结果如表格2所示,我们的基准模型(CNN-rand,所有词语随机初始化)表现的并不好。尽管我们已经预计到提前训练好的向量在表现上会有所提升,但是提升的幅度完全超乎我们的预料。仅仅是一个用固定向量的简单模型(CNN-static)的表现也非常的好,结果与那些使用了更复杂的池化机制(Kalchbrenner et al., 2014)或者是要提前计算语法树(Socher et al., 2013).的复杂的深度学习模型的表现不相上下。结果证实了那些提前训练的向量是有用,普遍的特征提取器,可以被用于其他的数据集。微调那些提前训练好的向量可以进一步提升效果。
4.1多通道模型vs单通道模型
我们初始希望的是多通道模型可以预防过拟合(通过学到的向量和初始向量不会偏离的太远确定),因而可以比单通道模型的效果更好,尤其是对小数据集而言。然后结果却和我们预期的不完全一致,因此,有必要对微调过程进行正则化。举例而言,不必对可变的部分使用一个额外的通道,可以只有一个通道,但是要增加可以在训练中可以被修改的维度。
4.2静态和动态的表现
和可变的单通道模型一样,多通道模型可以对可变通道的部分进行微调,使其对正在处理的数据集更加具有针对性。举个例子,在word2vec中,和good最相似的词是bad,这可能是由于good和bad在语法上基本是等价的,但是在可变单通道的模型中,使用了SST-2数据集微调之后的词向量,就不再是这么一回事了。按理来说,在表示情感的时候,good和nice更为相近,而不是great,这一点在学好的向量中也有所体现。
对于那些没有在预训练的集合中出现的词语,我们随机初始化过后,微调允许他们去学习更有意义的表示:网络学习到感叹号和激烈的情感表达有关,而句号则更内敛。
4.3进一步观察
我们的报告还包括一些进一步的实验和观察:
Kalchbrenner et al. (2014) 报告中得到很差结果的CNN和我们文中所说的单通道的CNN本质上是一样的结构,例如,他们的r Max-TDNN (Time Delay Neural Network),也是对词语的随机初始化,在SST-1数据集上仅获得了37.4%,而我们的模型则获得了45.%.我们将这一差别归功于我们的CNN有更大的容量(多种过滤器宽度和特征map)
dropout被证明是一种良好的正则化手段,我们可以使用一个比预期更大的网络来进行训练,而仅仅只需要用dropout来正则化它。dropout在所有数据集上,对比那些没有用dropout的模型都提升了2%-4%.
在随机初始化那些没有出现在word2vec中的单词时,每个维度都从U[−a, a]中抽样使我们的表现获得了小幅提升。其中,a是使得随机初始化的向量和预先训练好的向量有一只的方差。之后,使用更复杂的方式来和减小预训练的向量分布之间的差距,这是否能使结果获得进一步的提升也是个有趣的问题。
我们使用Collobert et al. (2011)使用Wikipedia,8训练出来的词向量进行了一些简单的实验,发现word2vec表现更优一点。我们不清楚这是由于Mikolov et al. (2013)’s 的结构引起的还是由于谷歌新闻数据集有1亿单词。
Adadelta (Zeiler, 2012) 和 Adagrad (Duchi et al., 2011)表现差不多,但是需要多几次迭代
5.结论
在现阶段的工作中,我们描述了一些列基于word2vec使用CNN网络的实验。除了少量的超餐之外,一个只有一层卷积层的简单的CNN表现的已经非常好了。我们的结果只是更进一步证明了预训练好的词向量在NLP的深度学习中,是一个很重要的组成成分。
这篇关于使用CNN进行句子分类(Convolutional Neural Networks for Sentence Classification)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!