SVM(支持向量机)和EM(最大熵)文本分类算法
源代码在线查看: 说明.txt
分词、特征选择、SVM和ME模型的参数设置都存储在文件properties.txt中
=================分割线===概况==================================
segment包,全切分,粗切分(利用概率词图求NShorts),貌似实体识别和分词都流行用B、I、E、S等标记词的开始、中间、结尾等,分类问题。以后可以试一试。
feature包,特征选择,CHI,MI等,一般CHI和IG效果不错。
svm包,训练使用SMO算法,DAGSVM多分类。RBF核函数的参数选取经验,sita趋于0所有的训练样本都越会表现为支持向量,sita取值大了的时候测试表现为都分为一个类。另,用壳向量来缩减训练集,看到过有这样的中文文献,只是估计求壳费时比全算上还费。
ME包,CGGIS训练算法(简单易实现^-^),拟牛顿法的wolfe取步长有时候死循环,求导计算E(P)也要很长的计算时间,so,待处理。高斯先验来平滑感觉效果不怎么样。
=================分割线===使用方法====================================
UsingME.java测试使用ME模型分类,UsingSVM.java测试使用支持向量机分类,UsingSegment.java测试分词。
使用方法:
=======SVM分类:(UsingSVM.java)
1.默认的选择特征词和训练SVM的文件目录保存在properties.txt文件中的"statsourcedir"属性,默认为同目录下sample/train目录,更换目录可以修改这个属性的值,需要保持train的那种目录结构。
2.默认使用CHI方法来选择特征词,可修改UsingSVM类的selectFeatureWordForSVM()方法中的cacu.computeValueChi()这条语句来更改特征选择方法。
3.选择的特征数目的方法有写了两种,在UsingSVM类的selectFeatureWordForSVM()方法中如果修改,每个类选取固定个数select.selectDirByNum(CHI计算的结果目录, n)或者使用选取大于某个权值的词select.selectDirByWeight(CHI计算的结果目录, value)
4.训练模型,在properties.txt中的参数设置好的情况下使用UsingSVM类的trainSVM()方法。
5.测试分类,UsingSVM类的classifyFile(File filedir),方法中的参数为被测试的文件目录,将对这个目录下的所有文件分类,单层目录。
======ME分类:(UsingME.java)
1.默认的选择特征词文件目录保存在properties.txt文件中的"statsourcedir"属性,训练ME的文件目录为"ME.testdir"属性。
2.特征选择同SVM,使用select.selectForME(sourcedir, 100)语句来选择,表示每个类选取100个。
3.训练模型,在gis.caculate(10)语句中设置迭代次数,设置大了要等很久...
4.测试分类,
=================分割线====================================
=================分割线===其他=================================
分词词典用的是在搜狗下载的。
几个很有用的网址:
SVM:http://www.csie.ntu.edu.tw/~cjlin/ 从这个地址可以找到很多SVM的东西
ME:http://homepages.inf.ed.ac.uk/s0450736/maxent.html 所有关于ME的东西,其中作者写的一篇综述性的文章个人觉得很有用。
CRF:http://www.inference.phy.cam.ac.uk/hmw26/crf/
作者:谢廷彦.xietingyan1984@163.com 。欢迎指正错误。程序仅供学习交流使用。找工作很上火顺便附个简历。