• [NLP]文本分类-textCNN


    一、简要

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

    卷积神经网络的优势在于能够自动地对N-gram特征进行组合和筛选,获得不同抽象层次的语义信息。

    二、textCNN

     

    具体描述:

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

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

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

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

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

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

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

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

    代码流程:

    四、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

  • 相关阅读:
    ctf web 百度杯”CTF比赛 九月场Upload i春秋
    ctf web 西普实验吧 登陆一下好吗 MySQL隐式转化 MySQL表达式的计算顺序
    Firefox 47.0.1
    给数组原型添加方法
    JS中几种常见的数组算法(前端面试必看)
    进制转换技巧解析
    redis通过6379端口无法连接服务器
    阿里云图片或文件上传 启动时报Error creating bean with name 'ossClient'问题
    20170628-三七互娱-测试工程师(提前批)
    20170514-vivo-软件工程师Java(提前批)
  • 原文地址:https://www.cnblogs.com/mj-selina/p/13366699.html
Copyright © 2020-2023  润新知