

在信息爆炸的当下,如何高效处理海量无标注文本数据并按主题归类,是企业提升信息管理效率的核心需求。传统文本聚类方法如TF-IDF仅依赖词频统计,无法区分“自然树”与“决策树”这类多义词;Word2Vec虽能捕捉词间关系,却难以整合长文本的整体语义。随着大语言模型技术的成熟,预训练模型生成的文本嵌入为解决这一痛点提供了新路径,它能精准捕获上下文语义,将文档编码为富含整体含义的数值向量。
本文将结合实际项目经验,详细讲解如何使用Scikit-learn库,结合Sentence Transformer生成的文本嵌入,应用K-Means和DBSCAN算法完成文本聚类,并通过PCA实现可视化分析。本文内容改编自过往客户咨询项目的技术沉淀并且已通过实际业务校验,该项目完整代码与数据已分享至交流社群。

假设你突然接手了一批未分类的文档,需要按主题快速分组。传统文本聚类方法各有局限:TF-IDF只统计词频,忽略语义,比如“树很大”既可能指自然植物,也可能指机器学习模型,它无法区分;Word2Vec能学习词间关系,但对长文本的整体语境整合能力不足。 此时,大语言模型生成的文本嵌入优势凸显。以Sentence Transformer为例,它能捕获文本的上下文语义,将整篇文档编码为一个数值向量,且这些模型经过海量文本预训练,自带丰富的通用语言知识。 接下来我们逐步完成文本聚类项目,先准备Python库,再加载数据、生成嵌入、聚类分析,最后评估效果。 首先导入所需模块:
import pandas as pdimport numpy as npfrom sentence_transformers import SentenceTransformerfrom sklearn.cluster import KMeansfrom sklearn.decomposition import PCAfrom sklearn.metrics import silhouette_score, adjusted_rand_scorefrom sklearn.preprocessing import LabelEncoderimport matplotlib.pyplot as pltimport seaborn as sns# 设置可视化风格sns.set_style("whitegrid")plt.rcParams['figure.figsize'] = (12, 6)......# 省略部分可视化配置代码这里导入了数据处理库pandas、numpy,生成嵌入的SentenceTransformer,聚类算法KMeans和DBSCAN,降维用的PCA,评估指标轮廓系数和调整兰德指数,以及可视化工具matplotlib和seaborn。 接着加载数据集,我们使用公开的新闻文本数据集,其中每篇文章都有对应的主题标签:
加载后可见数据集包含数千篇文档,分为多个主题类别,这些真实标签可用于后续评估聚类效果。 现在进入核心环节:生成文本嵌入和聚类分析。 首先生成嵌入,我们选用轻量级预训练模型,它能将每篇文档转换为384维的数值向量:
# 加载预训练的嵌入模型print("正在加载嵌入模型...")embed_model = SentenceTransformer('all-MiniLM-L6-v2')
先使用K-Means算法聚类。K-Means需提前指定聚类数量,这里我们利用已知的真实类别数,实际应用中也可通过肘部法等选择合适值:
调整兰德指数(ARI)用于衡量聚类结果与真实类别的一致性,值越接近1效果越好,从结果可见K-Means在该数据集上表现良好。 再尝试DBSCAN算法。它是基于密度的聚类,无需提前指定聚类数,能自动确定聚类数量并标记离群点为噪声,但对参数敏感,需仔细调试:
为直观展示聚类效果,用PCA将高维嵌入降至2维,绘制真实类别、K-Means和DBSCAN聚类的对比图:

从可视化结果可见,在该数据集上默认参数的K-Means效果优于DBSCAN。原因有二:一是DBSCAN易受“维度灾难”影响,384维嵌入对密度-based方法挑战较大;二是该新闻数据集主题区分明显,聚类间相对分隔,适合K-Means算法。 实际项目中可根据数据特点选择算法,也可调试DBSCAN参数优化效果。Sentence Transformer等大语言模型嵌入能有效捕捉文本语义,为后续任务奠定良好基础。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。