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

Gibbs采样过程

Gibbs采样可以从复杂的概率分布中生成数据,只需要知道每个分量相对其他分量的条件下就可以进行采样。具体可以看这篇博客
  LDA的gibbs采样步骤是:初始随机给每个文档的每个词赋予一个主题,统计词与主题的信息得到nk\vec n_knm\vec n_m的值,然后计算对每个词wiw_i(这里为方便,将wiw_i代替wm,nw_{m,n})的主题概率P(ziz¬i,w)P(z_i|z_{\neg i},w),根据主题概率采样一个新主题赋予该词,然后同样方法更新下个词直到收敛。
  选定超参α,β\alpha, \beta后,也给每个词赋予个一个主题并统计出nk\vec n_knm\vec n_m之后,如何计算采样依据的概率P(ziz¬i,w)P(z_i|z_{\neg i},w)呢?又该如何利用上篇博客求的联合概率呢?
  
  主题模型LDA(二)gibbs采样方法
  假定此时是对某个词wm,n=t() zm,n=k(wik)w_{m,n}=t^* (观测得到),\ z_{m,n}=k^* (本轮赋予w_i的主题序号为k^* )
  其中Δ(nk+β)=Γ(n1+β1)Γ(n2+β2)...Γ(nt+βt)...Γ(nkV+βkV)Γ[tV(nt+β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,¬i,β)\Delta(\vec n_{k,\neg i},\vec \beta),因为不考虑wiw_i只有Γ(nt+βt)\Gamma(n^{t^*}+\beta^{t^*})及分母比上式少1,由性质Γ(n)=(n1)!\Gamma(n)=(n-1)!,因此Δ(nk+β)Δ(nk,¬i+β)=nkt+βt1t=1V(nkt+β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}
 同理Δ(nm+α)Δ(nm,¬i+α)=nmk+αk1k=1K(nmk+α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}
 P(zi=kz¬i,w)=nkt+βt1t=1V(nkt+βt)1×nmk+αk1k=1K(nmk+αk)1P(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}
上式等号右边的变量均已知,因此可以求解。
 注:去除某个位置的计数并不影响θm,φk\vec \theta_m,\vec \varphi_k的后验分布,故仍为Dirichlet分布。由Dirichlet分布的期望公式可得:
 E(θmw¬i,z¬i)=nmk+αk1k=1K(nmk+αk)1 E(φkw¬i,z¬i)=nkt+βt1t=1V(nkt+βt)1E(\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}
 因此也可以写成P(zi=kz¬i,w)=E(θmw¬i,z¬i)E(φkw¬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})

LDA的gibbs采样过程

主要分以下几步:
  1.确定主题个数K,选择合适的超参α,β\vec \alpha,\vec \beta
  2.对每篇文档的每个词随机赋予一个主题
  3.统计得到nk\vec n_knm\vec n_m
  4.扫描文档中的每个词,计算该词的P(zi=kz¬i,w)P(z_i=k|\vec z_{\neg i},\vec w),根据这个概率分布采样一个新的主题编号赋予该词
  5.同样更新下一个词,重复3.4步直到收敛
  6.统计每个词的主题,得到文档-主题分布θm\vec\theta_m和主题-词分布φk\vec\varphi_k
  注:
  1.关于主题个数的选取需要结合具体的情况看,如果是纯主题模型一般使用perplexity调整主题个数的,perplexity是衡量主题之间重叠度的一个指标(越小越好),可以做出perplexity与主题个数的曲线在拐点处取最优值。而主题模型如果用到其他领域(如分类),就还要考虑recall和precision等指标。
  2.超参α,β\vec \alpha,\vec \beta一般会选择等值向量。

新文档的主题分布预测

对于给定的语料库mnewm_{new},我们已经训练好了LDA模型,此时对文档如何预测它的主题分布呢?因为LDA已经确定与主题-词分布φk\vec \varphi_k,主要估计θmnew\vec \theta_{m_{new}}
主要分以下几步:
  1.对该文档中每个词赋予一个主题
  2.统计nmnew\vec n_{m_{new}},扫描文档的每个词i,计算该词的P(zi=kz¬i,w)P(z_i=k|\vec z_{\neg i},\vec w)并采样一个新主题(不需要更新nk\vec n_k)
  3.重复2步直到收敛
  4.统计每个词的主题得到θmnew\vec \theta_{m_{new}}
  注:还需要看具体情况,如果新文档词较少的时候甚至可以不更新nm\vec n_{m};如果新文档较多需要一起更新nm,nk\vec n_{m},\vec n_k

相关文章: