BERTopic

GitHub
7.5k 886 非常简单 2 次阅读 昨天MIT开发框架语言模型
AI 解读 由 AI 自动生成,仅供参考

BERTopic 是一种结合 BERT 和 c-TF-IDF 技术的主题建模工具,能够生成易于解释的主题,同时保留主题描述中的重要词汇。它通过将文本嵌入与聚类算法结合,帮助用户从大量文档中提取出清晰且有意义的主题结构。

在传统主题建模方法中,主题的可解释性和灵活性往往不足。BERTopic 解决了这一问题,不仅支持多种建模方式(如引导式、监督式、动态主题等),还允许用户根据需求自定义主题或合并模型。无论是处理静态数据还是动态变化的文本流,它都能提供强大的支持。此外,新引入的零样本学习和多模态功能进一步扩展了其适用范围。

这款工具特别适合需要进行文本分析的研究人员和开发者,尤其是那些希望快速构建高质量主题模型的人。对于熟悉 Python 的用户来说,安装和使用都非常便捷。BERTopic 的独特亮点在于其对 🤗 Transformers 的深度集成,以及对多种高级功能的支持,例如结合大型语言模型生成主题描述。这些特性使其成为探索复杂文本数据的理想选择。

如果你正在寻找一个灵活、强大且易于使用的主题建模解决方案,BERTopic 无疑是一个值得尝试的选择。

使用场景

某大型电商平台的数据分析师团队每周需处理50万条用户评论,以识别产品缺陷和客户痛点,支撑产品迭代决策。

没有 BERTopic 时

  • 传统LDA模型生成的主题词孤立且模糊,例如"电池"同时关联手机和笔记本电脑,导致团队误判30%的充电问题归属。
  • 手动分类评论耗时费力,5人小组需3天完成分析,常错过促销活动前的优化窗口期。
  • 新产品评论涌入时模型无法动态更新,主题漂移严重,如智能手表评论被错误归入"耳机"类别。
  • 主题描述冗长难懂,如"与电力相关的设备组件问题",管理层难以快速理解核心问题。

使用 BERTopic 后

  • BERTopic的BERT嵌入精准捕捉语义上下文,主题自动区分"手机电池续航短"和"笔记本充电故障",误判率降至5%以下。
  • 自动化流程结合c-TF-IDF生成简洁主题名(如"充电问题"),分析时间压缩至2小时内,实时支持当日运营调整。
  • 在线增量学习功能动态吸收新数据,智能手表评论立即归入专属主题,主题漂移问题彻底解决。
  • 可解释的主题描述直接输出业务语言,管理层5分钟内掌握关键痛点,决策效率提升50%。

BERTopic让海量文本洞察从耗时负担转化为即时业务驱动力,真正实现数据驱动的产品优化。

运行环境要求

GPU
  • 可选,用于加速
  • 无具体显卡要求
内存

未说明

依赖
notes基础安装需下载预训练模型(约100MB-1GB);支持多种嵌入后端(flair/spacy等);大型数据集建议启用GPU加速;提供轻量级安装选项(可排除transformers/UMAP/HDBSCAN)
python3.10+
sentence-transformers
umap-learn
hdbscan
torch
transformers
scikit-learn
numpy
pandas
BERTopic hero image

快速开始

PyPI 下载量 PyPI - Python 构建状态 文档 PyPI - 版本 PyPI - 许可证 arXiv

BERTopic

BERTopic(一种基于 Transformer 的主题建模技术)是一种主题建模(Topic Modeling)方法,它利用 🤗 Transformer 模型库和 c-TF-IDF 生成密集聚类(dense clusters),既能创建易于理解的主题,又能保留主题描述中的关键术语。

BERTopic 支持多种主题建模技术:

引导式建模 监督式建模 半监督式建模
手动建模 多主题分布 层次化建模
基于类别的建模 动态主题建模 在线/增量建模
多模态建模 多维度建模 文本生成/大语言模型(LLM)
零样本建模 (新增!) 模型合并 (新增!) 种子词 (新增!)

对应的 Medium 文章可在此处查看此处此处。如需更详细说明,可阅读论文或查看简要概述

安装

使用 uv 安装(含 sentence-transformers):

uv add bertopic

或使用 pip

pip install bertopic

如需安装支持其他嵌入模型(embedding models)的 BERTopic,可选择以下任一方式:

# 选择嵌入后端
pip install bertopic[flair,gensim,spacy,use]

# 图像主题建模
pip install bertopic[vision]

如需轻量级安装(不含 transformers、UMAP 和/或 HDBSCAN,适用于 Model2Vec 训练或推理),请参阅本教程

快速入门

如需深入了解 BERTopic 的功能特性,可查阅完整文档,或参考以下示例:

