TextCNN

Kim 2014年论文Convolutional Neural Networks for Sentence Classification提出了用于文本分类的TextCNN模型。

TextCNN描述:首先将句子转换成对应的词向量矩阵,然后通过不同尺寸的卷积核进行计算,类似ngram提取不同长度的文本特征,最后通过池化层和全连接层进行分类。

1、设定句子截断长度,把一句话截断或补齐,再将词语转换成对应的词向量,构成词向量矩阵;

2、使用不同尺寸卷积核进行卷积操作,卷积核宽都是词向量的维度,但高度可以设置成不同值,对应提取不同长度的文本特征。计算后每一个卷积核得到一个n-h+1维的列向量(n是句子截断长度,h是卷积核高度)。

3、最大池化层,选出卷积核得到的列向量中最大的值,拼接得到r*m维向量(r是卷积核的类别数,m是每个类别卷积核的个数)。

4、再经过全连接层和softmax得到最后的概率分布。

借用论文A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification中的一张图,描述的很清晰:

TextCNN

关键点:

1、在池化层的输出向量处做dropout,方式参照Hilton2012论文,结果提升2%-4%;

2、词向量可以使用预先训练好的word2vec或随机初始化,随机初始化的向量要在训练中进行调整。不过word2vec的效果更好,可能是miklov训练的词向量效果比较好。但这种微调的方法可以用来训练任务相关的词向量,比如论文中的例子,在w2v中good和bad距离很近,因为其使用的语法环境很像,但其实在类似情感分析任务中含义相差很远,在通过训练调整后good距离bad变远,good离nice变得更近;

3、设置多通道,都使用word2vec向量,一个在训练过程中不变,一个随着训练调整,然后使用相同的卷积核计算,再把计算值相加。作者本以为这种方法可以防止过拟合(防止词向量调整的幅度太大),但是结果有好有坏,需要进一步研究。

4、多通道防止过拟合有一种改进方式,不再设置多通道,而是在non-static词向量矩阵后添加一定的维度,在训练过程中原先的词向量不变,只调整后加的维度。具体的添加内容怎么设计没有提;

5、随机初始化wod2vec中没有的词向量时有一个小技巧,初始化采用与预训练词向量相同的方差做均匀分布,效果会有提升;