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

LDA主题数评估完整教程:从困惑度拐点和主题一致性,到轮廓系数与信息准则,再到推荐主题数的取法

主题数取 5 还是 8,审稿人问起来怎样回答?这篇教程把定 K 当成一个模型选择问题,说明 TATOOLS 的【LDA主题数评估】怎样在设定的范围内逐个拟合 LDA,并对每个主题数算出困惑度、两种主题一致性、轮廓系数和信息准则。文中用五组数字手算 Kneedle 困惑度拐点,用两个主题手算 UMass 一致性,用词表和片段数算出 AIC 与 BIC 各自对多一个主题的惩罚。最后讲 TATOOLS 按 c_v 峰值、困惑度拐点、轮廓系数峰值的顺序给出推荐主题数的规则,主题数量范围怎样设,报告怎样读,并给出论文方法部分的写法示例。

作者:TATOOLS 研究团队|更新于 2026-09-23|5951 个字符|约 20 分钟读完
lda-perplexity
立即使用

准备对三百段租房论坛的帖子做 LDA 主题建模,第一个问题就卡住了,主题数 K 该取几。取 3,房租、押金和维修可能挤在同一个主题里;取 15,同一件事可能被拆成好几个主题,每个主题只剩零星几段。论文审稿人也常问这一句,为什么是 6 个主题,不是 5 个或 8 个。

主题数是 LDA(潜在狄利克雷分配,一种概率主题模型)里最关键、也必须由研究者事先给定的参数。统计上,这是一个模型选择问题,同一批材料按不同的 K 各拟合一次,再用几把尺子比较哪个 K 最合适。

TATOOLS 的【LDA主题数评估】专门做这一步。【上传文档】并设定【主题数量范围】以后,TATOOLS 在范围内逐个取 K 拟合 LDA,对每个 K 算出困惑度、两种主题一致性、轮廓系数、对数似然、AIC 和 BIC,画成曲线,并按固定的规则给出一个推荐主题数。它只评估主题数,定下 K 以后,再到主题建模工具里正式建模。

这篇教程先讲主题数为什么难定,再逐个讲每把尺子量的是什么,配上可以手算的例子,最后讲 TATOOLS 怎样综合这些信号给出推荐、报告怎样读、论文里怎样写。

01

主题数为什么难定

LDA 由 Blei、Ng 和 Jordan 2003 年提出,它假设每段文字由几个主题按比例混合而成,每个主题是词表上的一个概率分布。K 定了,模型才知道要找几个这样的分布。

K 太小,不同的话题被迫共用一个主题,主题词混杂,读起来像两件事拼在一起;K 太大,一个话题被拆散,出现几个几乎一样的主题,或者只由几段文字撑起来的零碎主题。更麻烦的是,模型拟合得好不好和人读起来清不清楚,是两回事。Chang 等人 2009 年做过一个著名的人工评测,请人从一组主题词里挑出混进去的外来词,结果按统计拟合更优的模型,主题反而更难读。

所以定 K 要同时看几类指标。拟合类指标看模型对材料的解释能力,可解释类指标看主题词是不是讲一件事,结构类指标看各段文字能不能按主题清楚地分开。TATOOLS 的【LDA主题数评估】三类都算,并且把它们画在同一个横轴上,一眼能看出各把尺子在哪个 K 上意见一致。

02

材料怎样变成词袋

TATOOLS 把所有上传的文件合成一个语料池,一起评估主题数。材料先按自然段切分,短的自然段合并,合到将近一千字为止,太短的碎片丢掉;自然段太少时改按句子合并。每个片段在 LDA 里就是一篇文档。

片段分词以后去掉停用词,工具页的【自定义停用词】可以补充材料里特有的泛泛的词。【文档主要语言】选中文或英文,决定分词和停用词的处理方式。几乎每段都有的词不进入词表,剩下的词按出现次数组成词袋,也就是每段一行、每个词一列的计数表。报告的【语料规模】写明这次一共有几个文件、多少个片段、词表里有多少个词,后面所有曲线都建立在这三个数上。每个 K 的模型用 Hoffman、Blei 和 Bach 2010 年提出的在线变分推断拟合,随机起点固定。

