一、概述

上一篇文章中简单介绍了文本聚类,体验了无标注语料库的便利性。然而无监督学习总归无法按照我们的意志预测出文档的类别,限制了文本聚类的应用场景。很多情况下,我们需要将文档分门别类到具体的类别中。因此需要用到文本分类。本文便主要讲解文本分类的原理及实践。

二、文本分类的概念

文本分类,指的是将一个文档归类到一个或者多个类别的自然语言处理任务。值得一提的是,文档级别的情感分析也可以视作文本分类任务。此时情感分析的目的就是判断一段文本是否属于“正面”、“负面”等情感。
每篇文章一般只属于一个类别,这是最常见的情形。如果一篇文章可能属于多个类别,此时的问题称为多标签分类。
文本分类是一个典型的监督学习任务,其流程离不开人工指导。

三、文本特征的提取

分类模型是常见的机器学习模型,输入是一个特征向量,输出是一个类别。那么,如何将一篇文档转化为一个向量呢?
基于上一篇文章中文本聚类的知识,依然使用词袋向量作为特征向量。词袋向量是词语颗粒度上的频次或TF-IDF向量,为此我们需要先进行分词。
3.1 分词
HanLP中有集成好的基于各种分词模型的包。同时,也有很多其他的优秀的分词工具,如著名的jieba分词。
3.2 卡方特征选择
对于文本分类而言,其特征提取过程与文本聚类相同,特征提取的结果都为词袋模型下的稀疏向量。唯一有所不同的是,许多常见单词对分类决策的帮助都不大,比如汉语的虚词“的”和标点符号等。也有可能一些单词在所有的文档中均有出现。为了消除这些影响,我们之前是用停用词表或者IDF,此处,我们可以用卡方非参数检验来过滤掉相关程度不高的词语。
在统计学中, python 文本分类 python文本分类难吗_自然语言处理检验常用于检验两个事件的独立性。如果将词语的出现与类别的出现作为两个随机事件,那么类别独立性越高的词语,越不适合作为特征。 如果将某个事件的期望记作E,实际出现的频次记作N,那么python 文本分类 python文本分类难吗_自然语言处理 衡量的是期望与观测的相似程度。二者越相似,关联性就越强,独立性就越弱。
卡方检验的思想阐述完毕,一旦确定了哪些特征有用,接下来就可以将文档转化为向量了。
3.3 词袋向量
类似于TF-IDF算法,我们提取的是TF特征,也就是每个特征词语在某个文档中出现的频次。我们选择出上述步骤筛选出的对分类有益的词语作为特征,统计出每个特征及其频次。以特征的id作为下标,频次作为数值,假设一共具有n个特征,那么一篇文档就转化为n维的词袋向量。在不进行特征选择的前提下,如果以词语作为特征,则n约在10万量级;这个量级的向量运算开销不容小觑,一般利用卡方特征选择,可以将特征数量减小到10%到20%左右。
当文档被转化为向量,我们就彻底离开了语言、句子等现实世界的约束,进入机器学习的世界了。
接下来,是利用各种机器学习算法对特征和标签进行建模分类。优秀的分类模型包括随机森林、Xgboost等,此处不再赘述,有兴趣的可以参考李航博士的《统计学习方法》,这本书每一章的读书笔记我也会在随后更新,在那里详解这些机器学习分类算法