机器学习笔记(三)LDA主题模型
本文是对https://www.cnblogs.com/pinard/p/6831308.html此篇博客的自我理解和细节的补充。
模型学习的目标
- 学习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采样等方法)。
数学理论基础
- 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(p∣k,n,α,β)=P(k∣α,β,n)P(k∣p,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(p∣k,n,α,β)∝P(k∣p,n,α,β)∗P(p∣α,β,n)
= P ( k ∣ p , n ) ∗ P ( p ∣ α , β ) =P(k|p,n)*P(p|\alpha,\beta) =P(k∣p,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(1−p)n−k∗Beta(α,β)
= 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(1−p)n−k∗Γ(α)∗Γ(β)Γ(α+β)pα−1(1−p)β−1
…其中 Γ ( x ) = ( x − 1 ) ! \Gamma (x)=(x-1)! Γ(x)=(x−1)!且因为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(1−p)n−k∗pα−1(1−p)β−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)∗Γ(β+n−k)Γ(α+β+n)pα−1+k(1−p)β−1+n−k
= B e t a ( α + k , β + n − k ) =Beta(\alpha+k,\beta+n-k) =Beta(α+k,β+n−k)。
我们可以看到,先验概率中二项分布的参数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,β+n−k),所以说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=1∑Kαk)∏k=1Kpkαk−1
,同理,狄利克雷分布的期望为
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=1∑Kαkα1,k=1∑Kαkα2,...,k=1∑Kα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(a∣b0)采样推导出
a
0
a_0
a0的下一个状态
a
1
a_1
a1,再以
a
1
a_1
a1为条件采样
P
(
b
∣
a
1
)
P(b|a_1)
P(b∣a1)得出
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(a∣b0)这样的过程时所用的公式如下,固定了除要迭代的词外的其他词的主题作为条件,求条件概率。
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=k∣w,z¬i)=s=1∑Knd,¬is+αsnd,¬ik+αkf=1∑Vnk,¬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=1∑Knd,¬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=1∑Vnk,¬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,反复迭代直到收敛。