第五章:文本聚类和主题建模

文本聚类(一)—— LDA 主题模型 目录文本聚类一、LDA 主题模型1.1 加载数据集1.2 数据清洗、分词1.3 构建词典、语料向量化表示1.4 构建 LDA 模型1.5 小结 文本聚类 因工作需要,近期需要做一些文本聚类方面的事情,算法方面主要选择的是传统的机器学习算法,主要尝试的是 LDA 主题模型和 K-Means 聚类算法,使用的数据集是 THUCNews 新闻文本分类数据集,其中只使用了训练集 cnews.train.txt 部分,下面我们首先尝试 LDA 主题模型算法: 下面首先导入一些需要用到的算法包: import war. 阅读详情

目录

一、概述

二、获取数据集

三、文本聚类的通用流程

3.1  文本转embedding

3.2 降低嵌入的维度

3.3 使用聚类算法

3.4 检查聚类

四、从文本聚类到主题建模

4.1 BERTopic:一个模块化的主题建模框架

4.2 BERTopic的模块化

4.3 添加一个特殊的乐高积木

4.3.1 KeyBERTInspired

4.3.2 MMR(Maximal Marginal Relevance)

4.3.3 文本生成乐高积木

4.3.4 可视化

无、总结


第四章:文本分类-CSDN博客https://blog.csdn.net/m0_67804957/article/details/145822178

一、概述

文本聚类:根据文本的语义内容、含义和关系将相似的文本分组。

如下图所示,语义相似的文档聚类不仅有助于高效地对大量非结构化文本进行分类,还能实现快速的探索性数据分析。

聚类非结构化文本数据

近年来,语言模型的发展使得文本能够以上下文和语义的方式进行表示,这增强了文本聚类的有效性。

文本聚类是一种无监督无标注任务,允许创造性地提出解决方案,并且有多种应用,例如发现异常值、加速标注以及发现错误标注的数据。

主题建模:从文本数据中发现抽象主题,通常使用关键词或关键短语描述,并且理想情况下有一个总体的标签。

主题建模是一种为文本文档聚类赋予意义的方法

在本章中,我们将首先探索如何使用嵌入模型进行聚类,然后转向一种受文本聚类启发的主题建模方法,即BERTopic。

文本聚类和主题建模探索了将各种不同的语言模型结合起来的创造性方法。我们将探索如何将仅编码器(嵌入)、仅解码器(生成)甚至经典方法(词袋模型)结合起来,从而产生令人惊叹的新技术和流程。

二、获取数据集

在本章中,我们将在ArXiv的文章上运行聚类和主题建模算法。ArXiv是一个开放获取的学术文章平台,主要涵盖计算机科学、数学和物理学等领域。为了与本书的主题保持一致,我们将探索计算与语言领域的文章。数据集包含1991年至2024年从ArXiv的cs.CL(计算与语言)部分的44,949篇摘要。

加载数据,并为每篇文章的摘要、标题和年份创建单独的变量:

# 从Hugging Face加载数据
from datasets import load_dataset
dataset = load_dataset("maartengr/arxiv_nlp")["train"]

# 提取元数据
abstracts = dataset["Abstracts"]
titles = dataset["Titles"]

三、文本聚类的通用流程

文本聚类允许发现你可能熟悉或不熟悉的模式。它可以帮助直观地理解任务(例如分类任务)及其复杂性。因此,文本聚类不仅仅是一种快速的探索性数据分析方法。

尽管文本聚类有多种方法,从基于图的神经网络到基于质心的聚类技术,但一种流行的通用流程涉及三个步骤和算法:

  1. 使用嵌入模型将输入文档转换为嵌入向量。

  2. 使用降维模型降低嵌入向量的维度。

  3. 使用聚类模型找到语义相似的文档组。

3.1  文本转embedding

第一步是将我们的文本数据转换为嵌入,如下图所示。回想一下前面章节的内容,嵌入是文本的数值表示,旨在捕捉其含义。

第一步:我们使用嵌入模型将文档转换为嵌入

选择针对语义相似性任务优化的嵌入模型对于聚类尤为重要,因为我们试图找到语义相似的文档组。