03

困惑度和它的拐点

困惑度

困惑度(Perplexity)衡量模型对这批词有多意外。

· · ·

困惑度 = exp( − log p(全部词 | 模型) ÷ 全部词次 )

平均每个词的对数似然是 −7 时,困惑度约为 exp(7) ≈ 1097,相当于模型每猜一个词,要从一千多个同样可能的词里挑。困惑度越低,模型对材料越不意外。

K 越大,模型越灵活,困惑度通常一路下降,不会自己停在某个 K 上。所以看困惑度,看的是曲线在哪里从陡降变平缓,也就是拐点。

拐点怎样找

TATOOLS 用 Satopää 等人 2011 年提出的 Kneedle 方法找拐点。把横轴和纵轴都缩放到 0 到 1,连一条从首点到尾点的直线,曲线上离这条直线最远的点就是拐点。

K 困惑度 缩放后的困惑度 直线在这里的高度 两者之差
2 1100 1 1 0
3 740 0.294 0.75 0.456
4 630 0.078 0.5 0.422
5 600 0.020 0.25 0.230
6 590 0 0 0

缩放后的困惑度 = (困惑度 − 590) ÷ (1100 − 590)。从 2 到 3 困惑度掉了 360,从 3 到 4 只掉了 110,之后几乎不动。差值最大的是 K = 3,这就是困惑度拐点。

TATOOLS 的【困惑度】曲线下面写明拐点落在哪个 K。困惑度在全部片段上计算,同一次评估里各个 K 之间可以比较;换了材料或停用词,数值就不能再拿来比。

04

主题一致性

主题一致性(Topic Coherence)看一个主题的高权重词是不是经常一起出现。一起出现得多,读起来就像在讲一件事。TATOOLS 算两种。

UMass 一致性

Mimno 等人 2011 年提出 UMass 一致性,只用本批材料内部的共现就能算。把主题的前几个词按权重排好,每个词都和排在它前面的词配对。

· · ·

UMass = 平均 ln[ (D(wᵢ, wⱼ) + 1) ÷ D(wⱼ) ]

wⱼ:排在前面的词;D(w):含有 w 的片段数

D(wᵢ, wⱼ):同时含有两个词的片段数

一个主题的前三个词是租金、押金、房东。

· · ·

D(租金) = 20,D(押金) = 12

D(租金, 押金) = 10,D(租金, 房东) = 9,D(押金, 房东) = 6

押金配租金 ln(11 ÷ 20) ≈ −0.598

房东配租金 ln(10 ÷ 20) ≈ −0.693

房东配押金 ln(7 ÷ 12) ≈ −0.539

平均 ≈ −0.61

另一个主题的前三个词是租金、学校、客服,D(学校) = 10,三个词几乎不在同一段出现。

· · ·

学校配租金 ln(2 ÷ 20) ≈ −2.303

客服配租金 ln(1 ÷ 20) ≈ −2.996

客服配学校 ln(1 ÷ 10) ≈ −2.303

平均 ≈ −2.53

UMass 通常是负数,越接近 0,主题内的词共现越紧密。−0.61 的主题读起来是一件事,−2.53 的主题像是拼凑的。

c_v 一致性

Röder、Both 和 Hinneburg 2015 年系统比较了几十种一致性的构造方法,c_v 和人工评分的相关最高。它在滑动窗口里统计共现,用归一化点互信息(NPMI,把两个词的共现紧密程度缩放到 −1 到 1)给每个词建一个向量,再比较每个词的向量和整组词的向量有多相似,取值在 0 到 1 之间,越高越好。

TATOOLS 对每个 K 算出全部主题的平均一致性,【CV 主题一致性】和【UMass 主题一致性】各画一条曲线。一致性不会随 K 单调变化,常常在中间某个 K 上达到峰值。两条线指向不同的 K 时,说明两种口径看法不一,这时优先参考 c_v。

05

轮廓系数:各段能不能按主题分开

LDA 给每段文字一个主题比例,比如 (0.8, 0.1, 0.1) 表示这段八成在讲主题 1。主题分得好,各段的主题比例应该聚成清楚的几团。

