解决文本中词语和主题分布的主题模型LSA和LDA详述

1、LSA

潜在语义分析(Latent Semantic Analysis, LSA),也叫做Latent Semantic
Indexing(LSI),是一种常用的简单的主题模型。LSA是基于奇异值分解(SVD)的方法得到文本主题的一种方式。
A m ∗ n = U m ∗ m Σ m ∗ n V n ∗ n T A m ∗ n ≈ U m ∗ k Σ k ∗ k V n ∗ k T \begin{aligned} A_{m*n}&=U_{m*m}\Sigma_{m*n}V_{n*n}^T \\ A_{m*n}&\approx U_{m*k}\Sigma_{k*k}V_{n*k}^T \end{aligned} AmnAmn=UmmΣmnVnnTUmkΣkkVnkT
我们输入的有m个文本,每个文本有n个词。而 A i j A_{ij} Aij则对应第i个文本的第j个词的特征值。k是我们假设的主题数,一般要比文本数少。SVD分解后, U i l U_{il} Uil对应第i个文本和第l个主题的相关度。 V j m V_{jm} Vjm对应第j个词和第m个词义的相关度。 Σ l m Σ_{lm} Σlm对应第l个主题和第m个词义的相关度。
通过SVD矩阵分解我们可以得到文本、词与主题、语义之间的相关性,但是这个时候计算出来的内容存在负数,我们比较难解释,所以我们可以对LSI得到文本主题矩阵使用余弦相似度计算文本的相似度的计算。这个时候直接在文本主题矩阵的基础上直接应用聚类算法即可。

LSA主题模型总结

除非数据规模比较小,而且希望快速的粗粒度的找出一些主题分布关系,否则我们一般不会使用LSA主题模型。

  • 优点:
  • 原理简单,一次SVD分解即可得到主题模型,可以同时解决词义的问题
  • 缺点:
  • SVD分解的计算非常耗时,对于高维度矩阵做SVD分解非常困难
  • 主题模型数量的选取对于结果的影响非常大,很难选择合适的k值
  • LSA模型不是概率模型,缺乏统计基础,结果难以直观的解释

2、NMF

非负矩阵分解(Non-negative Matrix Factorization, NMF)是一种常用的矩阵分解方式,常用于矩阵分解、降维、主题模型等应用场景。
NMF虽然和SVD一样都是矩阵分解,但是NMF不同的是:它的目标是希望将矩阵分解成为两个子矩阵。
V m ∗ n ≈ W m ∗ k H k ∗ n V_{m*n}\approx W_{m*k}H_{k*n} VmnWmkHkn
在NMF中求解出来的W和H,分别体现的是文本和主题的概率相关度,以及词和主题的概率相关度。NMF的期望是找到两个W、H矩阵,使得WH的矩阵乘积结果和对应的原矩阵V对应位置的值相比误差尽可能的小。
min ⁡ W , H f ( W , H ) ≡ 1 2 ∑ i = 1 n ∑ j = 1 m ( V i j − ( W H ) i j ) 2 s . t .      W i a ≥ 0 , H b j ≥ 0 , ∀ i , a , b , j ∑ i = 1 n ∑ j = 1 m ( V i j − ( W H ) i j ) 2 = ∣ ∣ V − W H ∣ ∣ F 2 \begin{aligned} &\min_{W, H}f(W, H)\equiv\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^m(V_{ij}-(WH)_{ij})^2 \\ &s.t. \ \ \ \ W_{ia}\ge0,H_{bj}\ge0, \forall i, a, b, j \\ &\sum_{i=1}^n\sum_{j=1}^m(V_{ij}-(WH)_{ij})^2=||V-WH||_F^2 \end{aligned} W,Hminf(W,H)21i=1nj=1m(Vij(WH)ij)2s.t.    Wia0,Hbj0,i,a,b,ji=1nj=1m(Vij(WH)ij)2=VWHF2
NMF的目标函数中总共包含了 m ∗ k + k ∗ n m*k+k*n mk+kn个参数,可以直接使用梯度下降法或者拟牛顿法来进行求解。
W k + 1 = max ⁡ ( 0 , W k − α k ∇ W f ( W k , H k ) ) H k + 1 = max ⁡ ( 0 , H k − α k ∇ H f ( W k , H k ) ) W^{k+1}=\max(0, W^k-\alpha_k\nabla_Wf(W^k, H^k)) \\ H^{k+1}=\max(0, H^k-\alpha_k\nabla_Hf(W^k, H^k)) Wk+1=max(0,WkαkWf(Wk,Hk))Hk+1=max(0,HkαkHf(Wk,Hk))
为了防止过拟合,也可以在NMF的目标函数的基础上添加一个正则化项:
1 2 ∣ ∣ X − W H ∣ ∣ F r o 2 + α ρ ∣ ∣ W ∣ ∣ 1 + α ρ ∣ ∣ H ∣ ∣ 1 + α ( 1 − ρ ) 2 ∣ ∣ W ∣ ∣ F r o 2 + α ( 1 − ρ ) 2 ∣ ∣ H ∣ ∣ F r o 2 \frac{1}{2}||X-WH||_{Fro}^2+\alpha\rho||W||_1+\alpha\rho||H||_1+\frac{\alpha(1-\rho)}{2}||W||_{Fro}^2+\frac{\alpha(1-\rho)}{2}||H||_{Fro}^2 21XWHFro2+αρW1+αρH1+2α(1ρ)WFro2+2α(1ρ)HFro2
但是当加入L1正则项后,由于没法求解出正常的导函数出来(导函数不是连续的),也就没法使用梯度下降法和拟牛顿法求解参数,此时一般采用坐标轴下降法来进行参数的求解。

