返回教程列表
文本分析基础教程主题模型LDA文本分析

经典 LDA 实战:从材料预设到主题报告

以实际运行的 36 篇演示文档为例,讲解经典 LDA 如何从文档切分、词典过滤和概率分布生成主题报告,并说明主题规模、主题距离、文档概率、困惑度与一致性指标的正确解释边界。

作者:TATOOLS 研究团队|更新于 2026-09-01|4560 字|约 16 分钟读完
classic-lda
立即使用

经典 LDA 主题建模不是把整批文本各贴一个主题标签,而是在同一套主题空间里同时估计两类概率:每个主题由哪些词构成,以及每篇文档由哪些主题混合构成。

lda-classic 的功能设计围绕这条经典流程展开:先决定【一篇文档】是什么,再处理分词和词典,随后训练主题模型,最后把主题词、主题规模、主题距离、文件构成和逐文档主题概率放在同一份报告里。

本文不只解释概念。下面使用当前功能实际跑一组演示语料,并直接读取真实报告。工具设置截图来自当前任务页;报告截图来自当前分析程序的实际结果,并由当前报告组件渲染。


01

这次实际分析了什么

为了让流程和报告结构容易核对,本次使用一组自建演示语料,不把结果当作真实研究结论。

演示语料由 3 个 TXT 文件组成,每个文件包含 12 个以空行分隔的段落,共 36 个文档单元。段落内容围绕四组材料展开:

数字档案与历史文献整理;

平台规则与内容治理;

在线教育与学习反馈;

社区记忆与口述材料。

三个文件都混合了这四组内容。这样既能观察模型能否形成不同主题,也能检查【各文件主题构成】是否真的在同一主题坐标系中比较。

本次参数如下:

设置本次取值对结果的直接影响
文档主要语言中文使用中文分词与系统中文停用词
文档切分单元按段落每个空行分隔段落是一篇文档
主题数量 K4模型固定估计 4 个主题
最短文档字符数30过短段落不进入模型
最短词长2单字词不进入模型
最低文档频数2只出现于 1 篇文档的词被移除
最高文档频率比例75%出现在超过四分之三文档中的词被移除
词表规模上限50,000过滤后最多保留 50,000 个词
训练方式在线变分贝叶斯按批次更新主题参数
语料遍历次数15完整遍历语料 15 次
每文档迭代次数100每篇文档的主题分布最多迭代 100 次
Alpha / Eta对称 / 对称各主题和各词使用对称先验
随机种子42固定本次初始化,便于复现
一致性指标c_v报告用 c_v 衡量主题词共现结构
每主题展示词数12报告展示每个主题前 12 个词

02

功能的第一层设计:先让材料对号入座

任务页没有要求用户一开始就理解所有模型参数,而是先提供四类材料预设:

1

【短文本合集(一行一条)】;

2

【中篇文档合集(空行分隔)】;

3

【单部长文(按段落拆开)】;

4

【多篇成文(每个文件一篇)】。

预设会一次填入对应的切分方式、主题数、过滤阈值和训练参数,选完仍可逐项修改。本次以【中篇文档合集】为起点,再把 K 调整为 4,并将最高文档频率比例改为 75%。

当前任务页中的材料预设、文档切分和主题数量设置

— 当前任务页中的材料预设、文档切分和主题数量设置

这里最重要的设置不是 K,而是【文档切分单元】。

【按行】把每个非空行视为一篇文档,适合评论、弹幕和开放题;

【按段落】优先按空行分段,适合长文内部分析和多篇中篇材料;

【按文件】把每个文件整体视为一篇文档,适合多个独立文章或报告。

文档边界决定词语在哪个范围内共同出现。相同原文改成另一种切分方式,得到的是另一批观测,主题含义和主题比例都可能改变。


03

实际运行后,报告先交代哪些材料进入了模型

本次实际运行得到:

3 个文件;

36 个段落单元;

36 篇文档参与建模;

0 个过短单元被剔除;

过滤前 269 个词,过滤后 200 个词;

分词后 722 词次,进入模型 653 词次;

4 个主题;

困惑度 36.33;

c_v 一致性 0.4481。

实际运行后的语料与模型概况

— 实际运行后的语料与模型概况

这一块解决的是报告口径问题。

