Text Classification(1)

文本分类一(概述,机器学习方法)

Posted by biggan on November 15, 2018

文本分类一

1.文本分类概述

(1)问题类型

  • 二分类:二选一
  • 多分类:多选一
  • 多标签:多选不定项(相当于很多个二分类问题)

(2)问题解析

 文本分类问题主要分为文本表示分类两部分。

  • 文本表示:对文本进行特征提取,一个文本表示成一个向量。
  • 分类:对提取的文本向量进行分类

note

 一个文本中,通常由多个句子组成。大部分文本表示的做法是不考虑句子之间的关系,而都会把它当成一个句子处理。当然最好是考虑句子之间的关系。

 机器学习的方法,文本表示和分类这两个部分一般是独立的,而深度学习的方法,表示和分类是一体的,也就是我们俗称的端到端方式。

(3)文本预处理

 文本表示之前一般会对文本进行预处理,而对中英文的数据处理方式也有所不同。

  • 中文

    主要包括文本分词和去停用词两部分。

    ①也可以不分词,基于字分析。分词可以使用$jieba$分词工具。

    ②去停用词可以维护一个停用词表。去掉像“然而”、 标点符号等只能反映句子语法结构的词语,而不能反映文献的主题的词汇。

  • 英文

    ①分词,还原缩写,去停用词,词形还原,提取词干

     推荐NLTK工具包进行处理,这些操作不一定需要全做。

    ②预训练词向量

     深度学习方法中可以使用word2vec、glove等工具预训练词向量,也可以使用开源的训练好的词向量。

2.传统文本分类方法

(1)基本方法

 采用tf-idf等方法进行文本特征提取,然后喂给svm,knn, Random Forest等各种分类模型进行训练。

note:tfidf只是比较常用的一种方法,还有很多提取特征的方式。tfidf的方法一般都不差。

(2)tf-idf(词频-逆文档频率)

  • Tf

    称为词频(term frequency),即,某个词在文档中的出现频率。用于计算该词描述文档内容的能力。

    \[Tf=\frac{某个词在文本中出现的次数}{文本的单词总数}\]
  • Idf

    称为逆文档频率(inverse document frequency, IDF),用于计算该词区分文档的能力。

    \[Idf=log(\frac{文本总数}{包含该单词的文本的数量+1})\]

    其中,分母是为了避免分母为1。

  • Tf-Idf

    \[Tf-Idf=Tf*Idf\]

    Note:TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语料中的出现次数成反比。某个词的TF-IDF值就越大,对文章的重要性越高。某个词的TF-IDF值就越大,对文章的重要性越高。

通过此方法,就能计算一个文本中每一个单词的tf-idf值,然后将文本表示成一个词汇表长度的向量,此向量的每一个位置对应一个单词,若该位置对应单词在文本中出现,则其值为单词的tf-idf,若未出现则为0。

(3)利用sklearn工具包提取文本tf-idf特征

  • (2)中tf-idf特征提取是基于文档中的单词,往往文本中短语,即ngram信息对文本分类也有很大的帮助,进行tfidf特征提取时,也可以以文本中的ngram为元素。此时,$文本向量的长度=词汇总数+ngram$总数。

  • $sklearn$中tf-idf特征提取函数$TfidfVectorizer$

    $tf = TfidfVectorizer(ngram_range=(1, 2), analyzer=char)$

    通过$ngram_range$参数可以指定$ngram$长度,(1,2)表示提取单词和二元组的$tfidf$特征。

(4)分类

 文本通过特征提取,表示成向量后,就可以通过$sklearn$各种掉包,尝试各种的分类器。一般使用SVM效果就会挺好。主要就是各种调参。

(5)补充

 对于大语料,还可以使用hash trick进行特征提取。

$Hs = HashingVectorizer(ngram_range=(1, 1), n_features = 1024)$

仅基于词频,不考虑权重。相当于是对tf特征进行降维度。可以考虑将hash特征以及tf-idf特征串接起来,一起作为文本的特征。

参考链接

https://www.zhihu.com/question/35486862

https://www.cnblogs.com/pinard/p/6688348.html