3、坐标轴下降法

坐标轴下降法(Coordinate Descent,CD)是一种迭代法,通过启发式的方法一步步的迭代求解函数的最小值,和梯度下降法(GD)不同的时候,坐标轴下降法是沿着坐标轴的方向去下降,而不是采用梯度的负方向下降。

坐标轴下降法利用EM算法的思想,在参数更新过程中,每次均先固定m-1个参数值,求解剩下的一个参数的局部最优解;然后进行迭代式的更新操作。
坐标轴下降法的核心思想是多变量函数F(X)可以通过每次沿着一个方向优化来获取最小值。其数学依据是:对于一个可微凸函数 f ( θ ) f(θ) f(θ),其中 θ θ θ n ∗ 1 n*1 n1的向量,如果对于一个解 θ = ( θ 1 , θ 2 , … , θ n ) θ=(θ_1, θ_2, \dots, θ_n) θ=(θ1,θ2,,θn),使得 f ( θ ) f(θ) f(θ)在某个坐标轴 θ i ( i = 1 , 2 , . . , n ) θ_i(i=1,2,..,n) θi(i=1,2,..,n)上都能达到最小值,则 θ = ( θ 1 , θ 2 , … , θ n ) θ=(θ_1, θ_2, \dots, θ_n ) θ=(θ1,θ2,,θn)就是 f ( θ ) f(θ) f(θ)的全局的最小值点。
在坐标轴下降法中,优化方向从算法的一开始就固定了,即沿着坐标的方向进行变化。在算法中,循环最小化各个坐标方向的目标函数。即:如果 x k x_k xk给定,那么 x k + 1 x_{k+1} xk+1的第i维度为:
x i k + 1 = arg ⁡ min ⁡ y ∈ R f ( x 1 k + 1 , … , x i − 1 k + 1 , y , x i + 1 k , … , x n k ) x_i^{k+1}=\arg\min_{y\in R}f(x_1^{k+1}, \dots, x_{i-1}^{k+1}, y, x_{i+1}^k, \dots, x_n^k) xik+1=argyRminf(x1k+1,,xi1k+1,y,xi+1k,,xnk)
因此,从一个初始的 x 0 x_0 x0求得函数F(x)的局部最优解,可以迭代获取 x 0 、 x 1 、 x 2 . . . x_0、x_1、x_2... x0x1x2...的序列,从而可以得到:
F ( x 0 ) ≥ F ( x 1 ) ≥ F ( x 2 ) ≥ … F(x_0)\ge F(x_1)\ge F(x_2)\ge\dots F(x0)F(x1)F(x2)

坐标轴下降法算法过程:
  • θ θ θ向量随机选取一个初值,记做 θ 0 θ_0 θ0
  • 对于第k轮的迭代,从 θ 1 k θ_1^k θ1k开始计算, θ n k θ_n^k θnk到为止,计算公式如下:
    θ 1 k = arg ⁡ min ⁡ θ 1 J ( θ 1 , θ 2 k − 1 , θ 3 k − 1 , … , θ n k − 1 ) θ 2 k = arg ⁡ min ⁡ θ 2 J ( θ 1 k , θ 2 , θ 3 k − 1 , … , θ n k − 1 ) … θ n k = arg ⁡ min ⁡ θ n J ( θ 1 k , θ 2 k , θ 3 k , … , θ n ) \begin{aligned} \theta_1^k&=\arg\min_{\theta_1}J(\theta_1,\theta_2^{k-1}, \theta_3^{k-1}, \dots, \theta_n^{k-1}) \\ \theta_2^k&=\arg\min_{\theta_2}J(\theta_1^k,\theta_2, \theta_3^{k-1}, \dots, \theta_n^{k-1}) \\ \dots \\ \theta_n^k&=\arg\min_{\theta_n}J(\theta_1^k,\theta_2^k, \theta_3^k, \dots, \theta_n) \end{aligned} θ1kθ2kθnk=argθ1minJ(θ1,θ2k1,θ3k1,,θnk1)=argθ2minJ(θ1k,θ2,θ3k1,,θnk1)=argθnminJ(θ1k,θ2k,θ3k,,θn)
  • 检查 θ k θ_k θk θ k − 1 θ_{k-1} θk1向量在各个维度上的变化情况,如果所有维度的变化情况都比较小的话,那么认为结束迭代,否则继续k+1轮的迭代
  • 在求解每个参数局部最优解的时候可以求导的方式来求解

4、概率分布

(1)二项分布
二项分布是从伯努利分布推进的。伯努利分布,又称两点分布或0-1分布,是一个离散型的随机分布,其中的随机变量只有两类取值,非正即负{+,-}。而二项分布即重复n次的伯努利试验,记为 X ∼ b ( n , p ) X\sim b(n,p) Xb(n,p)。简言之,只做一次实验,是伯努利分布,重复做了n次,是二项分布。二项分布的概率密度函数为:
P ( K = k ) = C n k p k ( 1 − p ) n − k C n k = n ! k ! ( n − k ) ! \begin{aligned} P(K=k)&=C_n^kp^k(1-p)^{n-k} \\ C_n^k&=\frac{n!}{k!(n-k)!} \end{aligned} P(K=k)Cnk=Cnkpk(1p)nk=k!(nk)!n!
(2)Beta分布
Beta分布是二项分布的共轭分布,条件概率公式如下:
f ( x ) = 1 B ( α , β ) x α − 1 ( 1 − x ) β − 1 , x ∈ [ 0 , 1 ] 1 B ( α , β ) = Γ ( α + β ) Γ ( α ) + Γ ( β ) Γ ( n ) = ( n − 1 ) ! \begin{aligned} f(x)&=\frac{1}{B(\alpha, \beta)}x^{\alpha-1}(1-x)^{\beta-1}, x\in[0, 1] \\ \frac{1}{B(\alpha, \beta)}&=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)+\Gamma(\beta)} \\ \Gamma(n)&=(n-1)! \end{aligned} f(x)B(α,β)1Γ(n)=B(α,β)1xα1(1x)β1,x[0,1]=Γ(α)+Γ(β)Γ(α+β)=(n1)!

