前言
TextCNN是在2014年,由韩国人Yoon Kim于2014年在“Convolutional Neural Networks for Sentence Classification”一文中提出的算法。
一、TextCNN
1-1、TextCNN结构图以及介绍:
整体结构:一层卷积,一层最大值池化,最后将输出外接softmax来进行n分类。因为网络结构简单所以参数数目较少,计算量少,训练速度快。这是TextCNN的优势。
第一层(Word Embedding构建词向量):首先需要将输入语句进行分词,之后将每个词都映射成相应词向量。即词语数值化,方便后续处理。(图中是一个7行五列的向量矩阵,7代表的是一个句子中的单词个数,而5代表的是每个词对应的词向量的维度)。
第二层(卷积层):使用不同规格(45,35, 25)的卷积核对输入的词向量矩阵提取特征(使用点积,即相乘的结果再进行依次相加),一般情况下下滑步长为1,得到(41, 51, 61)的输出,一般称输出为feature_map。(即卷积层输出的别名)
注意:颜色不同的卷积核(eg:上图的深红色卷积核和浅红色卷积核),虽然它们的size是相同的,即形状都是4*5,但是它们的内部是不一样的,称之为不同的channel(通道)。
为什么使用不同规格的卷积核?(因为可以获取到不同范围内词的关系,类似于N-gram,一般情况下使用2、3、4、5个次数作为卷积核的大小)
为什么每种规格还使用不一样的卷积核?(因为不一样的卷积核有不一样的关注点,这样多个卷积核就能学习到不同的信息)
第三层(最大值池化): 第二层输出的feature_map,假设其中一个feamap = [1,1,2,1],从中选取一个最大值2作为输出。这样的处理方法即为最大值池化。
第四层(使用softmax进行N分类):我们将第三层的结果拼接起来,送入到softmax中,得到最终的分类结果。
1-2、与CNN相比,textCNN的不同之处
1、 图像数据的特征提取一般是从左到右,从上到下滑动来进行特征提取的。
2、 自然语言的特征提取只是从上到下的,因为在输入到模型之前,自然语言首先会做Embedding处理,即生成词嵌入向量,在一句话表示的向量矩阵中,每一行都代表了不同的词,从左到右的特征提取是没有意义的,所以只会从上到下进行特征提取。
1-3、TextCNN的超参数调参
输入词向量:词向量表示的选取,选择一个适合的词嵌入表示模型(word2vec还是GloVe)
filter大小: 卷积核的大小。随着语料中句子的增加而增加,一般设置为(3,4,5)
每个size下的filter个数:增加特征图的时候,训练时间也会变得很长,要注意权衡。
激活函数: 一般选择Relu作为激活函数。
池化策略:1-max pooling
droupout rate:0.5
L2正则化: 相比于其他参数来说,影响比较小。
参考文章:
重要:听说你不会调参?TextCNN的优化经验Tricks汇总 .
总结
桥洞底下盖小被。