TATOOLS 对每个 K,把各段的主题比例按距离分成 K 组,再算轮廓系数。

· · ·

s(i) = (b(i) − a(i)) ÷ max(a(i), b(i))

a(i):i 到同组其他片段的平均距离

b(i):i 到最近的另一组片段的平均距离

一个片段离自己这组近、离别的组远,s 接近 1;站在两组的交界上,s 接近 0。全部片段的平均值画成【轮廓系数】曲线,峰值所在的 K,是各段按主题分得最开的一档。整条线都接近 0,说明这批材料的各段在主题上本来就混在一起,这条信号参考价值有限。

06

对数似然与信息准则

对数似然是模型对全部片段的解释能力,越高越贴合,但 K 越大它几乎一定越高。信息准则在对数似然上加一个按参数个数计的惩罚,越小越好。

· · ·

AIC = −2 × 对数似然 + 2 × 参数个数

BIC = −2 × 对数似然 + 参数个数 × ln(片段数)

参数个数 = K × (词表大小 − 1) + (K − 1)

AIC 由 Akaike 1974 年提出,BIC 由 Schwarz 1978 年提出。手算一个例子,词表 1000 个词,片段 200 个。

· · ·

参数个数 = K × 999 + K − 1 = 1000K − 1

多一个主题,多 1000 个参数

AIC 的惩罚多 2 × 1000 = 2000

BIC 的惩罚多 1000 × ln 200 ≈ 5298

从 4 个主题加到 5 个,对数似然提高了 1800。AIC 的变化是 −2 × 1800 + 2000 = −1600,变小了,AIC 支持 5 个;BIC 的变化是 −3600 + 5298 = +1698,变大了,BIC 支持 4 个。BIC 的惩罚更重,偏向更少的主题。

LDA 的参数个数随词表大小成倍增长,BIC 常常在区间最左端最小。TATOOLS 把【对数似然】【AIC】【BIC】三条曲线画在报告里,作为拟合与复杂度的对照,推荐规则不用它们。

07

推荐主题数怎样定

TATOOLS 从三路信号里各读出一个 K,再按固定的优先顺序取一个。

顺序 信号 读法
1 c_v 一致性 取峰值所在的 K
2 困惑度 取拐点所在的 K
3 轮廓系数 取峰值所在的 K
4 都读不出 取区间中点

c_v 排在第一,因为它和人读主题的感受最接近;困惑度拐点其次,它说明再多加主题收益已经不大;轮廓系数再次。接着前面的例子看一遍。

K 困惑度 c_v 轮廓系数
2 1100 0.38 0.41
3 740 0.46 0.52
4 630 0.51 0.47
5 600 0.44 0.39
6 590 0.42 0.36

困惑度拐点在 3,轮廓系数峰值在 3,c_v 峰值在 4,推荐主题数是 4。两路信号指向 3、一路指向 4,说明 3 和 4 都值得试,正式建模时可以两个都跑一遍,读主题词再定。

实际能扫描的 K 还有上限,不能超过片段数减一,也不能超过词表里的词数减一。设定的范围是 2 到 15,材料只切出 10 个片段,TATOOLS 实际只扫描 2 到 9,推荐值也会落在这个区间里,报告会写明。

08

主题数量范围怎样设

工具页的【主题数量范围】可以在 2 到 30 之间拖动,默认 2 到 5。范围越宽,逐个拟合的次数越多。一般的材料先用 2 到 10;篇幅大、话题多的材料可以试 5 到 15,甚至 10 到 30。

先用宽一点的范围跑一遍,看曲线大致在哪里拐弯、在哪里到顶,再把范围收窄到那一带重跑,推荐值会更稳。推荐值正好落在范围的一端时,说明最合适的 K 可能在范围外面,把范围往那一边扩一扩再看。

设置 范围 默认 影响什么
文档主要语言 中文或英文 中文 分词和停用词的处理方式
主题数量范围 2 到 30 2 到 5 逐个评估哪些 K
自定义停用词 自己填写 哪些词不参与建模,只对中文生效

09

报告怎么读

