贝叶斯文本分类器

来源:互联网 发布:java培训能找到工作吗 编辑:程序博客网 时间:2024/04/28 21:37
摘 要
    本文完成了基于朴素贝叶斯文本自动分类的软件设计,运用贝叶斯理论阐述了朴素贝叶斯文本分类器的基本原理。在特征独立性假设的基础上,构造了一个朴素贝叶斯文本分类器,通过样本训练该分类器,进而对测试样本分类判断。实验表明,朴素贝叶斯理论在文本分类中有很好的效果。

朴素贝叶斯分类算法的原理是贝叶斯公式(见下面的公式)。原理是由果溯因方法。试验表明该算法的性能能和神经网络等数据挖掘算法相媲美。

   文本分类一般分为三个阶段:文本预处理阶段、分类器设计阶段、试验和测试阶段。包含了去停用词、英文分词、算法设计、系统实现等多个模块。

最后本论文实现了文本分类软件,试验效果优良。完成了课题要求。但是本系统在时间复杂度上面还有进步的空间。

关键词:朴素贝叶斯;英文分词;文本自动分类;Java;

   资源地址:http://download.csdn.net/detail/b11040805/7871001


第一章 绪论

1.1、选题背景及意义
在个性化推荐无处不在的今天,文本的精确分类成为互联网发展的必然趋势。在新闻系统中,如果精确的给用户推送他感兴趣的新闻,俨然成为了现阶段需要解决的重要课题。与此同时,海量数据成倍增长,更是增加了文本分类的难度。因此,开发准确性和速度高效地本文分类系统很有必要。
文本分类是指在给定分类体系下,根据文本内容确定文本类别的过程。该技术可以追溯到上世纪60年代。不过,在最近的10年里,由于文本信息数字化而带来的海量数据,,文本信息的自动分类得到了广泛的关注和快速的发展。
一些研究表明,机器学习技术解决这个问题是较为有效的方法:通过一种广义的诱导学习建立相应的自动分类器,形成预先文档信息的一个或多个特征的分类集合。基于机器学习的分类方式在分类效果和灵活性上都比之前基于知识工程和专家系统(通过某个领域里的专家人为地定义分类器)的文本分类模式有所突破,大量节省了专家人力的投入,可以很方便地用于各种不同的领域。文本分类是一个有指导的学习过程,它根据一个已经被标注的训练文本集合,找到文本属性(特征)和文本类别之间的关系模型(分类器),然后利用这种学习得到的关系模型对新的文本进行类别判定。文本分类一般包括两个步骤:第一步,通过样本训练,利用样本和类别之间的联系,建立一个样本分类函数;第二步,通过样本分类函数,对新文本进行分类。
目前,文本自动分类算法基本都是基于概率统计模型的,例如贝叶斯分类算法(Naive Bayes,Bayes Network),支持向量机(SVM),最大熵模型(Maximum Entropy Model),K近邻算法(KMM)等等。由于朴素贝叶斯方法的简单高效,其运用很广泛。本文就基于概率模型的朴素贝叶斯分类算法作了一些讨论,并根据理论描述使用Java语言构建了一个朴素朴贝叶斯文本分类器。实验表明,朴素贝叶斯分类器可以取得了优良的分类效果。

