[NLP]文本分类-textCNN

1、简要git

卷积神经网络的核心思想是捕捉局部特征,对于文原本说,局部特征就是由若干单词组成的滑动窗口,相似于N-gram.github

卷积神经网络的优点在于可以自动地对N-gram特征进行组合和筛选,得到不一样抽象层次的语义信息。网络

2、textCNN函数

 

 

具体描述:性能

一、 第一层是输入层,输入层是一个n*d矩阵,其中n表示输入文本的长度,d表示每一个词/字向量的维度。学习

注:每一个词向量既能够是预先在其余语料库中训练好的,也能够做为未知的参数由网络训练而获得。两者各有优点,前者能够利用其余语料库获得的先验知识,后者能够更好的抓取与当前任务相关联的特征。所以,图中的输入层实际采用了双通道的形式,即有两个n*d矩阵,其中一个用预训练好的词向量特征,而且在训练过程当中再也不发生变化;另外一个是用预训练好的词向量作初始化,可是会做为参数,随着网络的训练过程发生改变。优化

二、 第二层是卷积层,第三层是池化层。scala

卷积层:咱们用大小分别为2,3,4的filter来对输入层进行卷积,每一个大小的filter各有2个(对应产生2个feature map),分别于输入的词向量作卷积后会获得6个feature map。blog

池化层:使用1-max pooling分别对6个feature map作池化操做,最终会生成6个scalar,将其拼接后生成的向量通过softmax完成分类。get

注1:卷积核的大小与词向量的维度相同,且卷积核只会在高度方向上行动,说明卷子操做会在完整的单词上进行,而不会对几个单词的一部分vector进行卷积,这保证了word做为语言中最小粒度的合理性。

注2:使用多个相同size的filter是为了从同一个窗口学习相互之间互补的特征。好比能够设置size为3的filter有64个卷积核。

3、textCNN的缺点:它的全局max pooling丢失告终构信息,所以很难去发现文本中的转折关系等复杂模式。(改进方法:使用k-max pooling作优化,k-max pooling会针对每一个卷积核保留前k个最大值,而且保留这些值出现的顺序,即按照文本中的位置顺序来排列这k个最大值,在某些比较复杂的文本上相对于1-max pooling会有提高)

代码流程:

 

 

 

4、textCNN的超参数调参

输入词向量表征:词向量表征的选取(如选word2vec仍是GloVe)

卷积核大小:一个合理的值范围在1~10。若语料中的句子较长,能够考虑使用更大的卷积核。另外,能够在寻找到了最佳的单个filter的大小后,尝试在该filter的尺寸值附近寻找其余合适值来进行组合。实践证实这样的组合效果每每比单个最佳filter表现更出色

feature map特征图个数:主要考虑的是当增长特征图个数时,训练时间也会加长,所以须要权衡好。当特征图数量增长到将性能下降时,能够增强正则化效果,如将dropout率提升过0.5

激活函数:ReLU和tanh是最佳候选者

池化策略:1-max pooling表现最佳

正则化项(dropout/L2):相对于其余超参数来讲,影响较小点

 

参考文献:

[1] https://zhuanlan.zhihu.com/p/77634533

[2]https://github.com/jeffery0628/text_classification

相关文章
相关标签/搜索