机器学习笔记(三)LDA主题模型


本文是对https://www.cnblogs.com/pinard/p/6831308.html此篇博客的自我理解和细节的补充。

模型学习的目标

  1. 学习M篇文章中每个文章的主题分布,和K个主题中每个主题中词的分布。
    例:我们想要知道一个文章中,它包含了哪些主题且主题的比重是怎样的,例如一篇文章《神探夏洛克》,它的主题分布可能是
    (1)包含了40%的犯罪、20%的基情、40%的悬疑
    (2)包含了30%的犯罪、30%的基情、40%的悬疑
    等等。。。
    我们先从可能的主题分布中按概率抽取一条,再根据该主题分布,抽取一个主题。
    例如我们抽取到的是犯罪主题,那么该主题的词的分布可能是(1)“谋杀”这个词出现的概率是20%、“抢劫”出现的概率是30%、“社会出现的概率是50%”
    (2)“谋杀”这个词出现的概率是30%、“抢劫”出现的概率是20%、“社会出现的概率是50%”。
    等等,
    我们再从中抽取一条词分布,再根据词分布抽取一个词,作为该文章的第n个词。
    我们要学习的目的就是根据语料库,学习出上边具体的概率。
    我们共有M篇文章和K个主题,则要求出M个文章的主题分布的狄利克雷分布,和K个主题的词的狄利克雷分布。共需要求M+K个狄利克雷分布。还有狄利克雷的超参数。即LDA主要有两个任务:对现有文集确定LDA模型参数α、η的值(使用EM变分推断);或对一篇新文档,根据模型确定隐变量的分布p(β,z,θ|w,α,η)(使用Gibbs采样等方法)。

数学理论基础

  1. Beta分布是二项分布的共轭分布,啥叫共轭分布?就是先验概率和后验概率的分布形式是一样的。下面是证明过程,p是二项0,1分布中值取1的概率,n是取样次数、k是取样n次的和、 α \alpha α β \beta β是二项先验知识,即先验知识里二项分布共有 α \alpha α+ β \beta β次取值,其中取1的有 α \alpha α次,取0的有 β \beta β次。我们要求取的是二项分布的p。
    P ( p ∣ k , n , α , β ) = P ( k ∣ p , n , α , β ) ∗ P ( p ∣ α , β , n ) P ( k ∣ α , β , n ) P(p|k,n,\alpha ,\beta )=\frac{P(k|p,n,\alpha,\beta)*P(p|\alpha,\beta,n)}{P(k|\alpha,\beta,n)} P(pk,n,α,β)=P(kα,β,n)P(kp,n,α,β)P(pα,β,n)
    由于 k , n , α , β k,n,\alpha,\beta k,n,α,β皆为已知变量,所以 P ( k ∣ α , β , n ) P(k|\alpha,\beta,n) P(kα,β,n)为定值。故 P ( p ∣ k , n , α , β ) ∝ P ( k ∣ p , n , α , β ) ∗ P ( p ∣ α , β , n ) P(p|k,n,\alpha ,\beta )\propto P(k|p,n,\alpha,\beta)*P(p|\alpha,\beta,n) P(pk,n,α,β)P(kp,n,α,β)P(pα,β,n)
    = P ( k ∣ p , n ) ∗ P ( p ∣ α , β ) =P(k|p,n)*P(p|\alpha,\beta) =P(kp,n)P(pα,β)
    = C n k p k ( 1 − p ) n − k ∗ B e t a ( α , β ) =C_n^kp^k(1-p)^{n-k}*Beta(\alpha,\beta) =Cnkpk(1p)nkBeta(α,β)
    = C n k p k ( 1 − p ) n − k ∗ Γ ( α + β ) Γ ( α ) ∗ Γ ( β ) p α − 1 ( 1 − p ) β − 1 =C_n^kp^k(1-p)^{n-k}*\frac{\Gamma (\alpha+\beta)}{\Gamma (\alpha)*\Gamma (\beta)}p^{\alpha-1}(1-p)^{\beta-1} =Cnkpk(1p)nkΓ(α)Γ(β)Γ(α+β)pα1(1p)β1
    …其中 Γ ( x ) = ( x − 1 ) ! \Gamma (x)=(x-1)! Γ(x)=(x1)!且因为n,k为定值,所以 C n k C_n^k Cnk为定值。且 α , β \alpha,\beta α,β为定值所以 Γ ( α + β ) Γ ( α ) ∗ Γ ( β ) \frac{\Gamma (\alpha+\beta)}{\Gamma (\alpha)*\Gamma (\beta)} Γ(α)Γ(β)Γ(α+β)也为定值,所以上式正比于下式。
    p k ( 1 − p ) n − k ∗ p α − 1 ( 1 − p ) β − 1 p^k(1-p)^{n-k}*p^{\alpha-1}(1-p)^{\beta-1} pk(1p)nkpα1(1p)β1,将此式归一化后可以得到 Γ ( α + β + n ) Γ ( α + k ) ∗ Γ ( β + n − k ) p α − 1 + k ( 1 − p ) β − 1 + n − k \frac{\Gamma (\alpha+\beta+n)}{\Gamma (\alpha+k)*\Gamma (\beta+n-k)}p^{\alpha-1+k}(1-p)^{\beta-1+n-k} Γ(α+k)Γ(β+nk)Γ(α+β+n)pα1+k(1p)β1+nk
    = B e t a ( α + k , β + n − k ) =Beta(\alpha+k,\beta+n-k) =Beta(α+k,β+nk)
    我们可以看到,先验概率中二项分布的参数p服从 B e t a ( α , β ) Beta(\alpha,\beta) Beta(α,β)分布,后验概率中二项分布的参数p服从 B e t a ( α + k , β + n − k ) Beta(\alpha+k,\beta+n-k) Beta(α+k,β+nk),所以说Beta分布是共轭分布。