名称 链接
从此开始 - BERTopic 最佳实践 在 Colab 中打开
🆕 新增! - 大规模数据主题建模(GPU 加速) 在 Colab 中打开
🆕 新增! - 使用 Llama 2 🦙 进行主题建模 在 Colab 中打开
🆕 新增! - 使用量化大语言模型(LLMs)进行主题建模 在 Colab 中打开
使用 BERTopic 进行主题建模 在 Colab 中打开
BERTopic 中的(自定义)嵌入模型 在 Colab 中打开
BERTopic 高级自定义 在 Colab 中打开
BERTopic 的(半)监督主题建模 在 Colab 中打开
基于特朗普推文的动态主题建模 在 Colab 中打开
arXiv 摘要主题建模 Kaggle

快速开始

我们首先从著名的 20 newsgroups(20 个新闻组)数据集中提取主题,该数据集包含英文文档:

from bertopic import BERTopic
from sklearn.datasets import fetch_20newsgroups
 
docs = fetch_20newsgroups(subset='all',  remove=('headers', 'footers', 'quotes'))['data']

topic_model = BERTopic()
topics, probs = topic_model.fit_transform(docs)

生成主题及其概率后,我们可以访问所有主题及其主题表示:

>>> topic_model.get_topic_info()

主题	计数	名称
-1	4630	-1_can_your_will_any
0	693	49_windows_drive_dos_file
1	466	32_jesus_bible_christian_faith
2	441	2_space_launch_orbit_lunar
3	381	22_key_encryption_keys_encrypted
...

-1 主题指代所有离群文档,通常被忽略。主题中的每个词描述了该主题的潜在主题,可用于解释该主题。接下来,我们查看生成的最频繁主题:

>>> topic_model.get_topic(0)

[('windows', 0.006152228076250982),
 ('drive', 0.004982897610645755),
 ('dos', 0.004845038866360651),
 ('file', 0.004140142872194834),
 ('disk', 0.004131678774810884),
 ('mac', 0.003624848635985097),
 ('memory', 0.0034840976976789903),
 ('software', 0.0034415334250699077),
 ('email', 0.0034239554442333257),
 ('pc', 0.003047105930670237)]

使用 .get_document_info,我们还可以提取文档级别的信息,例如其对应的主题、概率、是否为该主题的代表性文档等:

>>> topic_model.get_document_info(docs)

文档                                   主题	名称	                        Top_n_words                     概率    ...
I am sure some bashers of Pens...	0	0_game_team_games_season	game - team - games...	        0.200010       ...
My brother is in the market for...      -1     -1_can_your_will_any	        can - your - will...	        0.420668       ...
Finally you said what you dream...	-1     -1_can_your_will_any	        can - your - will...            0.807259       ...
Think! It's the SCSI card doing...	49     49_windows_drive_dos_file	windows - drive - docs...	0.071746       ...
1) I have an old Jasmine drive...	49     49_windows_drive_dos_file	windows - drive - docs...	0.038983       ...

🔥 提示: 使用 BERTopic(language="multilingual") 选择支持 50 多种语言的模型。

微调主题表示

在 BERTopic 中,我们可以选择多种不同的主题表示方法。它们彼此差异较大,为主题表示提供了有趣的视角和变体。一个很好的起点是 KeyBERTInspired(基于 KeyBERT 启发的主题表示方法),对许多用户而言,它能提高主题连贯性并减少停用词:

from bertopic.representation import KeyBERTInspired

# 微调主题表示
representation_model = KeyBERTInspired()
topic_model = BERTopic(representation_model=representation_model)

然而,您可能希望使用更强大的方法来描述聚类。您甚至可以使用 ChatGPT 或其他 OpenAI 模型生成标签、摘要、短语、关键词等:

import openai
from bertopic.representation import OpenAI

# 使用 GPT 微调主题表示
client = openai.OpenAI(api_key="sk-...")
representation_model = OpenAI(client, model="gpt-4o-mini", chat=True)
topic_model = BERTopic(representation_model=representation_model)

🔥 提示: 无需逐一尝试这些不同的主题表示方法,您可以在 BERTopic 中使用多角度主题表示同时建模。

可视化

训练完 BERTopic 模型后,我们可以逐个检查数百个主题以充分理解提取的主题。但这非常耗时且缺乏全局视角。相反,我们可以使用 BERTopic 中的多种可视化选项。例如,我们可以以类似 LDAvis 的方式可视化生成的主题:

topic_model.visualize_topics()

模块化

默认情况下,使用 BERTopic 进行主题建模的主要步骤是 sentence-transformers(句子嵌入模型)、UMAP(降维算法)、HDBSCAN(聚类算法)和 c-TF-IDF(主题表示算法)按顺序执行。但这些步骤之间具有一定的独立性,使 BERTopic 非常模块化。换言之,BERTopic 不仅允许您构建自己的主题模型,还能在自定义主题模型基础上探索多种主题建模技术:

https://user-images.githubusercontent.com/25746895/218420473-4b2bb539-9dbe-407a-9674-a8317c7fb3bf.mp4

您可以替换其中任何模型,甚至完全移除它们。以下步骤完全模块化:

  1. 嵌入文档
  2. 降低嵌入维度
  3. 将降维后的嵌入聚类为主题
  4. 主题向量化
  5. 加权主题词
  6. 使用一种或多种表示方法表示主题

