一、HanLP 基于SVM支持向量机分类器

上篇文章通过朴素贝叶斯文本分类器,训练测试了 搜狗文本分类语料库迷你版 ,本篇继续测试SVM支持向量机分类器。

由于HanLP 官方给出的 SVM 分类器依赖了第三方库,没有集成在主项目中,需要拉取 text-classification-svm 项目:

git clone https://github.com/hankcs/text-classification-svm.git

拉取项目后,发现 pom 依赖的 hanlp 版本是 portable-1.5.2,前面我们用的都是portable-1.8.3,这里就保持保本一致,将 pom 中 hannlp 的版本升级为 portable-1.8.3

升级后会有两点不兼容,需要修改 LinearSVMClassifier 类:

然后将该项目打包到本地 Maven 中方便其他项目使用:

mvn clean install -DskipTests

下面在自己的 Maven 项目中添加依赖:

<!-- svm 分类器扩展包-->
<dependency><groupId>com.hankcs.nlp</groupId><artifactId>text-classification</artifactId><version>1.0.1</version>
</dependency>
<!-- svm 依赖 liblinear-->
<dependency><groupId>de.bwaldvogel</groupId><artifactId>liblinear</artifactId><version>1.95</version>
</dependency>

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

https://xiaobichao.blog.csdn.net/article/details/128271909

SVM 文本分类器,利用liblinear实现HanLP中的文本分类接口,因此对预料库的要求还是 将数据集根据分类放到不同的目录中:


下面还是使用 搜狗文本分类语料库迷你版 进行测试。

准备语料库

下载数据集:

http://file.hankcs.com/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/svm-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);// 创建SVM分类器IClassifier classifier = new LinearSVMClassifier();// 训练数据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/svm-classification-model.ser";testModel(modelPath);}private static void testModel(String modelPath){LinearSVMModel model = (LinearSVMModel) IOUtil.readObjectFrom(modelPath);IClassifier classifier = new LinearSVMClassifier(model);// 测试分类String text1 = "研究生考录模式亟待进一步专业化";System.out.printf("《%s》 属于分类 【%s】\n", text1, classifier.classify(text1));String text2 = "C罗获2018环球足球奖最佳球员 德尚荣膺最佳教练";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));}}

测试结果:

HanLP 基于SVM支持向量机 训练 文本分类相关推荐

  1. HanLP 基于SVM支持向量机 进行 ChnSentiCorp 情感分析

    一.ChnSentiCorp情感分析酒店评论数据集 ChnSentiCorp情感分析酒店评论数据集是一个标注了情感的数据集,分了负面和正面两类,下载地址: http://file.hankcs.com ...

  2. 基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类)

    基于机器学习的车牌识别系统(Python实现基于SVM支持向量机的车牌分类) 一.数据集说明 训练样本来自于github上的EasyPR的c++版本,包含一万三千多张数字及大写字母的图片以及三千多张中 ...

  3. r语言 svm 大样本_r语言基于SVM模型的文本分类研究 附数据代码

    1 Perceptron 与 SVM 概念介绍 1.1 感知机 (Perceptron) 感知机( perceptron ) 1957 年由 Rosenblatt 提出,是神经网络与支持向 量机的基础 ...

  4. 综述:基于深度学习的文本分类 --《Deep Learning Based Text Classification: A Comprehensive Review》总结(一)

    文章目录 综述:基于深度学习的文本分类 <Deep Learning Based Text Classification: A Comprehensive Review>论文总结(一) 总 ...

  5. 网格向量必须包含特征点。_【专题研究】基于SVM支持向量机模型的选股策略

    研究过集成学习中的随机森林和XGBoost后,本文将介绍一种更传统的机器学习方法:SVM支持向量机.SVM由于其较高的准确度,并且能够解决非线性分类问题,曾一度成为非常流行的机器学习算法.本文分别介绍 ...

  6. 基于SVM支持向量机实现人脸识别

    文章目录 基于SVM支持向量机实现人脸识别 SVM支持向量机的定义 SVM支持向量机的原理作用 如何计算SVM支持向量机的权值w和偏置项b 代码实现原理步骤 代码实例演示: 基于SVM支持向量机实现人 ...

  7. 基于SVM的乳腺癌数据集分类

    目录 1.作者介绍 2.SVM算法介绍 2.1 SVM算法 2.2 SVM算法理解与分析 3.乳腺癌数据集介绍 4.基于SVM的乳腺癌数据集分类实验 4.1 导入所需要的包 4.2 导入乳腺癌数据集 ...

  8. 文本基线怎样去掉_ICML 2020 | 基于类别描述的文本分类模型

    论文标题: Description Based Text Classification with Reinforcement Learning 论文作者: Duo Chai, Wei Wu, Qing ...

  9. 【项目实战课】NLP入门第1课,人人免费可学,基于TextCNN的新闻文本分类实战...

    欢迎大家来到我们的项目实战课,本期内容是<基于TextCNN的新闻文本分类实战>. 所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲解,可以 ...

最新文章

  1. 百度开设「黄埔学院」,革新者来
  2. git tag 介绍
  3. CodeForces - 126B Password(KMP中next数组)
  4. solidity modifier函数修改器 智能合约开发知识浅学(三)
  5. 分别对时分秒加减的java_Java中关于获取时间(日期)的总结大全
  6. Cloudera CDH 5.1版本的Hive与LDAP-2.4.44集成
  7. mysql数据库binlog日志截断报错,导致mysql主从同步失败故障排查
  8. Always On 集群监听创建失败问题
  9. windows XP虚拟机安装
  10. CentOS7系统重命名
  11. 2022年(上半年)信息系统项目管理师考试-综合知识真题及解析(一)
  12. 【ct107d】独立键盘
  13. ARS408-21毫米波雷达笔记
  14. 给IT男的职场服装购物建议
  15. 民间炒股高手绝招(转)
  16. RIP路由信息协议-个人总结
  17. 虚拟机linux防火墙配置,Linux防火墙配置
  18. android屏幕刷新显示机制
  19. 如何下载 MySQL安装包
  20. 头脑风暴面试_进行有效头脑风暴的5种方法

热门文章

  1. 超易懂!原来 SOLID 原则要这么理解!
  2. GridView简单使用
  3. android拦截短信并屏蔽系统的Notification
  4. c语言实现贪吃蛇教程
  5. 模仿学习对比强化学习
  6. 【github】Git LFS上传大文件到github
  7. Centos7修改时间
  8. 蓝宙ARM仿真器固件烧写说明
  9. CalBioreagents艾美捷兔单克隆抗人Id1克隆5-3说明书
  10. C++: STL内存分配器--allocator