首页 百科知识 中文文本分类

中文文本分类

时间:2022-10-04 百科知识 版权反馈
【摘要】:文本分类系统首先通过在预先分类好的文本集合上训练,建立一个分类器,从而对未知类别的新样本进行自动归类,大量的实验与应用系统表明,基于机器学习的文本分类方法容易实现且分类效果好,因此是目前文本分类的主流方法。相比于英文文本分类,中文文本首先需要自动分词,而汉语自动分词已经被深入研究,虽然没达到完美境界,但也已经有很多成熟的分词系统可以直接使用。

实验目的

1.学习与理解文本表示。

2.学习与理解常见的特征筛选方法。

3.掌握利用R语言的软件包进行文本分类的过程与步骤。

实验内容

1.基于词袋模型表示中文文本。

2.使用TFIDF进行特征筛选。

3.利用主流分类器生成分类模型并分类。

预备知识

一、中文文本自动分类

自动文本分类简称文本分类,它是指在给定的分类体系下,根据文本内容自动确定文本所属类别的过程。

文本分类的研究开始于20世纪60年代,早期的文本分类主要是通过人工定义一些规则来对文本进行自动分类。这种方法需要领域专家和计算机工作人员相结合,才能写出合适的规则,而且费时费力。后来随着互联网技术的发展,人们很容易获得海量的文本语料网,文本分类开始和机器学习技术相结合。文本分类系统首先通过在预先分类好的文本集合上训练,建立一个分类器,从而对未知类别的新样本进行自动归类,大量的实验与应用系统表明,基于机器学习的文本分类方法容易实现且分类效果好,因此是目前文本分类的主流方法。

相比于英文文本分类,中文文本首先需要自动分词,而汉语自动分词已经被深入研究,虽然没达到完美境界,但也已经有很多成熟的分词系统可以直接使用。

二、词袋模型

词袋模型是在自然语言处理中被广泛使用的一种简单假设模型。在这种假设模型中,一个文章、段落或者句子都被看作是无序的词汇集合,它忽略这些词组在其中出现的先后顺序。例如,“我吃午饭”这句话可以看成“我”“吃”和“午饭”的集合,而集合是具有无序性的,因此“我吃午饭”和“午饭吃我”两个句子在词袋模型中没有任何区别,这一点显然不符合现实。但是词袋模型和概率统计的贝叶斯中的条件独立性假设相吻合,因此基于该模型相当于找到了一种直接把贝叶斯相关计算手段用到文本分析中的途径。

三、停用词

有一些词组普遍存在于各类文本中,因此它们对于文本分类几乎没有可利用的区分价值,如果在放入词袋的时候忽略这些词组,不仅不影响分类精度,而且可以降低计算量。英文最常见的停用词的例子是:is、a、the;中文最常见的停用词的例子是:的、是。

四、特征筛选与常用方法

由于中文的常用词组有数十万之巨,放入词袋之后,即使使用一元模型,去除停用词之后,还是有一个巨大的特征项集合,因此特征筛选技术应需而生。特征筛选就是从词袋中找出具有较好区分作用的特征集合,这样一方面容易抓住文档的重要特征,另一方面可以大大降低计算复杂度,因此特征筛选也可以看成是一个数据降维的过程。最常见的特征筛选方法有:卡方检验、信息增益、互信息等。

·卡方检验

卡方检验是一个广泛用于独立性或相关性检验的方法,它属于非参数检验的范畴,主要是比较两个或两个以上样本率以及两个分类变量的关联性分析。可以认为,利用卡方检验计算出的值,可以用来评估一个特征对于类别区分的作用:这个值越大,区分作用越明显,越应该作为分类特征;值越小,越不适合作为分类特征。

假设有N篇文档,这些文章可以分为Side A和Side B两个类别,如果有一个特征词t,很容易统计出t在Side A和Side B中的出现情况,设A为Side A类的包含t的文档数量,B为Side B类的包含t的文档数量,C为Side A类不包含t的文档数量,D为Side B类不包含t的数量,那么就可以借助下面的公式计算出该t特征词的卡方值:

显然其中的A、B、C、D和N都是很容易得到的参数,因此计算变量的卡方值是非常容易的。卡方检验的缺点是:它只判断文档是否出现该特征词,而不统计在每个文档中出现的次数,因此有些更加有区分作用的高频特征词的计算结果未必比低频特征词高,也可以理解为没有充分利用文本中蕴含的信息。

·信息增益

熵是物理学名词,熵在热力学中表示分子状态混乱程度的物理量。1948年,香农提出了信息熵的概念,用来描述信源的不确定度,解决了对信息的量化度量问题。

信息熵的计算公式如下:

其中S是样本集合,c是类别的数量,pi是表示属于第i个类别的概率。