1.2、国内外研究现状
国外,对本文分类的研究比较早,而且很做出了巨大的贡献。一般情况下,业界将国外的文本分类分成四个阶段。
第一个阶段:文本自动分类的可行性研究。也就是说,研究人员的主要任务是研究文本分类的可行性,是文本分类的初始阶段。
第二个阶段:文本自动分类的实验阶段。是初级阶段。
第三个阶段:文本自动分类的实用化阶段,是发展最迅速的阶段。
第四个阶段:面向互联网的自动文本分类,成熟阶段。
在国外,Marone在1961年发表了第一篇关于自动分类的论文,开启了研究文本自动分类的序幕。1975年,Salton提出了向量空间模型,在信息检索、人工人智能和机器学习技术的推动下,文本分类技术在很多的应用领域下取得了不错的成果。如今文本分类在互联网的应用更为广泛,比如邮件自动分类、电子会议等。
相对于国外,国内的文本自动分类研究起步很晚,这和我国的互联网起步较晚有这密切的联系。从20世纪80年代,才初步开始这方便的研究,国内的文本分类大多借鉴了国外的方法。在前人工作的基础上,中文文本自动分类取得了不菲的成绩。
但是由于中文文本和外文文本的差别,比如外文有空格,而中文文本没有,所以需要分词。目前,我们国家的中文分词技术也日渐成熟,最大的代表是中科院研发的中文分词技术ICTCLAS。
根据方法的不同,一般可以将文本自动分类系统可以分成下面两类:第一种,基于知识工程;第二种,基于机器学习。在20实际80年代,文本自动分类系统大都是已经知识工程的,它的思想是根据领域专家对这些给定文档集合的分类习惯和经验,人工提供出逻辑规则,作为计算机自动文本分类的依据。后来90年代,基于机器学习的文本分类方法渐渐受到了重视,尤其是准确度和稳定性方面有了显著的提高。机器学习一般分为两个步骤,学习和训练。
互联网的发展使得传统的文本分类系统很难适应网络文本信息,因而面向互联网的文本自动分类则成了文本分类的又一研究热点。
近些年来,对网络内容管理、监控和有害信息过滤的需求随着互联网技术的迅速发展和普及变得越来越大,与此同时网络信息的主观倾向性分类受到越来越多的关注。因而这个时期运用的文本分类方法已经由知识工程方法被取得丰硕成果的统计方法和机器学习的方法所取代。目前,统计学习法是文本分类的主流方法,虽然它也需要人工进行准确分类的文档作为学习的材料,但很多统计学习法都有着坚实的理论基础作支持,并且有着评价标准明确和实际表现良好的优点。
1.3、论文的主要内容
本论文的主要内容是基于贝叶斯算法的文本分类器的设计与开发。本文详细的介绍了贝叶斯分类算法的原理和步骤,已经朴素贝叶斯的改进算法。除此之外,本文还对英文文本分类的一般流程做了详细的介绍。最后,使用Java语言实现了文本自动分类系统。
1.4、全文纵览
本文第一章介绍了选题的背景和意义以及本课题在国内外的研究现状。第二章详细的介绍了贝叶斯基本原理和公式推导,于此同时还介绍了几种朴素贝叶斯改进的算法。第三章对本文分类的原理步骤和算法做了介绍。第四章完成了软件的设计,用java代码实现了文本自动分类系统。
1.5、本章小结
本章介绍了本论文的选题背景和意义,简单的介绍了国内外关于文本自动分类的研究现状。还概括的介绍了本论文的主要内容。
第二章 贝叶斯分类算法
2.1、贝叶斯的原理
2.1.1、条件概率、全概率和贝叶斯公式
在概率论中,我们将事件A发生的概率记做P(A)。但是有的情况下,我们需要考虑在事件B发生的概率下,事件A发生的概率,这种情况下记做P(A|B)。
 条件概率公式
设A,B事件是两个事件,且P(B)> 0,那么

为在事件B发生的情况下,A发生的条件概率。
在现实生活中,遇到的问题往往不是这么简单的。但是我们可以将复杂的问题划分成若干个简单的问题。
 定义划分
设随机试验E的样本空间为 是样本空间S的一组事件,如果满足下面两个条件,就称 为样本空间S的一个划分。
1) 两两互不相容。
2) 。
 全概率公式
设随机试验E的样本空间S, 是样本空间S的一个划分,则对于任意事件A,有


该公式称为全概率公式。该公式的证明非常简单,请自行证明。
根据条件概率和全概率公式很容易就能推到出贝叶斯公式。
 贝叶斯公式
设随机试验E的样本空间为S, 是样本S的 一个划分,A是一事件,且 ,则有

证明:由条件概率和全概率公式推导而来,


2.1.2、贝叶斯原理
贝叶斯公式有着很重要的现实意义。比如,现在要判断一个学生是南京仙林大学城那个学校的,设候选的学校为 ,即 是不相容的。我们凭借以往的经验估计出他是各个学校的概率 ,这通常称为先验概率。进一步考虑这个人的专业,比如师范类的专业还是理工类的专业,在专业确定下,他是各个学校的概率 ,这个概率是由贝叶斯公式计算得到的,通常称为是后验概率。根据后验概率,我们就能更准确地判断这个学生的所在学校了。
上面的例子可以看出一个分类的小问题,从上面的示例中可以看出,贝叶斯分类器的算法的关键是求出先验概率和后验概率。理解贝叶斯其实不难,举个例子来说。在仙林大学城,南邮的男生比例很大,同时南财的女生比例很大。这时,你看见一群女生走在街上,你的判断肯定是她们是南财的概率大。于是你将她们分到了南财那一类。贝叶斯就是根据结果来判断概率的方法。
2.2、几种贝叶斯算法
2.2.1、朴素贝叶斯
朴素贝叶斯(Naive Bayesian Classifier,NBC)是贝叶斯算法中最简单的算法,朴素贝叶斯之所以叫做“朴素”贝叶斯是因为它完全按照贝叶斯计算公式来分类,假设各个属性是条件独立的,互不影响、互不依赖。朴素贝叶斯虽然简单,但是其性能可以达到神经网络,决策树的水平。是文本分类中最常用的算法之一。
在使用朴素贝叶斯进行分类的时候,需要特别注意,它所选取的特征向量是相互独立的。因为,这里要满足划分定义的第一个条件。在实际应用中,往往达不到这个要求,这些变量之间往往有着连续,因此在进行数据挖掘之前可以进行特征向量的选取。这个条件好像是限制了朴素贝叶斯的使用范围,但是由于特性向量的压缩,减少了计算量,降低了构建贝叶斯网络的复杂性。使得贝叶斯分类器应用到更广的领域中。
在贝叶斯原理的介绍中,我们已经知道求解贝叶斯分类问题必不可少的步骤是先验概率和后验概率的计算。
朴素贝叶斯分类模型原理:
1)每个数据样本用一个n维特征向量 表示,分别描述对n个属性 样本的n个度量。
2)假定有m个类 ,给定一个未知的数据样本X(即没有类标号),分类法将预测X,属于具有最高后验概率(条件X下)的类。也就是说,朴素贝叶斯分类将未知的样本分类给类 ,当且仅当