正如我们在前一章所做的那样,我们将使用MTEB排行榜来选择嵌入模型。我们需要一个在聚类任务上得分不错且足够小以快速运行的嵌入模型。我们不再使用前一章中使用的“sentence-transformers/all-mpnet-base-v2”模型,而是改用“thenlper/gte-small”模型。这是一个更新的模型,在聚类任务上优于之前的模型,并且由于其较小的尺寸,推理速度更快。

from sentence_transformers import SentenceTransformer

# 为每个摘要创建嵌入
embedding_model = SentenceTransformer("thenlper/gte-small")
embeddings = embedding_model.encode(abstracts, show_progress_bar=True)

我们来检查一下每个文档嵌入包含多少个值:

# 检查生成的嵌入的维度
embeddings.shape

>> 输出结果为 (44949, 384)

每个嵌入包含384个值,这些值共同表示文档的语义表示。你可以将这些嵌入视为我们想要聚类的特征。

3.2 降低嵌入的维度

在聚类嵌入之前,我们需要考虑其高维度。随着维度数量的增加,每个维度中可能的值呈指数级增长。在每个维度中找到所有子空间变得越来越复杂。

因此,高维数据对于许多聚类技术来说可能是一个问题,因为识别有意义的聚类变得更加困难。

相反,我们可以利用降维技术。如下图所示,这种技术允许我们将数据从高维空间压缩到低维空间。降维技术的目标是通过找到低维表示来保留高维数据的全局结构。

降维允许将高维空间中的数据压缩到低维表示

请注意,这是一种压缩技术,底层算法并不是随意删除维度。为了帮助聚类模型创建有意义的聚类,降维是我们聚类流程的第二步,如下图所示。

第二步:使用降维技术将嵌入压缩到低维空间

常见的降维方法有主成分分析(PCA)和均匀流形近似与投影(UMAP)。对于这个流程,我们选择UMAP,因为它比PCA更好地处理非线性关系和结构。

注意

降维技术并非完美无缺。它们无法完美地将高维数据压缩到低维表示中。这个过程总会丢失一些信息。在降低维度和保留尽可能多的信息之间需要找到平衡。

为了执行降维,我们需要实例化UMAP类并将生成的嵌入传递给它:

from umap import UMAP

# 将输入嵌入从384维降低到5维
umap_model = UMAP(
    n_components=5, min_dist=0.0, metric='cosine', random_state=42
)
reduced_embeddings = umap_model.fit_transform(embeddings)

我们可以使用n_components参数来决定低维空间的形状,即5维。一般来说,5到10之间的值能够很好地捕捉高维全局结构。

min_dist参数是嵌入点之间的最小距离。我们将这个值设置为0,因为这通常会产生更紧密的聚类。我们将metric设置为cosine,因为基于欧几里得距离的方法在处理高维数据时存在问题。

需要注意的是,在UMAP中设置random_state可以使结果在不同会话中可复现,但会禁用并行化,从而减慢训练速度。

3.3 使用聚类算法

第三步是聚类降维后的嵌入,如下图所示。

第三步:我们使用降维后的嵌入对文档进行聚类

常见聚类算法

虽然常见的选择是基于质心的算法(如k-means),它需要生成一组聚类,但我们事先不知道聚类的数量。

相反,基于密度的算法可以自由计算聚类的数量,并且不会强迫所有数据点都属于某个聚类,如下图所示。

聚类算法不仅影响聚类的生成方式,还影响其呈现方式

一种常见的基于密度的模型是HDBSCAN。如下图所示

HDBSCAN是DBSCAN聚类算法的层次变体,允许在不需要明确指定聚类数量的情况下找到密集的(微观)聚类。作为一种基于密度的方法,HDBSCAN还可以检测数据中的离群点,这些离群点不属于任何聚类。换句话说,它们会被忽略。由于arXiv文章可能包含一些小众论文,使用能够检测离群点的模型可能会很有帮助。

与前面的包一样,使用HDBSCAN非常简单。我们只需要实例化模型并将降维后的嵌入传递给它:

from hdbscan import HDBSCAN

# 我们拟合模型并提取聚类
hdbscan_model = HDBSCAN(
    min_cluster_size=50, metric="euclidean", cluster_selection_method="eom"
).fit(reduced_embeddings)
clusters = hdbscan_model.labels_

# 我们生成了多少个聚类?
len(set(clusters))

>> 输出结果为 156

使用HDBSCAN,我们在数据集中生成了156个聚类。如果想生成更多聚类,我们需要降低min_cluster_size的值,因为它表示聚类可以接受的最小大小。

