您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 分享-文本分类实验报告
北京邮电大学2013-2014学年第1学期实验报告(代码就不分享了,都是文本格式处理的代码.欢迎大家批评指正!)课程名称:数据仓库与数据挖掘实验名称:SVM文本分类实验完成人:姓名:学号:姓名:学号:姓名:学号:日期:2013年11月实验一:SVM文本分类1.实验目的熟悉爬虫的使用,可以利用网络爬虫抓取所需的网络语料熟悉中文分词软件,可以熟练使用接口完成分词任务熟悉文本分类必要的预处理步骤,并运用到实验实践中熟悉特征提取方法,包括CHI-square和LDA特征提取了解SVM机器学习方法,可以运用开源工具完成文本分类过程2.实验分工XXX:(1)运用爬虫对语料库新闻的收集(2)对数据的预处理工作(3)后期的不同对比试验的测试XXX:(1)特征的提取(2)训练集和测试集的生成(3)后期的不同对比试验的测试3.实验环境中文分词与LDA特征提取运行环境:(1)Javaversion1.7(2)开发环境:eclipsePython代码运行环境:(1)python3.24.主要设计思想4.1实验工具介绍WebCrawler:由实验室集体开发的网络爬虫,不对外公开。可以方便的通过正则表达式的配置,轻松的完成对网络数据的提取,并且可以根据需求完成过滤老新闻、不合适的网址格式等功能。最终的爬取结果文件已经经过程序处理,可以直接得到最需要得到的内容。例如:在此实验中,最终的爬取结果即为已经从网站中提取出的新闻标题和正文。ICTCLAS:全称为汉语词法分析系统。具有简易的图形演示界面,和不同语言的API接口,开发者可以根据自己的需求选择不同的接口。主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典;在今年的12月中下旬会发布ICTCLAS2014版本。Libsvm:是由台湾大学林智仁副教授等开发的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包。除了主体训练,测试的程序,还提供了一些使用的工具,例如子集的选择,参数的选择与归一化的操作等实用的方法。JGibbLDA:使用JAVA实现了LatentDirichletAllocation(LDA),使用了Gibbs采样来进行参数估计。4.2特征提取与表达方法的设计在此次实验中,我们采用了两种特征提取的方法。针对不同的方法提取的特征分别作了文本分类实验。所有的特征提取与特征表达的详细步骤会在5.3种进行描述。CHI特征提取:根据上面的公式,最终建立成了数据字典。经过CHI特征提取建立成数据字典,数据字典如图所示(已经经过了按照字母排序处理):在每个词的前面是数据字典中,每个词对应的id。最终的特征向量表达方法为:Class_idword_id:tf-idf……第一列class_id为此文本所属的新闻类别,word_id为数据字典中每个词对应的word_id,tf-idf为每篇文档中,对应的tf-idf值。LDA特征提取:LDA是主题模型的一种。假设一篇文章可以由不同的主题组成,把每篇文章中的主题分布概率来当作这篇文章的特征,从而形成了特征向量。主题的数量可以由人工根据情况指定或者通过其他方法科学的得到合理也就是概率最大的主题数量,再对其进行人工指定。经过LDA主题模型分析之后,在通过简单的处理,变换成SVM可以接受的输入格式,会得到如下的特征向量:图中的第一列为文本的所属类别。后面的为topic_id:probability。Topic_id为相应的主题id,probability为这篇文档此主题的分布情况。两种特征提取的方法,都将会在5.3中进行详细描述。4.3分类算法的选择我们使用的SVM(SupportVectorMachine)分类算法,是最大margin分类算法中的一种。SVM是一种可训练的机器学习方法,在小样本中可以得到优秀的训练模型。图1如图中所示,SVM分类算法可以根据最边界的样本点,也就是支持向量,达到二分类的目的。当数据的样本线性不可分时,会通过核函数的映射,把样本转换到线性可分的向量空间。所以核函数的选择也会影响最终的效果。如果遇到了多分类的问题,如下图所示,可以通过多个SVM训练模型完成多分类的任务。现在的SVM工具包都提供了自动的多分类接口。图2此外,SVM与logisticregression非常相似。Logisticregression虽然其名字当中是regression也就是回归,但是实际上此算法是一个分类算法。为了达到性能和效率兼备,对不同情况运用不同算法的场景进行了描述:n为特征的数量,m为训练样本的数量(1)如果n相对m大很多,可以使用logisticregression或者使用SVM,核函数选择线性核函数(2)如果n很小,m的大小适中,使用SVM,核函数选择Gaussian函数(3)如果n很小,m很大,需要添加更多的特征,然后使用logisticregression或者使用SVM,不使用核函数。神经网络的算法的效果会优于上面的算法,但是训练的时间非常长,这也是为什么很多人选择SVM的原因之一。4.4性能评估方法最终性能的评价使用了准确率(P),回召率(R)和F1-Score来评价分类效果。为了解释每种评价标准的计算方法,先看如下表格:实际情况1代表真实情况此类,0代表不属于预测结果1代表预测属于此类0代表预测不属于此类101TruepositiveFalsepositive0FalsenegativeTruenegative表1P=Truepositive/(Truepositive+Falsepositive)R=Truepositive/(Truepositive+Falsenegative)F1-Score=(2*P*R)/(P+R)在此实验中,我们分析了每种特征提取方法最终在每类与总体的准确率、召回率和F1-Score的结果。关于结果分析的详细描述见5.6。5.实验过程基于CHI特征提取的实验流程图:基于LDA特征提取的实验流程图:5.1文本分类语料库的采集通过网络爬虫在爬取新闻语料。爬取的类别有:Sport运动Finical经济Edu教育Ent娱乐Baby婴儿Tech科技Games游戏Comic动漫Auto汽车house房产在语料库的收集中遇到的主要问题为,有的分类的网页会得到404的爬取结果,原因在于访问的对方服务器的文件夹年份过于早,网页已经被删除,也就是过期网页。经过对这些网页爬取结果的分析,大部分此类网页的爬取结果都为1KB(在windows操作系统下,最小的文件只有1KB,没有更小的文件),为了提高最终分类的效果,对所有爬取的新闻文件小于1KB的都做了删除处理。另外,也对比较大的文件做了处理。经过对爬取的文件的分析,部分新闻文件都是代码没有新闻内容,对于这样的文件大部分在10、50KB以上,一篇新闻的内容大于150KB的可能性非常小,所以,对于此种异常文件,也做了删除操作。经过以上处理,对新闻文件的分配如下:(1)训练集:一共10类,每类的训练集为5000篇新闻。总共50,000篇训练集。(2)测试集:运动10223经济6906教育9416娱乐34937婴儿14948科技12156游戏23945动漫12306汽车10305房产4373总计139,515篇在后期的实验结果中,我们也对设计了不同的训练集和测试集的比例进行了实验,详细结果分析见5.6。5.2数据预处理(1)对所有新闻文件使用JAVA接口进行分词。效果如图:(2)对每一类新闻的训练集进行提取名词、去停用词的处理,并且,为了以后方便计算每个词的tf,同时记录每个单词在文档中的tf。例如:汽车类(automatic)的其中一篇新闻,经过处理,转换成如下的文件内容,为了描述方便称此类文件为news_word_frequence文件:(3)经过对每一类新闻训练集进行如上处理,分别将每一类的所有news_word_frequence文件的单词进行汇总,同时记录每个词的词频,最终得到如下文件:图中一共有10个文件,代表了10类新闻中的出现的所有单词(已经经过了取名词、去停用词的处理,并且已经根据词频进行了降序排序)例如,auto.words文件如下:第一列为单词,第二列为此单词出现的频次。在我们的实验中,去除了频次低于5次的单词。处理过程如图所示:5.3特征提取和表达在本实验中使用了CHI特征提取与LDA特征提取两种方法。下面分别对其提取过程进行描述。CHI特征提取:在此公式中,变量的含义如下所示:N:所有文档的数目A:在该分类下,包含此单词的文档数量B:不在该分类下,包含此单词的文档数量C:在该分类下,不包含此单词的文档数量D:不在该分类下,不包含此单词的文档数量由于最后,只需要根据CHI的卡方值进行排序,为了简化运算,对公式做了简单的简化处理:简化后的计算方法为:(𝐴𝐷−𝐵𝐶)2(𝐴+𝐵)(𝐶+𝐷),因为在排序的步骤中,N,(A+C),(B+D)不会对最后的排序造成影响,所以做了简化处理。(1)因为训练集的数量一共为50000篇,计算CHI值的时间比较长,所以,先分别计算了每一类下每个单词的A,B,C,D值,并输出到文件。如图所示:图中的每一个*.abcd文件,代表着每一类新闻的每一个单词的A,B,C,D值的信息。例如,下图所示:auto.abcd文件第一列为汽车类(automatic)中的单词,往后以此为此单词的A,B,C,D值。(2)在得到上述文件之后,便可以根据简化后的公式,计算每个单词的CHI值,降序排序后,最终得到如下文件:比如,在auto.chi文件中,如下图所示:经过降序排序以后,发现排列靠前的单词几乎全都与汽车相关。(4)分别取每一类的排序前1000个单词,经过汇总,去重,得到最终的数据字典,一共是7544个单词,同时对这些词进行唯一的id标识。得到chi.features文件。如图所示:第一列为单词的id,第二列为数据字典中的单词。(5)根据数据字典,将每篇训练集新闻文档和测试集新闻文档转换成特征向量。如图中所示:第一列为文本类型id,其他列分别为word_id:tf-idfLDA特征提取:LDA的特征提取使用了JGibbLDA开源工具。(1)根据要求,分别将训练集和测试集生成对应的格式要求。输入格式如下:[M][document1][document2]...[documentM][documenti]=[wordi1][wordi2]...[wordiNi][M]为总文件的个数得到的文件如下所示:50,000代表着训练集的数量。每一行代表一片文档,其中的单词代表每篇文档中出现的名词(已经经过取名词、去停用词等预处理)。(2)首先对训练集进行迭代,最终得到5个输出文件:model_name.othersmodel_name.phimodel_name.thetamodel_name.tassignmodel_name.twords其中model_name.twords包括了每个主题当中,最可能的出现的单词。如图所示:经过人工判断就可以很明显的看出,LDA的主题分类效果是很好的。另一个重要的文件是model_name.theta文件。此文件包含了主题-文档的分布情况,也就是p(topict|documentm)。如图中所示:每一行代表一个文档,每一列代表一个主题。(3)基于上面对训练集经过处理得到的5个文件,对测试集文件进行迭代,得到对应的主题-文档分布文件。(4)由于此程序的输出格式并不是严格的按照libsvm的输入格式,需要编写代码转换成相应的训练文件格式。转换完成后,如下图所示:5.4训练过程在本次实验中,我们做了多组实验。在这里仅列出训练过程的步骤,详细的结果分析见5.6.(1)使用checkdata.py工具对训练集和测试集进行检测,是否有格式不合法的地方。(2)通过数据格式检测之后,通过svm-scale命令对训练集和测试集进行归一化操作,下限为0,上限为1(3)使用grid.py工具,对训练集进行调参,得到最优的c,g的值。
本文标题:分享-文本分类实验报告
链接地址:https://www.777doc.com/doc-2653403 .html