就是求最大的后验概率。根据贝叶斯定量得到:

3)根据P(X)对于所有类为常数,只需要 最大即可。如果类的先验概率未知,假设这些类是等概率的。先验概率可以用 得到。其中 是类 中的训练样本数,而 是训练样本总数。
4)计算 ,在计算这个值的时,如果给定具有许多属性的数据集,计算的开销会很大。为了节省开销,可以坐类条件独立的朴素假设。给定样本的类标号,假设该属性值相互独立,即在属性间,不存在依赖关系。这样的话,

概率 可以由训练样本估值。
(a)如果 是分类属性,则 ,其中 是在属性 上具有值 的类 的训练样本数,而 是 中的训练样本数。
(b)如果 是连续属性值,则通过假设该属性服从高斯分布。
从上面我们可以总结朴素贝叶斯分类的步骤
1)求每个属性值的先验概率。
2)求最大后验概率。
朴素贝叶斯分类模型的特点:
1)算法逻辑简单,易于理解和实现。
2)分类过程中时间负责度和空间复杂度在可控范围内。
3)算法性能好。
尽管朴素贝叶斯模型有如此优点,但是它的局限性也是有的。注意我们假设各个属性之间是条件独立分布的,在实际应用中,这个往往是不能实现的。改进的贝叶斯也是解决这个问题的。
2.2.2、改进的贝叶斯算法
改进的贝叶斯分类算法是为了解决贝叶斯分类的独立假设条件。目前比较有名的算法有半朴素贝叶斯、选择贝叶斯、树增广朴素贝叶斯、贝叶斯网络等。
半朴素贝叶斯的思想是将相互依赖的属性放在一个属性集合中,形成一个新的属性,其他的运算跟朴素贝叶斯相同。
下面的图可以作为对比。

图一、朴素贝叶斯分类器

图二、半朴素贝叶斯
选择贝叶斯的思想是选择属性集的子集作为属性集,其他的和朴素贝叶斯一样。由此可见选择贝叶斯和半朴素贝叶斯有异曲同工之妙。都是使得每个属性是条件独立的。不过半朴素贝叶斯是全体属性,选择贝叶斯是局部代替整体。

图三、选择贝叶斯
上面两种方式都解决了独立性假设问题,但是并不是说,它们的分类准确性一定比朴素贝叶斯要好。对于半朴素贝叶斯来说,它构造了一个更复杂的训练数据集。表面上来看,系统越复杂,准确度越高,但是实际中复杂的系统会产生一个过分拟合的问题,即适用性不高,在分类器学习训练时性能很好,但是用到一个实例时,结果却不理想。另一个,算法的时间复杂度和空间复杂度也会相应的增加。对于选择贝叶斯来说,同样也存在相应的问题。子集的选择就是一个问题,如何保证子集选择的正确性是关键。
除了选择贝叶斯和半朴素贝叶斯,还有树增广朴素贝叶斯。树增广朴素贝叶斯的基本思想是:在朴素贝叶斯分类器的基础上,在属性之间增加连接弧线,以消除朴素贝叶斯分类器的条件独立假设。我们将这个弧线叫做扩展弧。如下图。

