主题模型LDA(二)gibbs采样方法

LDA主题模型(一)基本概念
LDA主题模型(二)Gibbs采样方法
LDA主题模型(三)变分方法

Gibbs采样过程

Gibbs采样可以从复杂的概率分布中生成数据,只需要知道每个分量相对其他分量的条件下就可以进行采样。具体可以看这篇博客
  LDA的gibbs采样步骤是:初始随机给每个文档的每个词赋予一个主题,统计词与主题的信息得到 n ⃗ k \vec n_k n k n ⃗ m \vec n_m n m的值,然后计算对每个词 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(ziz¬i,w),根据主题概率采样一个新主题赋予该词,然后同样方法更新下个词直到收敛。
  选定超参 α , β \alpha, \beta α,β后,也给每个词赋予个一个主题并统计出 n ⃗ k \vec n_k n k n ⃗ m \vec n_m n m之后,如何计算采样依据的概率 P ( z i ∣ z ¬ i , w ) P(z_i|z_{\neg i},w) P(ziz¬i,w)呢?又该如何利用上篇博客求的联合概率呢?
  
  主题模型LDA(二)gibbs采样方法_第1张图片
  假定此时是对某个词 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(wik)
  其中 Δ ( 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})] } Δ(n k+β )=Γ[tV(nt+βt)]Γ(n1+β1)Γ(n2+β2)...Γ(nt+βt)...Γ(nkV+βkV)
 而 Δ ( n ⃗ k , ¬ i , β ⃗ ) \Delta(\vec n_{k,\neg i},\vec \beta) Δ(n k,¬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)=(n1)!,因此 Δ ( 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} Δ(n k,¬i+β )Δ(n k+β )=t=1V(nkt+βt)1nkt+βt1
 同理 Δ ( 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} Δ(n m,¬i+α )Δ(n m+α )=k=1K(nmk+αk)1nmk+αk1
  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=kz ¬i,w )=t=1V(nkt+βt)1nkt+βt1×k=1K(nmk+αk)1nmk+αk1
上式等号右边的变量均已知,因此可以求解。
 注:去除某个位置的计数并不影响 θ ⃗ 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(θ mw ¬i,z ¬i)=k=1K(nmk+αk)1nmk+αk1 E(φ kw ¬i,z ¬i)=t=1V(nkt+βt)1nkt+βt1
 因此也可以写成 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=kz ¬i,w )=E(θ mw ¬i,z ¬i)E(φ kw ¬i,z ¬i)

LDA的gibbs采样过程

主要分以下几步:
  1.确定主题个数K,选择合适的超参 α ⃗ , β ⃗ \vec \alpha,\vec \beta α ,β
  2.对每篇文档的每个词随机赋予一个主题
  3.统计得到 n ⃗ k \vec n_k n k n ⃗ m \vec n_m n m
  4.扫描文档中的每个词,计算该词的 P ( z i = k ∣ z ⃗ ¬ i , w ⃗ ) P(z_i=k|\vec z_{\neg i},\vec w) P(zi=kz ¬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}} n mnew,扫描文档的每个词i,计算该词的 P ( z i = k ∣ z ⃗ ¬ i , w ⃗ ) P(z_i=k|\vec z_{\neg i},\vec w) P(zi=kz ¬i,w )并采样一个新主题(不需要更新 n ⃗ k \vec n_k n k)
  3.重复2步直到收敛
  4.统计每个词的主题得到 θ ⃗ m n e w \vec \theta_{m_{new}} θ mnew
  注:还需要看具体情况,如果新文档词较少的时候甚至可以不更新 n ⃗ m \vec n_{m} n m;如果新文档较多需要一起更新 n ⃗ m , n ⃗ k \vec n_{m},\vec n_k n m,n k

你可能感兴趣的:(nlp)