之前关于主题模型整理了《文本建模之Unigram Model,PLSA与LDA》与《再看LDA主题模型》两篇博客,以及针对PLSA的求解整理了博客《主题模型(3)——PLSA模型及其EM算法求解》,这一篇博客将继续整理LDA(Latent Dirichlet Allocation)模型的Gibbs Sample求解方法。
同样,首先回归下LDA模型的文档生成过程。我们知道,LDA在PLSA的基础上引入了贝叶斯框架,即参数不仅未知,而且取值不固定。 按照贝叶斯学派的思想,我们先给参数指定一个先验分布(prior),然后我们观察到一些样本,进而对参数的分布进行调整,得到参数的后验分布(posterior),参数先验分布与后验分布通过贝叶斯定理连接:
p ( x ∣ y ) = p ( x , y ) p ( y ) = p ( y ∣ x ) p ( x ) p ( y ) p(x|y)=\frac{p(x,y)}{p(y)}=\frac{p(y|x)p(x)}{p(y)} p(x∣y)=p(y)p(x,y)=p(y)p(y∣x)p(x)
LDA模型将Dirichlet分布作为参数的先验分布,至于原因,是因为Dirichlet分布于多项式分布是一对共轭分布,保证了计算后验概率的便利。在给出LDA模型文档生成概率之前,我们先规定一些记号:
LDA通过模拟文档生成过程,找出文档最有可能的主题参数。 在生成文档时,首先根据主题参数的先验分布随机选取一个文档主题分布 θ ⃗ m \vec{\theta}_{m} θm与主题词分布 Φ \Phi Φ,然后从主题分布下生成主题,从主题对应的词分布下生成单词,因此第 m m m篇文档第 n n n个单词生成概率是
(1) p ( w m , n , z m , n , θ ⃗ m , ϕ ⃗ z m , n ∣ α ⃗ , β ⃗ ) = p ( w m , n ∣ ϕ ⃗ z m , n ) p ( z m , n ∣ θ ⃗ m ) p ( θ ⃗ m ∣ α ⃗ ) p ( ϕ ⃗ z m , n ∣ β ⃗ ) p(w_{m,n},z_{m,n},\vec{\theta}_m,\vec{\phi}_{z_{m,n}}|\vec{\alpha},\vec{\beta})=p(w_{m,n}|\vec{\phi}_{z_{m,n}})p(z_{m,n}|\vec\theta_m)p(\vec{\theta}_m|\vec{\alpha})p(\vec{\phi}_{z_{m,n}}|\vec{\beta}) \tag 1 p(wm,n,zm,n,θm,ϕzm,n∣α,β)=p(wm,n∣ϕzm,n)p(zm,n∣θm)p(θm∣α)p(ϕzm,n∣β)(1)
上式中, θ ⃗ m \vec{\theta}_m θm、 z m , n z_{m,n} zm,n和 ϕ ⃗ z m , n \vec{\phi}_{z_{m,n}} ϕzm,n都是隐变量,将 θ ⃗ m \vec{\theta}_m θm、 z m , n z_{m,n} zm,n和 ϕ ⃗ z m , n \vec{\phi}_{z_{m,n}} ϕzm,n积分掉,将得到全概率 p ( w m , n ∣ α ⃗ , β ⃗ ) p(w_{m,n}|\vec{\alpha},\vec{\beta}) p(wm,n∣α,β)
(2) p ( w m , n ∣ α ⃗ , β ⃗ ) = ∑ z m , n ∫ ∫ p ( w m , n ∣ ϕ ⃗ z m , n ) p ( z m , n ∣ θ ⃗ m ) p ( θ ⃗ m ∣ α ⃗ ) p ( ϕ ⃗ z m , n ∣ β ⃗ ) d ϕ ⃗ z m , n d θ ⃗ m p(w_{m,n}|\vec{\alpha},\vec{\beta})=\sum_{z_{m,n}}\int\int p(w_{m,n}|\vec{\phi}_{z_{m,n}})p(z_{m,n}|\vec\theta_m)p(\vec{\theta}_m|\vec{\alpha})p(\vec{\phi}_{z_{m,n}}|\vec{\beta})d\vec{\phi}_{z_{m,n}}d\vec{\theta}_m \tag 2 p(wm,n∣α,β)=zm,n∑∫∫p(wm,n∣ϕzm,n)p(zm,n∣θm)p(θm∣α)p(ϕzm,n∣β)dϕzm,ndθm(2)
重复上述单词生成过程,生成一篇文档;重复文档生成过程,产生整个文档集,文档集的生成概率为:
(3) p ( D ) = ∏ m = 1 M ∏ n = 1 N m p ( w m , n ∣ α ⃗ , β ⃗ ) = ∏ m = 1 M ∏ n = 1 N m ∑ z m , n ∫ ∫ p ( w m , n ∣ ϕ ⃗ z m , n ) p ( z m , n ∣ θ ⃗ m ) p ( θ ⃗ m ∣ α ⃗ ) p ( ϕ ⃗ z m , n ∣ β ⃗ ) d ϕ ⃗ z m , n d θ ⃗ m \begin{aligned} p(D)&=\prod_{m=1}^{M}\prod_{n=1}^{N_m}p(w_{m,n}|\vec{\alpha},\vec{\beta})\\ &= \prod_{m=1}^{M}\prod_{n=1}^{N_m}\sum_{z_{m,n}}\int\int p(w_{m,n}|\vec{\phi}_{z_{m,n}})p(z_{m,n}|\vec\theta_m)p(\vec{\theta}_m|\vec{\alpha})p(\vec{\phi}_{z_{m,n}}|\vec{\beta})d\vec{\phi}_{z_{m,n}}d\vec{\theta}_m \tag 3 \end{aligned} p(D)=m=1∏Mn=1∏Nmp(wm,n∣α,β)=m=1∏Mn=1∏Nmzm,n∑∫∫p(wm,n∣ϕzm,n)p(zm,n∣θm)p(θm∣α)p(ϕzm,n∣β)dϕzm,ndθm(3)
按照常理,最大化 p ( D ) p(D) p(D),我们就能求出主题参数,但是,上式包含无数隐变量的累加,即使给定一组主题参数,直接求出 p ( D ) p(D) p(D)都几乎不可能。好在计算机科学家们想到了通过随机模拟的方法(又称蒙特卡洛方法,Monte Carlo Simulation),生成分布的无数样本,用频率近似代替概率的方式解决概率求解的问题,Gibbs Sample便是其中的代表方法。
采样是从特定概率分布中抽取样本的过程,采样方法用于获得服从指定概率分布的样本。 因此要采样,我们就必须知道概率分布,但是,对于一个概率分布 p ( x ⃗ ) p(\vec{x}) p(x),其分布可能非常复杂,无法直接求出其概率值,将导致采样遇到困难。此时就需要Gibbs Sample等更加复杂的能够work的采样方法。那Gibbs Sample是怎么操作的呢?
Gibbs Sample是马尔可夫链蒙特卡罗理论中用来近似求解多维概率分布(2个或多个随机变量的联合分布)的算法。Gibbs Sample形式化描述如下:对于一个复杂的概率分布 p ( x ⃗ ) p(\vec{x}) p(x),我们没法求出其对应的概率分布,但如果我们能够求出在给定其他分量 x ¬ i x_{\neg i} x¬i情况下 x i x_i xi的概率 p ( x i ∣ x ¬ i ) p(x_i|x_{\neg i}) p(xi∣x¬i),那么我们可以根据 p ( x i ∣ x ¬ i ) p(x_i|x_{\neg i}) p(xi∣x¬i)采样每一个分量 x i x_i xi组成一个样本 x ⃗ \vec{x} x,重复上述采样过程 T T T次,最后统计频率作为概率。 执行过程如下:
在引出Gibbs Sample前,需要先简要介绍下马尔可夫链及其平稳分布,马尔可夫链数学定义如下:
p ( X t + 1 ∣ X t , X t − 1 , ⋯   ) = p ( X t + 1 ∣ X t ) p(X_{t+1}|X_t,X_{t-1},\cdots)=p(X_{t+1}|X_t) p(Xt+1∣Xt,Xt−1,⋯)=p(Xt+1∣Xt)
即当前状态只受到前一个状态的影响,而与其他状态无关。通常状态之间的转移概率用转移矩阵描述,如下图,展示了状态1,2,3之间的概率转移
其对应的状态转移矩阵如下:
P = [ 0.65 0.28 0.07 0.15 0.67 0.18 0.12 0.36 0.52 ] P= \begin{bmatrix} 0.65 & 0.28 & 0.07 \\ 0.15 & 0.67 & 0.18 \\ 0.12 & 0.36 & 0.52 \\ \end{bmatrix} P=⎣⎡0.650.150.120.280.670.360.070.180.52⎦⎤
对于马尔可夫链状态转移矩阵,存在马氏链定理: 如果一个非周期马氏链具有状态转移矩阵 P P P,且它的任意两个状态是联通的(从任意一个状态能到其他任意状态),那么 lim n → ∞ P i j n \lim\limits_{n\to\infty} P_{ij}^n n→∞limPijn存在且与 i i i无关,记 lim n → ∞ P i j n = π ( j ) \lim\limits_{n\to\infty} P_{ij}^n=\pi(j) n→∞limPijn=π(j),我们有
其中,
π = [ π ( 1 ) , π ( 2 ) , ⋯   , π ( j ) , ⋯   ] , ∑ i π ( i ) = 1 \pi = [\pi(1),\pi(2),\cdots,\pi(j),\cdots],\quad\sum \nolimits_i\pi(i)=1 π=[π(1),π(2),⋯,π(j),⋯],∑iπ(i)=1
称为马氏链的平稳分布。
上面1,2,3分别说明
如果我们从一个具体地初始状态 x 0 x_0 x0出发,时刻1所处状态 x 1 x_1 x1满足概率分布 P i P_i Pi( P i P_i Pi是状态转移矩阵中状态 x 0 x_0 x0对应的转移概率),将其记为 π 1 ( x ) \pi_{1}(x) π1(x)。时刻2所处状态 x 2 x_2 x2满足概率分布 π 1 ( x ) P \pi_1(x)P π1(x)P,将其记为 π 2 ( x ) \pi_{2}(x) π2(x)。以此类推,时刻n所处状态 x n x_n xn满足概率分布 π n − 1 ( x ) P = π 1 ( x ) P n − 1 \pi_{n-1}(x)P=\pi_1(x)P^{n-1} πn−1(x)P=π1(x)Pn−1,即
x 0 x 1 ∼ π 1 ( x ) = P i ⋯ x n ∼ π n ( x ) = π n − 1 ( x ) P = P i P n − 1 x n + 1 ∼ π n + 1 ( x ) = π n ( x ) P = P i P n x n + 2 ∼ π n + 2 ( x ) = π n + 1 ( x ) P = P i P n + 1 ⋯ \begin{aligned} x_0&\\ x_1&\thicksim \pi_1(x)=P_i\\ \cdots \\ x_n&\thicksim \pi_n(x)=\pi_{n-1}(x)P=P_iP^{n-1} \\ x_{n+1}&\thicksim \pi_{n+1}(x)=\pi_{n}(x)P=P_iP^{n} \\ x_{n+2}&\thicksim \pi_{n+2}(x)=\pi_{n+1}(x)P=P_iP^{n+1} \\ \cdots \end{aligned} x0x1⋯xnxn+1xn+2⋯∼π1(x)=Pi∼πn(x)=πn−1(x)P=PiPn−1∼πn+1(x)=πn(x)P=PiPn∼πn+2(x)=πn+1(x)P=PiPn+1
根据马氏链的收敛定理,假设 n n n时刻马氏链已经收敛到平稳分布 π ( x ) \pi(x) π(x),那么 x n + 1 , x n + 2 , ⋯ x_{n+1},x_{n+2},\cdots xn+1,xn+2,⋯都将是平稳分布 π ( x ) \pi(x) π(x)的样本。这不正是我们想要实现的从某个概率分布中采样的过程吗?
根据上面的推导,对于一个概率分布 p ( x ) p(x) p(x),如果我们能够构造一个转移矩阵为 P P P的马氏链,并且该马氏链的平稳分布恰好是 p ( x ) p(x) p(x),那么当马氏链收敛后,我们就得到了概率分布 p ( x ) p(x) p(x)的样本。 因为上述方法属于随机模拟方法的扩展,并且用到了马尔可夫链,因此这类方法被称为马尔可夫链蒙特卡罗方法(Markov Chain Monte Carlo,MCMC)。
基于马氏链做采样的关键是如何构造概率分布 p ( x ) p(x) p(x)对应的状态转移矩阵 P P P,直接找到这个矩阵 P P P通常很难做到,需要借助细致平稳条件(detailed balance condition)实现。
细致平稳条件的定义如下:如果非周期马氏链的转移矩阵 P P P和概率分布 p ( x ) p(x) p(x)满足
p ( i ) P ( i , j ) = p ( j ) P ( j , i ) for all i , j p(i)P(i,j)=p(j)P(j,i)\qquad \text{for all}\enspace i,j p(i)P(i,j)=p(j)P(j,i)for alli,j
则概率分布 p ( x ) p(x) p(x)是马氏链转移矩阵 P P P的平稳分布。
也就是说我们只需要找到使概率分布满足细致平稳条件的矩阵 P P P。通常情况下,对于一个状态转移矩阵 Q Q Q, p ( i ) q ( i , j )   / = p ( j ) q ( j , i ) p(i)q(i,j)\mathrlap{\,/}{=}p(j)q(j,i) p(i)q(i,j)/=p(j)q(j,i),因此我们需要对转移矩阵 Q Q Q进行改造,使得 p ( i ) q ′ ( i , j ) = p ( j ) q ′ ( j , i ) p(i)q'(i,j)=p(j)q'(j,i) p(i)q′(i,j)=p(j)q′(j,i)。最直观的方法是引入一个 α ( i , j ) \alpha(i,j) α(i,j),使得
p ( i ) q ( i , j ) α ( i , j ) = p ( j ) q ( j , i ) α ( j , i ) p(i)q(i,j)\alpha(i,j)=p(j)q(j,i)\alpha(j,i) p(i)q(i,j)α(i,j)=p(j)q(j,i)α(j,i)
按照对称性,我们可以取
α ( i , j ) = p ( j ) q ( j , i ) α ( j , i ) = p ( i ) q ( i , j ) \alpha(i,j)=p(j)q(j,i)\\ \alpha(j,i)=p(i)q(i,j) α(i,j)=p(j)q(j,i)α(j,i)=p(i)q(i,j)
此时,新的转移矩阵 q ′ ( i , j ) = q ( i , j ) α ( i , j ) q'(i,j)=q(i,j)\alpha(i,j) q′(i,j)=q(i,j)α(i,j),即 Q ′ = Q ⊙ α Q'=Q\odot\alpha Q′=Q⊙α,此处是矩阵的Hadamard乘积。直接从 Q ′ Q' Q′中采样还是难以实现,可以将 α \alpha α看作接受率,应用接受-拒绝采样得到分布的一系列样本。
分析上面的MCMC采样,由于接受率 α \alpha α的存在,导致算法效率不高;另一方面,更为致命的是,很多时候我们很难求出多维联合概率分布 p ( x ⃗ ) p(\vec{x}) p(x),导致上面的算法无法work,这时就需要使用Gibbs Sample。
考虑由二维特征 ( x , y ) (x,y) (x,y)描述的状态,假设其概率分布为 p ( x , y ) p(x,y) p(x,y),现在固定其中的 x x x,对于两个状态 A ( x 1 , y 1 ) A(x_1,y_1) A(x1,y1)和 B ( x 1 , y 2 ) B(x_1,y_2) B(x1,y2),根据概率公式:
p ( x 1 , y 1 ) p ( y 2 ∣ x 1 ) = p ( x 1 ) p ( y 1 ∣ x 1 ) p ( y 2 ∣ x 1 ) p ( x 1 , y 2 ) p ( y 1 ∣ x 1 ) = p ( x 1 ) p ( y 2 ∣ x 1 ) p ( y 1 ∣ x 1 ) p(x_1,y_1)p(y_2|x_1)=p(x_1)p(y_1|x_1)p(y_2|x_1)\\ p(x_1,y_2)p(y_1|x_1)=p(x_1)p(y_2|x_1)p(y_1|x_1) p(x1,y1)p(y2∣x1)=p(x1)p(y1∣x1)p(y2∣x1)p(x1,y2)p(y1∣x1)=p(x1)p(y2∣x1)p(y1∣x1)
可得
(4) p ( x 1 , y 1 ) p ( y 2 ∣ x 1 ) = p ( x 1 , y 2 ) p ( y 1 ∣ x 1 ) p(x_1,y_1)p(y_2|x_1)=p(x_1,y_2)p(y_1|x_1) \tag 4 p(x1,y1)p(y2∣x1)=p(x1,y2)p(y1∣x1)(4)
其中,因为 A , B A,B A,B两状态的 x x x特征相同,因此从 A A A状态转移到 B B B状态等价于在给定 x 1 x_1 x1时 y 2 y_2 y2的取值概率,即 p ( y 2 ∣ x 1 ) p(y_2|x_1) p(y2∣x1),所以 p ( y 2 ∣ x 1 ) p(y_2|x_1) p(y2∣x1)表示了转移概率 p ( A → B ) p(A\to B) p(A→B), p ( y 1 ∣ x 1 ) p(y_1|x_1) p(y1∣x1)表示了转移概率 p ( B → A ) p(B\to A) p(B→A),所以上面等式(4)表达了
(5) p ( A ) p ( A → B ) = p ( B ) p ( B → A ) p(A)p(A\to B)=p(B)p(B\to A) \tag 5 p(A)p(A→B)=p(B)p(B→A)(5)
同理,固定特征 y y y,我们也会得到同样的等式,这表明在二维概率分布中,固定其中一维,使用条件分布 p ( y ∣ x ) p(y|x) p(y∣x)作为状态之间的转移概率,那么任意两个状态之间的转移满足细致平稳条件。即构造如下状态转移矩阵
Q ( A → B ) = p ( y B ∣ x 1 ) if x A = x B = x 1 Q ( A → C ) = p ( x C ∣ y 1 ) if y A = y B = y 1 Q ( A → D ) = 0 else \begin{aligned} Q(A\to B)=&p(y_B|x_1) \qquad \text{if}\enspace x_A=x_B=x_1\\ Q(A\to C)=&p(x_C|y_1) \qquad \text{if}\enspace y_A=y_B=y_1\\ Q(A\to D)=&0\qquad\qquad\qquad\qquad\qquad\enspace \text{else} \end{aligned} Q(A→B)=Q(A→C)=Q(A→D)=p(yB∣x1)ifxA=xB=x1p(xC∣y1)ifyA=yB=y10else
如下图所示:
根据上面的状态转移矩阵,我们可以很容易的验证任意两个状态 X , Y X,Y X,Y,满足细致平稳条件:
p ( X ) Q ( X → Y ) = p ( Y ) Q ( y → X ) p(X)Q(X\to Y)=p(Y)Q(y\to X) p(X)Q(X→Y)=p(Y)Q(y→X)
因此,在二维平面中,马氏链轮换的沿着 x x x轴和 y y y轴转移,得到样本 ( x 0 , y 0 ) , ( x 1 , y 1 ) , ⋯ (x_0,y_0),(x_1,y_1),\cdots (x0,y0),(x1,y1),⋯,等到马氏链收敛后,最终得到的样本就是概率分布 p ( x , y ) p(x,y) p(x,y)的样本,上述过程就是二维Gibbs Sample算法。推广到多维分布,我们就得到了Gibbs Sample的一般形式。
回到我们的LDA模型,我们已经写出文档集的生成概率为:
p ( D ) = ∏ m = 1 M ∏ n = 1 N m p ( w m , n ∣ α ⃗ , β ⃗ ) = ∏ m = 1 M ∏ n = 1 N m ∑ z m , n ∫ ∫ p ( w m , n ∣ ϕ ⃗ z m , n ) p ( z m , n ∣ θ ⃗ m ) p ( θ ⃗ m ∣ α ⃗ ) p ( ϕ ⃗ z m , n ∣ β ⃗ ) d ϕ ⃗ z m , n d θ ⃗ m \begin{aligned} p(D)&=\prod_{m=1}^{M}\prod_{n=1}^{N_m}p(w_{m,n}|\vec{\alpha},\vec{\beta})\\ &= \prod_{m=1}^{M}\prod_{n=1}^{N_m}\sum_{z_{m,n}}\int\int p(w_{m,n}|\vec{\phi}_{z_{m,n}})p(z_{m,n}|\vec\theta_m)p(\vec{\theta}_m|\vec{\alpha})p(\vec{\phi}_{z_{m,n}}|\vec{\beta})d\vec{\phi}_{z_{m,n}}d\vec{\theta}_m \end{aligned} p(D)=m=1∏Mn=1∏Nmp(wm,n∣α,β)=m=1∏Mn=1∏Nmzm,n∑∫∫p(wm,n∣ϕzm,n)p(zm,n∣θm)p(θm∣α)p(ϕzm,n∣β)dϕzm,ndθm
这个概率直接求解几乎不可能。遇到困难,再看一下目标,能保证我们不迷失方向。
LDA模型的目标是:找出文档的主题参数,也就是文档中每个单词对应的主题,那我们是不是可以对上面的 p ( D ) p(D) p(D)放松一下,求出 p ( w ⃗ , z ⃗ ) p(\vec{w},\vec{z}) p(w,z)的概率呢?
p ( w ⃗ , z ⃗ ) = p ( w ⃗ ∣ z ⃗ , β ⃗ ) p ( z ⃗ ∣ α ⃗ ) \begin{aligned} p(\vec{w},\vec{z})&=p(\vec{w}|\vec{z},\vec{\beta})p(\vec{z}|\vec{\alpha})\\ \end{aligned} p(w,z)=p(w∣z,β)p(z∣α)
上式在博客《再看LDA主题模型》中已经分析过,其包含两个独立的过程:先生成文档每个位置对应的主题,然后根据主题生成每个位置的单词。
文档 m m m的主题生成概率 p ( z m ⃗ ∣ α ⃗ ) p(\vec{z_m}|\vec{\alpha}) p(zm∣α)计算如下:
p ( z m ⃗ ∣ α ⃗ ) = ∫ p ( z m ⃗ ∣ θ m ⃗ ) p ( θ m ⃗ ∣ α ⃗ ) d θ m ⃗ = ∫ p ( z m ⃗ ∣ θ m ⃗ ) D i r ( θ m ⃗ ∣ α ⃗ ) d θ m ⃗ = ∫ ∏ k = 1 K θ k , m n k , m 1 Δ ( α ⃗ ) ∏ k = 1 K θ k , m α k , m − 1 d θ m ⃗ = 1 Δ ( α ⃗ ) ∫ ∏ k = 1 K θ k , m n k , m + α k − 1 d θ m ⃗ = Δ ( n m ⃗ + α ⃗ ) Δ ( α ⃗ ) \begin{aligned} p(\vec{z_m}|\vec{\alpha}) =& \int p(\vec{z_m}|\vec{\theta_m})p(\vec{\theta_m}|\vec{\alpha})d\vec{\theta_m} \\ =& \int p(\vec{z_m}|\vec{\theta_m})Dir(\vec{\theta_m}|\vec{\alpha})d\vec{\theta_m} \\ =& \int \prod_{k=1}^K\theta_{k,m}^{n_{k,m}}\frac{1}{\Delta(\vec{\alpha})}\prod_{k=1}^K\theta_{k,m}^{\alpha_{k,m}-1}d\vec{\theta_m} \\ =& \frac{1}{\Delta(\vec\alpha)}\int\prod_{k=1}^K\theta_{k,m}^{n_{k,m}+\alpha_{k}-1}d\vec{\theta_m} \\ =& \frac{\Delta(\vec{n_m}+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned} p(zm∣α)=====∫p(zm∣θm)p(θm∣α)dθm∫p(zm∣θm)Dir(θm∣α)dθm∫k=1∏Kθk,mnk,mΔ(α)1k=1∏Kθk,mαk,m−1dθmΔ(α)1∫k=1∏Kθk,mnk,m+αk−1dθmΔ(α)Δ(nm+α)
主题 k k k下单词生成概率 p ( w k ⃗ ∣ z k , β ⃗ ) p(\vec{w_k}|z_k,\vec{\beta}) p(wk∣zk,β)计算如下:
p ( w k ⃗ ∣ z k , β ⃗ ) = ∫ p ( w k ⃗ ∣ φ k ⃗ ) p ( φ k ⃗ ∣ β ⃗ ) d φ k ⃗ = ∫ p ( w k ⃗ ∣ φ k ⃗ ) D i r ( φ k ⃗ ∣ z k , β ⃗ ) d φ k ⃗ = ∫ ∏ v = 1 V φ v , k n v , k 1 Δ ( β ⃗ ) ∏ v = 1 V φ v , k n v , k d φ k ⃗ = 1 Δ ( β ⃗ ) ∫ ∏ v = 1 V φ v , k n v , k + β v − 1 d φ k ⃗ = Δ ( n k ⃗ + β ⃗ ) Δ ( β ⃗ ) \begin{aligned} p(\vec{w_k}|z_k,\vec{\beta}) =& \int p(\vec{w_k}|\vec{\varphi_k})p(\vec{\varphi_k}|\vec{\beta})d\vec{\varphi_k} \\ =& \int p(\vec{w_k}|\vec{\varphi_k})Dir(\vec{\varphi_k}|z_k,\vec{\beta})d\vec{\varphi_k} \\ =& \int \prod_{v=1}^V\varphi_{v,k}^{n_{v,k}}\frac{1}{\Delta(\vec{\beta})}\prod_{v=1}^V\varphi_{v,k}^{n_{v,k}}d\vec{\varphi_k} \\ =& \frac{1}{\Delta(\vec{\beta})}\int\prod_{v=1}^V\varphi_{v,k}^{n_{v,k}+\beta_{v}-1}d\vec{\varphi_k}\\ =& \frac{\Delta(\vec{n_k}+\vec{\beta})}{\Delta(\vec{\beta})} \end{aligned} p(wk∣zk,β)=====∫p(wk∣φk)p(φk∣β)dφk∫p(wk∣φk)Dir(φk∣zk,β)dφk∫v=1∏Vφv,knv,kΔ(β)1v=1∏Vφv,knv,kdφkΔ(β)1∫v=1∏Vφv,knv,k+βv−1dφkΔ(β)Δ(nk+β)
因此
p ( w ⃗ , z ⃗ ) = p ( w ⃗ ∣ z ⃗ , β ⃗ ) p ( z ⃗ ∣ α ⃗ ) = ∏ k = 1 K p ( w ⃗ ∣ z ⃗ , β ⃗ ) ∏ m = 1 M p ( z ⃗ ∣ α ⃗ ) = ∏ k = 1 K Δ ( n k ⃗ + β ⃗ ) Δ ( β ⃗ ) ∏ m = 1 M Δ ( n m ⃗ + α ⃗ ) Δ ( α ⃗ ) \begin{aligned} p(\vec{w},\vec{z}) =& p(\vec{w}|\vec{z},\vec{\beta})p(\vec{z}|\vec{\alpha}) \\ =& \prod_{k=1}^K p(\vec{w}|\vec{z},\vec{\beta})\prod_{m=1}^Mp(\vec{z}|\vec{\alpha})\\ =& \prod_{k=1}^K\frac{\Delta(\vec{n_k}+\vec{\beta})}{\Delta(\vec{\beta})}\prod_{m=1}^M\frac{\Delta(\vec{n_m}+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned} p(w,z)===p(w∣z,β)p(z∣α)k=1∏Kp(w∣z,β)m=1∏Mp(z∣α)k=1∏KΔ(β)Δ(nk+β)m=1∏MΔ(α)Δ(nm+α)
有了联合概率,下面就需要求解条件概率 p ( z i = k ∣ w ⃗ , z ⃗ ¬ i ) p(z_i=k|\vec{w},\vec{z}_{¬i}) p(zi=k∣w,z¬i),这里 i i i是指第 m m m篇文档的第 n n n个词。因为词 w i w_i wi是可以观察到的,因此我们有:
p ( z i = k ∣ w ⃗ , z ⃗ ¬ i ) ∝ p ( z i = k , w i = t ∣ w ⃗ ¬ i , z ⃗ ¬ i ) = ∫ ∫ p ( z i = k , w i = t , θ ⃗ m , φ ⃗ k ∣ w ⃗ ¬ i , z ⃗ ¬ i ) d θ ⃗ m d φ ⃗ k = ∫ ∫ p ( z i = k , θ ⃗ m ∣ w ⃗ ¬ i , z ⃗ ¬ i ) p ( w i = t , φ ⃗ k ∣ w ⃗ ¬ i , z ⃗ ¬ i ) d θ ⃗ m d φ ⃗ k = ∫ p ( z i = k , θ ⃗ m ∣ w ⃗ ¬ i , z ⃗ ¬ i ) d θ ⃗ m ∗ ∫ p ( w i = t , φ ⃗ k ∣ w ⃗ ¬ i , z ⃗ ¬ i ) d φ ⃗ k = ∫ p ( z i = k ∣ θ ⃗ m ) p ( θ ⃗ m ∣ w ⃗ ¬ i , z ⃗ ¬ i ) d θ ⃗ m ∗ ∫ p ( w i = t ∣ φ ⃗ k ) p ( φ ⃗ k ∣ w ⃗ ¬ i , z ⃗ ¬ i ) d φ ⃗ k = ∫ p ( z i = k ∣ θ ⃗ m ) D i r ( θ ⃗ m ∣ n ⃗ m , ¬ i + α ⃗ ) d θ ⃗ m ∗ ∫ p ( w i = t ∣ φ ⃗ k ) D i r ( φ ⃗ k ∣ n ⃗ k , ¬ i + β ⃗ ) d φ ⃗ k = ∫ θ m , k D i r ( θ ⃗ m ∣ n ⃗ m , ¬ i + α ⃗ ) d θ ⃗ m ∗ ∫ φ k , t D i r ( φ ⃗ k ∣ n ⃗ k , ¬ i + β ⃗ ) d φ ⃗ k = E ( θ m , k ) ∗ E ( φ k , t ) \begin{aligned} p(z_i=k|\vec{w},\vec{z}_{¬i})&\propto p(z_i=k,w_i=t|\vec{w}_{¬i},\vec{z}_{¬i})\\ &=\int\int p(z_i=k,w_i=t,\vec{\theta}_m,\vec{\varphi}_k|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\theta}_md\vec{\varphi}_k\\ &=\int\int p(z_i=k,\vec{\theta}_m|\vec{w}_{¬i},\vec{z}_{¬i})p(w_i=t,\vec{\varphi}_k|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\theta}_md\vec{\varphi}_k\\ &=\int p(z_i=k,\vec{\theta}_m|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\theta}_m*\int p(w_i=t,\vec{\varphi}_k|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\varphi}_k\\ &=\int p(z_i=k|\vec{\theta}_m)p(\vec{\theta}_m|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\theta}_m*\int p(w_i=t|\vec{\varphi}_k)p(\vec{\varphi}_k|\vec{w}_{¬i},\vec{z}_{¬i})d\vec{\varphi}_k\\ &=\int p(z_i=k|\vec{\theta}_m)Dir(\vec{\theta}_m|\vec{n}_{m,¬i}+\vec{\alpha})d\vec{\theta}_m*\int p(w_i=t|\vec{\varphi}_k)Dir(\vec{\varphi}_k|\vec{n}_{k,¬i}+\vec{\beta})d\vec{\varphi}_k\\ &=\int \theta_{m,k}Dir(\vec{\theta}_m|\vec{n}_{m,¬i}+\vec{\alpha})d\vec{\theta}_m*\int \varphi_{k,t}Dir(\vec{\varphi}_k|\vec{n}_{k,¬i}+\vec{\beta})d\vec{\varphi}_k\\ &=E(\theta_{m,k})*E(\varphi_{k,t}) \end{aligned} p(zi=k∣w,z¬i)∝p(zi=k,wi=t∣w¬i,z¬i)=∫∫p(zi=k,wi=t,θm,φk∣w¬i,z¬i)dθmdφk=∫∫p(zi=k,θm∣w¬i,z¬i)p(wi=t,φk∣w¬i,z¬i)dθmdφk=∫p(zi=k,θm∣w¬i,z¬i)dθm∗∫p(wi=t,φk∣w¬i,z¬i)dφk=∫p(zi=k∣θm)p(θm∣w¬i,z¬i)dθm∗∫p(wi=t∣φk)p(φk∣w¬i,z¬i)dφk=∫p(zi=k∣θm)Dir(θm∣nm,¬i+α)dθm∗∫p(wi=t∣φk)Dir(φk∣nk,¬i+β)dφk=∫θm,kDir(θm∣nm,¬i+α)dθm∗∫φk,tDir(φk∣nk,¬i+β)dφk=E(θm,k)∗E(φk,t)
上式正是Dirichlet分布的期望,对于其中任意一项 i i i,我们有:
E ( p k ) = ∫ 0 1 p k ∗ Γ ( ∑ i = 1 K α i ) ∏ i = 1 K Γ ( α i ) ∏ i = 1 K p i α i − 1 d p ⃗ = Γ ( ∑ i = 1 K α i ) ∏ i = 1 K Γ ( α i ) ∫ 0 1 ∏ i = 1 k − 1 p i α i − 1 ∗ p k α k ∗ ∏ i = k + 1 K p i α i − 1 d p ⃗ = Γ ( ∑ i = 1 K α i ) ∏ i = 1 K Γ ( α i ) ∗ ∏ i = 1 k − 1 Γ ( α i ) ∗ Γ ( α k + 1 ) ∗ ∏ i = k + 1 K Γ ( α i ) Γ ( ∑ i = 1 k − 1 α i + ( α k + 1 ) + ∑ i = k + 1 K α i ) = α k ∑ k = 1 K α k \begin{aligned} E(p_k)&=\int_0^1p_k*\frac{\varGamma(\sum_{i=1}^K\alpha_i)}{\prod_{i=1}^K\varGamma(\alpha_i)}\prod_{i=1}^Kp_i^{\alpha_i-1}d\vec{p}\\ &=\frac{\varGamma(\sum_{i=1}^K\alpha_i)}{\prod_{i=1}^K\varGamma(\alpha_i)}\int_0^1\prod_{i=1}^{k-1}p_i^{\alpha_i-1}*p_k^{\alpha_k}*\prod_{i=k+1}^{K}p_i^{\alpha_i-1}d\vec{p}\\ &=\frac{\varGamma(\sum_{i=1}^K\alpha_i)}{\prod_{i=1}^K\varGamma(\alpha_i)}*\frac{\prod_{i=1}^{k-1}\varGamma(\alpha_i)*\varGamma(\alpha_k+1)*\prod_{i=k+1}^{K}\varGamma(\alpha_i)}{\varGamma(\sum_{i=1}^{k-1}\alpha_i+(\alpha_k+1)+\sum_{i=k+1}^K\alpha_i)}\\ &=\frac{\alpha_k}{\sum_{k=1}^K\alpha_k} \end{aligned} E(pk)=∫01pk∗∏i=1KΓ(αi)Γ(∑i=1Kαi)i=1∏Kpiαi−1dp=∏i=1KΓ(αi)Γ(∑i=1Kαi)∫01i=1∏k−1piαi−1∗pkαk∗i=k+1∏Kpiαi−1dp=∏i=1KΓ(αi)Γ(∑i=1Kαi)∗Γ(∑i=1k−1αi+(αk+1)+∑i=k+1Kαi)∏i=1k−1Γ(αi)∗Γ(αk+1)∗∏i=k+1KΓ(αi)=∑k=1Kαkαk
因此
p ( z i = k ∣ w ⃗ , z ⃗ ¬ i ) ∝ E ( θ m , k ) ∗ E ( φ k , t ) = n m , ¬ i ( k ) + α k ∑ k = 1 K ( n m , ¬ i ( k ) + α k ) ∗ n k , ¬ i ( t ) + β t ∑ t = 1 V ( n k , ¬ i ( t ) + β t ) p(z_i=k|\vec{w},\vec{z}_{¬i})\propto E(\theta_{m,k})*E(\varphi_{k,t})=\frac{n_{m,¬i}^{(k)}+\alpha_k}{\sum_{k=1}^K(n_{m,¬i}^{(k)}+\alpha_k)}*\frac{n_{k,¬i}^{(t)}+\beta_t}{\sum_{t=1}^V(n_{k,¬i}^{(t)}+\beta_t)} p(zi=k∣w,z¬i)∝E(θm,k)∗E(φk,t)=∑k=1K(nm,¬i(k)+αk)nm,¬i(k)+αk∗∑t=1V(nk,¬i(t)+βt)nk,¬i(t)+βt
有了上式,我们就可以借助Gibbs Sample算法对概率分布进行采样,待算法收敛后,采样出的样本就是概率分布 p ( w ⃗ , z ⃗ ) p(\vec{w},\vec{z}) p(w,z)的样本。通过采样我们得到了每个词的主题,统计各个主题下单词出现频率,就可以得到各个主题的词分布。同样的,统计每篇文档的主题频率,我们就得到了各个文档的主题分布。通常,我们取Gibbs Sample收敛后的 n n n个样本进行平均做参数估计。
LDA参数估计是Gibbs Sample的一个非常好的应用实例,本文主要总结了Gibbs Sample的工作原理以及LDA模型的Gibbs Sample求解步骤。
关于采样:
个人也是最近才开始深入了采样方法,欢迎指正,多多交流。
MCMC(一)蒙特卡罗方法
一文了解采样方法
深度学习中的采样以及采样算法
各领域中采样方式研究 (持续更新)
从随机过程到马尔科夫链蒙特卡洛方法
MCMC(三)MCMC采样和M-H采样
MCMC(四)Gibbs采样
文本主题模型之LDA(二) LDA求解之Gibbs采样算法
LDA数学八卦