BERTopic
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让海量文本洞察从耗时负担转化为即时业务驱动力,真正实现数据驱动的产品优化。
运行环境要求
- 可选,用于加速
- 无具体显卡要求
未说明

快速开始
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 的功能特性,可查阅完整文档,或参考以下示例:
快速开始
我们首先从著名的 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 不仅允许您构建自己的主题模型,还能在自定义主题模型基础上探索多种主题建模技术:
您可以替换其中任何模型,甚至完全移除它们。以下步骤完全模块化:
功能
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/03v0.17.32025/07/08v0.17.12025/07/08v0.17.02025/03/19v0.16.42024/10/09v0.16.32024/07/22v0.16.22024/05/12v0.16.12024/04/21v0.16.02023/11/27v0.15.02023/05/30v0.14.12023/03/02v0.14.02023/02/14v0.13.02023/01/04v0.12.02022/09/11v0.11.02022/07/11v0.10.02022/04/30v0.9.42021/12/14v0.9.32021/10/17v0.9.22021/10/12v0.9.12021/09/01常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
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 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
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 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