图四 树增广朴素贝叶斯
2.2.3、并行化的贝叶斯
随着海量数据的发展,大数据的处理也已经成为迫在眉睫的事情。大数据在单机内存处理已经远远不能满足现在的计算和时间需求了。
从朴素贝叶斯的算法来看,朴素贝叶斯的时间大多消耗在各个属性值的先验概率的计算上,而这些计算是可以分来的,因此我们可以将这一阶段进行并行化处理。
目前,Hadoop云计算的发展,为并行化计算带来了巨大的方便,已有人实现了基于Hadoop Mapreduce的朴素贝叶斯文本分类器。
2.3本章小结
本章介绍了概率论中,贝叶斯的推导过程。朴素贝叶斯算法的原理和步骤,已经朴素贝叶斯算法的几种改进方案,它们分别是选择朴素贝叶斯、半朴素贝叶斯、树增广贝叶斯。
第三章、文本分类
3.1文本分类
3.1.1文本分类的概念
在文本自动分类中,假设我们有文档d∈X,X表示文档向量空间(document space),和一个固定类集合的C={c1,c2,…,cj},类别也称为标签。很显然,这个文档的向量空间是个高维度空间。我们把这一堆打了的标签文档的集合<d,c>作为文本分类的训练样本,<d,c>∈X×C。例如:
<d,c>={Welcome to China, China}
对于这个只有一句话的文档,我们把它归类到 China,即打上china标签。
我们期望用某种训练算法,训练出一个函数γ,能够将文档映射到某一个类别:
γ:X→C
这种类型的学习方法也叫做有监督学习,因为这种方法事先有个监督者(在这里我们事先已经给出了一堆打好标签的分类文档)像个老师那样监督着整个学习过程。
朴素贝叶斯分类器是一种有监督学习,常见有两种模型,多项式模型(multinomial model)和伯努利模型(Bernoulli model)。
上面给出了文本分类的数学表示方法,这里我们描述一下文本分类。文本自动分类是在已经给定了一个或者预先已经定义好的类的场景下(也就是说类别是确定的),对文本形式的信息资源进行划分的一种方法。文本自动分类的最终目的就是对这些错综复杂的文本信息资源有效组织和管理,推荐给互联网的用户。
文本分类系统的任务可以简单定义为:在对于给定的分类体系中,自动文本分类系统自动确定与该文本具有关联性类别需要必须依据文本的内容。如果我们用数学语言来描述这个文本自动分类系统的任务,那么就可以这样形容:文本自动分类就是一个映射过程,它既可以是一一映射的,也可以是一对多的映射。
文本自动分类的映射规则:对已知类别中若干个的样本的数据信息,系统会总结出分类的规律性同时建立类别判别公式或判别规则。当该系统遇到新文本的时侯,只需根据总结出的类别判别规则来确定它所属的类别。
在文本自动分类中,有两大类型的学习方式:分别是有监督学习、无监督学习。所谓有监督学习是利用一组已知类别的样本进行调整分类器的参数,使他们达到所要求性能的过程,这个也可以被称为监督训练。计算机不像人,它需要要通过不断学习才能获取这种识别各种事物、现象的能力。而用来计算机进行机器学习的材料是有限的与被识别对象属于同类的数量样本。监督学习的特点是先给予计算机学习样本,与此同时,还告诉计算机,各个样本所属的类别。任何一种学习都是有一定目的的,拿模式识别来说,就是要通过有限数量的样本学习,使分类器进行自动分类,并保证分类结果的准确性。分类器使用的学习算法不同,得到的分类器也不同。对于贝叶斯分类器来说,是通过使用学习样本来对特征向量的类条件概率密度函数进行估计。在概率论中,如果已知类条件概率密度函数的情况下,使用给定的独立和随机样本集,可以根据最大似然法或者是贝叶斯学习估计出类条件概率的密度函数。如果类条件概率密度函数未知,也可以使用各种非参数方法,估计学习样本对类条件概率的密度函数。
而所谓的无监督学习,可以这么理解,直接对样本进行分类,这个算法是自适应的,不需要学习样本。在无监督学习中是用全部学习样本来估计混合概率密度函数的,也就是说假设这个模式类概率密度函数只有一个极大值,那么此时就可以根据混合概率密度函数计算得出分开各类的边界值。因本文采用的是有监督学习。
也就是说,本文分类是根据文本的特征值,这里通常用文本的单词来表示,来对文本进行自动分类,分类方法分为有监督的学习和无监督的学习。
3.1.2文本分类的步骤
文本自动分类一般一下几个步骤:第一文本的表达、第二分类器的选择与训练、 第三分类结果的评价与反馈,其中文本的表达又可细分。可以分为文本预处理过程、索引和统计过程、特征抽取过程等步骤。文本自动分类系统的功能模块为:
(1) 文本预处理:英文分词使用空格即可。中文没有像外文那样的空格,因此需要对文本进行分词处理。为了方便后来的处理,需要将原始语料格式化为统一的格式。中文的分词决定了后来文本分类的准确性。所以文本的预处理应该处在核心地位,给以重视。
(2) 文本索引:为了降低后续处理的开销,往往需要将带分类的文档分解为基本处理单元,。文本索引是解决这个问题的一种常用方案。其中空间向量是一种不错的选择。
(3) 统计:在上一步我们进行了分词,这一步需要对文本进行词频统计,常用的算法有IF-ITF。
(4) 特征抽取:计算能反映文本主题的特征项进行抽取,计算与分类类别相关的概率。 一般情况下,是文档的单词。它能反映类别和特性项之间的关系。
(5)分类器选择与训练:这一步是算法的选择,不同的算法标志不同的分类器,常见的分类器有SVM,决策树等,本文使用的是朴素贝叶斯。
(6)测试与评价:这一步很重要,检验自动分类系统是否合格。如果准确度不行,就要不断地重复以上的步骤,直到达到理想的范围。
按以上所述,文本分类需要经过三个阶段:
第一阶段:准备阶段。这个阶段的任务是得到特征属性,也就是分词等操作。它是为文本分类作必要准备,主要工作是根据具体情况确定特征属性,并对每个特征属性进行适当划分,然后由人工对一部分待分类项进行分类,形成训练样本集合。本文中采用网上的样本库,这一步就不需要再做了。然而在整个文本分类中,这是唯一一个需要人工完成的阶段,而它的完成质量也决定了整个文本分类完成的质量。
第二阶段:分类器训练阶段,这个阶段主要工作是计算每个类别在训练样本中的出现频率及每个特征属性划分对每个类别的条件概率估计,并将结果记录,进而生成分类器。而这一阶段工作相对于前一阶段而言则较为简单,因为该阶段是计算机自定完成,只需要根据公式便可以由程序自动计算完成。在贝叶斯分类器中就是求先验概率和后验概率。
第三阶段:应用与评价阶段。完成了分类器以后,需要试验来检查软件的性能,采用之前的样本集中若干文档,通过本分类器再次分类,从而检验。这部是通过程序实现的不需要人工。