(3)多项分布
多项分布是二项分布扩展到多维的情况。多项分布是指单次试验中的随机变量的取值不再是0-1的,而是有多种离散值可能(1,2,3…,k)。比如投掷6个面的骰子实验,N次实验结果服从K=6的多项分布。其中,
∑ i = 1 k p i = 1 ,        p i > 0 \sum_{i=1}^kp_i=1, \ \ \ \ \ \ p_i\gt 0 i=1kpi=1,      pi>0
多项分布的概率密度函数为:
P ( x 1 , x 2 , … , x k , n , p 1 , p 2 , … , p k ) = n ! x 1 ! … x k ! p 1 x 1 … p k x k P(x_1, x_2, \dots, x_k, n, p_1, p_2, \dots, p_k)=\frac{n!}{x_1!\dots x_k!}p_1^{x_1}\dots p_k^{x_k} P(x1,x2,,xk,n,p1,p2,,pk)=x1!xk!n!p1x1pkxk
(4)Dirichlet分布
Dirichlet分布是Beta分布扩展到多维的情况。
f ( x 1 , … , x k ; α 1 , … , α k ) = 1 B ( α ) ∏ i = 1 K x i α i − 1 B ( α ) = ∏ i = 1 K Γ ( α i ) Γ ( ∑ i = 1 K α i ) , α = ( α 1 , … , α K ) \begin{aligned} &f(x_1, \dots, x_k; \alpha_1, \dots, \alpha_k)=\frac{1}{B(\alpha)}\prod_{i=1}^Kx_i^{\alpha_i-1} \\ &B(\alpha)=\frac{\prod_{i=1}^K\Gamma(\alpha_i)}{\Gamma(\sum_{i=1}^K\alpha_i)}, \alpha=(\alpha_1, \dots, \alpha_K) \end{aligned} f(x1,,xk;α1,,αk)=B(α)1i=1Kxiαi1B(α)=Γ(i=1Kαi)i=1KΓ(αi),α=(α1,,αK)

5、LDA

隐含狄利克雷分布(Latent Dirichlet Allocation,LDA)是一种基于贝叶斯算法模型,利用先验分布对数据进行似然估计并最终得到后验分布的一种方式。LDA是一种比较常用的主题模型。
LDA假设文档主题是多项分布,多项分布的参数(先验分布)服从Dirichlet分布,其实LDA是一种三层的贝叶斯模型。

LDA详细解释
  • 共有M篇文档,每个文档有 N m N_m Nm个单词,一共涉及到K个主题
  • 每篇文档都有各自的主题,主题分布是多项式分布,该多项式分布的参数服从Dirichlet分布,该Dirichlet分布的参数为α
  • 每个主题都有各自的词分布,词分布为为多项式分布,该多项式分布的参数服从Dirichlet分布,该Dirichlet分布的参数为η
  • 对于某篇文档d中的第n个词,首先从该文档的主题分布中采用一个主题,然后再这个主题对应的词分布中采用一个词,不断重复该操作,直到m篇文档全部完成上述过程
  • 词汇表中共有V个term(不可重复)
  • 语料库中共有m篇文档 d 1 , d 2 , … , d m d_1, d_2, \dots, d_m d1,d2,,dm,对于文档 d i d_i di,是由 N i N_i Ni个word组成的(word可重复)。语料库共有K个主题 T 1 , T 2 , … , T k T_1, T_2, \dots, T_k T1,T2,,Tk
  • α和η是先验分布(Dirichlet分布)的参数
  • θ是每篇文档的主题分布,是一个K维的向量
  • 对于第i篇文档 d i d_i di,在主题分布 θ i θ_i θi下,可以确定一个具体的主题 z i j = k z_{ij}=k zij=k
  • β是每个主题的词分布,是一个V维的向量
  • z i j z_{ij} zij选择 β z i j β_{zij} βzij,表示由词分布 β z i j β_{zij} βzij确定term,即可得到最终的观测值 w i j w_{ij} wij
LDA参数学习-Gibbs采样

对于一个n维的概率分布 π ( x 1 , x 2 , … , x n ) π(x_1, x_2, \dots, x_n) π(x1,x2,,xn),可以通过在n个坐标上轮换采样,来得到新的样本,对于轮换到任意一个坐标 x i x_i xi上的转移,马尔可夫链的状态转移概率为 p ( x i ∣ x 1 , x 2 , … , x i − 1 , x i + 1 , … , x n ) p(x_i |x_1, x_2, \dots, x_{i-1}, x_{i+1}, \dots, x_n ) p(xix1,x2,,xi1,xi+1,,xn),即固定n-1个坐标轴,在某一个坐标上移动。
Gibbs采样算法在高维空间采样的时候具有比较高的优势,GIbbs采样的过程比较类似这个坐标轴下降法。

