准备对三百段租房论坛的帖子做 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
Schwarz:Estimating the Dimension of a Model,The Annals of Statistics,第 6 卷第 2 期,1978
END