3.2文本分类的基本原理
3.2.1停用词
中文是词语的排列组合从而表达一定的含义,在文本中往往有一些必要的词,但是却没有特定的含义,对分类没有影响,我们把它们叫做停用词。停用词是类似“的”,“啊”等对分类没有任何帮助的,往往又经常出现在文章中的副词等常用词。在进行文本分类之间需要将这些词过滤掉。
英文的停用词也是一样的含义,包括“the too”等词语,本文中的停用词见附录。
3.2.2英文分词
与中文分词相比,英文分词比较简单,英文是用空格分词的。因此一个字符串操作语句就能解决。
中文分词是将一句话按语义分成若干词语。比如“我是中国人”,首先去掉停用词“是”。我们想要分成“我”“中国人”,但是分词系统可能分成“我中”,“国人”,已经“我”,“中国”,“人”等等。当然我们需要分析系统尽量和人的思想分成一样的。这也决定了文本分类系统的准确性。
目前,国内比较有名的中文分成技术有中科院分成技术。
在文本分类实验中,选择语料库一定要慎重,语料库的选择对最终的分类效果可能有影响。然而由于语料库中的文本在存储格式有差异、文档的完整性上有缺失、对存在重复文档未处理……存在一些问题,为了提高分类性能,避免这些问题影响文本分类系统的后续工作,因此对语料库进行预处理工作必不可少,对其中的噪音信息必须去除,将不规范的内容进行调整,使其满足文本分类输入数据要求。


3.2.3文本分类算法
文本分类算法有很多,机器学习和数据挖掘中的算法很多都能应用到文本分类中,例如支持向量机,决策树等。
决策树分类算法分为两步。首先根据训练数据构建决策树,然后根据决策树对输入的数据进行分类。因此该算法是有监督的学习算法。在构建决策树的过程中,又分为两个关键的步骤:建树和减枝。这些在后面的算法中具体介绍。我们来看图一这棵决策树。方框即内部结点表示属性,椭圆也就是叶子结点表示分类结果,斜线表示属性的值,也就是条件分支。决策树构建过程是不断地按广度优先递归,直到叶子结点属于某一个类为止。在预测的过程中,根据深度优先,按照条件分支,直到找到叶子结点即分类结果为止。

图、银行服务决策树
支持向量机方法是建立在统计学习理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性和学习能力之间寻求最佳折衷,以期获得最好的推广能力(Generalizatin Abjlity)。支持向量机的方法主要有以下几个优点。
(1)它是专门针对有限样本情况的,其目标是得到现有信息下的最优解而不仅是样本数趋干无穷大时的最优值。
(2)算法最终将转化成为一个最优化问题,从理论上说,得到的将是全局最优点,解决了在神经网络方法中无法避免的
局部极值问题。
(3)算法将实际问题通过非线性变换转换到高维的特征空间(Feature Space),在高维窄间中构造线性判别函数来实现原空间中的非线性判别函数,特殊性质能保证机器有较好的推广能力,同时它巧妙地解决了维数问题,其算法复杂度与样维数无关。
本论文使用贝叶斯进行文本分类。
3.3、基于贝叶斯的文本分类
首先,对文本进行去停用词、中文分词处理。下面我们就可以全心设计基于朴素贝叶斯的文本分类算法。
第一步:计算先验概率
第二步:计算后验概率
算法参考下表:



