机器学习笔记(三)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)!