Gibbs采样算法流程
  • 输入稳定的分布 π ( x 1 , x 2 , … , x n ) π(x_1, x_2, \dots, x_n) π(x1,x2,,xn)或者对应特征的条件概率分布,设定状态转移次数阈值 n 1 n_1 n1,需要的样本数 n 2 n_2 n2
  • 随机初始化状态值 ( x 1 1 , x 2 1 , … , x n 1 ) (x_1^1, x_2^1, \dots, x_n^1 ) (x11,x21,,xn1)
  • 进行迭代数据采样(迭代 n 1 + n 2 − 1 n_1+n_2-1 n1+n21次),从条件概率分布中采样得到对应的样本:
    x j t + 1 → p ( x j ∣ x 1 t + 1 , x 2 t + 1 , … , x j − 1 t + 1 , x j + 1 t , … , x n t ) x_j^{t+1}\to p(x_j|x_1^{t+1}, x_2^{t+1}, \dots, x_{j-1}^{t+1}, x_{j+1}^t, \dots, x_n^t) xjt+1p(xjx1t+1,x2t+1,,xj1t+1,xj+1t,,xnt)
  • 最终得到的样本集为:
    { ( x 1 n 1 , x 2 n 1 , … , x n n 1 ) , … , ( x 1 n 1 + n 2 − 1 , x 2 n 1 + n 2 − 1 , … , x n n 1 + n 2 − 1 ) } \{(x_1^{n_1}, x_2^{n_1}, \dots, x_n^{n_1}), \dots, (x_1^{n_1+n_2-1}, x_2^{n_1+n_2-1}, \dots, x_n^{n_1+n_2-1})\} {(x1n1,x2n1,,xnn1),,(x1n1+n21,x2n1+n21,,xnn1+n21)}
Gibbs采样