借助于上述公式,很容易计算出整个系统的信息熵。当一个特征词不能变化时,系统的熵称为条件熵。在二元文本分类中,特征词t的取值只有出现和不出现两种情况,因此条件熵的公式为:

H(C|T)=P(t)H(c|t)+P(t)H(c|t)。

此时,如果用整个系统的熵减去条件熵,就可以得到该特征词的信息增益,从而判断这个特征词的重要程度。

五、训练集、验证集和测试集

利用有监督机器学习方法进行文本分类的前提是:默认生成模型的数据和待分类的数据二者是分布相同的数据集。这样就可以从已标记类别的数据集合中找出规律,从而生成分类模型,然后利用该模型判断待分类的数据所属的类别。后面的分类过程也可以理解为对待分类的数据标注类别标签。

数据集常被分成训练集、验证集和测试集。其中训练集用来估计模型,验证集用来确定模型的参数,而测试集则为了定量评估训练出的分类模型的质量,三者都应该是从数据集中随机抽取。但实际应用中,经常只将数据集分成训练集和测试集。

此外,当数据集本身不大时,常采用K折交叉测试法,可以降低数据偶然性带来的偏差。所谓K折交叉测试,就是将样本随机均匀分成K份,轮流选择其中K-1份训练,剩余的一份做测试,最后汇总多次的结果。

实验原理

一、tm包与语料库

tm包是一个专门提供系列文本挖掘功能的包,使用tm包做文本挖掘的第一件事情是把数据转换为其中的语料库,然后就可以使用其中一系列的命令与函数进行统计分析与挖掘。

tm的语料库分为动态语料库和静态语料库,对应的名为Corpus()和Pcorpus(),动态语料库导入的数据会保存在R内存中;而静态语料库是保存在硬盘中,为了加速性能,R的静态语料库是采用数据库存储的,因此使用静态语料库的时候需要得到filehash包的支持。

二、R语言中的分类器

本试验用到的分类器有最大熵、SVM、KNN,这些在R语言中都已经有开发好的包供下载使用,具体的软件包名参见表11.1。

表11.1 最大熵、SVM和KNN包

·最大熵

最大熵原理指出:当我们需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设。在这种情况下,概率分布最均匀,预测的风险最小,此时信息熵最大,所以人们称这种模型叫“最大熵模型”。

·SVM

SVM的主要思想可以概括为两点:⑴它是针对线性可分情况进行分析,对于线性不可分的情况,通过使用非线性映射算法,将低维输入空间线性不可分的样本转化为高维特征空间并使其线性可分,从而使得高维特征空间采用线性算法对样本的非线性特征进行线性分析成为可能;⑵针对升维可能带来的超大计算量,它基于结构风险最小化理论,在特征空间中建构最优分割超平面,使得学习器得到全局最优化,并且在整个样本空间的期望风险以某个概率满足一定上界。

·KNN

KNN分类算法是数据挖掘分类技术中最简单的方法之一,它的出发点是“物以类聚,人以群分”,因此认为每个样本都可以用它最接近的K个邻居来分类。KNN算法简单,易于理解,容易实现,而且无需估计参数,无需训练。

三、文本分类结果的评价

如何评价一个文本分类算法和系统的效果呢?最常见的指标主要是查准率、查全率以及F因子,下面分别加以简单介绍。

设测试集Set中合计有文档N篇,其中有A类文本m篇,文本分类系统对Set执行分类后,认为A类文本有n篇,其中n篇中有x篇确实是A类文本,另外n-x篇是错误认为A类文本。

查准率的公式如下:

accury=x/n,

查全率的公式如下:

recall=x/m,

F值的公式如下:

F=2*accury*recall/(accury+recall)。

最完美的系统当然是查全率和查准率都是100%,但在具体实践中,这是难以得到的,而且两个指标大多数时候是互斥的关系。显然,当n的值越大,x的值也会随着增加,因为查全率的分母是固定的,因此查全率会提高。最极端的情况,当n等于N时,会捕获到A类的所有文本,那么查全率达到100%,但是此时查准率会由于分母的提高,而急剧降低。反之,如果过分追求查准率,只从测试集中把A类的最有把握的文档分出来,那么会降低查全率。

到底需要追求查全率还是查准率呢?这是需要看具体的应用需求的,例如,垃圾邮件过滤如果经常把用户正常的邮件放入垃圾邮件,则会对用户造成麻烦,因此垃圾邮件过滤需要更加注重查准率。

实验环境

一、操作系统

Windows 2000以上版本,例如,Windows 2000/XP/Vista/7/8/8.1/10等。

二、开发环境

x86或者x64平台的R软件,版本号R3.0.2以上。

实验步骤

