`

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种接口,分别需要指定kbeta或两者同时指定。当同时指定kbeta时,满足两者的停止条件中任意一个算法都会停止。当只指定一个时,另一个停止条件不起作用。这三个接口列举如下:

 

    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博客

分享到:
评论

相关推荐

    【项目实战】Python基于KMeans算法进行文本聚类项目实战

    视频文件"代码讲解+KMeans文本聚类.mp4"可能详细解释了代码的每一步操作,有助于理解和复现项目。 9. **结论与展望**: 结论部分会总结项目的结果,如聚类效果如何,是否发现了有意义的模式。展望可能包括进一步...

    计算机研究 -中文文本聚类算法分析与研究.pdf

    文中还提出了一个基于传统模型的中文文本聚类模型,并详细介绍了新算法的实现。实验结果表明,新算法的准确性比传统文本聚类算法高 4%。此外,作者还讨论了文本向量空间模型对分类准确性的影响,并与 K-means 算法、...

    java文本聚类程序代码文件,实现文本聚类功能,分词

    Java文本聚类是一种在计算机科学领域中用于组织和分析大量文本数据的技术,它涉及到自然语言处理(NLP)和机器学习。在这个Java程序代码文件中,我们主要关注两个关键概念:文本聚类和分词。 **文本聚类**是无监督...

    基于文本内容的自动文本聚类

    ### 基于文本内容的自动文本聚类 #### 一、引言 随着网络技术和信息技术的迅猛发展,各类电子文本数据呈爆炸式增长。如何有效地管理并利用这些海量文本数据成为了信息系统领域的一个重要课题。**基于文本内容的...

    K-Means文本聚类python实现

    文本聚类是机器学习领域的一种无监督学习方法,主要用于对大量文本数据进行分类,而无需预先知道具体的类别信息。在本案例中,我们将探讨如何使用Python实现K-Means算法来对文本数据进行聚类。K-Means是一种广泛应用...

    包含KMeans、DBSCAN、LDA和Single_Pass的文本聚类算法程序(python实现)课设

    包含KMeans、DBSCAN、LDA和Single_Pass的文本聚类算法程序(python实现)。 详细信息: 基于KMeans的无监督中文文本聚类 基于DBSCAN的无监督中文文本聚类 基于LDA的无监督文本聚类 基于single pass 策略进行聚类,不...

    基于WEKA 平台的文本聚类研究与实现

    - **基于VSM的文本聚类方法的深入研究**:通过对文本聚类过程中关键环节(如特征表示、算法选择等)的详细探讨,为读者提供了系统性的理解框架。 - **实证验证**:利用真实的文本数据集(20 Newsgroup)进行实验验证...

    matlab.rar_text genetic_文本聚类_文本聚类 matlab_文本聚类matlab_遗传算法 聚类

    文本聚类是数据挖掘领域中的一个重要任务,它旨在将大量文本数据自动组织成若干个类别,使得同一类内的文本相似度较高,而不同类之间的文本相似度较低。在这个上下文中,MATLAB作为一种强大的数学计算和编程环境,常...

    Web文本聚类技术及聚类结果可视化研究

    设计并实现了一个并行K-means聚类算法和Web文本聚类原型系统,可进行并行K-means算法的划分聚类和基于层次的组平均聚类。利用几 组Web文本数据集对基本的K-means算法和改进的算法以及基于层次的组平均算法进行试验和...

    文本聚类算法的比较和分析

    本文主要针对几种常见的文本聚类算法进行了详细的介绍,并从各个算法的适用场景、初始参数的影响、算法的终止条件以及对噪声数据的敏感程度等方面进行了全面的比较与分析。通过对这些算法的深入探讨,可以为实际应用...

    java文本聚类Kmeans源码

    Java文本聚类是一种将大量文本数据组织成有结构的群组的方法,KMeans算法是其中常用的一种技术。本文将深入探讨Java实现KMeans算法在文本聚类中的应用及其相关知识点。 首先,我们要理解什么是文本聚类。文本聚类是...

    文本聚类课件(互联网信息搜索)

    文本聚类是互联网信息搜索中的一个重要技术,它主要用于组织和分类大量的文本数据,使得相似的文本归为一类,差异明显的文本则分布在不同的类别中。这一过程无需预先设定的分类信息,因此属于无监督学习。主要步骤...

    基于K-means的文本聚类实验 Java

    在本实验中,我们将深入探讨如何使用Java实现基于K-means的文本聚类算法,这是一种在数据挖掘领域广泛应用的无监督学习方法。K-means算法主要用于将数据集划分为K个不同的类别,使得同一类别的数据点之间的相似度较...

    文本聚类结果描述研究综述

    ### 文本聚类结果描述研究综述 #### 引言 文本聚类作为一种常见的文本处理技术,能够将大量未标记的文档自动划分为若干个有意义的组别(类簇),从而便于用户理解和处理大规模文本信息。然而,聚类后的结果往往...

    论文研究-基于粒子群优化的模糊文本聚类研究 .pdf

    综合上述知识点,可以看出,文档主要讨论了基于粒子群优化的模糊文本聚类算法,并对该算法进行了详细的理论分析与实验验证。通过粒子群优化算法改进模糊聚类,有效地解决了初始中心点敏感性和样本不均衡等问题,提高...

    Kmeans文本聚类java实现

    在自然语言处理领域,文本聚类是一种常见的无监督学习方法,用于将大量文本数据自动分成不同的类别,而无需预先知道类别的信息。KMeans算法是其中广泛应用的一种聚类算法,因其简单、高效而受到青睐。在Java环境中...

    LHY.rar_文本 聚类_文本聚类

    文本聚类是数据挖掘中的一个重要领域,特别是在处理大量非结构化数据时,如网络文本、文档集合、社交媒体消息等。这个"LHY.rar_文本聚类_文本聚类"压缩包包含的是一个关于文本聚类的项目,可能是一个学生在统计课程...

    kmeans文本聚类算法

    kMeans文本聚类算法是一种广泛应用的数据挖掘技术,主要用于无监督学习中的分类问题。在这个场景下,我们没有预先标记的数据,而是希望通过数据本身的相似性来自动地将数据分组。kMeans算法的核心思想是通过迭代过程...

Global site tag (gtag.js) - Google Analytics