【参与建模文档数】不是上传文件数。按段落切分时,一个文件可以产生多篇文档;按行切分时,每个非空行都是一篇文档。报告同时列出各文件的切分单元数和参与建模文档数,便于发现材料是否因最短字符数或词典过滤被排除。

【建模词次】也不是原始字数。它是在分词、停用词、词长、数字和词典频率过滤之后,真正进入词袋矩阵的词语计数。


04

主题关键词展示的是主题—词概率

实际报告为每个主题列出前 12 个高概率词,并显示这些词在该主题词分布中的概率。

实际运行得到的四组主题关键词

— 实际运行得到的四组主题关键词

从词组可以看到:

主题 2 以【记忆、事件、故事、地方、档案、老照片】为主,较接近社区记忆材料;

主题 4 以【档案、记录、来源、文本、检索、识别】为主,较接近数字档案材料;

主题 1 出现【学习、课程、学生、经验】,但同时包含【规则、内容】,不是完全纯粹的教育主题;

主题 3 出现【平台、规则、反馈、数据、时间】,同时吸收了一些跨材料的通用表述。

这正是实际 LDA 结果的读取方式:主题名称需要研究者根据一组高概率词和原文概括,不能只看第一个词,也不能假定 K 等于预设的真实类别数。

同一个词可以出现在多个主题中。主题 2 和主题 4 都出现【档案】,但它在两组词中的邻近词不同:一组更接近地方记忆和材料,一组更接近文本记录、来源与检索。


05

主题规模为什么同时给两个数字

报告用两个口径描述主题规模:

主导文档占比 = 以该主题为最高概率主题的文档数 ÷ 全部有效文档数

平均权重 = 全部文档在该主题上的概率之和 ÷ 全部有效文档数

本次主题 3 的主导文档占比为 38.9%,平均权重为 38.6%;主题 2 的主导文档占比为 11.1%,平均权重为 12.0%。

实际报告中的主题规模与主题间距离图

— 实际报告中的主题规模与主题间距离图

主导文档占比只保留每篇文档的第一名主题;平均权重保留完整主题混合。一篇文档即使以主题 3 为主,仍可能把部分概率分给主题 1、2 或 4。

因此,不能把【主导文档占比】直接理解为某主题占全部篇幅的百分比。它按文档计数,不按字符数计数。


06

距离图回答的是用词是否接近

主题间距离来自主题—词概率分布之间的 Jensen—Shannon 距离。0 表示两组词概率完全相同,1 表示差异达到该距离定义的上界。

本次 4 个主题两两比较,平均距离为 0.68。主题 2 与主题 4 最近,距离为 0.62;主题 3 与主题 4 最远,距离为 0.71。

二维图只把完整距离矩阵投影到平面。气泡远近用于近似观察主题差异,气泡大小表示主导文档占比。横轴、纵轴和象限没有主题意义,旋转或翻转图形也不会改变结论。

距离较近只表示两组主题使用了较相似的词,不表示主题之间存在因果、时间顺序或社会关系。


07

文件比较和逐文档结果怎样对应

因为全部文件共享同一个模型,主题 1 到主题 4 在三个文件中具有同一套含义。报告先计算每篇文档的完整主题分布,再对同一文件内的文档求平均,形成【各文件主题构成】。

本次三个演示文件都刻意混合四组内容,因此三个文件的第一大主题都是主题 3,整体构成也较接近。这个结果符合演示语料的组织方式,并不说明真实语料中的文件必然相似。

各文件主题构成和逐文档主题分布

— 各文件主题构成和逐文档主题分布

逐文档表保留每篇文档的概率色条、主导主题、主导概率、来源文件和单元序号。例如前三篇数字档案段落都以主题 4 为主,主导概率分别约为 97.0%、96.6% 和 96.2%;第 4 篇平台审核材料则同时分配给多个主题,主题 1 的主导概率只有 53.5%。

这类边界文档比高概率文档更值得回看原文。它可能同时讨论多个议题,也可能说明当前 K 或词典设置把两个表达模式放在了相邻主题中。

报告中的 0.5 只是阅读参考线,不是模型给出的正确率阈值。主导概率是当前模型内部的概率集中程度,不是经过人工标注校准的分类准确率。


08

词典过滤为什么必须和主题一起看

模型先把每篇文档转换成词语计数,再按三层规则修剪词典:

