用BERTopic做主题建模:把语音记录变成可执行工作

人工智能在媒体与内容产业By 3L3C

用BERTopic做主题建模,把语音转写自动归类成可执行主题:路由工单、提炼会议要点、捕捉内容选题趋势。

BERTopicBERTTopic Modeling语音转写自动化工作流内容洞察
Share:

Featured image for 用BERTopic做主题建模:把语音记录变成可执行工作

用BERTopic做主题建模:把语音记录变成可执行工作

媒体与内容团队最常见的“隐形成本”,不是写稿或剪辑,而是整理:会议录音、客户来电、采访素材、社媒评论、客服工单……信息量巨大,却很难快速回答一个简单问题:大家到底在讨论什么?

我见过不少小团队把语音转文字后丢进表格,靠人工打标签。三天后,标签体系崩了:同一个问题被写成五种说法,热点话题错过了最佳响应窗口。现实是,你不缺数据,你缺的是把文本变成主题、把主题变成动作的流程

这篇文章把 Deepgram 的示例(BERT + BERTopic)往前推进一步:不只教你“跑通代码”,更聚焦在“AI 语音助手与自动化工作流”场景里,小企业和内容团队怎么用主题建模来做归类、路由、摘要、选题、舆情与客服提效。文章属于「人工智能在媒体与内容产业」系列的一部分,你会看到它如何和内容推荐、用户画像、智能创作一起形成闭环。

为什么主题建模是语音工作流的“中间层”

直接答案:主题建模能把大量文本(尤其是语音转写)压缩成可管理的“话题簇”,让后续的自动化规则有抓手。

语音助手、呼叫中心、播客与采访生产线通常是三段式:

  1. 语音转文字(ASR):把音频变成可检索的文本
  2. 文本理解(NLP):识别意图、实体、情绪、主题
  3. 动作触发(Workflow):分配负责人、生成工单、写入CRM、提示内容选题

很多团队卡在第 2 步:文本太散,规则难写,分类器又需要标注数据。主题建模的价值在于:不需要你先定义一堆标签,也能自动把相似内容聚成一团。对小团队来说,这比“先做一套完美分类体系”务实得多。

在媒体与内容产业里,主题建模最直接的用途包括:

  • 把采访/节目转写按主题切段,辅助剪辑与要点提炼
  • 从评论、热线、私信中抓热点,支持选题与内容推荐
  • 从客服来电中找出高频问题,反推产品与FAQ建设

BERT 到 BERTopic:为什么它更适合真实语料

直接答案:BERT 类模型能理解上下文语义,BERTopic把语义向量聚类 + 类别TF‑IDF解释结合起来,既能分组也能“说清楚为什么”。

传统主题模型(比如 LDA)对短文本、口语化转写往往不友好:缺字、重复、语气词多、同义表达多。BERT(Bidirectional Encoder Representations from Transformers)擅长做的,是把句子/段落编码成语义向量:

  • “退款太慢了”
  • “钱什么时候能退回来?”

字面不一样,但语义接近,向量距离会更近。

BERTopic的做法很实用:

  1. 用 BERT(或 Sentence-BERT 等)把每条文本转成向量(embeddings)
  2. 在向量空间里做聚类(常见组合是 UMAP 降维 + HDBSCAN 聚类)
  3. class-based TF‑IDF 给每个簇挑出“代表词”,让主题可解释

我喜欢 BERTopic 的一点是:它不是只给你“第 12 号主题”,而是能把主题的关键 token 列出来,便于你把它落到业务语言里,比如“退款_到账_客服”。

10分钟跑通:Python 用 BERTopic 做主题建模

直接答案:用 BERTopic().fit_transform(docs) 就能得到每条文档的主题编号和概率,然后再用 get_topic_info() 看主题概览。

下面是一个最小可用版本(来自原文思路,做了更贴近生产的整理)。先安装依赖:

pip install bertopic scikit-learn numpy pandas matplotlib umap-learn

1)先用公开数据集熟悉输出

sklearn 的 20 Newsgroups 练手很合适:将近 20k 文档(原文为 18846),噪声高、主题多,接近真实世界的“杂”。

from bertopic import BERTopic
from sklearn.datasets import fetch_20newsgroups

docs = fetch_20newsgroups(subset="all")["data"]
model = BERTopic()

topics, probs = model.fit_transform(docs)

接着看主题频次与概览:

freq = model.get_topic_freq()
info = model.get_topic_info()

你通常会看到一个特殊主题 -1离群点(outliers)。别急着把它当失败。

主题 -1 往往意味着:文本太短、太碎、信息量不足,或属于长尾话题。对语音转写来说,这很常见。

2)把主题“翻译”成业务能用的标签

主题建模输出的词表需要你做一次业务映射。方法很简单:

  • 取每个主题 Top-N 关键词
  • 加上少量代表性样本文本
  • 人工给它命名(一次性工作)
for topic_id in info["Topic"].head(20):
    if topic_id == -1:
        continue
    print(topic_id, model.get_topic(topic_id)[:5])

在小企业里,这个命名表就是后续自动化的“路由字典”,例如:

  • 主题 A:退款/账单 → 自动建工单给财务
  • 主题 B:功能缺失/建议 → 发到产品反馈看板
  • 主题 C:内容版权/侵权 → 触发法务审核

从“主题可视化”到“工作流可执行”

直接答案:可视化不是为了好看,而是为了检查聚类是否合理、离群点是否过多,以及是否需要调整分段、清洗与阈值。

