本文参考自Convolutional Neural Networks for Sentence Classification,结尾处放上传送门。
用传统方法进行文本分类任务时,通常将一篇文档所对应的tf-idf 向量作为模型的特征输入。但是这样做会有一个弊端,就是这样的tf-idf 表示实际上丢失了输入的文本序列中单词的顺序。而CNN对文本数据建模时,输入变长的字符串,然后通过滑动窗口加池化的方式将原先的输入转换成一个固定长度的向量表示,这样就可以捕捉到原文本中的一些局部特征和顺序上的信息。但一般只适用于短文本,对于两个词之间的长距离的依赖关系还是很难被捕捉到。
下面结合下图,来分析下CNN如何应用于文本分类任务的:
原图是两个通道的训练。
1)输入层是两个n*k的矩阵,其中n为文本所对应的单词总数(若长度不够n用padding 补,超出则舍弃),k是每个词对应的emberding向量维度。这里的两个通道:一个是每个词的 k维向量预先在其他语料库中训练好的,即预训练的模型可以用word2vec等,另外一个通道是每个词的k维向量作为未知的参数由模型训练得到。这样做的好处一方面预训练好的emberding向量可以利用其他预料库更多的先验知识;另一方面,由当前CNN模型训练出来的词嵌入向量可以更好地捕捉与当前任务关联的特征。其中未知的n*k的通道的参数是初始化,随着网络的训练会慢慢迭代改变。