文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练
文档集合, 找到文档特征和文档类别之间的
关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和
机器学习的方法。
定义
所谓分类体系就是针对词的统计来分类
学习人类对文本分类的知识和策略
从人对文本和类别之间
相关性判断来
学习文件用字和标记类别之间的关联
过程
文本分类一般包括了文本的表达、
分类器的选择与训练、 分类结果的评价与反馈等过程,其中文本的表达又可细分为文本预处理、索引和统计、
特征抽取等步骤。文本
分类系统的总体
功能模块为:
(1) 预处理:将原始语料格式化为同一格式,便于后续的统一处理;
(2) 索引:将文档分解为基本
处理单元,同时降低后续处理的开销;
(3) 统计:
词频统计,项(单词、概念)与分类的相关概率;
(4) 特征抽取:从文档中抽取出反映文档主题的特征;
(5)分类器:分类器的训练;
(6) 评价:分类器的测试结果分析。
方法
文本分类问题与其它分类问题没有本质上的区别,其方法可以归结为根据待
分类数据的某些特征来进行匹配,当然完全的匹配是不太可能的,因此必须(根据某种
评价标准)选择最优的匹配结果,从而完成分类。
词匹配法
词匹配法是最早被提出的分类算法。这种方法仅根据文档中是否出现了与类名相同的词(顶多再加入
同义词的处理)来判断文档是否属于某个类别。很显然,这种过于
简单机械的方法无法带来良好的分类效果。
知识工程
后来兴起过一段时间的知识工程的方法则借助于专业人员的帮助,为每个类别定义大量的推理规则,如果一篇文档能满足这些推理规则,则可以判定属于该类别。这 里与特定规则的匹配程度成为了文本的特征。由于在系统中加入了人为判断的因素,
准确度比词匹配法大为提高。但这种方法的缺点仍然明显,例如分类的质量严重 依赖于这些规则的好坏,也就是依赖于制定规则的“人”的好坏;再比如制定规则的人都是专家级别,
人力成本大幅上升常常令人难以承受;而知识工程最致命的弱 点是完全不具备可推广性,一个针对金融领域构建的分类系统,如果要扩充到医疗或
社会保险等相关领域,则除了完全推倒重来以外没有其他办法,常常造成巨大的 知识和资金浪费。
统计学习
后来人们意识到,究竟依据什么特征来判断文本应当隶属的类别这个问题,就连人类自己都不太回答得清楚,有太多所谓“只可意会,不能言传”的东西在里面。人类的判断大多依据经验以及直觉,因此自然而然的会有人想到和让机器像人类一样自己来通过对大量同类文档的观察来自己总结经验,作为今后分类的依据。这便是统计
学习方法的基本思想。
统计学习方法需要一批由人工进行了准确分类的文档作为学习的材料(称为
训练集,注意由人分类一批文档比从这些文档中总结出准确的规则成本要低得多),计算机从这些文档中挖掘出一些能够有效分类的规则,这个过程被形象的称为训练,而总结出的规则集合常常被称为
分类器。训练完成之后,需要对计算机从来没有见过的文档进行分类时,便使用这些分类器来进行。这些训练集包括
sogou文本分类分类
测试数据、中文文本分类分类
语料库,包含Arts、Literature等类别的语料文本、可用于
聚类的英文文本
数据集、
网易分类文本分类文本数据、tc-corpus-train(语料库训练集,适用于文本分类分类中的训练)、2002年中文网页分类训练集CCT2002-v1.1等。
现如今,统计学习方法已经成为了文本分类领域绝对的主流。主要的原因在于其中的很多技术拥有坚实的理论基础(相比之下,知识工程方法中专家的主观因素居多),存在明确的评价标准,以及实际表现良好。统计分类算法
将
样本数据成功转化为向量表示之后,计算机才算开始真正意义上的“学习”过程。常用的分类算法为:
决策树,Rocchio,
朴素贝叶斯,神经网络,
支持向量机,线性最小平方拟合,kNN,
遗传算法,
最大熵,Generalized Instance Set等。在这里只挑几个最具
代表性的算法侃一侃。
Rocchio算法应该算是人们思考文本分类问题时最先能想到,也最符合直觉的
解决方法。基本的思路是把一个类别里的样本文档各项取个
平均值(例如把所有 “体育”类文档中词汇“篮球”出现的次数取个平均值,再把“裁判”取个平均值,依次做下去),可以得到一个新的向量,形象的称之为“
质心”,质心就成了这 个类别最具代表性的向量表示。再有
新文档需要判断的时候,比较新文档和质心有多么相像(八股点说,判断他们之间的距离)就可以确定新文档属不属于这个类。 稍微改进一点的Rocchio算法不仅考虑属于这个类别的文档(称为正样本),也考虑不属于这个类别的文档数据(称为负样本),计算出来的质心尽量靠近正样本同时尽量远离负样本。Rocchio算法做了两个很致命的假设,使得它的性能出奇的差。一是它认为一个类别的文档仅仅聚集在一个质心的周围,实际情况往往不是如此(这样的数据称为线性
不可分的);二是它假设
训练数据是绝对正确的,因为它没有任何定量衡量样本是否含有噪声的机制,因而也就对错误数据毫无
抵抗力。
不过Rocchio产生的
分类器很直观,很容易被人类理解,算法也简单,还是有一定的利用价值的,常常被用来做科研中比较不同算法优劣的基线系统(Base Line)。
贝叶斯算法关注的是文档属于某类别概率。文档属于某个类别的概率等于文档中每个词属于该类别的概率的综合
表达式。而每个词属于该类别的概率又在一定程度上 可以用这个词在该类别训练文档中出现的次数(
词频信息)来粗略估计,因而使得整个计算过程成为可行的。使用朴素贝叶斯算法时,在训练阶段的主要任务就是估计这些值。
首先对于每一个样本中的元素要计算
先验概率。其次要计算一个样本对于每个分类的概率,概率最大的分类将被采纳。所以
其中P(d| Ci)=P(w1|Ci) P(w2|Ci) …P(wi|Ci) P(w1|Ci) …P(wm|Ci) (式1)
P(w|C)=元素w在分类为C的样本中出现次数/
数据整理后的样本中元素的总数(式2)
这其中就蕴含着朴素贝叶斯算法最大的两个缺陷。
首先,P(d| Ci)之所以能展开成(式1)的
连乘积形式,就是假设一篇文章中的各个词之间是彼此独立的,其中一个词的出现丝毫不受另一个词的影响(回忆一下
概率论中变 量彼此独立的概念就可以知道),但这显然不对,即使不是语言学专家的我们也知道,词语之间有明显的所谓“共现”关系,在不同主题的文章中,可能共现的次数 或频率有变化,但彼此间绝对谈不上独立。
其二,使用某个词在某个类别训练文档中出现的次数来估计P(wi|Ci)时,只在
训练样本数量非常多的情况下才比较准确(考虑扔硬币的问题,得通过大量观 察才能基本得出正反面出现的概率都是二分之一的结论,观察次数太少时很可能得到错误的答案),而需要大量样本的要求不仅给前期
人工分类的工作带来更高要求 (从而成本上升),在后期由计算机处理的时候也对存储和
计算资源提出了更高的要求。
但是稍有常识的技术人员都会了解,
数据挖掘中占用大量时间的部分是
数据整理。在数据整理阶段,可以根据词汇的情况生成字典,删除冗余没有意义的词汇,对于单字和重要的词组分开计算等等。
这样可以避免
朴素贝叶斯算法的一些问题。其实真正的问题还是存在于算法对于
信息熵的计算方式。
朴素贝叶斯算法在很多情况下,通过专业人员的优化,可以取得极为良好的识别效果。最为人熟悉的两家跨国软件公司在仍采用朴素贝叶斯算法作为有些软件
自然语言处理的工具算法。
kNN算法
最近邻算法(kNN):在给定新文档后,计算新文档
特征向量和训练文档集中各个文档的向量的相似度,得到K篇与该新文 档距离最近最相似的文档,根据这K篇文档所属的类别判定新文档所属的类别(注意这也意味着kNN算法根本没有真正意义上的“训练”阶段)。这种判断方法很 好的克服了Rocchio算法中无法处理线性不可分问题的缺陷,也很适用于分类标准随时会产生变化的需求(只要删除旧训练文档,添加新训练文档,就改变了 分类的准则)。
kNN唯一的也可以说最致命的缺点就是判断一篇新文档的类别时,需要把它与现存的所有训练文档全都比较一遍,这个计算代价并不是每个系统都能够承受的(比 如我将要构建的一个文本分类系统,上万个类,每个类即便只有20个训练样本,为了判断一个新文档的类别,也要做20万次的向量比较!)。一些基于kNN的 改良方法比如Generalized Instance Set就在试图解决这个问题。
kNN也有另一个缺点,当样本
不平衡时,如一个类的
样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
SVM
SVM(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决
小样本、非线性及高维
模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
支持向量机方法是建立在
统计学习理论的
VC维理论和
结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,Accuracy)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称
泛化能力)。
SVM 方法有很坚实的理论基础,SVM 训练的本质是解决一个
二次规划问题(Quadruple Programming,指
目标函数为
二次函数,
约束条件为
线性约束的
最优化问题),得到的是全局
最优解,这使它有着其他
统计学习技术难以比拟的优越性。 SVM
分类器的文本分类效果很好,是最好的分类器之一。同时使用
核函数将 原始的
样本空间向
高维空间进行变换,能够解决原始样本线性不可分的问题。其缺点是核函数的选择缺乏指导,难以针对具体问题选择最佳的核函数;另外SVM 训练速度极大地受到训练集规模的影响,计算开销比较大,针对SVM 的训练速度问题,研究者提出了很多改进方法,包括Chunking 方法、Osuna算法、
SMO 算法和交互SVM 等。
SVM分类器的优点在于通用性较好,且分类精度高、分类速度快、分类速度与训练
样本个数无关,在查准和查全率方面都略优于kNN及
朴素贝叶斯方法。
开源软件
TMSVM:完整的基于
Libsvm与Liblinear的文本分类系统,直接输入训练样本,并配置相应参数,即可进行模型及预测。
参考文献
1 F. Sebastiani. “Machine learning in automated text categorization.” ACM Computing Surveys, 34(1), pp. 1-47, 2002. (.
pdf)
2 Aas K., Eikvil L.. Text Categorisation: A Survey. TechnicalReport. Norwegian Computing Center, Oslo, Norway,1999.
3 M. Rogati and Y. Yang. High-performing feature selection for text classification ACM CIKM 2002. (.pdf)
4 Tie-Yan Liu, Yiming Yang, Hao Wan, et al, Support Vector Machines Classification with Very Large Scale Taxonomy, SIGKDD Explorations, Special Issue on Text Mining and Natural Language Processing, vol.7, issue.1, pp36~43, 2005. (.pdf)
5 苏金树、张博锋、徐 昕,基于机器学习的文本分类
技术研究进展
软件学报 17(9): 1848-1859, 2006.9 (.pdf)
7 瓦普尼克(著),张学工(译),统计学习理论的本质
清华大学出版社 2004.6
8 SVMlight
9 SVMTorch