700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > HanLP 基于朴素贝叶斯 训练 文本分类

HanLP 基于朴素贝叶斯 训练 文本分类

时间:2019-09-09 11:45:44

相关推荐

HanLP 基于朴素贝叶斯 训练 文本分类

一、HanLP 朴素贝叶斯分类器

HanLP针对文本分类算法已经帮我们实现 朴素贝叶斯法 ,用户可以无需关心内部细节,HanLP也提供了相关自定义训练接口,前提需要将数据集根据分类放到不同的目录中,例如:

官方给出了相关性能指标如下表所示,其中SVM在本专栏下篇文章进行演示:

有关于 HanLP 环境的搭建,可以参考下面这篇文章:

https://xiaobichao./article/details/128271909

准备语料库

下面通过使用HanLP基于朴素贝叶斯算法,实现文本分类,语料库采用搜狗文本分类语料库迷你版测试数据集,下载数据集:

/corpus/sogou-text-classification-corpus-mini.zip

下载加压后可以发现该数据集已经标注好:

文本样例:

训练数据

public class ClassifyTrain {public static void main(String[] args) throws IOException {//语料库的地址String dataPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/搜狗文本分类语料库迷你版";//模型保存路径String modelPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/classification-model.ser";//训练数据trainData(dataPath, modelPath);}private static void trainData(String dataPath, String modelPath) throws IOException {File corpusFolder = new File(dataPath);if (!corpusFolder.exists() || !corpusFolder.isDirectory()) {System.err.println("没有文本分类语料");return;}// FileDataSet省内存,可加载大规模数据集,支持不同的ITokenizer,详见源码中的文档// 使用前90% 的数据作为训练集IDataSet trainingCorpus = new FileDataSet().setTokenizer(new HanLPTokenizer()).load(dataPath, "UTF-8", 0.9);// 创建朴素贝叶斯分类器IClassifier classifier = new NaiveBayesClassifier();// 训练数据classifier.train(trainingCorpus);// 获取训练模型AbstractModel model = classifier.getModel();// 使用后10% 的数据作为测试集IDataSet testingCorpus = new MemoryDataSet(model).load(dataPath, "UTF-8", -0.1);// 计算准确率FMeasure result = Evaluator.evaluate(classifier, testingCorpus);System.out.println("测试集准确度:");System.out.println(result);// 保存模型IOUtil.saveObjectTo(model, modelPath);}}

查看训练日志:

查看训练模型:

测试模型

public class TestClassify {public static void main(String[] args) {String modelPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/classification-model.ser";testModel(modelPath);}private static void testModel(String modelPath){NaiveBayesModel model = (NaiveBayesModel) IOUtil.readObjectFrom(modelPath);IClassifier classifier = new NaiveBayesClassifier(model);// 测试分类String text1 = "研究生考录模式亟待进一步专业化";System.out.printf("《%s》 属于分类 【%s】\n", text1, classifier.classify(text1));String text2 = "C罗获环球足球奖最佳球员 德尚荣膺最佳教练";System.out.printf("《%s》 属于分类 【%s】\n", text2, classifier.classify(text2));String text3 = "英国造航母耗时8年仍未服役 被中国速度远远甩在身后";System.out.printf("《%s》 属于分类 【%s】\n", text3, classifier.classify(text3));String text4 = "如果真想用食物解压,建议可以食用燕麦";System.out.printf("《%s》 属于分类 【%s】\n", text4, classifier.classify(text4));}}

测试结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。