深度学习(CNN RNN)在文本分类中的应用

时间:2024-03-28 22:12:44

一、文本分类

历史

上世纪 50 年代:专家规则(pattern)

上世纪 80 年代:知识工程建立专家系统

上世纪 90年代后:统计学习方法,人工特征工程 + 浅层分类模型

深度学习(CNN RNN)在文本分类中的应用

特征工程

机器学习的目标是把数据转换成信息,再提炼到知识的过程。特征工程没有很强的通用性,主要要结合对特征任务的理解,主要分为,文本预处理特征提取文本表示,将文本转换为计算机可以理解的形式,封装能够分类的信息,即有很强的特征表达能力。

  • 特征:数据—信息,决定结果的上限
  • 分类器:信息—知识,逼近结果的上限


文本预处理

预处理就是在文本中提取关键词表示文本的过程,中文文本处理主要包括文本分词和去除停用词。

中文分词:特征粒度为词粒度比字粒度要好,分类算法不考虑词序信息,字粒度损失了过多的“n-gram”信息,常见方法有:

  • 基于字符串匹配的正向/逆向/双向最大匹配
  • 基于理解的句法和语义分析消歧
  • 基于统计的互信息/CRF
  • WordEmbedding + Bi - LSTM + CRF

停用词:在文本中高频出现并且对文本分类无意义的词

  • 删除停用表中的词,属于特征选择的一部分


表示学习

文本表示:将预处理之后的文本转换为计算机可以理解的部分,决定文本分类的质量,常用方法为词袋模型或者向量空间模型,但是忽略了文本上下文的关系,每个词彼此之间独立,无法表征语义信息。

词袋模型(BOW, Bag Of Words) :

  • 高维度、高稀疏性

向量空间模型(Vector Space Model):

  • 特征选择降低维度
  • 特征权重计算增加稠密醒


特征提取

基于向量空间模型表示文本的方法,特征提取有特征项的选择特征权重计算两部分

特征选择:根据某个指标,对原始特征项(词)进行排序,从中选择分数最高的一些特征并过滤其他特征,常用方法:文档频率、互信息、信息增益、卡方统计量

特征权重:TF - IDF 及扩展方法,

TF - IDF:词的重要程度与在类别内的词频成正比,与所有类别中该词出现的次数成反比

  • TF: 表示词频,该词描述文档的能力
  • IDF:逆文档频率,该词区分文档的能力
  • 缺点:精度不是特别高、没有体现出单词的位置信息


词频:基于词频的特征选择就是将词频小于某一阈值的词删除,频次低的词对过滤的影响也比较小

  • 有时候词频低的词信息量也大,尤其在情感分类当中


文档频次法:计算每个特征的文档频次,根据阈值来去除频次特别低的(没有代表性)和特别高的特征(没有区分度)

  • 简单、计算量晓、速度快,时间复杂度跟文档数量成线性关系,非常适合超大规模文本数据集的特征选择


互信息方法 (Mutual information):衡量词和类别之间的统计独立关系,在过滤问题中用于度量特征对于主题的区分度。

  • 思想:某个类别中出现频率高,其他类别出现频率低的词,与该类的互信息较大
  • 优点:不需要在特征词和类别之间关系的性质做任何假设
  • 缺点:得分容易受到词边缘概率的影响。实验效果表示,互信息方法通常比较差


期望交叉熵:文本类别的概率分布,与出现了某个特定词的情况下的文本类别概率分布之间的距离

  • 思想:特征词 t 的交叉熵越大,对文本类别分布的影响越大
  • 评价:熵的特征选择不考虑单词未发生的情况,效果优于信息增益


信息增益:表示特征项的存在与否对类别预测的影响

  • 思想:特征项的信息增益值越大,贡献越大,对分类也重要
  • 评价:分类性能偏低,考虑了文本特征没有发生的情形


二、分类器

传统文本表示方法:词袋模型、向量空间模型

文档的深层表示:LDA 主题模型,LSI / PLSI 概率潜在语义索引

基于神经网络的表示学习:NNLM、CBOW、Skip-gram、Glove、word embedding 文本分布式表示


