文本分类算法综述

业务背景

最近一段时间在今日头条国际化部门实习,做的文本质量工作。主要是文本分类,就是用一些机器学习或者深度学习的方法过滤掉低俗的新闻。因为做的是小语种,比如说法语,德语,意语,泰米尔语等,标注力量特别有限,有些语种甚至找不到标注人员。在这种情况下,要通过模型准确的识别出低俗新闻,难度可想而知。

解决办法:

  1. 前期在没有标注的情况下,对每个小语种, 通过googletrans得到的一批低俗词,然后利用pre-trained word2vec得到这批低俗词的相似词,用这些低俗词和相似词进行正则匹配,命中则说明低俗,否则认为正常
  2. 后期在线上积累了一批标注数据后,考虑采用模型进行文本分类。调研了很多文本分类算法,总结如下。

文本分类算法总结

文本预处理

  • 分词
  • 移除停留词
  • 移除低频词

传统文本分类算法

特征工程 + 分类器
特征工程就是将文本转换成固定维度的向量,再送入分类器中进行分类。
特征抽取的方法:

特征工程:
  • 向量空间模型
    • 词带模型(bag of words,unigram):
      • 没有考虑单词之间的顺序,和单词之间的相关性, 对于短文本效果很差
    • bag of n-grams:
      • 相比于bag of words,考虑了局部之间的顺序信息,但是向量的维度过大。如果单词总数是 | V | ,那么bi-gram单词总数是 | V | 2 ,参数过多难以训练
    • tfidf
      • 设置了特征的权重,即在bow的基础上,使用tfidf权重代替1,但是同样没有考虑单词之间的顺序和单词之间的相关性
        1. 语义模型
    • word2vec
      • word2vec技术直观上就是将单词映射到向量空间中,可以用来计算单词之间的相似度,后续很多基于深度学习的文本分类算法都利用了word2vec
      • fasttext(average word2vec):将所有词向量平均可以得到文本的向量表达,在输入分类器,使用softmax计算各个类别的概率。
        http://blog.csdn.net/john_xyz/article/details/79421618
      • word2vec * tfidf weight: 不同语fasttext将所有词向量平均,该方法是每个单词的词向量乘上该单词的tfidf权重,然后在求和,从而得到文本的特征表达。
    • doc2vec
    • LDA
      • 计算文档的主题分布,对于长文本效果很好
    • LSI
      • 基于矩阵分解的思想,计算出文本的语义向量

需要注意的是上述特征工程的方法都是无监督学习方法。计算出来的文本特征向量相当于把文本映射到向量空间,可以用来做文本相似度的计算。也就是在没有标签的情况下,可以做文本聚类。

分类器

分类器用的比较多的是LR,SVM,GBDT等,当然还有其他一些分类算法,这里不多赘述。

深度学习文本分类算法

使用深度学习,自动从文本中提取特征,省去了特征工程,实现端到端的训练,得益于深度学习强大的特征表征能力,使用深度学习进行文本分类其效果要往往要好于传统的方法。

  1. one-hot CNN
  2. textCNN
  3. textRNN
  4. textRNN + attention
  5. textRCNN

猜你喜欢

转载自blog.csdn.net/john_xyz/article/details/79602506