表1 用于学习和分类的朴素贝叶斯算法

LEARN_NAIVE_BAYES_TEXT(Examples, V)
Examples为一组文本文档以及它们的目标值。V为所有可能目标值的集合。此函数作用是学习概率项,它描述了从类别中的一个文档中随机抽取的一个单词为的概率。该函数也学习类别的先验概率。
收集Examples中所有的单词、标点符号以及其它记号
• 在Examples中任意文本文档中出现的所有单词和记号的集合
计算所需要的概率项和
• 对中每个目标值
• 中目标值为的文档子集;
• ;
• 将中所有成员连接起来建立的单个文档;
• 在中不同单词位置的总数;
• 对中的每个单词
• 单词出现在中的次数;
• ;
CLASSIFY_NAIVE_BAYES_TEXT(Doc)
对文档返回其估计的目标值。代表在中的第个位置上出现的单词。
• 返回


本文的朴素贝叶斯文本分类主要是利用绝对词频来对特征项进行统计计算,因此朴素贝叶斯分类器也就存在着:有些高频词区分能力弱,而有些低频词区分能力强,但是绝对词频却主要体现高频词的区分能力,因而这样就使得朴素贝叶斯文本分类的结果存在偏差甚至出现错误。
为解决这一问题,采用TFIDF算法使得区分能力很强得低词频特征项能够获得较高的频率,从而体现其较强的区分能力。
假设文本D= 是文本中的一个特征项(1≤i≤m)。变量说明如下: 表示特征项 在文本 中出现的频数; 是训练样本集中出现特征项 的文档数;N是训练样本集中总的文档数。
(1)绝对词频(TF)
在一份给定的文件里,词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语 来说,它的重要性可表示为:

以上式子中以上式子中,分母则是在文件 中所有字词的出现次数之和。
在绝对词频方法中,主要体现是高频特征项的区分能力,而无法体现低频特征项的区分能力,因为有些特征项频率虽然很高,但分类能力很弱;而有些特征项虽然频率较低,但分类能力却很强。
(2)TF-IDF
TF-IDF(term frequency–inverse document frequency)是一种用于信息搜索和信息挖掘的常用加权技术。
TF-IDF的主要思想是,如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。IDF反文档频率(Inverse Document Frequency)的主要思想是:如果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。
3.4、本章小结
本章介绍了文本分类的一般步骤和不同阶段,并介绍了停用词和中文分词技术。针对本文使用的朴素贝叶斯分类器设计了实现方案。
第四章、系统设计
4.1需求分析
设计并实现一个中文文本分类软件,该软件能根据输入样本,输入的文件进行自动分类。
时间复杂度和空间复杂度要求:时间复杂度小。
准确度要求:文本的分类准确度高
用户界面要求:界面友好,使用简单方便。
4.2概要设计
初步确定使用Java语言开发,界面使用Java的Swing技术。算法使用朴素贝叶斯分类算法。
Java Swing是一个为Java设计的GUI工具包。Swing是JAVA基础类的一部分。Swing包括了大量的常用的图形用户界面(GUI)控件如:文本框,分隔窗格和表等。
Swing提供许多比AWT更好的屏幕显示元素。它是在AWT的基础上发展出来的。它们用Java写成,所以它同Java本身一样,可以跨不同的平台运行,这一点不像AWT,它是JFC的一部分。简单来说就是跨平台,使用方便,支持硬件变化。你可以在任意平台上使用JAVA支持的面板。Swing是轻量级元件,它的缺点是执行速度慢,优点就是跨平台。
朴素贝叶斯算法参加第二章和第三章。
使用角色就是普通用户,本系统需要登录。功能就是自动分类。需要输入学习样本的路径和待分类的文档路径。
4.3详细设计
4.3.1结构设计
软件设计采用常用的MVC框架,将视图和逻辑分开来,减少代码的冗余。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器在软件设计中非常常用。它的思想就是用一种业务逻辑和数据显式分离的方法组织代码,将业务逻辑聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。优点是将代码组建化,提高代码的可复用性和修改时的代价低。
4.3.2算法设计

 停用词处理
停用词的处理思想很简单,读入停用词保存在数组中,在文本处理的过程中,首先匹配停用词数组,如果是停用词标记为true,否则为false。下面是代码实现。
public class StopWordsHandler
{
private static String stopWordsList[] = new String[1028];//
public static void readStopWord() throws IOException{
File file = new File("D:\\workspace\\bigdata\\Beys\\英文停用词.txt");
//FileReader reader = new FileReader(file);
BufferedReader buff = new BufferedReader(new FileReader(file));
String temp = null;
int i=0;
while((temp=buff.readLine())!=null){
stopWordsList[i]= temp;
i++;
}
}

public static boolean IsStopWord(String word) throws IOException
{
if(stopWordsList.length==0){
readStopWord();
}
for(int i=0;i<stopWordsList.length;++i)
{
if(word.equalsIgnoreCase(stopWordsList[i]))
return true;
}
return false;
}
}

 先验概率