原文用 UMAP + matplotlib 做二维散点图,把 Top 10 主题画成簇。这个动作在生产里很有用,因为你能一眼看到:

  • 某些主题是否互相混在一起(可能需要更好的文本分段)
  • 是否出现“一个巨大主题”吞掉大量文本(可能是停用词/口头禅污染)
  • -1 离群点是否过多(可能是转写质量或文本太短)

如果你要把它接到语音助手与自动化工作流,我建议在可视化之前先做三件事:

1)按“语义片段”切分转写

会议或来电转写通常很长。主题模型更吃“段落”而不是“整篇”。切分策略可以是:

  • 按时间窗口(如每 30–60 秒)
  • 按说话人轮次(speaker turn)
  • 按标点与停顿(需要转写里有断句)

切得太长:一个片段多个主题。切得太短:离群点增加。

2)做轻量清洗,但别“洗过头”

保留信息,去掉噪声。常见做法:

  • 去掉邮件签名/话术模板/免责声明
  • 统一数字、货币、日期格式(可选)
  • 删掉明显无意义的重复(如长串“嗯嗯嗯”)

不建议:把所有停用词都删光。对 BERT 向量来说,语序与结构也有信息。

3)把主题概率用作阈值,减少误路由

fit_transform 会返回 probs。你可以规定:

  • prob < 0.35 → 进入“人工复核队列”
  • 0.35–0.6 → 自动打标签但不触发关键动作
  • > 0.6 → 直接触发工作流(建单/通知/写入CRM)

这一步能显著降低“自动化把事情做错”的风险。

小企业的落地场景:从语音到行动的三条路径

直接答案:把 BERTopic 当成“自动标签器”,再把标签接到你现有的表单、CRM、工单或内容生产工具里。

这里给三个特别现实的路径,和「AI语音助手与自动化工作流」强相关。

1)客服来电:主题路由 + FAQ 补全

流程:来电录音 → 转写 → BERTopic 打主题 → 触发动作。

你会得到两类收益:

  • 路由:退款类给财务/售后,功能类给产品支持
  • 沉淀:每周统计 Top 10 主题,把代表性问法写进 FAQ 和机器人话术

我偏向的做法是:先做“周报级”洞察,再逐步自动化到“实时路由”。原因很简单:你需要先确认主题是否稳定。

2)会议与销售电话:自动提取“争议点”和“待办簇”

把会议记录按主题聚类后,你能更快发现:

  • 同一问题反复出现(流程设计有缺陷)
  • 某个风险被不同人用不同说法提到(需要统一口径)

进一步可以把“主题 + 关键词”作为触发器:

  • 出现“合同/付款条款”主题 → 自动提醒法务审阅
  • 出现“上线延期/阻塞”主题 → 自动在项目看板生成风险卡片

3)媒体内容团队:评论/私信/热线的选题雷达

内容增长往往输在“反应慢”。主题建模能把零散反馈变成稳定的主题曲线:

  • 哪类吐槽在上升?
  • 哪类需求开始出现?
  • 哪类谣言或误解正在扩散?

结合内容推荐与用户画像,你还能做更细的拆分:不同人群在讨论哪些主题,从而更精准地调整栏目与脚本。

常见问题:主题建模做不准怎么办?

直接答案:大多数“不准”来自数据切分与噪声,而不是模型本身;先解决输入,再调参。

你可以按下面顺序排查:

  1. 转写质量:专有名词错得离谱,主题必然散。先加自定义词表/热词(如果你的ASR支持)
  2. 分段策略:长段落多主题、短段落多离群点,找到你的“甜点区间”
  3. 领域嵌入模型:通用 BERT 对行业术语可能不敏感,可换 Sentence-BERT 或领域模型
  4. 聚类参数:UMAP 的 n_neighborsmin_dist 和 HDBSCAN 相关参数会影响簇的数量与紧密度
  5. 主题命名与合并:业务上相近的两个主题,合并比强行分开更实用

一句我很认同的标准是:主题模型不需要“学术上完美”,它需要“能稳定触发正确动作”。

把 BERTopic 接入你的 AI 语音助手:最小可行架构

直接答案:把“主题推断”做成一个独立服务,输入文本片段,输出主题ID、置信度、关键词,然后交给工作流引擎做事。

最小可行架构(MVP)可以是:

  • ASR:语音 → 文本(带时间戳更好)
  • Segmenter:按轮次或时间切段
  • Topic Service:BERTopic 推断(返回 topic_id + prob + top_terms
  • Router:根据主题映射表触发动作(工单、邮件、IM通知、写入表格/CRM)

当你把这条链路跑通,你就拥有一个可以不断迭代的“理解层”。后续无论是加入情绪识别、意图识别,还是接内容推荐系统,都不会推倒重来。

现在该做什么:先从一周的数据开始

主题建模最怕“想得很大,起步很慢”。我建议从一周语音数据开始(比如 200–2000 段转写),用 BERTopic 先做三件事:

  1. 产出 Top 20 主题与代表性样本
  2. 给其中 Top 10 主题起业务名,建立路由表
  3. 选 1 个动作做自动化(例如:自动建工单或自动发周报)

当主题开始稳定,你就会发现它不只是“文本分析技巧”,而是内容产业的效率底座:让语音助手更懂用户,让内容团队更快抓住趋势,让小企业用更少的人做更多的事。

下一个问题也值得你带回团队讨论:如果你能每周自动得到“用户在说什么”的主题雷达,你最先会优化哪条业务流程?