LDA主题模型(一)基本概念
[LDA主题模型(二)Gibbs采样方法]
LDA主题模型(三)变分方法
LDA主要是研究文档中文字的产生过程,属于机器学习中的生成模型,一般认为当写一篇文档时,会先根据一定的概率选定主题,然后根据与选定主题相关的概率生成文字。
LDA是文本语义分析中应用广泛的一个模型,比如找相似文档等应用场景,如果知道每篇文档的主题分布,那么根据隐含的主题分布而不是简单的词统计数据来计算文档的相似度等。
按照前面说的选定主题再选文字的过程,主要涉及两个需要求解的分布,文档-主题分布 θ ⃗ m \vec \theta_m θm和主题-文字 φ ⃗ k \vec \varphi_k φk的分布。如果按照频率学派的思想,一篇文章写每个词时选择主题的概率分布与每个主题下词的概率分布是确定的。但是LDA是贝叶斯学派思想,即文档-主题概率和主题-词不确定但是服从一个已知参数Dirichlet分布。
LDA的图模型如下图, 文档主要分两个过程:
1.从Dirichlet( α ⃗ \vec \alpha α)的分布中生成针对一篇文档 m的主题分布 θ ⃗ m \vec \theta_m θm,然后要开始生成文档m的每个文字了,对第n个字根据 θ ⃗ m \vec \theta_m θm给该词分配一个主题 z m , n z_{m,n} zm,n
2.从Dirichlet( β ⃗ \vec \beta β)的分布中生成K个主题-词分布 φ ⃗ k \vec \varphi_k φk,选择编号为 z m , n z_{m,n} zm,n的 φ ⃗ z m , n \vec \varphi_{z_{m,n}} φzm,n 并根据这个分布生成文字 w m , n w_{m,n} wm,n
模型涉及参数维度 α , θ m ∈ R K \alpha, \theta_m \in R^{K} α,θm∈RK, β , φ k ∈ R V \beta, \varphi_k \in R^{V} β,φk∈RV, 其中K 是主题个数。V是所有的词的个数,M是文章个数, N m N_m Nm是第m篇文档的个数。
我们现在如果有语料库的话,只知道 w m , n w_{m,n} wm,n,需要估计的参数是文档-主题分布 θ m \theta_m θm 和主题-词分布 φ k \varphi_k φk (甚至gibbs方法还可以得到每个词的主题,后面会讲解)。那怎么估计参数,有两种方法:
1.gibbs采样,根据采样确定每个词的主题,然后统计词与主题的信息得到 θ m \theta_m θm, φ k \varphi_k φk,因为是采样得到的结果,因此估计出来的参数是随机近似推断
2.变分,直接根据 w m , n w_{m,n} wm,n直接求得 α , β \alpha,\beta α,β,进而可以得到 θ m \theta_m θm, φ k \varphi_k φk的分布
这里需要关于共轭分布和Dirichlet分布的一些知识,所以我们先把它列出来。
贝叶斯参数估计的过程是 参数的先验分布+ 数据的似然分布=参数的后验分布,即下式:
P ( θ ∣ x ) ∝ P ( x ∣ θ ) × P ( θ ) P(\theta|x) \propto P(x|\theta)\times P(\theta) P(θ∣x)∝P(x∣θ)×P(θ)
共轭分布是指如果先验分布 P ( θ ) P(\theta) P(θ)和后验分布 P ( θ ∣ x ) P(\theta|x) P(θ∣x)具有相同的分布形式(参数并不一定相同),那么称先验分布 P ( θ ) P(\theta) P(θ)是似然函数 P ( x ∣ θ ) P(x|\theta) P(x∣θ)的共轭先验。
Dirichlet分布是多项式分布的共轭先验分布,也就是如果 m ⃗ \vec m m服从参数为 p ⃗ \vec p p的多项式分布,而先验分布 p ⃗ \vec p p服从参数为 α \alpha α的Dirichlet分布,那么 p ⃗ \vec p p的后验分布依然服从Dirichlet分布。公式如下:
P ( m ⃗ ∣ p ⃗ ) = ( N n ⃗ ) ∏ k p k m k P ( p ⃗ ∣ α ⃗ ) = 1 Δ ( α ⃗ ) ∏ k p k α k − 1 P ( p ⃗ ∣ α ⃗ , m ⃗ ) ∝ ∏ k p k α k + m k − 1 P(\vec m|\vec p) = {N \choose \vec n} \prod_k \ p_k^{m_k}\\ P(\vec p|\vec \alpha)=\frac{1}{\Delta(\vec \alpha) }\prod_k\ p_k^{\alpha_k-1}\\ P(\vec p|\vec \alpha, \vec m) \propto \prod_k\ p_k^{\alpha_k+m_k-1} P(m∣p)=(nN)k∏ pkmkP(p∣α)=Δ(α)1k∏ pkαk−1P(p∣α,m)∝k∏ pkαk+mk−1
其中 Δ ( α ⃗ ) = ∏ k Γ ( α k ) Γ ( ∑ i α i ) = ∫ p ⃗ ∏ k p k α k   d p ⃗ {\Delta(\vec \alpha) }=\frac{\prod_k\Gamma(\alpha_k) }{\Gamma(\sum_i \alpha_i) }=\int_{\vec p}\prod_k\ p_k^{\alpha_k}\,d \vec p Δ(α)=Γ(∑iαi)∏kΓ(αk)=∫p∏k pkαkdp
既然是生成模型,需要求联合概率 P ( W , Z , Θ , Φ ∣ α , β ) P(W, Z,\Theta, \Phi|\alpha, \beta) P(W,Z,Θ,Φ∣α,β)但是 Φ \Phi Φ和 Θ \Theta Θ本身关联Z,W。因此只需要求 P ( W , Z ∣ α ⃗ , β ⃗ ) = P ( W ∣ Z , β ) × P ( Z ∣ α ⃗ ) P(W,Z|\vec \alpha,\vec \beta)=P(W|Z,\beta)\times P(Z|\vec \alpha) P(W,Z∣α,β)=P(W∣Z,β)×P(Z∣α)
第二项:
对一篇文档m, θ m \theta_m θm是文档m的K个主题分布, z m z_m zm是文档中每个字的主题,显然服从参数为 θ m \theta_m θm的多项式分布,而 θ m \theta_m θm又服从参数为 α \alpha α的Dirichlet分布,那么考虑文档数据之后 z m z_m zm依然服从Dirichlet的分布。具体公式如下:
P ( z ⃗ m ∣ θ ⃗ ) = ∏ k θ m , k n m k P ( θ ⃗ m ∣ α ⃗ ) = 1 Δ ( α ⃗ ) ∏ k θ m , k α k − 1 P ( z ⃗ m ∣ α ⃗ ) = ∫ θ ⃗ m P ( z ⃗ m ∣ θ ⃗ ) × P ( θ ⃗ m ∣ α ⃗ )   d θ ⃗ m = ∫ θ ⃗ m 1 Δ ( α ⃗ ) ∏ k θ m , k α k + n m k − 1   d θ ⃗ m = Δ ( α ⃗ + n ⃗ m ) Δ ( α ⃗ ) P(\vec z_m|\vec \theta)=\prod_k\ \theta_{m,k}^{n_m^k}\\ P(\vec \theta_m|\vec \alpha)=\frac{1}{\Delta(\vec \alpha) }\prod_k\ \theta_{m,k}^{\alpha_k-1}\\P(\vec z_m|\vec \alpha)=\int_{\vec \theta_m}P(\vec z_m|\vec \theta)\times P(\vec \theta_m|\vec \alpha)\,d\vec \theta_m\\=\int_{\vec \theta_m}\frac{1}{\Delta(\vec \alpha) }\prod_k\ \theta_{m,k}^{\alpha_k+n_m^k-1}\,d\vec \theta_m=\frac{\Delta(\vec \alpha+\vec n_m)}{\Delta(\vec \alpha) } P(zm∣θ)=k∏ θm,knmkP(θm∣α)=Δ(α)1k∏ θm,kαk−1P(zm∣α)=∫θmP(zm∣θ)×P(θm∣α)dθm=∫θmΔ(α)1k∏ θm,kαk+nmk−1dθm=Δ(α)Δ(α+nm)
其中 n ⃗ m = ( n m 1 , n m 2 , . . . , n m K ) , n m k \vec n_m=(n_m^1,n_m^2,...,n_m^K),\ n_m^k nm=(nm1,nm2,...,nmK), nmk表示第m篇文档中属于k主题的词个数。
那么对所有文档 P ( Z ∣ α ⃗ ) = ∏ m Δ ( α ⃗ + n ⃗ m ) Δ ( α ⃗ ) P(Z|\vec\alpha)=\prod_m \frac{\Delta(\vec \alpha+\vec n_m)}{\Delta(\vec \alpha) } P(Z∣α)=m∏Δ(α)Δ(α+nm).
同理第二项:
单个主题的词分布 P ( w ⃗ k ∣ z ⃗ k , β ⃗ ) = Δ ( β ⃗ + n ⃗ k ) Δ ( β ⃗ ) P(\vec w_k|\vec z_k,\vec \beta)=\frac{\Delta(\vec \beta+\vec n_k)}{\Delta(\vec \beta) } P(wk∣zk,β)=Δ(β)Δ(β+nk)
所有主题 P ( Z ∣ z ⃗ k , β ⃗ ) = ∏ k Δ ( β ⃗ + n ⃗ k ) Δ ( β ⃗ ) P(Z|\vec z_k,\vec \beta)=\prod_k\frac{\Delta(\vec \beta+\vec n_k)}{\Delta(\vec \beta) } P(Z∣zk,β)=k∏Δ(β)Δ(β+nk)
其中 n ⃗ k = ( n k 1 , n k 2 , . . . , n k V ) , n k t \vec n_k=(n_k^1,n_k^2,...,n_k^V),\ n_k^t nk=(nk1,nk2,...,nkV), nkt表示k主题产生的的词中词t的个数。
最后联合概率为 P ( W , Z ∣ α ⃗ , β ⃗ ) = ∏ k Δ ( β ⃗ + n ⃗ k ) Δ ( β ⃗ ) ∏ m Δ ( α ⃗ + n ⃗ m ) Δ ( α ⃗ ) P(W,Z|\vec \alpha,\vec \beta)=\prod_k\frac{\Delta(\vec \beta+\vec n_k)}{\Delta(\vec \beta) }\prod_m \frac{\Delta(\vec \alpha+\vec n_m)}{\Delta(\vec \alpha) } P(W,Z∣α,β)=k∏Δ(β)Δ(β+nk)m∏Δ(α)Δ(α+nm)