LDA主题模型(一)基本概念
LDA主题模型(二)Gibbs采样方法
LDA主题模型(三)变分方法
Gibbs采样可以从复杂的概率分布中生成数据,只需要知道每个分量相对其他分量的条件下就可以进行采样。具体可以看这篇博客
LDA的gibbs采样步骤是:初始随机给每个文档的每个词赋予一个主题,统计词与主题的信息得到 n ⃗ k \vec n_k nk和 n ⃗ m \vec n_m nm的值,然后计算对每个词 w i w_i wi(这里为方便,将 w i w_i wi代替 w m , n w_{m,n} wm,n)的主题概率 P ( z i ∣ z ¬ i , w ) P(z_i|z_{\neg i},w) P(zi∣z¬i,w),根据主题概率采样一个新主题赋予该词,然后同样方法更新下个词直到收敛。
选定超参 α , β \alpha, \beta α,β后,也给每个词赋予个一个主题并统计出 n ⃗ k \vec n_k nk、 n ⃗ m \vec n_m nm之后,如何计算采样依据的概率 P ( z i ∣ z ¬ i , w ) P(z_i|z_{\neg i},w) P(zi∣z¬i,w)呢?又该如何利用上篇博客求的联合概率呢?
假定此时是对某个词 w m , n = t ∗ ( 观 测 得 到 ) , z m , n = k ∗ ( 本 轮 赋 予 w i 的 主 题 序 号 为 k ∗ ) w_{m,n}=t^* (观测得到),\ z_{m,n}=k^* (本轮赋予w_i的主题序号为k^* ) wm,n=t∗(观测得到), zm,n=k∗(本轮赋予wi的主题序号为k∗)
其中 Δ ( n ⃗ k + β ⃗ ) = Γ ( n 1 + β 1 ) Γ ( n 2 + β 2 ) . . . Γ ( n t ∗ + β t ∗ ) . . . Γ ( n k V + β k V ) Γ [ ∑ t V ( n t + β t ) ] \Delta(\vec n_k+\vec \beta)=\frac{\Gamma(n^1+\beta^1)\Gamma(n^2+\beta^2)...\Gamma(n^{t^*}+\beta^{t^*})...\Gamma(n_k^V+\beta_k^V)}{\Gamma[\sum_t^V(n^{t}+\beta^{t})] } Δ(nk+β)=Γ[∑tV(nt+βt)]Γ(n1+β1)Γ(n2+β2)...Γ(nt∗+βt∗)...Γ(nkV+βkV)
而 Δ ( n ⃗ k , ¬ i , β ⃗ ) \Delta(\vec n_{k,\neg i},\vec \beta) Δ(nk,¬i,β),因为不考虑 w i w_i wi只有 Γ ( n t ∗ + β t ∗ ) \Gamma(n^{t^*}+\beta^{t^*}) Γ(nt∗+βt∗)及分母比上式少1,由性质 Γ ( n ) = ( n − 1 ) ! \Gamma(n)=(n-1)! Γ(n)=(n−1)!,因此 Δ ( n ⃗ k + β ⃗ ) Δ ( n ⃗ k , ¬ i + β ⃗ ) = n k t ∗ + β t ∗ − 1 ∑ t = 1 V ( n k t + β t ) − 1 \frac{\Delta(\vec n_k+\vec \beta)}{\Delta(\vec n_{k,\neg i}+\vec \beta)}=\frac{n_k^{t^*}+\beta^{t^*}-1}{\sum_{t=1}^V(n_k^t+\beta^t)-1} Δ(nk,¬i+β)Δ(nk+β)=∑t=1V(nkt+βt)−1nkt∗+βt∗−1
同理 Δ ( n ⃗ m + α ⃗ ) Δ ( n ⃗ m , ¬ i + α ⃗ ) = n m k ∗ + α k ∗ − 1 ∑ k = 1 K ( n m k + α k ) − 1 \frac{\Delta(\vec n_m+\vec \alpha)}{\Delta(\vec n_{m,\neg i}+\vec \alpha)}=\frac{n_m^{k^*}+\alpha^{k^*}-1}{\sum_{k=1}^K(n_m^k+\alpha^k)-1} Δ(nm,¬i+α)Δ(nm+α)=∑k=1K(nmk+αk)−1nmk∗+αk∗−1
P ( z i = k ∣ z ⃗ ¬ i , w ⃗ ) = n k t ∗ + β t ∗ − 1 ∑ t = 1 V ( n k t + β t ) − 1 × n m k ∗ + α k ∗ − 1 ∑ k = 1 K ( n m k + α k ) − 1 P(z_i=k|\vec z_{\neg i},\vec w)=\frac{n_k^{t^*}+\beta^{t^*}-1}{\sum_{t=1}^V(n_k^t+\beta^t)-1}\times\frac{n_m^{k^*}+\alpha^{k^*}-1}{\sum_{k=1}^K(n_m^k+\alpha^k)-1} P(zi=k∣z¬i,w)=∑t=1V(nkt+βt)−1nkt∗+βt∗−1×∑k=1K(nmk+αk)−1nmk∗+αk∗−1
上式等号右边的变量均已知,因此可以求解。
注:去除某个位置的计数并不影响 θ ⃗ m , φ ⃗ k \vec \theta_m,\vec \varphi_k θm,φk的后验分布,故仍为Dirichlet分布。由Dirichlet分布的期望公式可得:
E ( θ ⃗ m ∣ w ⃗ ¬ i , z ⃗ ¬ i ) = n m k ∗ + α k ∗ − 1 ∑ k = 1 K ( n m k + α k ) − 1 E ( φ ⃗ k ∣ w ⃗ ¬ i , z ⃗ ¬ i ) = n k t ∗ + β t ∗ − 1 ∑ t = 1 V ( n k t + β t ) − 1 E(\vec\theta_m|\vec w_{\neg i},\vec z_{\neg i})= \frac{n_m^{k^*}+\alpha^{k^*}-1}{\sum_{k=1}^K(n_m^k+\alpha^k)-1}\\ E(\vec\varphi_k|\vec w_{\neg i},\vec z_{\neg i})= \frac{n_k^{t^*}+\beta^{t^*}-1}{\sum_{t=1}^V(n_k^t+\beta^t)-1} E(θm∣w¬i,z¬i)=∑k=1K(nmk+αk)−1nmk∗+αk∗−1 E(φk∣w¬i,z¬i)=∑t=1V(nkt+βt)−1nkt∗+βt∗−1
因此也可以写成 P ( z i = k ∣ z ⃗ ¬ i , w ⃗ ) = E ( θ ⃗ m ∣ w ⃗ ¬ i , z ⃗ ¬ i ) E ( φ ⃗ k ∣ w ⃗ ¬ i , z ⃗ ¬ i ) P(z_i=k|\vec z_{\neg i},\vec w)=E(\vec\theta_m|\vec w_{\neg i},\vec z_{\neg i})E(\vec\varphi_k|\vec w_{\neg i},\vec z_{\neg i}) P(zi=k∣z¬i,w)=E(θm∣w¬i,z¬i)E(φk∣w¬i,z¬i)
主要分以下几步:
1.确定主题个数K,选择合适的超参 α ⃗ , β ⃗ \vec \alpha,\vec \beta α,β
2.对每篇文档的每个词随机赋予一个主题
3.统计得到 n ⃗ k \vec n_k nk和 n ⃗ m \vec n_m nm
4.扫描文档中的每个词,计算该词的 P ( z i = k ∣ z ⃗ ¬ i , w ⃗ ) P(z_i=k|\vec z_{\neg i},\vec w) P(zi=k∣z¬i,w),根据这个概率分布采样一个新的主题编号赋予该词
5.同样更新下一个词,重复3.4步直到收敛
6.统计每个词的主题,得到文档-主题分布 θ ⃗ m \vec\theta_m θm和主题-词分布 φ ⃗ k \vec\varphi_k φk
注:
1.关于主题个数的选取需要结合具体的情况看,如果是纯主题模型一般使用perplexity调整主题个数的,perplexity是衡量主题之间重叠度的一个指标(越小越好),可以做出perplexity与主题个数的曲线在拐点处取最优值。而主题模型如果用到其他领域(如分类),就还要考虑recall和precision等指标。
2.超参 α ⃗ , β ⃗ \vec \alpha,\vec \beta α,β一般会选择等值向量。
对于给定的语料库 m n e w m_{new} mnew,我们已经训练好了LDA模型,此时对文档如何预测它的主题分布呢?因为LDA已经确定与主题-词分布 φ ⃗ k \vec \varphi_k φk,主要估计 θ ⃗ m n e w \vec \theta_{m_{new}} θmnew
主要分以下几步:
1.对该文档中每个词赋予一个主题
2.统计 n ⃗ m n e w \vec n_{m_{new}} nmnew,扫描文档的每个词i,计算该词的 P ( z i = k ∣ z ⃗ ¬ i , w ⃗ ) P(z_i=k|\vec z_{\neg i},\vec w) P(zi=k∣z¬i,w)并采样一个新主题(不需要更新 n ⃗ k \vec n_k nk)
3.重复2步直到收敛
4.统计每个词的主题得到 θ ⃗ m n e w \vec \theta_{m_{new}} θmnew
注:还需要看具体情况,如果新文档词较少的时候甚至可以不更新 n ⃗ m \vec n_{m} nm;如果新文档较多需要一起更新 n ⃗ m , n ⃗ k \vec n_{m},\vec n_k nm,nk