给定一个文档集合,w是可以观察到的值,α和η是根据经验给定的先验参数,其它的各个z,θ、β都是未知的隐含变量,都是需要根据观测到的数据进行学习的。
具体来讲,所有文档联合起来形成的词向量w是已知数据,但是不知道语料库的主题z的分布。假设可以先求解出w、z的联合分布p(w,z),进而就可以求出某个词 w i w_i wi对应主题特征 z i z_i zi的条件概率分布 p ( z i = k ∣ w , z − i ) p(z_i =k|w,z_{-i}) p(zi=kw,zi),其中 z − i z_{-i} zi表示去掉下标i后的主题分布,有了条件概率,那么就可以使用Gibbs采样,最终可以得到第i个词的主题。
如果通过采样得到所有词的主题,那么可以通过统计所有词的主题数,从而得到各个主题的词分布。接着统计各个文档对应词的主题数,从而可以得到各个文档的主题分布。
简化Dirichlet分布表达式:
D i r i c h l e t ( p ⃗ ∣ α ⃗ ) = Γ ( ∑ k = 1 K α k ) ∏ k = 1 K Γ ( α k ) ∏ k = 1 K p k α k − 1 = 1 Δ ( α ⃗ ) ∏ k = 1 K p k α k − 1 \begin{aligned} Dirichlet(\vec{p}|\vec{\alpha})&=\frac{\Gamma(\sum_{k=1}^K\alpha_k)}{\prod_{k=1}^K\Gamma(\alpha_k)}\prod_{k=1}^Kp_k^{\alpha_k-1} \\ &=\frac{1}{\Delta(\vec{\alpha})}\prod_{k=1}^Kp_k^{\alpha_k-1} \end{aligned} Dirichlet(p α )=k=1KΓ(αk)Γ(k=1Kαk)k=1Kpkαk1=Δ(α )1k=1Kpkαk1
计算文档的主题条件分布:
p ( z ⃗ d ∣ α ⃗ ) = ∫ p ( z ⃗ d ∣ θ ⃗ d ) p ( θ d ∣ α ⃗ ) d θ ⃗ d = ∫ ∏ k = 1 K p k n d ( k ) D i r i c h l e t ( α ⃗ ) d θ ⃗ d = ∫ ∏ k = 1 K p k n d ( k ) 1 Δ ( α ⃗ ) ∏ k = 1 K p k α k − 1 d θ ⃗ d = 1 Δ ( α ⃗ ) ∫ ∏ k = 1 K p k n d ( k ) + α k − 1 d θ ⃗ d = Δ ( n ⃗ d + α ⃗ ) Δ ( α ⃗ ) \begin{aligned} p(\vec{z}_d|\vec{\alpha})&=\int p(\vec{z}_d|\vec{\theta}_d)p(\theta_d|\vec{\alpha})d\vec{\theta}_d \\ &=\int\prod_{k=1}^Kp_k^{n_d^{(k)}}Dirichlet(\vec{\alpha})d\vec{\theta}_d \\ &=\int\prod_{k=1}^Kp_k^{n_d^{(k)}}\frac{1}{\Delta(\vec{\alpha})}\prod_{k=1}^Kp_k^{\alpha_k-1}d\vec{\theta}_d \\ &=\frac{1}{\Delta(\vec{\alpha})}\int\prod_{k=1}^Kp_k^{n_d^{(k)}+\alpha_k-1}d\vec{\theta}_d \\ &=\frac{\Delta(\vec{n}_d+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned} p(z dα )=p(z dθ d)p(θdα )dθ d=k=1Kpknd(k)Dirichlet(α )dθ d=k=1Kpknd(k)Δ(α )1k=1Kpkαk1dθ d=Δ(α )1k=1Kpknd(k)+αk1dθ d=Δ(α )Δ(n d+α )
在第d个文档中,第k个主题的词的个数表示为: n d ( k ) n_d^{(k)} nd(k),对应的多项分布的计数可以表示为:
n ⃗ d = ( n d ( 1 ) , n d ( 2 ) , … , n d ( K ) ) \vec{n}_d=(n_d^{(1)}, n_d^{(2)}, \dots, n_d^{(K)}) n d=(nd(1),nd(2),,nd(K))
有了一个文档的主题条件分布,则可以得到所有文档的主题条件分布为:
p ( z ⃗ ∣ α ⃗ ) = ∏ d = 1 M p ( z ⃗ d ∣ α ⃗ ) = ∏ d = 1 M Δ ( n ⃗ d + α ⃗ ) Δ ( α ⃗ ) \begin{aligned} p(\vec{z}|\vec{\alpha})&=\prod_{d=1}^Mp(\vec{z}_d|\vec{\alpha}) \\ &=\prod_{d=1}^M\frac{\Delta(\vec{n}_d+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned} p(z α )=d=1Mp(z dα )=d=1MΔ(α )Δ(n d+α )
使用同样的方式,可以得到第k个主题对应的词的条件分布 p ( w ∣ z , η ) p(w|z,η) p(wz,η)为:
p ( w ⃗ ∣ z ⃗ , η ⃗ ) = ∏ k = 1 K p ( w ⃗ k ∣ z ⃗ , η ⃗ ) = ∏ k = 1 K Δ ( n ⃗ k + η ⃗ ) Δ ( η ⃗ ) \begin{aligned} p(\vec{w}|\vec{z}, \vec{\eta})&=\prod_{k=1}^Kp(\vec{w}_k|\vec{z}, \vec{\eta}) \\ &=\prod_{k=1}^K\frac{\Delta(\vec{n}_k+\vec{\eta})}{\Delta(\vec{\eta})} \end{aligned} p(w z ,η )=k=1Kp(w kz ,η )=k=1KΔ(η )Δ(n k+η )
其中第k个主题中,第v个词的个数表示为 n k v n_k^v nkv,对应的多项式分布计数表示为:
n ⃗ k = ( n k ( 1 ) , n k ( 2 ) , … , n k ( V ) ) \vec{n}_k=(n_k^{(1)}, n_k^{(2)}, \dots, n_k^{(V)}) n k=(nk(1),nk(2),,nk(V))
最终得到主题和词向量的联合分布为:
p ( w ⃗ , z ⃗ ) ∝ p ( w ⃗ , z ⃗ ∣ α ⃗ , η ⃗ ) = p ( z ⃗ ∣ α ⃗ ) p ( w ⃗ ∣ z ⃗ , η ⃗ ) = ∏ d = 1 M Δ ( n ⃗ d + α ⃗ ) Δ ( α ⃗ ) = ∏ k = 1 K Δ ( n ⃗ k + η ⃗ ) Δ ( η ⃗ ) \begin{aligned} p(\vec{w}, \vec{z})&\propto p(\vec{w}, \vec{z}|\vec{\alpha}, \vec{\eta}) \\ &=p(\vec{z}|\vec{\alpha})p(\vec{w}|\vec{z}, \vec{\eta}) \\ &=\prod_{d=1}^M\frac{\Delta(\vec{n}_d+\vec{\alpha})}{\Delta(\vec{\alpha})} \\ &=\prod_{k=1}^K\frac{\Delta(\vec{n}_k+\vec{\eta})}{\Delta(\vec{\eta})} \end{aligned} p(w ,z )p(w ,z α ,η )=p(z α )p(w z ,η )=d=1MΔ(α )Δ(n d+α )=k=1KΔ(η )Δ(n k+η )
基于联合分布,就可以使用求解Gibbs采样所需要的条件分布 p ( z i = k ∣ w , z − i ) p(z_i=k|w,z_{-i}) p(zi=kw,zi),对于下标i,由于它对应的词 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|\vec{w},\vec{z}_{-i})\propto p(z_i=k, w_i=t|\vec{w}_{-i},\vec{z}_{-i}) p(zi=kw ,z i)p(zi=k,wi=tw i,z i)
对于 z i = k z_i=k zi=k w i = t w_i=t wi=t,只涉及到第d篇文档和第k个主题两个Dirichlet共轭,即:
α ⃗ → θ ⃗ d → z ⃗ d η ⃗ → β ⃗ k → w ⃗ k \begin{aligned} &\vec{\alpha}\to\vec{\theta}_d\to\vec{z}_d \\ &\vec{\eta}\to\vec{\beta}_k\to\vec{w}_k \end{aligned} α θ dz dη β kw k
至于其他的Dirichlet共轭和这两个是互相独立的,也就是说从语料库中去掉 z i z_i zi w i w_i wi后,并不会改变共轭结构。所以对应的后验分布为:
p ( θ ⃗ d ∣ w ⃗ − i , z ⃗ − i ) = D i r i c h l e t ( θ ⃗ d ∣ n ⃗ d , − i + α ⃗ ) p(\vec{\theta}_d|\vec{w}_{-i}, \vec{z}_{-i})=Dirichlet(\vec\theta_d|\vec n_{d, -i}+\vec\alpha) p(θ dw i,z i)=Dirichlet(θ dn d,i+α )
开始计算Gibbs采样的条件概率:
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 , θ ⃗ d , β ⃗ k ∣ w ⃗ − i , z ⃗ − i ) d θ ⃗ d d β ⃗ k = ∫ p ( z i = k , θ ⃗ d ∣ w ⃗ − i , z ⃗ − i ) p ( w i = t , β ⃗ k ∣ w ⃗ − i , z ⃗ − i ) d θ ⃗ d d β ⃗ k = ∫ p ( z i = k ∣ θ ⃗ d ) p ( θ ⃗ d ∣ w ⃗ − i , z ⃗ − i ) p ( w i = t ∣ β ⃗ k ) p ( β ⃗ k ∣ w ⃗ − i , z ⃗ − i ) d θ ⃗ d d β ⃗ k = ∫ p ( z i = k ∣ θ ⃗ d ) D i r i c h l e t ( θ ⃗ d ∣ n ⃗ d , − i + α ⃗ ) d θ ⃗ d × ∫ p ( w i = t ∣ β ⃗ k ) D i r i c h l e t ( β ⃗ k ∣ n ⃗ k , − i + η ⃗ ) d β ⃗ k = ∫ θ d k D i r i c h l e t ( θ ⃗ d ∣ n ⃗ d , − i + α ⃗ ) d θ ⃗ d ∫ β k t D i r i c h l e t ( β ⃗ k ∣ n ⃗ k , − i + η ⃗ ) d β ⃗ k = E D i r i c h l e t ( θ d ) ( θ d k ) E D i r i c h l e t ( β k ) ( β 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 p(z_i=k, w_i=t, \vec\theta_d, \vec\beta_k|\vec{w}_{-i},\vec{z}_{-i})d\vec\theta_dd\vec\beta_k \\ &=\int p(z_i=k, \vec\theta_d|\vec{w}_{-i},\vec{z}_{-i})p(w_i=t, \vec\beta_k|\vec{w}_{-i},\vec{z}_{-i})d\vec\theta_dd\vec\beta_k \\ &=\int p(z_i=k|\vec\theta_d)p(\vec\theta_d|\vec{w}_{-i},\vec{z}_{-i})p(w_i=t|\vec\beta_k)p(\vec\beta_k|\vec{w}_{-i},\vec{z}_{-i})d\vec\theta_dd\vec\beta_k \\ &=\int p(z_i=k|\vec\theta_d)Dirichlet(\vec\theta_d|\vec n_{d, -i}+\vec\alpha)d\vec\theta_d \\ &\times\int p(w_i=t|\vec\beta_k)Dirichlet(\vec\beta_k|\vec n_{k, -i}+\vec\eta)d\vec\beta_k \\ &=\int\theta_{dk}Dirichlet(\vec\theta_d|\vec n_{d, -i}+\vec\alpha)d\vec\theta_d\int\beta_{kt}Dirichlet(\vec\beta_k|\vec n_{k, -i}+\vec\eta)d\vec\beta_k \\ &=E_{Dirichlet(\theta_d)}(\theta_{dk})E_{Dirichlet(\beta_k)}(\beta_{kt}) \end{aligned} p(zi=kw ,z i)p(zi=k,wi=tw i,z i)=p(zi=k,wi=t,θ d,β kw i,z i)dθ ddβ k=p(zi=k,θ dw i,z i)p(wi=t,β kw i,z i)dθ ddβ k=p(zi=kθ d)p(θ dw i,z i)p(wi=tβ k)p(β kw i,z i)dθ ddβ k=p(zi=kθ d)Dirichlet(θ dn d,i+α )dθ d×p(wi=tβ k)Dirichlet(β kn k,i+η )dβ k=θdkDirichlet(θ dn d,i+α )dθ dβktDirichlet(β kn k,i+η )dβ k=EDirichlet(θd)(θdk)EDirichlet(βk)(βkt)
Dirichlet分布的期望公式如下,带入条件概率中,可以得到最终的条件概率公式:
E D i r i c h l e t ( θ d ) ( θ d k ) = n d , − i k + α k ∑ s = 1 K n d , − i s + α s E D i r i c h l e t ( β k ) ( β k t ) = n k , − i t + η t ∑ f = 1 V n k , − i f + η f p ( z i = k ∣ w ⃗ , z ⃗ − i ) = n d , − i k + α k ∑ s = 1 K n d , − i s + α s ⋅ n k , − i t + η t ∑ f = 1 V n k , − i f + η f \begin{aligned} E_{Dirichlet(\theta_d)}(\theta_{dk})&=\frac{n_{d,-i}^k+\alpha_k}{\sum_{s=1}^Kn_{d,-i}^s+\alpha_s} \\ E_{Dirichlet(\beta_k)}(\beta_{kt})&=\frac{n_{k,-i}^t+\eta_t}{\sum_{f=1}^Vn_{k,-i}^f+\eta_f} \\ p(z_i=k|\vec w, \vec z_{-i})&=\frac{n_{d,-i}^k+\alpha_k}{\sum_{s=1}^Kn_{d,-i}^s+\alpha_s}\cdot\frac{n_{k,-i}^t+\eta_t}{\sum_{f=1}^Vn_{k,-i}^f+\eta_f} \end{aligned} EDirichlet(θd)(θdk)EDirichlet(βk)(βkt)p(zi=kw ,z i)=s=1Knd,is+αsnd,ik+αk=f=1Vnk,if+ηfnk,it+ηt=s=1Knd,is+αsnd,ik+αkf=1Vnk,if+ηfnk,it+ηt

Gibbs采样训练流程
  • 选择合适的主题数K,选择合适的超参数α、η
  • 对于语料库中每一篇文档的每一个词,随机的赋予一个主题编号z
  • 重新扫描语料库,对于每一个词,利用Gibbs采样公式更新它的topic的编号,并更新语料库中该词的编号
  • 重复第三步中基于坐标轴轮询的Gibbs采样,直到Gibbs采样收敛
  • 统计语料库中各个文档各个词的主题,得到文档主题分布;然后统计语料库中各个主题词的分布,得到主题与词的分布
Gibbs采样预测流程
  • 对应当前文档的每一个词,随机的赋予一个主题编号z
  • 重新扫描当前文档,对于每一个词,利用Gibbs采样算法更新它的topic编号
  • 重复第二步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛
  • 统计文档中各个词的主题,得到该文档主题分布
安装LDA
pip install lda
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页