贝叶斯算法的核心步骤就是先验概率的计算。根据第二章中的计算公式进行计算。
public class PriorProbability
{
private static TrainingDataManager tdm =new TrainingDataManager();
/**
* 先验概率
* @param c 给定的分类
* @return 给定条件下的先验概率
*/
public static float calculatePc(String c)
{
float ret = 0F;
float Nc = tdm.getTrainingFileCountOfClassification(c);
float N = tdm.getTrainingFileCount();
ret = Nc / N;
return ret;
}
}

 分类器
这里定义一个文本分类器,在分类过程中,先过滤停用词,再计算先验概率,最后读入待分类文档,分词以后进行后验概率的计算,最后返回分类结果。
public class BayesClassifier
{
private TrainingDataManager tdm;//训练集管理器
//private String trainnigDataPath;//训练集路径
private static double zoomFactor = 10.0f;
/**
* 默认的构造器,初始化训练集
*/
public BayesClassifier(String trainPath)
{
tdm =new TrainingDataManager(trainPath);

}
public String readTestFile(String pathString) throws IOException{
File file = new File("D:\\workspace\\bigdata\\Beys\\train\\C3-Art\\C3-Art0001.txt");
BufferedReader buff = new BufferedReader(new FileReader(file));
String tempString = null;
String resultString = null;
while ((tempString=buff.readLine())!=null) {
resultString = resultString+tempString;
}
return resultString;
}

/**
* 计算给定的文本属性向量X在给定的分类Cj中的类条件概率
* <code>ClassConditionalProbability</code>连乘值
* @param X 给定的文本属性向量
* @param Cj 给定的类别
* @return 分类条件概率连乘值,即<br>
*/
float calcProd(String[] X, String Cj)
{
float ret = 1.0F;
// 类条件概率连乘
for (int i = 0; i <X.length; i++)
{
String Xi = X[i];
//因为结果过小,因此在连乘之前放大10倍,这对最终结果并无影响,因为我们只是比较概率大小而已
ret *=ClassConditionalProbability.calculatePxc(Xi, Cj)*zoomFactor;
}
// 再乘以先验概率
ret *= PriorProbability.calculatePc(Cj);
return ret;
}
/**
* 去掉停用词
* @param text 给定的文本
* @return 去停用词后结果
* @throws IOException
*/
public String[] DropStopWords(String[] oldWords) throws IOException
{
Vector<String> v1 = new Vector<String>();
for(int i=0;i<oldWords.length;++i)
{
if(StopWordsHandler.IsStopWord(oldWords[i])==false)
{//不是停用词
v1.add(oldWords[i]);
}
}
String[] newWords = new String[v1.size()];
v1.toArray(newWords);
return newWords;
}
/**
* 对给定的文本进行分类
* @param text 给定的文本
* @return 分类结果
* @throws IOException
*/
@SuppressWarnings("unchecked")
public String classify(String pathString) throws IOException
{
String text=readTestFile(pathString);
String[] terms = null;
terms= ChineseSpliter.split(text, " ").split(" ");//中文分词处理(分词后结果可能还包含有停用词)
terms = DropStopWords(terms);//去掉停用词,以免影响分类

String[] Classes = tdm.getTraningClassifications();//分类
float probility = 0.0F;
List<ClassifyResult> crs = new ArrayList<ClassifyResult>();//分类结果
for (int i = 0; i <Classes.length; i++)
{
String Ci = Classes[i];//第i个分类
probility = calcProd(terms, Ci);//计算给定的文本属性向量terms在给定的分类Ci中的分类条件概率
//保存分类结果
ClassifyResult cr = new ClassifyResult();
cr.classification = Ci;//分类
cr.probility = probility;//关键字在分类的条件概率
System.out.println("In process....");
System.out.println(Ci + ":" + probility);
//保存到文件,以后分类时到文件中读取数据,这样节省时间。
crs.add(cr);
}
//对最后概率结果进行排序
java.util.Collections.sort(crs,new Comparator()
{
public int compare(final Object o1,final Object o2)
{
final ClassifyResult m1 = (ClassifyResult) o1;
final ClassifyResult m2 = (ClassifyResult) o2;
final double ret = m1.probility - m2.probility;
if (ret < 0)
{
return 1;
}
else
{
return -1;
}
}
});
//返回概率最大的分类
return crs.get(0).classification;
}
}
 主函数