尝试用bert做文本聚类 尝试用bert做文本聚类 以前文本聚类多以TF-IDF构建词权重的方法进行,在本文中尝试用bert提取的向量做文本聚类。对于bert模型,尝试提取不同层的特征,尝试对bert做fun-tune,观察相应特征对应的文本聚类的效果 数据 数据使用的是百度2020语言比赛的数据,该数据是标注并分类好的,所以在聚类的情况下,省去了聚类时对k值的搜索,同时可以可以根据标注好的数据和聚类得到的数据比较,从侧面评价聚类的效... 阅读详情

相关推荐

第五章 目标检测中K-means聚类生成Anchor box以及Kmeans和Kmeans++(工具)

k-means是非常经典且有效的聚类方法,通过计算样本之间的距离(相似程度)将较近的样本聚为同一类别(簇)。使用k-means时主要关注两个问题(个人认为):1.如何表示样本与样本之间的距离(核心问题),这个一般需要根据具体场景去设计,不同的方法聚类效果也不同,最常见的就是欧式距离。2.分为几类,这个也是需要根据应用场景取选择的,也是一个超参数。1 手动设定簇的个数k,假设k=2。

专注于人工智能学习,总结 1930

Python数据分析与挖掘实战第五章笔记之聚类分析

#聚类分析: # 聚类分析是在没有给定划分类别的情况下,根据数据相似度进行样本分组的一种方法。可以建立在无类标记的数据上,是一种非监督的学习算法。划分原则是组内距离最小化,组间距离最大化。 # 常用的聚类方法: # 1、划分方法:K-Means(K均值),K-Medoids(K-中心点),Clarans算法 # 2、层次分析方法:BIRCH算法(平衡迭代规约和聚类),CURE算法(代表点聚类),C...

qq_41775711的博客 1516

【主题建模】一种基于深度学习的主题建模方法:BERTopic(理论篇)

在我的博客中已经写了很多关于主题建模的内容,当你准备了解 BERTopic 时,默认你已经知道了 LSA、pLSA、NFM、LDA 等传统的主题建模方法。关于主题建模的前置知识我在这里不做赘述,感兴趣的同学可以看看我前几篇博客。学习 BERTopic 需要一定的机器学习基础,让我们一起开始吧!

Code · Cloud · Think · Repeat 9884

从零开始大模型开发与微调:文本主题的提取:基于TFIDF

在海量文本数据的处理和分析中,自动提取文本的主题或关键词对于信息检索、内容推荐、文本分类以及语义理解等领域具有重要意义。TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的技术,用于衡量一个词语在一个文档集合中的重要性。它通过计算词语的出现频率(TF)以及该词语在整个文档集合中的稀有性(IDF)来评估词语的重要性。TF-IDF 是一种用于文本挖掘和信息检索的指标,用于评估词语在文档集合中的相对重要性。

AI天才研究院 1116

【数据聚类】第五章第一节:基于网格的聚类算法概述

尽管基于网格的聚类算法能在短时间内完成聚类,但同时也易受到下列类型数据的干扰。对于这两种类型数据,解决方法分别为。对单元按照密度进行排序。

快乐江湖的博客 1703

BERTopic主题建模实战教程:从原理到代码,告别LDA调参玄学

主题建模是文本挖掘中的核心任务,传统LDA依赖概率推断,常面临主题数预设、停用词调优和结果不可解释等痛点。随着嵌入表示与聚类技术的发展,新一代主题模型以“向量化+聚类+关键词抽取”的模块化流水线,让主题发现从统计玄学转向可控的工程实践。BERTopic正是这一思路的代表,它通过文本向量化、UMAP降维、HDBSCAN聚类和c-TF-IDF表征自动生成清晰主题,无需预设主题数,对中文语料也有较好支持。该方法适用于客服工单分类、舆情分析、科研文献梳理等场景,帮助从业者快速从原始文本中获得可解读、可复现的主题结构

weixin_34232744的博客 343

文本聚类效果差?90%问题出在文档表示阶段

