以下为《TextCnn文本分类算法设计文档》的无排版文字预览,完整内容请下载
一、什么是TextCNN
TextCNN 是利用卷积神经网络对文本进行分类的算法,由 Yoon Kim 在 《Convolutional Neural Networks for Sentence Classification》 中提出
Model
整体结构图:
/
详细结构图:
/
嵌入层(embeding):
(1) 预训练词向量作为embedding layer,数据集里的所有词都可以表示成一个向量,得到一个词向量矩阵(嵌入矩阵)。如图中所示,得到7x5的嵌入矩阵,每行是词向量,维度是5。
(2) 嵌入矩阵可以是静态的,用预训练词向量矩阵初始化embeddings,训练过程中不再更新,属于迁移学习,数据量比较小的情况下,通常采用静态方式。
也可以是非静态方式,根据反向传播更新,数据量大的情况下,可以直接随机初始化,然后训练模型网络,在训练过程中对embeddings进行更新和fine tune。
卷积层(Convolution):
设单词个数为n,嵌入矩阵为M,词向量一共有d维,则得到n*d的矩阵。
针对本例,句子中相邻单词关联性高,一位卷积足矣,卷积核w的宽度是d,高度是超参数h,通常为2-10之间的数。
池某某(Polling):
不同尺寸的卷积核得到的特征大小不同,对每个feature map使用池化函数,使它们维度相同。最常用的是k-max pooling。 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 ling丢失了结构信息,很难发现文本中的转折关系等复杂模式。卷积过后直接是全局max pooling,只能在卷积过程中计算与某些关键词的相似度,然后通过max pooling得出模型关注的那些关键词是否在整个文本中出现,以及最相似的关键词与卷积核的相似度最大有多大。
2.textcnn只知道关键词是否在文本中出现了,以及相似度强度分布,不可能知道关键词出现了几次,以及出现这些关键词的顺序。针对这个问题,可以尝试k-max pooling优化,针对每个卷积核都不只保留最大值,而是保留前k个最大值,并且保留这些值出现的顺序,即按文本的顺序排列k个最大值。
3.模型针对的事字向量,而不是字,一个卷积核可能只学了半个关键词词向量,另外的卷积核学了另外半个关键词的词向量,最后在分类器的地方,这些特征值被累加。
使用word2vec词向量初始化embedding层,并提升词向量维度。为了达到提升,你需要使用300维以上的词向量。
限制最后一层权重向量的L2范某某,可以在每次训练步骤之后更新权重值。就像原始文献一样。你可以通过定义一个新的操作,在每次训练步骤之后更新权重值。
将L2正则化添加到网络以防止过拟合,同时也提高dropout比率。(Github上的代码已经包括L2正则化,但默认情况下禁用)
添加权重更新和图层操作的直方图summaries,并在TensorBoard中进行可视化。
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]
以上为《TextCnn文本分类算法设计文档》的无排版文字预览,完整内容请下载
TextCnn文本分类算法设计文档由用户“zzr116677”分享发布,转载请注明出处