本系列分为三部分:
- LDA基本概念
- LDA求解之Gibbs采样
- LDA求解之变分推断EM算法
将参考刘建平老师的系列博客
模型概念图:
第一次看到这张图可能会有些懵,逐步拆解:
- 一左一右分别代表两个狄利克雷分布的参数
- 左边第一步:
根据proportions parameter α \alpha α (分布的超参数,是一个 K K K 维向量)生成D个代表文档主题分布的狄利克雷分布 θ d = Dirichlet ( α ⃗ ) \theta_{d}=\operatorname{Dirichlet}(\vec{\alpha}) θd=Dirichlet(α)D为输入的文档总数 - 右边第一步:
根据topic parameter η \eta η (分布的超参数,是一个 V V V 维向量, V V V 代表词汇表里所有词的个数)生成K个代表主题单词分布的狄利克雷分布 β k = Dirichlet ( η ⃗ ) \beta_{k}=\text { Dirichlet }(\vec{\eta}) βk= Dirichlet (η)K为设置的主题种类 - 左边第二步:
对于数据中任意一篇文档 d d d 中的第 n n n 个词,我们可以从主题分布 θ d \theta_{d} θd 中得到它的主题编号 z d n z_{d n} zdn 的分布为:
z d n = multi ( θ d ) z_{d n}=\operatorname{multi}\left(\theta_{d}\right) zdn=multi(θd)
multi代表多项式分布 - 右边第二步
而对于该主题编号,得到我们看到的词 w d n w_{d n} wdn 的概率分布为:
w d n = multi ( β z d n ) w_{d n}=\operatorname{multi}\left(\beta_{z_{d n}}\right) wdn=multi(βzdn)
理解LDA主题模型的主要任务就是理解上面的这个模型。这个模型里,我们有 D D D 个文档主题的Dirichlet分布,而对应的数据有 D D D 个主题编号的多项分
布, 这样 ( α → θ d → z ⃗ d \left(\alpha \rightarrow \theta_{d} \rightarrow \vec{z}_{d}\right. (α→θd→zd )就组成了Dirichlet-multi共轭分布(后验概率可以作为下次迭代的先验),可以贝叶斯推断的方法得到基于Dirichlet分布的文档主题后验分布)。
如果在第d个文档中,第k个主题的词的个数为: n d ( k ) n_{d}^{(k)} nd(k), 则对应的多项分布的计数可以表示为
n ⃗ d = ( n d ( 1 ) , n d ( 2 ) , … n d ( K ) ) \vec{n}_{d}=\left(n_{d}^{(1)}, n_{d}^{(2)}, \ldots n_{d}^{(K)}\right) nd=(nd(1),nd(2),…nd(K))
利用Dirichlet-multi共轩, 得到 θ d \theta_{d} θd 的后验分布为:
Dirichlet ( θ d ∣ α ⃗ + n ⃗ d ) \text { Dirichlet }\left(\theta_{d} \mid \vec{\alpha}+\vec{n}_{d}\right) Dirichlet (θd∣α+nd)
同样的道理, 对于主题与词的分布, 我们有 K K K 个主题与词的Dirichlet分布, 而对应的数据有 K K K 个主题编号的多项分布, 这样 ( η → β k → w ⃗ ( k ) ) \left(\eta \rightarrow \beta_{k} \rightarrow \vec{w}_{(k)}\right) (η→βk→w(k)) 就组成 了Dirichlet-multi共轭,可以使用贝叶斯推断的方法得到基于Dirichlet分布的主题词的后验分布。
如果在第k个主题中, 第v个词的个数为: n k ( v ) n_{k}^{(v)} nk(v), 则对应的多项分布的计数可以表示为
n ⃗ k = ( n k ( 1 ) , n k ( 2 ) , … n k ( V ) ) \vec{n}_{k}=\left(n_{k}^{(1)}, n_{k}^{(2)}, \ldots n_{k}^{(V)}\right) nk=(nk(1),nk(2),…nk(V))
利用Dirichlet-multi共轭, 得到 β k \beta_{k} βk 的后验分布为:
Dirichlet ( β k ∣ η ⃗ + n ⃗ k ) \text { Dirichlet }\left(\beta_{k} \mid \vec{\eta}+\vec{n}_{k}\right) Dirichlet (βk∣η+nk)
由于主题产生词不依赖具体某一个文档,因此文档主题分布和主题词分布是独立的。理解了上面这 M + K M+K M+K 组Dirichlet-multi共轭,就理解了LDA的基本原理了。
现在的问题是,基于这个LDA模型如何求解我们想要的每一篇文档的主题分布和每一个主题中词的分布呢?
一般有两种方法,第一种是基于Gibbs采样算法求解,第二种是基于变分推断EM算法求解。