分类器的选择

机器学习方法:Naive Bayes、KNN、SVM、集合类方法、决策树、最大熵、神经网络

深度学习方法:TextCNN、TextRNN、TextRNN + Attention、TextRCNN(TextRNN + CNN)


三、深度学习分类器

端到端的深度学习

只关心系统的输入和输出,给定简单输入后(图像-像素,文本-one-hot编码),同时给定系统输出,神经网络会通过优化来得到近似的解,包含了特征抽取和分类步骤。

传统的机器学习方法主要是基于 Naive Bayes,Maximum Entropy, K-NN,和SVM,需要先进行人工的特征抽取,再进行分类。


fastText

思想:将句子中所有词向量进行平均(可以理解为只有 1 个 avg pooling 的特殊 CNN),然后直接 softmax,加入了一些 n-gram 特征的 trick 来捕获局部序列信息。

思考:文本分类有一些是“线性”问题的部分,不需要做过多的非线性转换、特征组合即可捕获很多的分类信息。

深度学习(CNN RNN)在文本分类中的应用

Text-CNN

pre-trained 的 word2vec + 深度学习分类器,这样的两阶段模型,不会比带参数的 Embedding 构建端到端的联动参数学习模型效果好。这样学习到的 embedding 能够更加符合当前语料库当前任务下的要求。

CNN 是基于 pre-trained 的 word2vec 的效果来做的,效果还没有完全超越 SVM

深度学习(CNN RNN)在文本分类中的应用

深度学习中的参数调节

A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification

  • 词嵌入维度:300维, 主要针对预训练
  • Filter 大小:7 的 filter 最优
  • Filter 的个数:推荐100 ~ 600个, 最好靠近600
  • **函数:Iden,ReLU, tanh 比 sigmoid,cube要好, 默认 ReLU 好
  • Pooling:推荐1-max pooling,不要用average,效果不好
  • 正则化:dropout rate 不要超过0.5, L2 正则化效果不明确


四、方法和实践

经验
  • 模型不是最重要的:单纯用 CNN 已经取得不错的结果了,最佳实践是先用 TextCNN 把整体任务效果调试到最好,再尝试改进模型
  • 记录和分析每次实验:迭代速度决定算法项目成败的关键,迭代质量也很关键。每次实验分析要回答三个问题:为什么要实验、结论是什么、下一步怎么实验
  • 超参数调节:A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification
  • 一定要用 dropout:有两种情况可以不用,数据量特别小,或者更好的正则方法。最好是 0.5
  • 未必要 softmax loss:如果类别间非互斥,可以训练多个二分类器,定义为 multi label 而非 multi class
  • 类别不均衡:如果 loss 被一部分类别 dominate,对总体来说是负向的,可以尝试 booststrap 方法调整 loss
  • 避免训练震荡:增加随机采样因素,尽可能使得数据分布 iid,默认 shuffle 机制能够让训练结果更稳定。如果模型更震荡,可以调整学习率或者 mini_batch_size
  • 没有收敛前不要过早当下结论:特别是新角度的调试,不要轻易否定


选择

CNN 和 RNN 的比较:Comparative Study of CNN and RNN for Natural Lang uage Processing

深度学习(CNN RNN)在文本分类中的应用


时间上来说,EntNet 和 HAN 效果还可以,时间跟 Text-CNN 接近

  • EntNet 和 DMN 是类似模型的分组
  • Bi-RNN 和 Seq2Seq 可以看成类似模型分组
  • RCNN 上下文效果跟 Bi-RNN 类似
  • HAN 跟各种 Attention 模型一个类似模型分组

深度学习(CNN RNN)在文本分类中的应用

Text-CNN,Text-Bi-RNN,EntNet 和 HAN 可以分别为卷积、上下文、存储记忆和注意力机制的代表。追求速度,先用 fasttext 分类,提升效果考虑 Text-CNN,Text-Bi-RNN,EntNet 和 HAN。

参考文献

[1] https://arxiv.org/pdf/1702.01923
[2] https://zhuanlan.zhihu.com/p/25928551