B e t a ( α , β ) 的 期 望 是 α α + β Beta(\alpha,\beta)的期望是\frac{\alpha}{\alpha+\beta} Beta(α,β)α+βα具体求证过程较为简单,此处不证。
2. 我们可以从二项分布推广到多项式分布,即狄利克雷分布 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 Dirichlet(\vec p| \vec \alpha) = \frac{\Gamma(\sum\limits_{k=1}^K\alpha_k)}{\prod_{k=1}^K\Gamma(\alpha_k)}\prod_{k=1}^Kp_k^{\alpha_k-1} Dirichlet(p α )=k=1KΓ(αk)Γ(k=1Kαk)k=1Kpkαk1
,同理,狄利克雷分布的期望为
E ( D i r i c h l e t ( p ⃗ ∣ α ⃗ ) ) = ( α 1 ∑ k = 1 K α k , α 2 ∑ k = 1 K α k , . . . , α K ∑ k = 1 K α k ) E(Dirichlet(\vec p|\vec \alpha)) = (\frac{\alpha_1}{\sum\limits_{k=1}^K\alpha_k}, \frac{\alpha_2}{\sum\limits_{k=1}^K\alpha_k},...,\frac{\alpha_K}{\sum\limits_{k=1}^K\alpha_k}) E(Dirichlet(p α ))=(k=1Kαkα1,k=1Kαkα2,...,k=1KαkαK)

Gibbs采样算法求解LDA的思路

