pyhanlp 文本聚类详细介绍
文本聚类
文本聚类简单点的来说就是将文本视作一个样本,在其上面进行聚类操作。但是与我们机器学习中常用的聚类操作不同之处在于。
我们的聚类对象不是直接的文本本身,而是文本提取出来的特征。因此如何提取特征因而是非常重要的一步。在HanLP中一共有三个文本聚类方法。前两种都基于词袋模式,第一个是最常见的聚类算法:k-means,但HanLP不光实现了k-means,还实现了速度更快效果更好的repeated bisection算法(重复二分法,还是翻译为累次平方法,好像是第一种)。笔者动笔前段时间刚刚添加了一个新的聚类分析器是,基于词向量的kmens聚类分析器。
基于词向量的kmeans聚类分析器,输入的需要时词向量化后的文件。虽然HanLP的词向量在Java实现中,还算可以,但在Python中使用不算太好用,同时Python也不推荐用HanLP做词向量,我们有更好的工具。所以这里我们也就不画蛇添足了。
而对于前两个聚类分析器而言,其聚类模块可以接受任意文本作为文档,而不需要用特殊分隔符隔开单词。另外,该模块还接受单词列表作为输入,用户可以将英文、日文等预先切分为单词列表后输入本模块。统计方法适用于所有语种,不必拘泥于中文。
分词器的性能问题
在repeated bisection算法无论性能还是速度都要优于kmens,但是在本人的测试中,前者速度基本原作者一致约为kmeans的三倍左右,但是性能略低于后者。此处请读者自行斟酌。
分词器的参数
自动判断聚类个数k(此处来自于原文:HanLP中的文本聚类
很多时候用户可能觉得聚类个数k这个超参数很难准确指定。在repeated bisection算法中,有一种变通的方法,那就是通过给准则函数的增幅设定阈值beta来自动判断k。此时算法的停机条件为,当一个簇的二分增幅小于beta时不再对该簇进行划分,即认为这个簇已经达到最终状态,不可再分;当所有簇都不可再分时,算法终止,此时产生的聚类数量就不再需要人工指定了。
在HanLP中,repeated bisection算法提供了3种接口,分别需要指定k、beta或两者同时指定。当同时指定k和beta时,满足两者的停止条件中任意一个算法都会停止。当只指定一个时,另一个停止条件不起作用。这三个接口列举如下:
public List<Set<K>> repeatedBisection(int nclusters)
public List<Set<K>> repeatedBisection(double limit_eval)
public List<Set<K>> repeatedBisection(int nclusters, double limit_eval)
当我们使用analyzer.repeatedBisection(1.0)时,可以进行自动聚类。
from pyhanlp import *
ClusterAnalyzer = SafeJClass('com.hankcs.hanlp.mining.cluster.ClusterAnalyzer')
analyzer = ClusterAnalyzer()
# 我们需要调用并返回自身
analyzer.addDocument("赵一", "流行, 流行, 流行, 流行, 流行, 流行, 流行, 流行, 流行, 流行, 蓝调, 蓝调, 蓝调, 蓝调, 蓝调, 蓝调, 摇滚, 摇滚, 摇滚, 摇滚");
analyzer.addDocument("钱二", "爵士, 爵士, 爵士, 爵士, 爵士, 爵士, 爵士, 爵士, 舞曲, 舞曲, 舞曲, 舞曲, 舞曲, 舞曲, 舞曲, 舞曲, 舞曲");
analyzer.addDocument("张三", "古典, 古典, 古典, 古典, 民谣, 民谣, 民谣, 民谣");
analyzer.addDocument("李四", "爵士, 爵士, 爵士, 爵士, 爵士, 爵士, 爵士, 爵士, 爵士, 金属, 金属, 舞曲, 舞曲, 舞曲, 舞曲, 舞曲, 舞曲");
analyzer.addDocument("王五", "流行, 流行, 流行, 流行, 摇滚, 摇滚, 摇滚, 嘻哈, 嘻哈, 嘻哈");
analyzer.addDocument("马六", "古典, 古典, 古典, 古典, 古典, 古典, 古典, 古典, 摇滚");
print(analyzer.repeatedBisection(1.0))
[[李四, 钱二], [王五, 赵一], [张三, 马六]]
评测
评测程序仍然使用搜狗文本分类语料库迷你版。过程为首先遍历子目录读取文档,以子目录+文件名作为id将文档传入聚类分析器进行聚类,并且计算F1值返回。该计算过程已被原作者封装为接口,我们可以直接调用
CORPUS_FOLDER = "/home/fonttian/Data/CNLP/textClassification/sogou-mini/搜狗文本分类语料库迷你版"
for i in ["kmeans", "repeated bisection"]:
print(i, ClusterAnalyzer.evaluate(CORPUS_FOLDER, i) * 100)
kmeans 83.97065954968313
repeated bisection 82.71523522720585
文章来源FontTian的博客
pyhanlp 文本聚类详细介绍的更多相关文章
- [转]python进行中文文本聚类(切词以及Kmeans聚类)
简介 查看百度搜索中文文本聚类我失望的发现,网上竟然没有一个完整的关于Python实现的中文文本聚类(乃至搜索关键词python 中文文本聚类也是如此),网上大部分是关于文本聚类的Kmeans聚类的原 ...
- 文本挖掘之文本聚类(MapReduce)
刘 勇 Email:lyssym@sina.com 简介 针对大数量的文本数据,采用单线程处理时,一方面消耗较长处理时间,另一方面对大量数据的I/O操作也会消耗较长处理时间,同时对内存空间的消耗也是 ...
- 10.HanLP实现k均值--文本聚类
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 10. 文本聚类 正所谓物以类聚,人以群分.人们在获取数据时需要整理,将相似的数据 ...
- K-means算法及文本聚类实践
K-Means是常用的聚类算法,与其他聚类算法相比,其时间复杂度低,聚类的效果也还不错,这里简单介绍一下k-means算法,下图是一个手写体数据集聚类的结果. 基本思想 k-means算法需要事先指定 ...
- web.xml 详细介绍(转)
web.xml 详细介绍 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧 ...
- Android manifest之manifest标签详细介绍
AndroidManifest详细介绍 本文主要对AndroidManifest.xml文件中各个标签进行说明.索引如下: 概要PART--01 manifest标签PART--02 安全机制和per ...
- html <input>标签类型属性type(file、text、radio、hidden等)详细介绍
html <input>标签类型属性type(file.text.radio.hidden等)详细介绍 转载请注明:文章转载自:[169IT-最新最全的IT资讯] html <inp ...
- JQuery中的AJAX参数详细介绍
Jquery中AJAX参数详细介绍 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方 ...
- ios开发——实用技术篇&Pist转模型详细介绍
Pist转模型详细介绍 关于Plist转模型在iOS开发中是非常常见的,每开一一个项目或者实现一个功能都要用到它,所以今天就给大家讲讲Plist怎么转成模型数据, 前提:必须有一个Plist文件或者通 ...
随机推荐
- [Jedis] ERR wrong number of arguments for 'mget'
看别人写的代码是件比较痛苦的事情,更加痛苦的是别人的代码出错还要负责调试好. 关于如何迅速定位问题和调试代码,我的一点感受是:逐行认真查看错误信息,在这些信息中找自己熟悉的内容(包括文件名.方法名等) ...
- Python 函数的嵌套
# 函数的互相调用 def func1(): print("我是神器的func1") def func2(): func1() print("我是神器的func2&quo ...
- Django is not importable in this environment
1.由于把venv给忽略了,所以显示找不到django. 2.在.gitignore中加入了 venv\会导致,在此git目录下,用pycharm 创建的项目会自动在 file types中的地方加 ...
- Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC 配置校验器
Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(J ...
- Python之路PythonNet,第四篇,网络4
pythonnet 网络4 select 支持水平触发 poll 支持水平触发 epoll epoll 也是一种IO多路复用的方式,效率比select和poll 要高一点: epol ...
- Android Studio安卓导出aar包与Unity 3D交互
Unity与安卓aar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- github如何删除新建仓库(致新手)
github作为开发人员的必备用具.那么,作为一个新手如何删除github中建立的仓库呢? 1.以删除My test为例
- 20155208实验二 Java面向对象程序设计
20155208实验二 Java面向对象程序设计 一.实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5 ...
- 基础练习 2n皇后问题
时间限制:1.0s 内存限制:512.0MB 提交此题 锦囊1 锦囊2 问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同 ...
- C++学习(十一)(C语言部分)之 练习
/* 1.if 输入一个成绩 进行分级 输入一个数字 判断是否是水仙花数 比如 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3 2.switch 提示 先对数字做处理 ...