文本聚类

文本聚类简单点的来说就是将文本视作一个样本,在其上面进行聚类操作。但是与我们机器学习中常用的聚类操作不同之处在于。

我们的聚类对象不是直接的文本本身,而是文本提取出来的特征。因此如何提取特征因而是非常重要的一步。在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

pyhanlp 文本聚类相关推荐

  1. pyhanlp 文本聚类详细介绍

    文本聚类 文本聚类简单点的来说就是将文本视作一个样本,在其上面进行聚类操作.但是与我们机器学习中常用的聚类操作不同之处在于. 我们的聚类对象不是直接的文本本身,而是文本提取出来的特征.因此如何提取特征 ...

  2. hanlp 词频统计_10.HanLP实现k均值--文本聚类

    AI 人工智能 10.HanLP实现k均值--文本聚类 10. 文本聚类 正所谓物以类聚,人以群分.人们在获取数据时需要整理,将相似的数据归档到一起,自动发现大量样本之间的相似性,这种根据相似性归档的 ...

  3. 新手探索NLP(十二)——文本聚类

    简介 聚类又称群分析,是数据挖掘的一种重要的思想,聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是多维空间中的一个点.聚类分 ...

  4. 模糊c均值聚类_六种常用的文本聚类方法介绍

    文本聚类算法介绍 分类和聚类都是文本挖掘中常使用的方法,他们的目的都是将相似度高的对象归类,不同点在于分类是采用监督学习,分类算法按照已经定义好的类别来识别一篇文本,而聚类是将若干文本进行相似度比较, ...

  5. 基于聚类算法的文本热点问题挖掘算例实现(文本聚类)

    在现实生活中,有时候我们可能得到一大堆无标签文本,这时候可能需要对文本进行聚类挖掘,找出热点问题是什么. 文本聚类 第一步:数据读取 import pandas as pd import re imp ...

  6. [Pyhon疫情大数据分析] 三.新闻信息抓取及词云可视化、文本聚类和LDA主题模型文本挖掘

    思来想去,虽然很忙,但还是挤时间针对这次肺炎疫情写个Python大数据分析系列博客,包括网络爬虫.可视化分析.GIS地图显示.情感分析.舆情分析.主题挖掘.威胁情报溯源.知识图谱.预测预警及AI和NL ...

  7. [python] Kmeans文本聚类算法+PAC降维+Matplotlib显示聚类图像

    0 前言 本文主要讲述以下几点:         1.通过scikit-learn计算文本内容的tfidf并构造N*M矩阵(N个文档 M个特征词):         2.调用scikit-learn中 ...

  8. [python] 基于k-means和tfidf的文本聚类代码简单实现

    俗话说"外行看热闹,内行看门道",作为一个机器学习的门外汉,刚研究python机器学习scikit-learn两周时间,虽然下面这段程序可能对于那些专研算法或机器学习的人来说非常简 ...

  9. 机器学习算法Python实现:kmeans文本聚类

    # -*- coding:utf-8 -* #本代码是在jupyter notebook上实现,author:huzhifei, create time:2018/8/14 #本脚本主要实现了基于py ...

最新文章

  1. IE浏览器与非IE浏览器JS日期兼容性问题处理
  2. 用c#开发微信 系列汇总
  3. android之实现各个组件点击事件处理
  4. PWN-PRACTICE-BUUCTF-19
  5. readonly与disabled属性在css中区别
  6. Python加盐加密方法hashlib(md5,sha224,sha1,sha256)
  7. 120万人同时在线考试,这么大的流量如何支撑
  8. 循环练习题:小球下落
  9. [PeterDLax著泛函分析习题参考解答]第4章 Hahn-Bananch 定理的应用
  10. lopatkin俄大神Windows精简版系统 安装教程 简单版
  11. 大一计算机论文_大学计算机论文
  12. mysql+tinyint+符号_mysql中TINYINT的取值范围
  13. vue中添加mp3音频文件
  14. JAVA LIST、ARRAY 移除其中某一元素
  15. 现代通信技术之通信业务
  16. 网上打印文件怎么发给商家?怎么给商家发送打印资料
  17. GPU显存占满利用率GPU-util为0
  18. (三)DQL数据库指令
  19. Linux 网卡设备驱动
  20. 手把手教你使用hexo搭建属于你的个人博客

热门文章

  1. “设为桌面图标”的ASP源代码
  2. 忘掉 Java 并发,先听完这个故事。。。
  3. 12 岁开始学编程,17 岁总结了 7 个重要教训!
  4. 知乎高赞回答:裁员、降薪、996...这项能力让你寒冬蓄能
  5. 从coding走向管理
  6. 大话数据库连接池简史,你都用过几个?
  7. 全球最厉害的 14 位程序员,请收下我的膝盖
  8. 掌握这 11 个方法论,搞定一场完美技术面试!
  9. Spring Boot 2.x 启动全过程源码分析(全)
  10. 使用Docker中的mysql