大家可以先看过我的思路解释,再详细去看原文。
详见:https://www.cnblogs.com/pinard/p/6867828.html
这里记录下我的理解,Gibbs采样就是指我们要求一个联合概率分布,我们可以通过如下方式对 P ( a , b ) P(a,b) P(a,b)分布进行采样,最后根据采样结果求出 P ( a , b ) P(a,b) P(a,b)。我们可以把b固定对 P ( a ∣ b 0 ) P(a|b_0) P(ab0)采样推导出 a 0 a_0 a0的下一个状态 a 1 a_1 a1,再以 a 1 a_1 a1为条件采样 P ( b ∣ a 1 ) P(b|a_1) P(ba1)得出 b 1 b_1 b1,则 ( a 1 , b 1 ) (a_1,b_1) (a1,b1)作为对 P ( a , b ) P(a,b) P(a,b)分布采样的第一个样本。但注意,随着采样轮数的增加, ( a n , b n ) (a_n,b_n) (an,bn)分布才会逼近真实的 P ( a , b ) P(a,b) P(a,b)
我们通过Gibbs采样要得到的每个样本,其内容是每个文章中的每个词所属的主题。最后我们根据样本中词的主题分布,就可以求出每篇文章的的主题分布(注意最后求出来的是多项式分布而不是狄利克雷分布,狄利克雷只是在我们求多项式分布时用的),和每个主题的词分布。

在Gibbs采样过程中,我们求 P ( a ∣ b 0 ) P(a|b_0) P(ab0)这样的过程时所用的公式如下,固定了除要迭代的词外的其他词的主题作为条件,求条件概率。
n d , − i k n_{d,-i}^k nd,ik的意思是第d篇文章中主题为k的词的个数,注意-i是指计数不包括i。 n k , − i t n_{k,-i}^t nk,it指的是主题k中词取t的个数,-i同上。
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 p(z_i=k| \vec w,\vec z_{\neg i}) = \frac{n_{d, \neg i}^{k} + \alpha_k}{\sum\limits_{s=1}^Kn_{d, \neg i}^{s} + \alpha_s} \frac{n_{k, \neg i}^{t} + \eta_t}{\sum\limits_{f=1}^Vn_{k, \neg i}^{f} + \eta_f} p(zi=kw ,z ¬i)=s=1Knd,¬is+αsnd,¬ik+αkf=1Vnk,¬if+ηfnk,¬it+ηt

n d , ¬ i k + α k ∑ s = 1 K n d , ¬ i s + α s \frac{n_{d, \neg i}^{k} + \alpha_k}{\sum\limits_{s=1}^Kn_{d, \neg i}^{s} + \alpha_s} s=1Knd,¬is+αsnd,¬ik+αk为文章d的主题分布的狄利克雷分布的期望。
n k , ¬ i t + η t ∑ f = 1 V n k , ¬ i f + η f \frac{n_{k, \neg i}^{t} + \eta_t}{\sum\limits_{f=1}^Vn_{k, \neg i}^{f} + \eta_f} f=1Vnk,¬if+ηfnk,¬it+ηt为主题k的词分布的狄利克雷分布的期望。

LDA求解之变分推断EM算法

大家可以先看过我的思路解释,再详细去看原文。
详见:https://blog.csdn.net/liuy9803/article/details/81155379
我们要求取 α \alpha α η \eta η这两个参数,最大化P(w| α , η \alpha,\eta αη),因为中间包含隐变量 Θ 、 β 、 z \Theta、\beta、z Θβz,我们需要用EM算法先E求出隐变量的期望,再固定隐变量,求得 α \alpha α η \eta η,使目标P(w| α , η \alpha,\eta αη)变大。但由于隐变量θ、β之间存在耦合关系,使用EM算法时E步无法直接求解它们基于条件概率分布的期望,因此使用变分法引入mean field assumption,假设所有的隐变量都是通过各自独立的分布生成的,即去掉隐变量之间的连线和w结点,并赋予β、z、θ各自独立分布,λ、Φ、γ为变分参数。通过一系列计算,可以将EM算法中的ELBO(验证下界)转换成和λ,Φ,γ,ɑ,η相关的函数。 E步关于λ,Φ,γ极大化L得到真实后验分布的近似分布q; M步固定变分参数ɑ,η极大化L,反复迭代直到收敛。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值