在用户点击开始分类时,调用分类器进行分类,这里是监听函数的操作。
startButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
//ProgressBar progressBar = new ProgressBar();
BayesClassifier classifier = new BayesClassifier(trainPath.getText());
try {
result = classifier.classify(testPath.getText());
classResult.setText(result);
classResult.setVisible(true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}});

4.3.3界面设计
 登录页面
为了保证系统的安全,我们设计了一个简单的用户登录页面,默认情况下用户名是admin,密码是123456.用户名或者密码不正确无法使用该系统。

 主程序页面
本系统的训练函数主要包括两个参数,训练集路径和测试集路径。根据这两个参数可以对文本进行分类。

 路径选择页面
使用了Java Swing控件实现了路径选择功能。

4.4、软件运行流程
 登录页面
输入用户名admin 密码123456能成功登录页面。如果错误会提示用户名或密码错误。

 主程序页面
登录成功后,进入程序主页面。如下图

 路径选择页面
选择训练集和测试集路径,点击按钮start开始分类。

 分类结果显示
等待程序运行完成后,将结果显示在文本框中。

4.4测试
实验采用数据集来源为:UCI提供的文本分类语料库(网上下载)http://kdd.ics.uci.edu/databases/。然后对训练集中文档进行学习过程,400篇文档,统计出不同的单词或者符号个数,也就是朴素贝叶斯方法中的特征个数,从而计算先验概率和条件概率。最后,对测试集中400篇文档进行分类。试验结果如下表。

表2 文本分类实验结果
文档类别 训练样本数 测试样本数 误判样本数 判别正确率
计算机 100 100 1 99%
艺术 100 100 37 63%
历史 100 100 8 92%
体育 100 100 12 88%
总计 400 400 58 85.5%

试验表明,该软件能对文本进行分类。
4.5系统分析
本软件基本实现了软件的要求,能正确的对文本进行分类。而且界面友好,易于操作,完成了本课题的要求任务。但是由于本系统在实现时没有考虑到朴素贝叶斯的改进问题。因此,准确度有待提高。
4.6、本章小结
本章从需求分析、概要设计、详细设计、测试一步步地试验了基于朴素贝叶斯文本分类器的软件系统,并通过试验证明取得了很好的准确度。但是时间复杂度有待提高。
第五章、总结和展望
本文运用贝叶斯理论阐述了朴素贝叶斯文本分类器的基本原理。在特征独立性假设的基础上,构造了一个朴素贝叶斯文本分类器,通过样本训练该分类器,进而对测试样本分类判断。实验表明,朴素贝叶斯理论在文本分类中有很好的效果。
但是,本文还存在一些缺陷。由于实验数据集还不够大,文本类别较少,文档数量不多,还不能完全反映出朴素贝叶斯文本分类器的性能。而且时间复杂度有待提高。

致 谢


该课题是鲁东大学学习完成的。在这里,我要感谢我的学校导师XXX教授对我的大力支持和培养,以及XX学院通信工程专业的各位老师,本人在学校学习的这段时间里,给了我许多做人的道理和做学问的方法。在你们的课堂上以及课后的答疑上,我学习到了许多本专业的知识,你们严谨的治学态度和对学生的关心帮助将是我一生学习的榜样。
感谢我的父母和兄弟姐妹,在学习与生活上他们对我一如既往的支持,为我顺利完成论文提供了坚实的后盾。
最后,对我的大学表示感谢,感谢 XX系对我的培养,感谢所有帮助过我的老师、同学们!

参考文献

[1]李晓明,闫宏飞,王继民,“搜索引擎——原理、技术与系统”.科学出版社,2004
[2]冯是聪, "中文网页自动分类技术研究及其在搜索引擎中的应用," 北京大学,博士论文, 2003
[3]Y. Yang and X. Liu, "A re-examination of text categorization methods" presented at Proceedings of ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR'99), 1999.
[4]F. Sebastiani, "A tutorial on Automated Text Categorization", Proceedings of ASAI-99, 1st Argentinian Symposium on Artificial Intelligence, Buenos Aires, AR, 1999
[5]王涛:文本自动分类研究,图书馆学研究,2007.12
[6]崔彩霞,张朝霞:文本分类方法对比研究,太原师范学院学报(自然科学版),2007.12
[7] 毛国君等.数据挖掘原理与算法[M].北京:清华大学出版社,2005.
[8] 陈文伟等.数据挖掘技术[M].北京:北京工业大学出版社,2002.
[9] [美]Tom M Mitchell著.曾华军,张银奎等译.机器学习[J].北京:机械工业出版杜.2003.
[10]陈剑敏.基于Bayes方法的文本分类器的研究与实现[D] .重庆:重庆大学计算机学院, 2007

附录一:停用词表
见英文停用词表。

附录二:训练集
见训练集。
0 0