文本聚类是自然语言处理中的基础任务,其核心在于将非结构化文本转化为可计算的向量表示。原理上,文档表示质量直接决定后续聚类算法的上限——TF-IDF权重未归一化、余弦相似度缺失L2标准化,将导致质心漂移与距离失真。技术价值体现在:避免盲目调参,优先优化特征工程即可显著提升F1值与主题一致性。典型应用场景包括电商评论客户分群、保险保单风险识别、新闻主题发现等。本文聚焦文档表示这一关键前置环节,结合北大研究生课真实教学推演,详解TF-IDF标准化、TruncatedSVD降维、ngram特征增强等可复现工程实践。

weixin_32830601的博客 263

Shader之——花草动画shader

今天 ,接到了个需求,花草的动画。谈到花草动画,立马就想到顶点动画,让顶点动起来就可以实现了。但是有个问题,所有的草都往一个方向运动,这个就麻烦了。因为在shader里没有随机这种概念,提到最多的是用一张噪声图来模拟。在网上搜索了一下,发现有更好的办法,就是用每个顶点到一个点的距离来控制动画的开始,毕竟每个顶点到同一个点的距离很少是一样的。 float dis = distance ...

baicaishisan的博客 2173

为什么我把「大模型Clouder认证:基于百炼平台构建智能体应用」作为大模型学习的第一站?从 0 到拿证全流程经验分享

【摘要】作为一个刚拿下「大模型 Clouder 认证:基于百炼平台构建智能体应用」的过来人,想在开头就和大家聊聊这个认证的特殊意义 —— 在企业加速 AI 落地的今天,能用低代码快速构建智能体应用,已经成为 AI 从业者的核心竞争力。无论是企业微信客服提效、钉钉机器人自动化办公,还是网站智能助手升级,这些场景化能力正是当下数字化转型的刚需。

davidkorhenn的博客 1518

2023年全国赛C题《 电容电感测量装置》设计报告

参考下面网站的方案参考LCR测试仪,基本工作原理为给DUT加上正弦激励信号,然后测得该DUT两端的电压和流过DUT的电流,即可通过计算得到DUT的性质和参数。对于一个理想电容,电流相位应该超前电容两端电压90°。然而实际的电容存在损耗,可以等效为一个理想电容Cp​和一个理想电阻Rp​的并联,因此电流超前电压的相位将小于90°,这个角度差即为损耗角。假设DUT两端电压V˙Vcosωt,流过DUT的电流为I˙Isinωt−φ。

moerjie的博客 4799

ECN实战指南:如何用SAP系统搞定工程变更(附库存处理避坑技巧)

本文详细解析了如何在SAP系统中高效执行工程变更通知(ECN),特别聚焦PP模块的操作流程与库存处理技巧。通过实战案例和系统操作指南,帮助制造业企业避免库存混乱和生产中断,实现从创建到生效的全流程管理。

m5n6o7的博客 1073

别再手动找触点了!EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战

本文详细解析EPLAN线圈触点映像的3种显示方式与F键/Ctrl+B快捷键实战技巧,帮助电气设计工程师提升图纸操作效率。通过精简编号、路径栏显示和元件旁可视化三种模式的应用场景对比,结合快捷键肌肉记忆训练法,实现触点快速定位与管理,大幅减少手动查找时间。

weixin_42522964的博客 476

YOLOv11涨点改进 | Conv篇/小目标改进 | YOLOv11引入SPDConv卷积特征无损下采样模块,增加YOLOv11小目标P2检测层(助力小目标任务高效涨点)

本文提出了一种创新的SPDConv模块来优化YOLOv11模型,通过空间到深度(SPD)层和非步幅卷积层实现特征无损下采样。该方法有效解决了传统CNN中因跨步卷积和池化层导致的细粒度信息丢失问题,特别提升了小目标检测性能。实验表明,SPDConv在目标检测和图像分类任务中显著优于现有SOTA模型。文章详细介绍了模块原理、核心代码实现,并提供了YOLOv11集成SPDConv的具体方法,包括配置文件修改和P2层增强等优化技巧。该技术为计算机视觉任务提供了一种高效的特征保留方案。

Ai缝合怪、助力小伙伴高效发论文 583

基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 313

SI案例分享--考虑ESD保护二极管的差分线阻抗仿真

PCB设计中的cut out参考面早已是SI评估中常用的阻抗优化方式,通过合理的仿真建模,可以提供合适的设计参考,并保持与测试结果的高度一致性。

一只豌豆象的博客 1421

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: 第四章:文本分类
下一篇: 第六章:提示词工程
無量空所
博客等级 码龄5年 1345粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值