功能

BERTopic 拥有许多功能,可能令人眼花缭乱。为解决此问题,您将找到所有方法的概述及其用途的简要说明。

常见功能

以下是对BERTopic(神经主题建模工具)中常见功能的概述。

方法 代码
拟合模型 .fit(docs)
拟合模型并预测文档 .fit_transform(docs)
预测新文档 .transform([new_doc])
访问单个主题 .get_topic(topic=12)
访问所有主题 .get_topics()
获取主题频率 .get_topic_freq()
获取所有主题信息 .get_topic_info()
获取所有文档信息 .get_document_info(docs)
获取每个主题的代表性文档 .get_representative_docs()
更新主题表示 .update_topics(docs, n_gram_range=(1, 3))
生成主题标签 .generate_topic_labels()
设置主题标签 .set_topic_labels(my_custom_labels)
合并主题 .merge_topics(docs, topics_to_merge)
减少主题数量 .reduce_topics(docs, nr_topics=30)
减少离群点 .reduce_outliers(docs, topics)
查找主题 .find_topics("vehicle")
保存模型 .save("my_model", serialization="safetensors")
加载模型 BERTopic.load("my_model")
获取参数 .get_params()

属性

训练完BERTopic模型后,模型内部会保存多个属性。这些属性部分描述了模型在拟合过程中如何存储信息。以下所有属性均以_结尾,是可用于访问模型信息的公共属性。

属性 描述
.topics_ 训练或更新主题模型后,为每个文档生成的主题。
.probabilities_ 如果使用HDBSCAN(分层密度聚类算法),则为每个文档生成的概率。
.topic_sizes_ 每个主题的大小
.topic_mapper_ 用于在主题合并/减少时跟踪主题及其映射的类。
.topic_representations_ 每个主题的前n个术语及其相应的c-TF-IDF(类TF-IDF)值。
.c_tf_idf_ 通过c-TF-IDF(类TF-IDF)计算得到的主题-术语矩阵。
.topic_aspects_ 每个主题的不同方面或表示。
.topic_labels_ 每个主题的默认标签。
.custom_labels_ 通过.set_topic_labels生成的每个主题的自定义标签。
.topic_embeddings_ 如果使用了embedding_model(嵌入模型),则为每个主题的嵌入向量。
.representative_docs_ 如果使用HDBSCAN(分层密度聚类算法),则为每个主题的代表性文档。

变体

主题建模可用于多种不同的使用场景。因此,BERTopic开发了多种变体,使得一个包可以适用于多种用例。

方法 代码
主题分布近似 .approximate_distribution(docs)
在线主题建模 .partial_fit(doc)
半监督主题建模 .fit(docs, y=y)
监督主题建模 .fit(docs, y=y)
手动主题建模 .fit(docs, y=y)
多模态主题建模 .fit(docs, images=images)
按类别主题建模 .topics_per_class(docs, classes)
动态主题建模 .topics_over_time(docs, timestamps)
分层主题建模 .hierarchical_topics(docs)
引导式主题建模 BERTopic(seed_topic_list=seed_topic_list)
零样本主题建模 BERTopic(zeroshot_topic_list=zeroshot_topic_list)
合并多个模型 BERTopic.merge_models([topic_model_1, topic_model_2])

可视化

由于评估具有一定的主观性,评估主题模型可能相当困难。可视化主题模型的不同方面有助于理解模型,并使其更容易根据您的喜好进行调整。

方法 代码
可视化主题 .visualize_topics()
可视化文档 .visualize_documents()
可视化文档层次结构 .visualize_hierarchical_documents()
可视化主题层次结构 .visualize_hierarchy()
可视化主题树 .get_topic_tree(hierarchical_topics)
可视化主题术语 .visualize_barchart()
可视化主题相似度 .visualize_heatmap()
可视化术语分数下降 .visualize_term_rank()
可视化主题概率分布 .visualize_distribution(probs[0])
可视化主题随时间变化 .visualize_topics_over_time(topics_over_time)
可视化按类别的主题 .visualize_topics_per_class(topics_per_class)

引用

要引用BERTopic论文,请使用以下bibtex参考文献:

@article{grootendorst2022bertopic,
  title={BERTopic: Neural topic modeling with a class-based TF-IDF procedure},
  author={Grootendorst, Maarten},
  journal={arXiv preprint arXiv:2203.05794},
  year={2022}
}

版本历史

v0.17.42025/12/03
v0.17.32025/07/08
v0.17.12025/07/08
v0.17.02025/03/19
v0.16.42024/10/09
v0.16.32024/07/22
v0.16.22024/05/12
v0.16.12024/04/21
v0.16.02023/11/27
v0.15.02023/05/30
v0.14.12023/03/02
v0.14.02023/02/14
v0.13.02023/01/04
v0.12.02022/09/11
v0.11.02022/07/11
v0.10.02022/04/30
v0.9.42021/12/14
v0.9.32021/10/17
v0.9.22021/10/12
v0.9.12021/09/01

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|2天前
Agent图像开发框架