文本分类,就是在一定的分类体系下,对目标文本按照一定的标准进行分类的过程,是文本挖掘中非常重要的一部分。从20世纪60年代到现在,经过六十多年的发展,文本分类已经从最初的手工分类,发展到了现在由机器代替人工,出现了文本分类系统。文本分类系统是基于机器学习的,基本可以分为两大类:文本训练和文本分类,文本分类的结构图如图5.6所示。
图5.6 文本分类的结构图
文本训练就是对训练文本进行分词、预处理、词频统计和权重计算等,以便初步提取每一类别的特征值,文本分类就是在文本训练的基础上,根据每一类的特征值对测试文本采用一定的分类算法进行文本分类。文本分类算法大致可以分为两种:一种是基于训练文本的分类算法;另一种是基于分类词表的文本分类算法。基本的基于训练文本的分类算法主要有朴素贝叶斯算法、向量空间距离测度分类算法、K最邻近分类算法、支持向量机、神经网络算法等,很多学者在这些基本算法的基础上做了更深入的研究,对基本算法进行了改进。
邸鹏等在《一种新型朴素贝叶斯文本分类算法》中对经典朴素贝叶斯分类算法进行了改进,提出了一种“先抑后扬”(抑制先验概率的作用,扩大后验概率的影响)的文本分类算法,去掉了对先验概率的计算,并在后验概率的计算中引入了一个放大系数,加快分类的速度,提高了分类精度;罗新等在《基于蚁群智能算法的文本分类研究》中将蚁群算法的常识性引入文本分类领域,构建基于蚁群智能的文本分类模型,并在文本数据集上进行测试和比较,结果表明该模型可以较好地应用于文本分类;李建林在《一种基于PCA的组合特征提取文本分类方法》中通过对互信息(MI)、文档频率(DF)、信息增益(IG)和χ2统计(CHI)算法的研究,利用其各自的优势互补,提出一种基于主成分分析(PCA)的多重组合特征提取算法(PCA-CFEA),有效地提高了文本分类的正确率和执行效率;崔建明等在《基于SVM算法的文本分类技术研究》中采用支持向量机(SVM)的理论在使用文本分类技术的同时,将优化的粒子群算法(PSO)引入SVM分类算法中,优化了文本分类器的参数,将分类器的准确率作为PSO算法适应度函数,通过粒子移动操作找出最佳参数并用SVM算法进行分类,提高了分类的准确性。此外,田丰等在《采用类别相似度聚合的关联文本分类方法》中提出了一种基于类别相似度聚合的关联文本分类方法,刘赫等在《一种基于特征重要度的文本分类特征加权方法》中提出了一种基于特征重要度的特征加权方法,姚全珠等在《基于LDA模型的文本分类研究》中,提出了一种基于LDA模型的文本分类算法,在判别模型SVM框架中,应用LDA概率增长模型,对文档集进行主题建模,在文档集的隐含主题-文本矩阵上训练SVM,构造文本分类器,刘露等在《一种基于聚类的PU主动文本分类方法》中利用聚类技术和正例文档应与反例文档共享尽可能少的特征项这一特点结合SVM主动学习和改进的Rocchio构建分类器,并采用改进的TFIDF进行特征提取,这些探索都在一定意义上提高了文本分类的效率和精度。本书采用的分类算法是基于词频和权重的,下面对文本分类的各个环节进行详细的说明。
1.分词技术
中文文本的分词不同于英文分词,词与词之间并没有像英文中空格一样的明显分隔,中文具有大字符集连续书写的特点,如果不进行分析,计算机则无法得知中文词的确切边界,从而很难理解文本中所包含的语义信息。因此,中文分词是自然语言处理中的一个关键的基础技术,是其他中文应用,例如,命名实体识别、句法分析、语义分析等的前期文本处理关键环节,其性能的优劣对于中文信息处理尤为重要。
通常来说,分词算法可被分为基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法三大类。
1)基于字符串匹配的分词方法
该方法又叫机械分词方法,这种方法需要一个类似“词典”的东西,将需要分析的字或者词与这个“词典”进行一定规则的比对,若在词典中找到了该词或字,则认为此次匹配成功。这种匹配可以按照扫描方式的不同分为正向匹配和逆向匹配,也可按照不同长度优先匹配原则分为最大匹配和最小匹配,还可按照是否与词性标注过程相结合分为单纯分词方法和分词与标注相结合的一体化方法。
2)基于理解的分词方法
人具有分词的能力,当看到一个汉字串的时候,可以迅速利用自己的理解力对其进行正确的划分,而基于理解的分词方法就是使计算机通过相应的计算机技术像人一样实现对汉字串的理解,从而实现分词。要使计算机可以理解人类的语言,就要让它可以像人一样进行语义分析,了解句子的语法结构并且还要具有处理歧义的能力,目前的分词技术可以分为三个主要的部分:分词子系统、句法语义子系统、总控部分。其中,总控部分用来实现对系统的总体调节,分词子系统获取相关语法和语义信息来模拟人对句子的理解,和人一样,没有一定的积累是无法准确地对语义进行判断的,因此,这种分词方法也需要大量的语言知识的积累。
3)基于统计的分词方法
这种方法主要根据语句中相邻汉字共同出现的频率或者概率的统计结果来计算互信息,互信息可以有效地体现汉字之间的紧密度,我们可以规定一个阈值与计算得到的互信息进行比对,若高于该阈值,则可认为该共现的词组构成了词,否则,不进行分词。这种方法相较字符串匹配的分词方法需要基数较大的“词典”更为简便。
在对新闻资讯分类的过程中,采用了IK Analyzer分词法,它是一个开源的、基于Java语言开发的轻量级的中文分词工具包,详细的介绍见前文所述的交通运输物流热点词词频统计部分。根据实际情况以及需求,我们只选取了文章的标题在MapReduce机制下进行分词。
2.文本表示
在进行文本分类之前,需要先将待分类的文本进行文本表示,即采用一定的模型或算法将文本表示为某种特定的计算机能够处理的格式,以便于后续的算法进行操作。文本表示是很多文本处理操作的基础,现今已经有很多学者对文本表示的模型进行了深入的研究,除了空间向量、语言模型等传统的文本表示模型,还有基于本体和语义的文本表示模型等。
向量空间模型(Vector Space Model,VSM)是当前自然语言处理中常用的主流模型,其基本思想是把文档简化为以其特征项的权重为分量的向量表示:(t1,w1;t1,w1;…;t1,w1),其中ti为文档中第i个特征项,wi为第i个特征项的权重。
单词权重最为有效的实现方法就是TF-IDF,TF(Term Frequency)即词频,表示该词在文档中出现的频率;IDF(Inverse Document Frequency)即反文档频率,可以指示该词是否具有代表性。假设某一个单词在一篇文档中出现的频率很高,那么同时认为这个单词在其他同类文档中出现的频率也很高。当一个单词在一篇文章中出现的频率很高,而在其他的文档中出现的频率却很低时,这个词就可以认为是足以代表这篇文档的,也就是说该词语具有很大的区别不同类文档的能力。
假设特征词在某文档中出现的次数为a,包含这个特征词的文档的数量为n,则TF-IDF可以表示为a/n,在众多的TF-IDF公式中,最常用的为:
其中:wik表示特征项tk在文档Di中的权重;tfik表示特征项tk在文档Di中出现的频率,tfik越高意味着特征项对文档越重要;dfk表示出现特征项的文档频率,dfk越高意味着特征项tk在衡量文档之间相似性方面的作用越低;N为全部文档的数量。
从本质上来看,IDF模型试图减少噪音影响,同时,很简单直接地视词频小的词语为重要,视词频大的词语为无用,这种说法显然存在一定的可信度问题,由于一些词是地名或者时间年份等,对实际分类的帮助不大,还很有可能对实验结果造成不好的影响,在实验中我们选择了900多篇文章,在这900多篇文章中只出现过4次及以下的词语我们认为它不能够作为区分文本的依据,将其特征值设为无限小。
3.特征值提取
文本数据并不是结构化的,而是半结构化甚至非结构化的,在上述文本表示部分,我们已经清楚最常用的文本表示模型就是向量控件模型,将文本采用一定维度的向量表示出来,但是最初通过该模型得到的向量维数一般都比较大,有时维度甚至会达到几十万。在这些维度中,并不是所有的属性都有能力用来表示这篇文档,还包含了很多不具有明显特征的属性,因此,我们需要从这些维度当中进行特征选择,从中挑选出能够表示该文档的维度,从而得到一个新的向量,这就是特征向量,这一过程就是特征提取的过程。
在文本分类过程中,文本向量的维数往往是惊人的,这使得特征提取非常有必要,而进行特征提取有一个很重要的依据就是特征词的权重。在TF-IDF算法中,如果一个词在某一篇文档中出现的频率很高,而在其他文档中出现的频率很低,则这个词具有足够表示该篇文档的能力,也就是说这个词的特征权重很大。当得到所有词的特征权重之后,将这些词进行排序,以便进行特征值的选择。我们可以规定一个阈值,选择特征值在这一阈值以上的所有词作为特征向量,也可以选择特征值最大的N个数,作为特征向量。
4.分类算法(www.daowen.com)
研究文本自动分类的核心问题是如何构造分类函数(分类器),分类函数需要通过某种算法进行学习获得。分类是重要的数据挖掘方法,在文本分类中,几乎存在着和一般分类同样多的方法。文本分类的方法一般可以分为基于训练集和基于分类词两种。基于训练集的分类方法一般用在计算机或者人工智能领域,本文也主要讲解这一方法。
基于训练集的文本分类方法一般有基于文本特征向量相关性的方法、基于神经网络技术的方法、基于遗传算法的方法、基于关联的方法、基于EM算法的方法等。
1)朴素贝叶斯算法
朴素贝叶斯(Naive Bayes)算法是以贝叶斯定理为基础的,对于待分类的文本,我们分别计算当这一文本出现的时候,各个类别出现的概率,并将概率最大的那一类认为是该文本所属的类别。
2)向量空间距离测度分类算法
这一算法主要是将每个文本的特征向量用其中心向量代替,然后对待分类的文本的特征向量与待比对的文章的中心向量进行距离计算,最后将待分类文章归于与之距离最近的那一类,下面是操作步骤:①确定此次分类的类别都有哪些;②提供训练的文本集合,这些训练文本是包含其所属类别的;③提取训练文本中的文本特征向量,并计算同类文本特征向量的平均值,得到代表这一类别的中心向量;④将待分类文本用空间向量模型表示,并提取特征向量;⑤计算待分类文本的特征向量与每个类别中心向量之间的距离,确定待分类文本的最终所属类。
3)K最邻近分类算法
该算法与向量空间距离测度分类算法不同的是,向量空间距离测度分类算法直接将待分类的文章归于与之距离最近的那一类,而K最邻近分类算法没有对同一类的文档进行归一化,而是将待分类的文档与所有训练文本进行距离计算,然后找到与之距离最近的K篇文档,再根据一定的规则和这K篇文档的类别确定待分类文本的类别。具体操作为:首先,训练文本的向量需要根据特征向量集进行重新表示;其次,将待分类的文本表示为特征向量的形式;再次,采用余弦计算方法计算待分类文本与训练文本之间的距离,并找到与待分类文本距离最近的K个文本;最后,找到的K个文本分别计算其类别权重,并将待分类文本归于类别权重最大的那一类。
4)支持向量机
支持向量机(Support Vector Machine,SVM)被提出后在许多问题中展现出了其优势,并被推广到了诸多机器学习的问题中。
支持向量机的基本实现思想是:通过某种事先选择的非线性映射把输入向量x映射到一个高维特征空间Z,在这个空间中构造最优分类超平面。也就是SVM采用输入向量的非线性变换,在特征空间中,在现行决策规则集合上按照正规超平面权值的模构造一个结构,然后选择结构中最好的元素和这个元素中最好的函数,以达到最小化错误率的目标,实现了结构风险最小化原则。
5)神经网络算法
智能优化算法也可以应用于文本分类中,神经网络算法是采用感知算法进行文本分类的,在此种模型中,分类知识被隐式地存储在连接的权值上,使用迭代算法来确定权值向量,当网络输出判别正确时,权值向量保持不变,否则进行增加或降低的调整,因此也称其为奖惩法。一般在神经网络算法中包括两个部分:训练部分和测试部分,以样本的特征项构造输入神经元,特征的数量即为输入神经元的数量,至于隐含层数量和该层神经元的数目要视实际而定。在训练部分通过对相当数量的训练样本的训练得到训练样本输入与输出之间的关系,即在不断的迭代调整过程中得到连接权值矩阵。测试部分则是针对用户输入的待测样本的特征得到输出值,即该样本所属的类。
本书采用自定义的文本分类算法,将待分类的文章与自定义词库文件进行比对,从而确定其所属类别,算法模型如下:
假设自定义词库文件为L,表示成矩阵形式为
其中,n表示类别数;lij={word,weight},word表示第i类中包含的第j个词,weight表示该词所对应的权重;mi表示第i类所包含的词语的个数。
待分类的文章在进行相关处理后,也可表示为矩阵形式:
其中,n表示待分类文章的个数;fij与L矩阵中lij的意义相同;mi表示第i篇文章所包含的词语的个数。
将待分类文章矩阵F中的每一行与自定义词库矩阵L进行比对,可以得到一个与L矩阵同行数同列数的结果矩阵R0,在初始情况下,R0矩阵是一个零矩阵。假设,将F中的第p行与L进行比较,如果fpq[word]=lij[word],则表示第p篇文章的第q个词在词库文件中的第i类中出现了,此时可将原始rij替换为lij,依次类推,直到F矩阵中第p行的所有词均与L比对完毕,此时可以得到稀疏矩阵R0,可表示为:
将R0矩阵的每一行对weight进行求和计算,即可得到与R同行数的汇总矩阵R,表示为:
由于F矩阵中第p行的所有词可能在L中的某一行中从来没有出现过,因此,矩阵R中的某一行在对weight求和之后可能为0。接下来,对R中的每行数字进行对比,假设其中最大的数为Ri,则F矩阵中第p行所代表的文章属于第i类。
按照上述的方法,对矩阵F中的每一行进行对比和计算,即可得到所有待分类文章的所属类。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。