20世纪90年代以前,占主导地位的文本分类方法一直是基于知识工程的方法:借助专业人员的帮助,为每个类别定义大量的推理规则,如果一篇文档能满足这些推理规则,则可以判定属于该类别。但是这种方法有明显的缺点:分类的质量依赖于规则的好坏;需要大量的专业人员进行规则的制定;不具备可推广性,不同的领域需要构建完全不同的分类系统,造成开发资源和资金资源的巨大浪费。
达观数据团队在处理海量数据方面具有丰富的经验,在文本分类技术方面有深入的实践,并将文本分类技术成功运用到了线上服务中,取得了良好的效果。本文整理了文本分类的基本方法和处理流程,进行了综述性介绍。
文本分类的流程如图1所示,包括训练、特征抽取、训练模型、分类预测等几个主要环节
图1文本分类流程图
设D为一个包含m个文档的文档集合,Di为第i个文档的特征向量,则有D={D1,D2,…,Dm},Di=(di1,di2,…,dij),i=1,2,…,mj=1,2,…,n。其中dij(i=1,2,…,m;j=1,2,…,n)为文档Di中第j个词条tj的权值,它一般被定义为tj在Di中出现的频率tij的函数,例如采用TF-IDF函数,即dij=tij*log(N/nj)。其中,N是文档数据库中文档总数,nj是文档数据库含有词条tj的文档数目。假设用户给定的文档向量为D2,未知的文档向量为q,两者的相似程度可用两向量的夹角余弦来度量,夹角越小说明相似度越高。相似度的计算公式如下:
图2向量空间模型
通过上述的向量空间模型,文本数据就转换成了计算机可以处理的结构化数据,两个文档之间的相似性问题转变成了两个向量之间的相似性问题。
在计算文档的特征向量的值时,还需要对文本集进行一些处理,过滤掉无用的信息。滤除这些没有作用的词语可以减少文本特征向量的维数,减少不必要的运算。常见做法包括:
目前大多数中文文本分类系统都采用词作为特征项,称作特征词。这些特征词作为文档的中间表示形式,用来实现文档与文档、文档与用户目标之间的相似度计算。如果把所有的词都作为特征项,那么特征向量的维数将过于巨大,会对分类系统的运算性能造成极大的压力。在这样的情况下,要完成文本分类几乎是不可能的。寻求一种有效的特征降维方法,不仅能降低运算复杂度,还能提高分类的效率和精度,因此事文本自动分类中一项重要技术。
特征抽取的主要功能就是在不损伤核心信息的情况下降低向量空间维数,简化计算,提高文本处理的速度和效率。相对于其他分类问题,文本特征抽取的方式常见的有4种:
其中基于数学方法进行特征选择比较精确,人为因素干扰少,尤其适合于文本应用。这种方法通过构造评估函数,对特征集合中的每个特征进行评估,并对每个特征打分,这样每个词语都获得一个评估值,又称为权值,然后将所有特征按权值大小排序,提取预定数目的最优特征作为提取结果的特征子集。
对用数学方法进行特征选择的算法,决定文本特征提取效果的主要因素是评估函数的质量,常用评估函数包括:
单词权重最为有效的实现方法就是TF-IDF,它是由Salton在1988年提出的。其中TF称为词频,用于计算该词描述文档内容的能力;IDF称为反文档频率,用于计算该词区分文档的能力。TF*IDF的指导思想建立在这样一条基本假设之上:在一个文本中出现很多次的单词,在另一个同类文本中出现次数也会很多,反之亦然。所以如果特征空间坐标系取TF词频作为测度,就可以体现同类文本的特点。另外还要考虑单词区别不同类别的能力,TF*IDF法认为一个单词出现的文本频率越小,它区别不同类别的能力就越大,所以引入了逆文本频度IDF的概念,以TF和IDF的乘积作为特征空间坐标系的取值测度。TF-IDF法是以特征词在文档d中出现的次数与包含该特征词的文档数之比作为该词的权重,即其中,Wi表示第i个特征词的权重,TFi(t,d)表示词t在文档d中的出现频率,N表示总的文档数,DF(t)表示包含t的文档数。用TF-IDF算法来计算特征词的权重值是表示当一个词在这篇文档中出现的频率越高,同时在其他文档中出现的次数越少,则表明该词对于表示这篇文档的区分能力越强,所以其权重值就应该越大。将所有词的权值排序,根据需要可以有两种选择方式:
词频是一个词在文档中出现的次数。通过词频进行特征选择就是将词频小于某一阈值的词删除,从而降低特征空间的维数。这个方法是基于这样一个假设,即出现频率小的词对过滤的影响也较小。但是在信息检索的研究中认为,有时频率小的词含有更多的信息。因此,在特征选择的过程中不宜简单地根据词频大幅度删词。
互信息(MutualInformation)衡量的是某个词和类别之间的统计独立关系,某个词t和某个类别Ci传统的互信息定义如下:互信息是计算语言学模型分析的常用方法,它度量两个对象之间的相互性。在过滤问题中用于度量特征对于主题的区分度。
将二次熵函数应用于互信息评估方法中,取代互信息中的Shannon熵,就形成了基于二次熵的互信息评估函数。基于二次熵的互信息克服了互信息的随机性,是一个确定的量,因此可以作为信息的整体测度,另外它还比互信息最大化的计算复杂度要小,所以可以比较高效地用在基于分类的特征选取上。
信息增益是一种基于熵的评估方法,涉及较多的数学理论和复杂的熵理论公式,定义为某特征项为整个分类所能提供的信息量,不考虑任何特征的熵与考虑该特征后的熵的差值。他根据训练数据,计算出各个特征项的信息增益,删除信息增益很小的项,其余的按照信息增益从大到小排序。信息增益是信息论中的一个重要概念,它表示了某一个特征项的存在与否对类别预测的影响,定义为考虑某一特征项在文本中出现前后的信息熵之差。某个特征项的信息增益值越大,贡献越大,对分类也越重要。信息增益方法的不足之处在于它考虑了特征未发生的情况。特别是在类分布和特征值分布高度不平衡的情况下,绝大多数类都是负类,绝大多数特征都不出现。此时的函数值由不出现的特征决定,因此,信息增益的效果就会大大降低。信息增益表现出的分类性能偏低。因为信息增益考虑了文本特征未发生的情况,虽然特征不出现的情况肿可能对文本类别具有贡献,但这种贡献往往小于考虑这种情况时对特征分值带来的干扰。
x2统计量用于度量特征w和主题类C之间的独立性。而表示除w以外的其他特征,C表示除C以外的其他主题类,那么特征w和主题类C的关系有以下四种情况:,用A,B,C,D表示这四种情况的文档频次,总的文档数N=A+B+C+D,扩统计量的计算公式如下:当特征w和主题类C之间完全独立的时候,x2统计量为0。x2统计量和互信息的差别在于它是归一化的统计量,但是它对低频特征的区分效果也不好。X2统计得分的计算有二次复杂度,相似于互信息和信息增益。在X2统计和互信息之间主要的不同在于X2是规格化评价,因而X2评估分值对在同类中的词是可比的,但是X2统计对于低频词来说是不可靠的。
利用x2统计方法来进行特征抽取是基于如下假设:在指定类别文本中出现频率高的词条与在其他类别文本中出现频率比较高的词条,对判定文档是否属于该类别都是很有帮助的.采用x2估计特征选择算法的准确率在实验中最高,其分类效果受训练集影响较小,比较稳定。而且在对文教类和政治类存在类别交叉现象的文本进行分类时,采用x2估计的分类系统表现出了优于其它方法的分类性能。X2估计的可靠性较好,便于对程序的控制,无需因训练集的改变而人为的调节特征阀值的大小。
文本证据权衡量类的概率和给定特征时类的条件概率之间的差别。
优势率只适用于二元分类的情况,其特点是只关心文本特征对于目标类的分值。Pos表示目标类,neg表示非目标类。
遗传算法(GeneticAlgorithm,GA)是一种通用型的优化搜索方法,它利用结构化的随机信息交换技术组合群体中各个结构中最好的生存因素,复制出最佳代码串,并使之一代一代地进化,最终获得满意的优化结果。
文本实际上可以看作是由众多的特征词条构成的多维空间,而特征向量的选择就是多维空间中的寻优过程,因此在文本特征提取研究中可以使用高效寻优算法。在将文本特征提取问题转化为文本空间的寻优过程中,首先对Web文本空间进行遗传编码,以文本向量构成染色体,通过选择、交叉、变异等遗传操作,不断搜索问题域空间,使其不断得到进化,逐步得到Web文本的最优特征向量。基于协同演化的遗传算法不是使用固定的环境来评价个体,而是使用其他的个体来评价特定个体。基于协同演化的遗传算法不仅能反映其母体的特征,还能反映其他同类文本的共性,这样可以有效地解决同一主题众多文本的集体特征向量的提取问题,获得反映整个文本集合某些特征的最佳个体。
PCA是非常常用的一种通用特征降维方法,也同样大规模用于文本特征抽取中,基于其处理方式的不同又分为数据方法和矩阵方法。
矩阵方法中,所有的数据通过计算方差一协方差结构在矩阵中表示出来,矩阵的实现目标是确定协方差矩阵的特征向量,它们和原始数据的主要成分相对应。在主成分方法中,由于矩阵方法的复杂度在n很大的情况以二次方增长,因此人们又开发使用了主要使用Hebbian学习规则的PCA神经网络方法。主成分分析法是特征选取常用的方法之一,它能够揭示更多有关变量_丰要方向的信息。但它的问题在于矩阵方法中要使用奇异值分解对角化矩阵求解方差一协方差。
特征选取可以看成是一个组合优化问题,因而可以使用解决优化问题的方法来解决特征选取的问题。模拟退火算法(SimulatingAnneal,SA)就是其中一种方法。模拟退火算法是一个很好的解决优化问题的方法,将这个方法运用到特征选取中,理论上能够找到全局最优解,但在初始温度的选取和邻域的选取t要恰当,必须要找到一个比较折中的办法,综合考虑解的性能和算法的速度。
它的基本思想是将文本内容按字节流进行大小为N的滑动窗口操作,形成长度为N的字节片段序列。每个字节片段称为gram,对全部gram的出现频度进行统计,并按照事先设定的阈值进行过滤,形成关键gram列表,即为该文本的特征向量空间,每一种gram则为特征向量维度。
由于N—Gram算法可以避免中文分词的障碍,所以对中文分类有较高的实用性。中文文本处理大多采用双字节进行分解,称之为bi-gram。但是bigram切分方法在处理20%左右的中文多字词时,往往产生语义和语序方面的偏差。而对于专业研究领域,多字词常常是文本的核心特征,处理错误会导致较大的负面影响。基于N—Gram改进的文本特征提取算法,在进行bigram切分时,不仅统计gram的出现频度,而且还统计某个gram与其前邻gram的情况,并将其记录在gram关联矩阵中。对于那些连续出现频率大于事先设定阈值的,就将其合并成为多字特征词。这样通过统计与合并双字特征词,自动产生多字特征词,可以较好地弥补N—Gram算法在处理多字词方面的缺陷。
上述罗列的几种文档特征评估函数的特点如何呢?信息增益的定义过于复杂,因此应用较多的是交叉嫡和互信息。其中互信息的效果要好于交叉嫡,这是因为互信息是对不同的主题类分别抽取特征词,而交叉嫡跟特征在全部主题类内的分布有关,是对全部主题类来抽取特征词。这些方法,在英文特征提取方面都有各自的优势,但用于中文文本,并没有很高的效率。主要有2个方面的原因:
1)特征提取的计算量太大,特征提取效率太低,而特征提取的效率直接影响到整个文本分类系统的效率;
2)经过特征提取后生成的特征向量维数太高,而且不能直接计算出特征向量中各个特征词的权重。
特征选择也可以通过用映射或变换的方法把原始特征变换为较少的新特征。上面提到的特征选择模块,在实际情况会碰到这样的问题:无论是采用文档频率、信息增益法、互信息法等得降维方法,都会损失了部分的文档信息。以文档频率为例,在特征选择过程中由于某些关键的词语低于了人为设定的阈值,所以会被直接忽视掉,而很多情况这部分词汇能包含较多的信息,对于分类的重要性比较大。怎么能够进一步理解这部分的信息,是急需要解决的问题。一个想法是找到这些使用频率比较低的词语相似的高频词,譬如在讨论“月亮”的古诗词中,包含了很多低频的同义词,如“玉兔”,“婵娟”等,如果我们能把这些低频的词语合并到一个维度,无疑是能够增强分类系统对文档的理解深度的。词向量这一概念能够有效地表示词语之间的相似性,适用于这种方法。
先介绍一下词向量的定义。一种最简单的词向量是one-hotrepresentation,就是用一个很长的向量来表示一个词,向量的长度是词典D的大小N,向量的分量只有一个为1,其他全为0,1的位置对应该词在词典中的索引。这种词向量表示有一些缺点:容易受维数灾难的困扰。另一种词向量是DistributedRepresentation,它最早是Hinton于1986年提出来的,可以克服one-hotrepresentation的上述缺点。其基本想法是:通过训练将某种语言中的每个词映射成一个固定长度的短向量。所有这些向量构成一个词向量空间,每个向量是该空间中的一个点,在这个空间上引入距离,就可以根据词之间的距离来判断它们之间的(词法、语义上的)相似性了。如何获取DistributedRepresentation的词向量呢?有很多不同的模型可以用来估计词向量,包括有名的LSA、LDA和神经网络算法。Word2Vec就是使用度比较广的一个神经网络算法实现的词向量计算工具。
现介绍词向量在分类系统上的具体实践。Word2Vec能够将词映射成一个固定长度的短向量,所以生成了文档集合词语的向量表示。由于向量的距离代表了词语之间的相似性,我们可以通过聚类的方法(譬如K-Means)把相似的词语合并到一个维度,重新计算该维度的特征向量权值。相比于原来的方法,使用词向量能在一定程度保留了文档的信息。此外,Word2Vec作为无监督学习方法的一个实现,能够允许它从无标注的文本进行训练,能进一步提升系统的性能。(达观数据张健)
另外,基于向量空间模型的文本分类方法是没有考虑到词的顺序的。基于卷积神经网络(CNN)来做文本分类,可以利用到词的顺序包含的信息。CNN模型把原始文本作为输入,不需要太多的人工特征。下图是CNN模型的一个实现,共分四层,第一层是词向量层,doc中的每个词,都将其映射到词向量空间,假设词向量为k维,则n个词映射后,相当于生成一张n*k维的图像;第二层是卷积层,多个滤波器作用于词向量层,不同滤波器生成不同的featuremap;第三层是pooling层,取每个featuremap的最大值,这样操作可以处理变长文档,因为第三层输出只依赖于滤波器的个数;第四层是一个全连接的softmax层,输出是每个类目的概率。除此之外,输入层可以有两个channel,其中一个channel采用预先利用word2vec训练好的词向量,另一个channel的词向量可以通过backpropagation在训练过程中调整。
图3基于卷积神经网络的文本分类算法
特征权重用于衡量某个特征项在文档表示中的重要程度或区分能力的强弱。选择合适的权重计算方法,对文本分类系统的分类效果能有较大的提升作用。影响特征词权值的因素包括以下几点:
词频和文档频度,是特征项最重要的影响因素。文本内中的中频词往往具有代表性,高频词区分能力较小,而低频词或者示出现词也常常可以做为关键特征词。而对于文档频度这一角度,出现文档多的特征词,分类区分能力较差,出现文档少的特征词更能代表文本的不同主题。结合词频和文档频度来评估特征的重要性有较强的区分能力,它们在不同方法中有不同的应用公式,这些方法包括:绝对词频(TF)、倒排文档频度(IDF)、TF-IDF、TFC、ITC、TF-IWF,如下:
汉语言中,能标识文本特性的往往是文本中的实词,如名词、动词、形容词等。而文本中的一些虚词,如感叹词、介词、连词等,对于标识文本的类别特性并没有贡献,也就是对确定文本类别没有意义的词。如果把这些对文本分类没有意思的虚词作为文本特征词,将会带来很大噪音,从而直接降低文本分类的效率和准确率。因此,在提取文本特征时,应首先考虑剔除这些对文本分类没有用处的虚词,而在实词中,又以名词和动词对于文本的类别特性的表现力最强,所以可以只提取文本中的名词和动词作为文本的一级特征词。
句式与句子的重要性之间存在着某种联系,比如摘要中的句子大多是陈述句,而疑问句、感叹句等则不具内容代表性。而通常“总之”、“综上所述”等一些概括性语义后的句子,包含了文本的中心内容。
通用词库包含了大量不会成为特征项的常用词汇,为了提高系统运行效率,系统根据挖掘目标建立专业的分词表,这样可以在保证特征提取准确性的前提下,显著提高系统的运行效率。用户并不在乎具体的哪一个词出现得多,而在乎泛化的哪一类词出现得多。真正起决定作用的是某一类词出现的总频率。基于这一原理,我们可以先将词通过一些方法依主题领域划分为多个类,然后为文本提取各个词类的词频特征,以完成对文本的分类。可以通过人工确定领域内的关键词集。
熵(Entropy)在信息论中是一个非常重要的概念,它是不确定性的一种度量。信息熵方法的基本目的是找出某种符号系统的信息量和多余度之间的关系,以便能用最小的成本和消耗来实现最高效率的数据储存、管理和传递。我们将可以将信息论中的熵原理引入到特征词权重的计算中。
词语直径是指词语在文本中首次出现的位置和末次出现的位置之间的距离。词语直径是根据实践提出的一种统计特征。根据经验,如果某个词汇在文本开头处提到,结尾又提到,那么它对该文本来说,是个很重要的词汇。不过统计结果显示,关键词的直径分布出现了两极分化的趋势,在文本中仅仅出现了1次的关键词占全部关键词的14.184%。所以词语直径是比较粗糙的度量特征。
特征权重计算方法没有最好的选择,往往要依据现实的具体场景来选取适合的方法。在进行特征权重的计算之后,已经可以把测试集数据采用机器学习方法进行分类训练。但是实际操作会遇到一些问题。单词并不都包含相同的信息。如果在一部分文件中有些单词频繁地出现,那将扰乱分类系统的分析。我们想要对每一个词频向量进行比例缩放,使其变得更具有代表性。换句话说,我们需要进行向量标准化,譬如标准化向量使其L2范数为1。某种程度上,我们得到了一个在该词的信息价值上衰减的结果。所以我们需要按比例缩小那些在一篇文档中频繁出现的单词的值。
由于文本分类本身是一个分类问题,所以一般的模式分类方法都可以用于文本分类应用中。常用的分类算法包括:
Rocchio分类器的基本思想是,首先为每一个训练文本C建立一个特征向量,然后使用训练文本的特征向量为每个类建立一个原型向量(类向量)。当给定一个待分类文本时,计算待分类文本与各个类别的原型向量之间的距离,然后根据计算出来的距离值决定待分类文本属于哪一类别。一个基本的实现方法就是把一个类别里的样本文档各项取个平均值,作为原型变量。
利用特征项和类别的列和概率来估计给定文档的类别概率。假设文本是基于词的一元模型,即文本中当前词的出现依赖于文本类别,但不依赖于其他词及文本的长度,也就是说,词与词之间是独立的。根据贝叶斯公式,文档Doc属于Ci类别的概率为P(Ci|Doc)=P(Doc|Ci)*P(Ci)/P(Doc)。
基于支持向量机(SVM)的分类方法主要用于解决二元模式分类问题。SVM的基本思想是在向量空间中找到一个决策平面,这个平面能够“最好”地分割两个分类中的数据点。支持向量机分类法就是要在训练集中找到具有最大类间界限的决策平面,如图4。
图4基于支持向量机分类器原理图
k-最近邻方法的基本思想是:给定一个测试文档,系统在训练集中查找离它最近的k个邻近文档,并且根据这些邻近文档的分类来给该文档的候选类别评分。把邻近文档和测试文档的相似度作为邻近文档所在类别的权重,如果这k个邻近文档中的部分文档属于同一个类别,那么将该类别中每个邻近文档的权重求和,并作为该类别和测试文档的相似度。然后,通过对候选分类评分的排序,给出一个阈值。
神经网络是人工智能中比较成熟的技术之一,基于该技术的分类器的基本思想是:给每一类文档简历一个神经网络,输入通常是单词或者更加复杂的特征向量,通过机器学习方法获得从输入到分类的非线性映射。
决策树分类器把文本处理过程看作是一个等级分层分解完成的复杂任务。如图5,决策树是一棵树,树的根节点是整个数据集合空间,每个分结点是对一个单一变量的测试,改测试将数据集合空间分割成两个或更多个类别,及决策树可以是二叉树也可以是多叉树。每个叶结点是属于单一类别的记录。构造决策树分类器时,首先要通过训练生成决策树,然后再通过测试集对决策树进行修剪。一般可通过递归分割的过程构建决策树,其生成过程通常是自上而下的,选择分割的方法有很多种,但是目标都是一致的,就是对目标文档进行最佳分割。
图5决策树实例
我们使用上述的经典分类算法的过程中,很自然的想到一点,我们是否能够整合多个算法优势到解决某一个特定分类问题中去?答案是肯定的。通过聚合多个分类器的预测来提高分类的准确率。这种技术称为Ensemble方法。Ensemble方法是提升机器学习精度的有效手段。它的基本思想,充分利用不同分类器的优势,取长补短,最后综合多个分类器的结果。Ensemble可以设定一个目标函数(组合多个分类器),通过训练得到多个分类器的组合参数(而不是简单的累加或者多数)。在Ensemble框架下将分类器分为两个Level:L1层和L2层。L1层是基础分类器,前面提到的分类器均可以作为L1层分类器来使用;L2层基于L1层,将L1层的分类结果形成特征向量,再组合一些其他的特征后,形成L2层分类器(如SVM,AdaBoost等)的输入。这里需要特别留意的是用于L2层的训练的样本必须没有在训练L1层时使用过。(达观数据张健,陈运文)
图6Ensemble框架
针对不同的目的,多种文本分类器性能评价方法被提出,包括召回率、正确率和F-测度值。设定a表示分类器将输入文本正确分类到某个类别的个数;b表示分类器将输入文本错误分类到某个类别的个数;c表示分类器将输入文本错误地排除在某个类别之外的个数;d表示分类器将输入文本正确地排除在某个类别之外的个数。
该分类器的召回率、正确率和F-测度值分别采用以下公式计算:
由于在分类结果中,对应每个类别都会有一个召回率和正确率,因此,可以根据每个类别的分类结果评价分类器的整体性能,通常方法有两种:微平均和宏平均。微平均是根据正确率和召回率计算公式直接计算出总得正确率和召回率值。宏平均是指首先计算出每个类别的正确率和召回率,然后对正确率和召回率分别取平均得到总的正确率和召回率。不难看出,宏平均平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均平等考虑文档集中的每一个文档,所以它的值受到常见类别的影响比较大。