1

低于【词的最低文档频数】的词被删除;

2

高于【词的最高文档频率比例】的词被删除;

3

超过【词表规模上限】时,只保留总词频更高的词。

文档频率指【有多少篇文档出现过这个词】,不是这个词总共出现多少次。一个词在同一篇文档里重复一百次,文档频率仍只增加一。

本次词典从 269 个词缩减到 200 个词。主题词、主题距离、困惑度和一致性都基于这 200 个词计算。修改词典阈值不是只改变一张词表,而是会重新估计整套主题。

当前功能还会在词典过小时停止建模:过滤后至少要保留 max(10,2K) 个词。这个检查避免在主题数相对词表过大的情况下继续给出形式上完整、实际无法解释的结果。


09

在线训练、Alpha 和 Eta 在页面中怎样使用

【在线变分贝叶斯】按批次更新全局主题参数,页面同时开放批处理文档数、学习率衰减指数和学习率延迟。【批量变分贝叶斯】每遍使用全部文档更新模型,学习率设置不会参与批量训练。

Alpha 控制一篇文档的主题概率更集中还是更平缓;Eta 控制一个主题的词概率更集中还是更平缓。页面允许选择对称、自动学习和自定义值,Alpha 还提供非对称模式。

这些参数不是结果展示选项。修改后模型会重新训练,主题词和文档主题概率都可能改变。比较参数时,应固定语料、文档切分、词典、K 和随机种子,只改变一个待研究设置。


10

报告建议按这个顺序读

实际报告已经把经典 LDA 的主要证据放在一个页面中。建议按以下顺序阅读:

1

【这份结果说明了什么】:确认文档数、主题数、最大主题和指标摘要;

2

【语料与模型概况】:核对切分、剔除、词典和建模词次;

3

【主题关键词】:根据词组形成暂定主题概括;

4

【主题规模】:区分主导文档占比与平均权重;

5

【主题间距离图】和【主题距离热力图】:检查主题是否重复或接近;

6

【词—主题分布热力图】:识别专属词和跨主题共用词;

7

【各主题一致性对比】:找到词组结构较松散的主题;

8

【文档归类确信度分布】:查看文档概率是否集中;

9

【各文件主题构成】:比较多个文件在共同主题空间中的平均差异;

10

【文档—主题分布】:回到具体原文核对主题解释;

11

【主题词明细】和【指标与口径】:确认词概率、参数与计算边界。

页面最多展示前 300 篇文档。完整结果还会导出三份文件:每个主题前 50 个词的概率、全部文档的完整主题概率,以及过滤后词典中的文档频数和总词频。


11

怎样比较不同 K

lda-classic 不会自动替研究者选择主题数。若要比较 K,可以对同一份处理后语料运行多次任务,例如 K 取 3、4、5、6,并固定其余设置。

比较时不要只挑一致性最高的一次,还应同时检查:

主题关键词是否形成可区分的词组;

距离图中是否出现多组近似主题;

边界文档是否大面积分散在多个主题之间;

同一批文件的主题构成是否随着 K 剧烈变化;

困惑度和同一种一致性指标如何变化。

不同一致性指标不能直接横比。u_mass 常为负数,c_v、c_uci 和 c_npmi 的构造也不相同;比较任务时应固定指标名称。


12

这份结果能够支持什么

经典 LDA 可以显示当前文档边界和词袋表示下反复出现的用词结构、每篇文档的主题混合,以及多个文件在共同主题坐标系中的平均差异。

它不保留词序和句法,不会自动给出可靠主题名称,也不能把主题当作客观存在的文本类别。高概率词共同出现说明共现结构,不证明因果关系;文件主题权重的差异也不能单独解释差异为什么出现。

本次演示尤其说明了一点:语料原本按四组内容构造,LDA 仍把部分教育、平台和通用研究用语合在相邻主题中。研究者需要结合主题词、距离、概率和原文共同命名,而不是把预设类别直接套回模型结果。


13

资料来源

Blei、Ng、Jordan:Latent Dirichlet Allocation,JMLR,2003

Hoffman、Blei、Bach:Online Learning for Latent Dirichlet Allocation,NeurIPS,2010

Röder、Both、Hinneburg:Exploring the Space of Topic Coherence Measures,WSDM,2015


END