一、准备语料库

请把实验提供的数据文件复制到电脑的D盘或者E盘,然后解压。该语料来自TREC 2006的垃圾邮件分类语料的子集,包含两个文件夹,spam文件夹中是垃圾邮件1000篇,ham文件夹中是非垃圾邮件1000篇,这些文件采用的是GBK编码。

为了便于后续处理,在两个文件夹中分别建立train和test子文件夹。

二、预处理

可以用记事本打开几个文件查看一下,每个文件中包含了邮件的邮件头。因为本实验主要是进行文本分类的实验,因此可以自己编写程序去除每个邮件的邮件头部分。请在实验报告中描述自己去除邮件头的方法。

三、分词

可以利用Rwordseg包进行分词,也可以调用R语言的部分分词工具。如果是利用Rwordseg,请在实验报告中写出自己调用的分词的R语言脚本代码,否则请描述自己所用的工具以及操作的步骤。

四、准备训练集和测试集

请把两类的语料分词后的文件随机各分成5份,每份200个;然后在spam中选择4份复制到train子文件夹,剩余的一份复制到test子文件夹;对ham中的语料执行同样的操作。

五、加载语料和预处理

把两类训练集分别加载到tm包的动态语料库中,然后去除语料中多余的空白符号,去除停用词,然后生成文档—词矩阵。请在实验报告中写出相应的R语言脚本代码。

六、分类特征的获取

利用上一步的文档—词矩阵获取两类出现频度大于3的高频词条,请筛选出用于分类的特征,在实验报告中描述自己筛选特征所用的方法以及步骤。

七、训练模型

利用上一步得到的分类特征集合,再次对两个训练集生成文档—词矩阵,并在两类矩阵的最后加上标签字段,将两类标签字段分别设置为spam和ham。

按行合并两个文档—词矩阵,然后调用svm和最大熵分类器进行模型训练。请在实验报告给出程序脚本。

八、测试结果

利用分类特征集合对两个测试集生成文档—词矩阵,同样添加标签字段后按行合并;然后进一步得到模型测试,并记录测试集的结果。

请在实验报告写出测试的脚本程序以及测试结果。

九、重复实验

请从第四步开始,替换交换测试集和训练集中的一份语料,然后重复实验并记录下结果。

十、结果分析

对上一步得到的结果计算平均,计算出查准率、查全率,并考虑如何可视化地输出这些数据。

思考题

1.请考虑如何提高本实验的结果。

2.如何理解“所有的数学模型都是错的,但有些模型是有用的”?

3.如果一个训练集中各类文本的数量存在较大的偏差,将会导致在一个不平衡的语料库上训练分类器,最终也会使得分类结果向较多文本的类别上靠拢,请考虑如何解决该问题。

4.请自行查阅决策树的知识以及相关的包,对实验中的语料使用决策树进行训练、分类以及评估。

参考文献

[1]李荣陆,王建会,陈晓云,等.使用最大熵模型进行中文文本分类[J].计算机研究与发展, 2005(01):94-101.

[2]陈文亮,朱慕华,朱靖波,等.基于Bootstrapping的文本分类模型[J].中文信息学报,2005 (02):86-92.

[3]刘怀亮,张治国,马志辉,等.基于SVM与KNN的中文文本分类比较实证研究[J].情报理论与实践,2008(06):941-944.

[4]徐燕,李锦涛,王斌,等.文本分类中特征选择的约束研究[J].计算机研究与发展,2008(04):596-602.

[5]高淑琴.Web文本分类技术研究现状述评[J].图书情报知识,2008(03):81-86.

[6]郝春风,王忠民.一种用于大规模文本分类的特征表示方法[J].计算机工程与应用,2007 (15):170-172.

[7]代六玲,黄河燕,陈肇雄.中文文本分类中特征抽取方法的比较研究[J].中文信息学报,2004 (01):26-32.

[8]宋枫溪,高林.文本分类器性能评估指标[J].计算机工程,2004(13):107-109,127.

[9]郝秀兰,陶晓鹏,徐和祥,等.k NN文本分类器类偏斜问题的一种处理对策[J].计算机研究与发展,2009(01):52-61.

[10]苏金树,张博锋,徐昕.基于机器学习的文本分类技术研究进展[J].软件学报,2006(09):1848-1859.

[11]罗海飞,吴刚,杨金生.基于贝叶斯的文本分类方法[J].计算机工程与设计,2006(24):4746-4748.

[12]姚全珠,宋志理,彭程.基于LDA模型的文本分类研究[J].计算机工程与应用,2011(13):150-153.

[13]江小平,李成华,向文,等.云计算环境下朴素贝叶斯文本分类算法的实现[J].计算机应用, 2011(09):2551-2554,2566.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