Notes:文本分类任务

1 传统方法

一般采用步骤:
a.文本预处理
b.特征提取,得到文本表示
c.分类器分类

  • a.文本预处理
    先根本停用词表去除停用词后,分词(用字会损失n-gram特征)
  • b.特征提取,得到文本表示
    词袋模型、语义相关的主题模型(LSI、NMF、LDA)提取特征。
  • c.分类器分类
    使用SVM、xgboost、LightGBM等分类器分类。

2 深度学习的文本分类方法

2.1 fastText

《Notes:文本分类任务》
word2vec的作者2016发布的工具,类似于word2vec中的CBOW的训练方式,区别是:

  • 1、word2vec是无监督训练词向量,用附近的词预测当前的词,fastText是用于文本分类,预测的输出是分类的label,
  • 2、fastText加入了n-gram的特征,由于cbow只是将每个单词的向量相加,没有考虑到n-gram特征。

特点:

模型相当简洁,训练速度非常快,能取得不错的效果,但是略差于TextCNN、HAN等模型。

2.2 TextCNN

TextCNN出自2014年EMNLP的论文《Convolutional Neural Networks for Sentence Classification
《Notes:文本分类任务》
TextCNN详细过程:第一层是图中最左边的7乘5的句子矩阵,每行是词向量,维度=5,这个可以类比为图像中的原始像素点了。然后经过有 filter_size=(2,3,4) 的一维卷积层,每个filter_size 有两个输出 channel。第三层是一个1-max pooling层,这样不同长度句子经过pooling层之后都能变成定长的表示了,最后接一层全连接的 softmax 层,输出每个类别的概率。

特征::可以加入不同预训练模型的特征(例如glove和word2vec),还可以同时加入静态和非静态(随模型训练变动)的预训练词向量。可以把特征做成不同的通道(类似于图像中的RGB)。

特点:

CNN模型并行能力强,速度虽然没有fastText快,但是相对其他模型较快,卷积的操作相当于更精细地提取N-gram的特征。

2.3 HAN

来自论文《 Hierarchical Attention Networks for Document Classification
《Notes:文本分类任务》
这是一个RNN结合Attention的文本分类方法,作者先用GRU处理词向量,经过一个带参的转换函数后,与词背景向量 u w u_w uw(随机初始化)计算相似度,得到相似度后经过softmax作为权重参数,加权求和词向量得到句子的表示,然后同样的方法,再经过GRU+Attention加权求和得到句子的向量表示,再用于分类。

特点:

RNN属于串行模型,并行能力差,计算速度较低,能取得不错的分类效果,而且加入了Attention的模块可以看到分类时什么词的权重参数高,可以增加模型的可解释性。

2.4 TextRCNN

来自论文《Recurrent Convolutional Neural Networks for Text Classification
《Notes:文本分类任务》
先用双向的循环神经网络处理词向量,每个单词能得到两个隐藏层的输出,单词的词向量和两个隐藏层输出进行拼接(cancat)得到单词的向量表示,然后再使用TextCNN的方法处理此向量。

特点

RNN类的网络可以考虑到上下文的信息,捕捉长距离的以来,CNN类可以捕捉局部信息N-gram的特征,结合起来取得更好的效果,但是参数较多,而且串行模型效率较低。

3 一些要点

1 模型并非最重要
TextCNN一般都已经能取得很好的效果,数据的预处理、超参数的调节、解决数据样本不均衡的问题,往往比模型之间的差异更大

2 理解数据非常重要

  • 对特殊字符的处理
  • 采用合适的分词方法,建立对应的分词词表
  • 针对类别不均衡问题,采用一些如booststrap的方法

3 超参数的调节
深度学习网络调参技巧 – 知乎专栏

4 一定要使用dropout和finetuning
dropout:有两种情况可以不用:数据量特别小,或者你用了更好的正则方法,比如bn。实际中我们尝试了不同参数的dropout,最好的还是0.5,所以如果你的计算资源很有限,默认0.5是一个很好的选择。

fine-tuning:如果用固定的词向量,例如用word2vec根据上下文学习词向量,其实bad和good的词向量是相当接近的,ELMO、BERT横扫NLP的任务也证明了fine-tuning的重要性。

5 一个很好的github代码
https://github.com/brightmart/text_classification

点赞