区块 先看什么
这份结果说明了什么 语料规模和推荐主题数
语料规模 文件数、片段数、词表大小
困惑度 曲线在哪里拐弯
CV 主题一致性 峰值在哪个 K
UMass 主题一致性 和 c_v 是否指向同一个 K
轮廓系数 峰值在哪个 K,整条线是否接近 0
对数似然、BIC、AIC 拟合和复杂度的对照
推荐主题数 推荐值取自哪路信号,三路分项结果
方法说明与数据口径 计算方式和推荐规则

每张曲线卡片下面都有一段解读,写明这条线在哪个 K 上取得极值。【推荐主题数】写明最终推荐值、取自哪路信号,以及三路信号各自读出的 K。全部指标的数值和推荐结果都可以下载成表格。

读的顺序是先看推荐主题数和三路分项结果是否一致;一致就直接用,不一致就把几个候选 K 都记下来,到 TATOOLS 的【高级LDA主题模型】或【经典LDA主题建模】里分别建模,读主题词和代表段落再定。

10

把结果写进论文

主题数的选择通常放在方法部分,写明比较了哪些 K、用了哪些指标、按什么规则选定。下面是一段写法示例,方括号里换成自己的数字。

为确定主题数,本研究使用 TATOOLS 的 LDA主题数评估,将 [文件数] 份文本切分为 [片段数] 个片段,在 [下限] 到 [上限] 的范围内逐一拟合 LDA 模型,比较困惑度、c_v 与 UMass 主题一致性以及文档主题分布的轮廓系数。c_v 一致性在 K = [数值] 时达到峰值,困惑度曲线的拐点位于 K = [数值],综合主题的可解释性,最终取 K = [数值]。

报告主题数时,附上困惑度和 c_v 一致性两条曲线,读者就能看到这个 K 是怎样选出来的。

11

小结

主题数是 LDA 里最关键、必须事先给定的参数,定 K 是一个模型选择问题,要同时看拟合、可解释和结构三类指标。

困惑度随 K 一路下降,看的是拐点;Kneedle 方法取曲线离首尾连线最远的点。

UMass 和 c_v 两种一致性看主题词是否经常一起出现,c_v 和人工评分最接近。

轮廓系数看各段的主题比例能不能清楚地分开;AIC 和 BIC 在对数似然上加复杂度惩罚,BIC 偏向更少的主题。

TATOOLS 按 c_v 峰值、困惑度拐点、轮廓系数峰值、区间中点的顺序给出推荐,实际扫描范围受片段数和词表大小限制。

定下主题数以后,可以在 TATOOLS 的【高级LDA主题模型】里按文件分别建模,或在【经典LDA主题建模】里把全部材料合在一起建模;想让主题数由材料的语义结构自己决定,可以用【BERTopic 主题聚类】。

12

资料来源

Blei、Ng 与 Jordan:Latent Dirichlet Allocation,Journal of Machine Learning Research,第 3 卷,2003

Hoffman、Blei 与 Bach:Online Learning for Latent Dirichlet Allocation,Advances in Neural Information Processing Systems 23,2010

Chang 等:Reading Tea Leaves: How Humans Interpret Topic Models,Advances in Neural Information Processing Systems 22,2009

Mimno 等:Optimizing Semantic Coherence in Topic Models,Proceedings of the 2011 Conference on Empirical Methods in Natural Language Processing,2011

Röder、Both 与 Hinneburg:Exploring the Space of Topic Coherence Measures,Proceedings of the Eighth ACM International Conference on Web Search and Data Mining,2015

Satopää 等:Finding a “Kneedle” in a Haystack: Detecting Knee Points in System Behavior,31st International Conference on Distributed Computing Systems Workshops,2011

Rousseeuw:Silhouettes: A Graphical Aid to the Interpretation and Validation of Cluster Analysis,Journal of Computational and Applied Mathematics,第 20 卷,1987

Akaike:A New Look at the Statistical Model Identification,IEEE Transactions on Automatic Control,第 19 卷第 6 期,1974

Schwarz:Estimating the Dimension of a Model,The Annals of Statistics,第 6 卷第 2 期,1978


END