LDA主题模型2——文本建模与Gibbs采样求解

相信很多人第一次看到LDA算法都会头大,不管是看论文还是看博客,都少不了各种各样的公式和理论,概率分布、共轭分布、贝叶斯公式、Gibbs采样等等,一大堆耳熟又陌生的词,经常带着一大堆问号去学习,又带着一大堆问号离开。。。本篇文章将会一点点的将其攻克。

通篇内容比较多,但是总结的还算详细~~~

上一篇 LDA主题模型1——数学基础
下一篇 LDA主题模型3——EM算法求解


在阅读这篇博文之前,希望大家能了解一下这些数学基础:贝叶斯概率、共轭分布、Gibbs采样、MCMC等,如果没有或者已经淡忘,可以参考我的这几篇博文。

MCMC
Gibbs采样
共轭分布

LDA牵扯的数学理论比较多,我也是来回分析了好几遍才逐渐明白,每个人的看问题的角度不同,相应的症结点也不一样,我把自己的思路和理解写出来,希望对大家有帮助。

1,LDA初步理解

隐含狄利克雷分布(Latent Dirichlet Allocation,以下简称LDA) 是被广泛使用的主题模型。由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,用来推测文档的主题分布,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题分布后,便可以根据主题分布进行主题聚类或文本分类。在NLP、推荐系统隐语义分析相关方法中经常提到。本文将会详细的剖析LDA算法原理。

LDA(Latent Dirichlet Allocation)是一种文档主题生成模型,也称为一个三层贝叶斯概率模型,包含词、主题和文档三层结构。所谓生成模型,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到。

Ok,现在我们知道要解决的问题了:给出一篇文档,找出其主题的概率分布。如何做呢?文档建模,我们需要建立一个文章生成模型,以及文章生成过程中的模型参数,就能得到文档的主题分布,所以我们首先要确定LDA主题模型如何描述文档的生成过程的,然后是如何计算模型参数的。

2,文本建模

为了深入的理解LDA建模过程及求解方法,我们简单对比一下其他的文本建模思路:

1)文本中的词符合一定的分布,通常我们认为是多项式分布 w ∼ M u l t ( n ⃗ ∣ p ⃗ ) w \sim Mult(\vec{n} |\vec{p}) wMult(n p ),在多项式模型下生成一个个的词。——unigram model
2)贝叶斯的角度的unigram model,我们从贝叶斯概率知识中了解到,数据是有先验的,数据本身符合多项式分布,为了方便求解,我们认为数据的先验是其共轭分布(Dirichlet分布)。——unigram model + 贝叶斯
3)以上两种文本数据模型都没有涉及到主题的概念。假设一篇文章符合一定的主题分布,文章中的每个词都是在该主题分布下生成的。那么相对于文本建模方法1),这里就有两个多项式模型。文章生成主题的多项式模型,主题生成词汇的多项式模型。——PLSA
4)再次从贝叶斯角度来看,PLSA的每个多项式模型都应该有一个Dirichlet先验。——LDA

下边我们逐个来对比总结。

2.1 unigram model

在Unigram Model中,我们采用词袋模型,假设了文档之间相互独立,文档中的词汇之间相互独立。假设我们的词典中一共有 V 个词 ,那么最简单的Unigram Model是V个词是在多项式概率模型下产生的,文章是词上的概率分布。

unigram model 生成过程

我们明确几个概念:
1)词汇数据样本符合多项式分布: w ∼ M u l t ( n ⃗ ∣ p ⃗ ) w \sim Mult(\vec{n} |\vec{p}) wMult(n p ), 其中 p ⃗ = ( p 1 , p 2 , . . . , p V ) \vec{p}=(p_1,p_2,...,p_V) p =(p1,p2,...,pV), 表示每个词的概率。
2)一篇文章有n个词w,彼此相互独立,表示为: w ⃗ = ( w 1 , w 2 , . . . , w n ) \vec{w}=(w_1,w_2,...,w_n) w =(w1,w2,...,wn)

在这样的条件下生成这样一篇文章概率为:
p ( w ⃗ ) = p ( w 1 , w 2 , . . . , w n ) = p ( w 1 ) p ( w 2 ) . . . p ( w n ) p(\vec{w})=p(w_1,w_2,...,w_n)=p(w_1)p(w_2)...p(w_n) p(w )=p(w1,w2,...,wn)=p(w1)p(w2)...p(wn)

那么对于有 m m m篇文档的整个语料库而言,假设共有词频 N N N,每个词 w k w_k wk的词频为 n k n_k nk,那么整个语料库的概率为:
p ( W ) = p ( w 1 ⃗ ) p ( w 2 ⃗ ) . . . p ( w m ⃗ ) = ∏ k = 1 K p k n k p(W)=p(\vec{w_1})p(\vec{w_2})...p(\vec{w_m})=\prod_{k=1}^{K}p_{k}^{n_k} p(W)=p(w1 )p(w2 )...p(wm )=k=1Kpknk

unigram model 模型参数求解

模型建好了,参数就是概率向量 p k p_k pk,通过最大似然估计,很容易计算出估计值:
p ^ k = n k N \hat{p}_k=\frac{n_k}{N } p^k=Nnk

如果这个结果不好思考,建议参考LR的最大似然估计,这里一个简答的办法就是将N引入上面的语料库概率公式,将概率更换为p、1-p,转化成二项式形式,即可得到。

2.2 unigram model + 贝叶斯

在贝叶斯学派看来,数据要有先验。生成这篇文章的多项式分布参数 p ⃗ \vec{p} p 并不是固定唯一的,所以现在我们有很多个多项式分布,这些分布的概率参数 p ⃗ \vec{p} p 符合Dirichlet分布 P ( p ⃗ ) P(\vec{p}) P(p ),每个分布都可以生成V个词,组成这样一篇文章。

生成过程

unigram model 模型中我们定义 p ( W ) p(W) p(W)为语料库数据的概率,实际上其更加准确的表达为 p ( W ∣ p ⃗ ) p(W|\vec{p}) p(Wp )。考虑贝叶斯的先验,那么语料库的的数据概率为:
p ( W ) = ∫ p ( W ∣ p ⃗ ) p ( p ⃗ ) d p ⃗ p(W)=\int p(W|\vec{p})p(\vec{p})d\vec{p} p(W)=p(Wp )p(p )dp

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 \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}^{K}p_k^{\alpha_k-1}\\ \end{aligned} Dirichlet(p α )=k=1KΓ(αk)Γ(k=1Kαk)k=1Kpkαk1

1)语料库数据的生成概率:

p ( W ∣ α ) = ∫ p ( W ∣ p ⃗ ) p ( p ⃗ ∣ α ) d p ⃗ = ∫ ∏ k = 1 K p k n k D i r ( p ⃗ ∣ α ⃗ ) d p ⃗ = 1 Δ ( α ⃗ ) ∫ ∏ k = 1 K p k n k ∏ k = 1 K p k α k − 1 d p ⃗ = Δ ( n ⃗ + α ⃗ ) Δ ( α ⃗ ) \begin{aligned} p(W|\alpha) &=\int p(W|\vec{p})p(\vec{p}|\alpha)d\vec{p}\\ &=\int \prod_{k=1}^{K}p_{k}^{n_k}Dir(\vec{p}|\vec{\alpha})d\vec{p}\\ &=\frac{1}{\Delta(\vec{\alpha})}\int \prod_{k=1}^{K}p_k^{n_k} \prod_{k=1}^{K}p_k^{\alpha_k-1}d\vec{p}\\ &=\frac{\Delta(\vec{n}+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned} p(Wα)=p(Wp )p(p α)dp =k=1KpknkDir(p α )dp =Δ(α )1k=1Kpknkk=1Kpkαk1dp =Δ(α )Δ(n +α )

Δ ( α ⃗ ) \Delta(\vec{\alpha}) Δ(α )表示Dirichlet分布的归一化系数,详细解释参考上一篇博文。我们得到了语料库数据的生成概率,它与Dirichlet分布参数 α \alpha α以及数据的词频 n n n有关。

2)后验概率:

有一个问题我们没有解决,数据的概率参数 p ⃗ \vec{p} p 的估计值是多少?虽然多项式分布的参数p符合Dirichlet先验,但是对于文章本身而言是有其期望值的,现在给定一篇文章,如何估计这个多项式分布的参数 p ⃗ \vec{p} p 呢?

我们知道 p ⃗ \vec{p} p 在先验分布为Dirichlet分布,先验分布是根据经验得到的,不能只根据Dirichlet先验来估计数据,根据贝叶斯理论,在观察到一篇文档数据后,数据会对先验进行修正,这里后验概率为:

D i r ( p ⃗ ∣ W , n ⃗ + α ⃗ ) = 1 Δ ( n ⃗ + α ⃗ ) ∏ k = 1 K p k n k + α k − 1 \begin{aligned} Dir(\vec{p}|W,\vec{n}+\vec{\alpha}) &=\frac{1}{\Delta(\vec{n}+\vec{\alpha})}\prod_{k=1}^{K}p_k^{n_k+\alpha_k-1}\\ \end{aligned} Dir(p W,n +α )=Δ(n +α )1k=1Kpknk+αk1

有了数据参数,我们可以用平均值作为估计值,估计现在的多项式分布的参数 p ⃗ \vec{p} p 为:
E ( D i r ( p ⃗ ∣ W , n ⃗ + α ⃗ ) ) = ( n 1 + α 1 ∑ k = 1 V n k + α k , n 2 + α 2 ∑ k = 1 V n k + α k , . . . , n V + α V ∑ k = 1 V n k + α k ) E(Dir(\vec{p}|W,\vec{n}+\vec{\alpha})) =(\frac{n_1+\alpha_1}{\sum_{k=1}^{V}n_k+\alpha_k},\frac{n_2+\alpha_2}{\sum_{k=1}^{V}n_k+\alpha_k},...,\frac{n_V+\alpha_V}{\sum_{k=1}^{V}n_k+\alpha_k}) E(Dir(p W,n +α ))=(k=1Vnk+αkn1+α1,k=1Vnk+αkn2+α2,...,k=1Vnk+αknV+αV)

那么:
p ^ i = n i + α i ∑ k = 1 V n k + α k \hat{p}_i=\frac{n_i+\alpha_i}{\sum_{k=1}^{V}n_k+\alpha_k} p^i=k=1Vnk+αkni+αi

2.3 PLSA模型

Unigram Model模型中,没有考虑主题词这个概念。我们写文章时,写的文章都是关于某一个主题的,不是满天胡乱的写,比如一个财经记者写一篇报道,那么这篇文章大部分都是关于财经主题的,当然,也有很少一部分词汇会涉及到其他主题。所以,PLSA认为生成一篇文档的生成过程如下(对比unigram model的频率视角):文章先通过多项式分布模型生成可能的主题,再通过主题模型生成样本词汇。

生成过程

PLSA中,也是采用词袋模型,文档和文档之间是独立可交换的,同一个文档内的词也是独立可交换的。现在来定义几个相关的参数:
1)语料库 C C C包含 M M M篇文档: C = ( d 1 , d 2 , . . . , d M ) C=(d_1,d_2,...,d_M) C=(d1,d2,...,dM)
2)对应有 M M M个 doc-topic 多项式主题模型: θ ⃗ 1 , θ ⃗ 2 , . . . , θ ⃗ M \vec{\theta}_1,\vec{\theta}_2,...,\vec{\theta}_M θ 1,θ 2,...,θ M,将 θ ⃗ \vec{\theta} θ 看做多项式分布即可,我更倾向于将 θ ⃗ \vec{\theta} θ 看做多项式概率参数 q ⃗ \vec{q} q ,每篇文章都有一个主题分布,生成不同的主题。
3) K K K个 topic-word 多项式词模型 ϕ ⃗ 1 , ϕ ⃗ 2 , . . . , ϕ ⃗ K \vec{\phi}_1,\vec{\phi}_2,...,\vec{\phi}_K ϕ 1,ϕ 2,...,ϕ K,同理将 ϕ ⃗ \vec{\phi} ϕ 看作是多项式分布的表示,进一步,将 ϕ ⃗ \vec{\phi} ϕ 看作是多项式概率参数 q ⃗ \vec{q} q 更好理解公式。
关于 M M M个 doc-topic 多项式主题模型和 K K K个 topic-word 多项式词模型的关系有必要强调以下:M表示文章,M个主题模型表示每个文章一个主题模型,至于主题有多少个,这里由多项式参数决定,假设有K个主题,在这篇文章中K个主题都有对应的词,每个词对应哪个主题由K个topic-world词模型表示,所以,一般的,topic-word是在整个语料库都适用的,doc-topic适用于所在的那一篇文章。

PLSA 模型是两层多项式分布的概率模型,那么第 m m m篇文档 d m d_m dm中的每个词的生成概率为,词w所在的文章生成不同的主题,不同的主题再次生成词w的概率之和,这里如果把 ϕ ⃗ \vec{\phi} ϕ θ ⃗ \vec{\theta} θ 看作概率 q ⃗ \vec{q} q 就很方便。
p ( w ∣ d m ) = ∑ z = 1 K p ( w ∣ z ) p ( z ∣ d m ) = ∑ z = 1 K ϕ z w θ w z \begin{aligned} p(w|d_m) &=\sum_{z=1}^{K} p(w|z)p(z|d_m)\\ &=\sum_{z=1}^{K}\phi_{zw}\theta_{wz} \end{aligned} p(wdm)=z=1Kp(wz)p(zdm)=z=1Kϕzwθwz

那么一篇文章的生成概率为:

p ( w ⃗ ∣ d m ) = ∏ w = 1 n ∑ z = 1 K p ( w ∣ z ) p ( z ∣ d m ) = ∏ w = 1 n ∑ z = 1 K ϕ z w θ w z \begin{aligned} p(\vec{w}|d_m) &=\prod_{w=1}^{n}\sum_{z=1}^{K} p(w|z)p(z|d_m)\\ &=\prod_{w=1}^{n}\sum_{z=1}^{K}\phi_{zw}\theta_{wz} \end{aligned} p(w dm)=w=1nz=1Kp(wz)p(zdm)=w=1nz=1Kϕzwθwz

模型生成过程已经表达出来了,接下来就是估计参数 ϕ ⃗ \vec{\phi} ϕ θ ⃗ \vec{\theta} θ ,相应的解法是EM算法,本篇暂时不做展开。

2.4 LDA主题模型

2.4.1 LDA生成过程

初步认识LDA的生成过程

在这里插入图片描述
LDA的建模过程可以总结为上面这幅图,具体什么意思,我们一步步解析

1,按照先验概率 p ( d i ) p(d_i) p(di)选择一篇文档 d i d_i di
2,从 D i r i c h l e t Dirichlet Dirichlet分布 α \alpha α中取样生成文档 d i d_i di的主题分布 θ i \theta_i θi,主题分布 θ i \theta_i θi由超参数 α \alpha α D i r i c h l e t Dirichlet Dirichlet分布生成。
3,从主题的多项式分布 θ i \theta_i θi中取样生成文档 d i d_i di的第 j j j个主题 z i , j z_{i,j} zi,j
4,从 D i r i c h l e t Dirichlet Dirichlet分布 η \eta η中取样生成主题 z i , j z_{i,j} zi,j对应的词分布 ϕ z i , j \phi_{z_{i,j}} ϕzi,j,词分布 ϕ z i , j \phi_{z_{i,j}} ϕzi,j由参数为 η \eta η D i r i c h l e t Dirichlet Dirichlet分布分布生成。
5,从赐予的多项式分布 ϕ z i , j \phi_{z_{i,j}} ϕzi,j中采样最终生成词语 w i , j w_{i,j} wi,j

(我相信,有些同学对于细节上还是很多问号的。。。不过没关系,这里讲个大概,后面详解分解每一步。)

从以上生成过程可以看出,LDA 在 PLSA 的基础上为主题分布和词分布分别加了两个 Dirichlet 先验。在LDA中,主题分布和词分布是不确定的,LDA的作者们采用的是贝叶斯派的思想,认为它们应该服从一个分布,主题分布和词分布都是多项式分布,因为多项式分布和狄利克雷分布是共轭结构,在LDA中主题分布和词分布使用了Dirichlet分布作为它们的共轭先验分布。也就有了一句广为流传的话 – LDA 就是 PLSA 的贝叶斯化版本
有两张图,比较好的诠释了两者的区别
在这里插入图片描述
在这里插入图片描述
PLSA模型中,文章按照固定概率生成topic,topic按照固定概率生成word。LDA模型中,文章首先要按照dirichlet先验选取一个生成topic的概率分布模型,然后生成topic,topic生成word之前,也要根据dirichlet先验生成一个topic-word的概率分布模型,然后生成word。

LDA生成过程详解

本节我们来剖析LDA生成过程的每一句话,生成公式的每一个符号。
LDA的生成过程分为两步,文档生成主题,主题生成词语,我们来看下主题的生成过程,上公式:

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(\vec{\theta}_d|\vec{\alpha})d\vec{\theta}_d\\ &=\int \prod_{k=1}^{K}p_k^{n_d^{(k)}}Dirichlet(\vec{\alpha})d\vec{\theta}_d\\ &=\int \prod_{k=1}^{K}p_k^{n_d^{(k)}}\frac{1}{\Delta{\vec{\alpha}}}\prod_{k=1}^{K}p_k^{\alpha_k-1}d\vec{\theta}_d\\ &=\frac{1}{\Delta{\vec{\alpha}}}\prod_{k=1}^{K}p_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+α )

既然是生成过程,我们要计算的就是数据生成的概率表示,而这个公式计算的就是主题数据的概率表示,而且主题z是符合多项式分布的 m u l ( m ⃗ ∣ n , p ⃗ ) mul(\vec{m}|n,\vec{p}) mul(m n,p ),其先验是Dirichlet分布 D i r ( p ⃗ ∣ α ⃗ ) Dir(\vec{p}|\vec{\alpha}) Dir(p α )

公式剖析:
1)文档d第n个词汇主题z为k的概率: p ( z d n k ) = p k p(z_{d_n}^k)=p_k p(zdnk)=pk
2)那么文档d所有词汇数据主题概率: p ( z ⃗ d ) = ∏ k = 1 K p k n k d p(\vec{z}_d)=\prod_{k=1}^{K}p_k^{n_k^d} p(z d)=k=1Kpknkd
所有主题的意思:文档中的每个词都有对应的主题,每个主题也都有相应的一组词,所以这里 n k d n_k^d nkd的表示文档d第k个主题的词汇数量。

3)先验的概念:贝叶斯认为数据分布中的概率参数 p ⃗ \vec{p} p 是有先验的,这里的先验是dirichlet分布。简单来理解,主题的多项式分布参数 p ⃗ \vec{p} p 符合dirichlet分布,所以 p ⃗ \vec{p} p 取不同的值是有一定概率的(dirichlet),下图是二维形式的Dirichlet分布(beta分布),即 p ⃗ \vec{p} p 的分布, p ⃗ \vec{p} p 有无数种可能(下图横坐标,连续的),每个样本p都对应一个主题分布。
在这里插入图片描述

4)贝叶斯公式:那么数据的主题概率就成了在Dirichlet概率分布条件下的二项式分布的结果 p ( z ⃗ d ∣ α ⃗ ) = ∫ p ( z ⃗ d ∣ θ ⃗ d ) p ( θ ⃗ d ∣ α ⃗ ) d θ ⃗ d p(\vec{z}_d|\vec{\alpha})=\int p(\vec{z}_d|\vec{\theta}_d)p(\vec{\theta}_d|\vec{\alpha})d\vec{\theta}_d p(z dα )=p(z dθ d)p(θ dα )dθ d。很多资料表示这里的向量 θ ⃗ \vec{\theta} θ 的含义是主题分布,简单来说,主题z是多项式分布,但具体是那种多项式分布,由 θ ⃗ \vec{\theta} θ 决定,再具体一点,theta-决定的是主题z的多项式分布概率 p ⃗ \vec{p} p p ⃗ \vec{p} p 可以从Dirichlet先验中采样得到。

Ok公式解释完了,整个过程抓住概率 p ⃗ \vec{p} p 就可以了,数据(单词)主题的概率是每个单词主题概率 p ⃗ \vec{p} p 的连乘,同时 p ⃗ \vec{p} p 又是先验决定和生成的,这一点在公式的倒数第三和倒数第二步非常明显。

我们回过头来再次看一下LDA的生成过程:
1,按照先验概率 p ( d i ) p(d_i) p(di)选择一篇文档 d i d_i di
理解为对某一篇文档进行操作即可
2,从 D i r i c h l e t Dirichlet Dirichlet分布 α \alpha α中取样生成文档 d i d_i di的主题分布 θ i \theta_i θi,主题分布 θ i \theta_i θi由超参数 α \alpha α D i r i c h l e t Dirichlet Dirichlet分布生成。
什么叫取样生成主题分布 θ i \theta_i θi?这里说的这么绕,其实就是, D i r i c h l e t Dirichlet Dirichlet分布是概率参数 q ⃗ \vec{q} q 的分布,然后选择一个 q ⃗ \vec{q} q ,作为doc-topic多项式分布的概率参数 q ⃗ \vec{q} q ,把这个多项式分布视为 θ i \theta_i θi
3,从主题的多项式分布 θ i \theta_i θi中取样生成文档 d i d_i di的第 j j j个主题 z i , j z_{i,j} zi,j
什么叫取样生成主题 z i , j z_{i,j} zi,j?多项式分布已经生成了(确定了),根据这个多项式分布进行主题采样,获得一定数量(多项式分布的N,这里是词的数量)的主题。采样完成之后,每个主题的数目n有多有少,就形成了不同主题 z k z_k zk的概率 p k n d ( k ) p_k^{n_d^{(k)}} pknd(k),进而得到整体主题的概率 ∏ k = 1 K p k n d ( k ) \prod_{k=1}^{K}p_k^{n_d^{(k)}} k=1Kpknd(k)。那么接下来要做的也是很清楚了,计算以dirichlet分布为先验的 z k z_k zk得到单词w的概率。然后 z k z_k zk的概率乘上 z k z_k zk得到单词w的概率就是单词w生成概率的一部分,后面有阐述。

所有文档的主题数据概率为:

p ( z ⃗ ∣ α ⃗ ) = ∏ d = 1 M p ( z ⃗ d ∣ α ⃗ ) = ∏ d = 1 M Δ ( n ⃗ d + α ⃗ ) Δ α ⃗ p(\vec{z}|\vec{\alpha})=\prod_{d=1}^{M}p(\vec{z}_d|\vec{\alpha})=\prod_{d=1}^{M}\frac{\Delta(\vec{n}_d+\vec{\alpha})}{\Delta{\vec{\alpha}}} p(z α )=d=1Mp(z dα )=d=1MΔα Δ(n d+α )

按照同样方法和思路,可以理解在某一主题下,词的生成过程:

p ( w ⃗ ∣ z ⃗ , η ⃗ ) = ∏ k = 1 K p ( w ⃗ k ∣ z ⃗ , η ⃗ ) = ∏ k = 1 K Δ ( n ⃗ k + η ⃗ ) Δ η ⃗ p(\vec{w}|\vec{z},\vec{\eta})=\prod_{k=1}^{K}p(\vec{w}_k| \vec{z},\vec{\eta})=\prod_{k=1}^{K}\frac{\Delta(\vec{n}_k+\vec{\eta})}{\Delta{\vec{\eta}}} p(w z ,η )=k=1Kp(w kz ,η )=k=1KΔη Δ(n k+η )

那么单词与主题的联合分布概率为:

p ( w ⃗ , z ⃗ ∣ α ⃗ , β ⃗ ) = p ( w ⃗ ∣ z ⃗ , η ⃗ ) p ( z ⃗ ∣ α ⃗ ) = ∏ k = 1 K Δ ( n ⃗ k + η ⃗ ) Δ η ⃗ ∏ d = 1 M Δ ( n ⃗ d + α ⃗ ) Δ α ⃗ \begin{aligned} p(\vec{w},\vec{z}|\vec{\alpha},\vec{\beta}) &=p(\vec{w}|\vec{z},\vec{\eta})p(\vec{z}|\vec{\alpha})\\ &=\prod_{k=1}^{K}\frac{\Delta(\vec{n}_k+\vec{\eta})}{\Delta{\vec{\eta}}}\prod_{d=1}^{M}\frac{\Delta(\vec{n}_d+\vec{\alpha})}{\Delta{\vec{\alpha}}} \end{aligned} p(w ,z α ,β )=p(w z ,η )p(z α )=k=1KΔη Δ(n k+η )d=1MΔα Δ(n d+α )

这个公式可以理解为,先把全部的主题采样生成完毕,然后这样的主题分布(概率)下,进行主题到词的生成(这里先不考虑文章的概念,将topic-word看作是独立的,即整个语料库的)。还可以这样理解,先得到文章生成每个主题的概率,然后计算每个主题生成词的概率,然后以每个主题的概率进行生成词概率的加权。

2.4.2 LDA求解

很明显,我们要求的的是概率参数: θ ⃗ 1 , θ ⃗ 2 , . . . , θ ⃗ M \vec{\theta}_1,\vec{\theta}_2,...,\vec{\theta}_M θ 1,θ 2,...,θ M ϕ ⃗ 1 , ϕ ⃗ 2 , . . . , ϕ ⃗ K \vec{\phi}_1,\vec{\phi}_2,...,\vec{\phi}_K ϕ 1,ϕ 2,...,ϕ K,而对于一篇新的文档我们能计算这篇文档的topic分布 θ ⃗ \vec{\theta} θ

现在我们得到了主题与词的联合概率分布,如何求解呢?在Gibbs采样的文章中,我们提到,我们可以通过Gibbs采样,在明确条件概率概率分布的情况下,任意概率分布,通过状态转移,使数据分布逐渐稳定成我们想要的联合概率分布形式。那么思路就很明确了,我们要想求出联合概率分布参数,就要先求出条件概率分布,然后通过Gibbs采样使其收敛。

先解释几个参数:
每个单词都对应一个主题,我们用 z i z_i zi表示第 i i i个单词, i i i是一个二维的下标, i = ( m , n ) i=(m,n) i=(m,n),对应 m m m篇文档的第 n n n个词。用 z ┐ i z_{\urcorner i} zi表示语料库。 ┐ i \urcorner i i表示去除下标 i i i的词。

Gibbs采样是根据条件概率轮换坐标轴采样逐渐收敛的,ok,这里的坐标轴是什么?坐标轴表示每个维度 i i i,这里的维度就是每篇文档的每个单词,每个单词都对应一个主题。那么我们要固定其他单词的主题,对当前单词的主题进行采样。
我们需要求任意一个坐标轴 i i i对应的条件分布 p ( z i ∣ z ⃗ ┐ i , w ⃗ ) p(z_i|\vec{z}_{\urcorner i},\vec{w}) p(ziz i,w ),假设我们观测到 w i = t w_i=t wi=t,根据贝叶斯公式得到:

p ( z i ∣ z ⃗ ┐ i , w ⃗ ) = p ( z i = k , w i = t ∣ z ⃗ ┐ i , w ⃗ ┐ i ) p ( w i = t ∣ z ⃗ ┐ i , w ⃗ ┐ i ) p(z_i|\vec{z}_{\urcorner i},\vec{w})=\frac{p(z_i=k,w_i=t|\vec{z}_{\urcorner i},\vec{w}_{\urcorner i})}{p(w_i=t|\vec{z}_{\urcorner i},\vec{w}_{\urcorner i})} p(ziz i,w )=p(wi=tz i,w i)p(zi=k,wi=tz i,w i)

p ( z i ∣ z ⃗ ┐ i , w ⃗ ) ∝ p ( z i = k , w i = t ∣ z ⃗ ┐ i , w ⃗ ┐ i ) p(z_i|\vec{z}_{\urcorner i},\vec{w})\varpropto p(z_i=k,w_i=t|\vec{z}_{\urcorner i},\vec{w}_{\urcorner i}) p(ziz i,w )p(zi=k,wi=tz i,w i)

由于 z i = k z_i=k zi=k w i = t w_i=t wi=t只会涉及到第 m m m篇文档和第 k k k个topic,所以上式的条件概率中只会涉及到与之相关的两个dirichlet-multinormal共轭结构,其他的其它的 M+K−2 个 Dirichlet-Multinomial 共轭结构和 z i = k z_i=k zi=k w i = t w_i=t wi=t是独立的。去掉一个词并不会改变M+K个dirichlet-multinormal共轭结构,只是某些地方的计数减少而已,所以后验概率公式如下:

p ( θ ⃗ m ∣ z ⃗ ┐ i , w ⃗ ┐ i ) = D i r ( θ ⃗ m ∣ n ⃗ m , ┐ i + α ⃗ ) p ( ϕ ⃗ k ∣ z ⃗ ┐ i , w ⃗ ┐ i ) = D i r ( ϕ ⃗ k ∣ n ⃗ k , ┐ i + η ⃗ ) \begin{aligned} p(\vec{\theta}_m|\vec{z}_{\urcorner i},\vec{w}_{\urcorner i}) &=Dir(\vec{\theta}_m|\vec{n}_{m,\urcorner i}+\vec{\alpha})\\ p(\vec{\phi}_k|\vec{z}_{\urcorner i},\vec{w}_{\urcorner i}) &=Dir(\vec{\phi}_k|\vec{n}_{k,\urcorner i}+\vec{\eta}) \end{aligned} p(θ mz i,w i)p(ϕ kz i,w i)=Dir(θ mn m,i+α )=Dir(ϕ kn k,i+η )

好的一切准备就绪,我们来看条件概率的推导过程(偷个懒,贴图):

在这里插入图片描述
我们再次回忆一下各个参数的含义:
1) θ m \theta_m θm的含义,把他理解成第 m m m篇文章中多项式分布的概率参数向量 p ⃗ \vec{p} p

2) θ m k \theta_{mk} θmk的含义,在本篇文章中,topic分布为 θ m \theta_m θm的概率下,单词 i i i为主题 k k k的概率 p k p_k pk

3) θ ^ m k \hat{\theta}_{mk} θ^mk的含义, θ m \theta_m θm是符合Dirichlet分布的,所以 θ ^ m k \hat{\theta}_{mk} θ^mk是在Dirichlet分布下的的期望值.

最终得到的就是对应的两个 Dirichlet 后验分布在贝叶斯框架下的参数估计。而借助于前面介绍的Dirichlet 期望的公式 :

θ ^ m k = n m , ┐ i ( k ) + α k ∑ k = 1 K n m , ┐ i ( k ) + α k ϕ ^ k t = n k , ┐ i ( t ) + η t ∑ k = 1 K n k , ┐ i ( t ) + η t \begin{aligned} & \hat{\theta}_{mk}=\frac{n_{m,\urcorner i}^{(k)}+\alpha_k}{\sum_{k=1}^{K}n_{m,\urcorner i}^{(k)}+\alpha_k}\\ & \hat{\phi}_{kt}=\frac{n_{k,\urcorner i}^{(t)}+\eta_t}{\sum_{k=1}^{K}n_{k,\urcorner i}^{(t)}+\eta_t}\\ \end{aligned} θ^mk=k=1Knm,i(k)+αknm,i(k)+αkϕ^kt=k=1Knk,i(t)+ηtnk,i(t)+ηt

最终,我们得到LDA 模型的 Gibbs Sampling 公式为:

p ( z i = k ∣ z ⃗ ┐ i , w ⃗ ) ∝ n m , ┐ i ( k ) + α k ∑ k = 1 K n m , ┐ i ( k ) + α k . n k , ┐ i ( t ) + η t ∑ k = 1 K n k , ┐ i ( t ) + η t p(z_i=k|\vec{z}_{\urcorner i},\vec{w})\varpropto \frac{n_{m,\urcorner i}^{(k)}+\alpha_k}{\sum_{k=1}^{K}n_{m,\urcorner i}^{(k)}+\alpha_k}.\frac{n_{k,\urcorner i}^{(t)}+\eta_t}{\sum_{k=1}^{K}n_{k,\urcorner i}^{(t)}+\eta_t} p(zi=kz i,w )k=1Knm,i(k)+αknm,i(k)+αk.k=1Knk,i(t)+ηtnk,i(t)+ηt

2.4.3 LDA训练

根据上一小节中的公式,我们的目标有两个:

  1. 估计模型中的参数 θ ⃗ 1 , θ ⃗ 2 , . . . , θ ⃗ M \vec{\theta}_1,\vec{\theta}_2,...,\vec{\theta}_M θ 1,θ 2,...,θ M ϕ ⃗ 1 , ϕ ⃗ 2 , . . . , ϕ ⃗ K \vec{\phi}_1,\vec{\phi}_2,...,\vec{\phi}_K ϕ 1,ϕ 2,...,ϕ K
  2. 对于一篇新的文档我们能计算这篇文档的topic分布 θ ⃗ \vec{\theta} θ

1,对于语料库中的每个词汇 w w w,随机赋予一个topic编号z
2,重新扫描语料库,对每个词 w w w,使用Gibbs Sampling公式对其采样,求出它的topic,在语料库中更新。
3,重复步骤2,知道Gibbs Sampling收敛
4,统计语料库中的topic-word共现频率矩阵,该矩阵就是LDA的模型;

只要模型收敛了,那么每个词都会对应一个topic,接下来根据定义,统计每个topic下的单词分布,就能得到topic-word模型相应的参数 ϕ ⃗ 1 , ϕ ⃗ 2 , . . . , ϕ ⃗ K \vec{\phi}_1,\vec{\phi}_2,...,\vec{\phi}_K ϕ 1,ϕ 2,...,ϕ K,然后对于一篇文章,统计每个单词的topic,得到doc-topic的分布参数 θ ⃗ 1 , θ ⃗ 2 , . . . , θ ⃗ M \vec{\theta}_1,\vec{\theta}_2,...,\vec{\theta}_M θ 1,θ 2,...,θ M,因为 θ ⃗ \vec{\theta} θ 与每篇文章相关,对于我们理解新的文档没有用,所以LDA一般保留topic-word参数.

2.3.4 LDA测试

有了topic-word参数,对于新的文档,我们在Gibbs采样的时候认为topic-word参数不变,只更新doc-topic参数即可,等采样过程收敛后,每个word就有了相应的topic,统计可得分布参数theta.

1,对当前文档中的每个单词w,随机初始化一个topic编号z;
2,使用Gibbs Sampling公式,对每个词w,重新采样其topic;
3,重复以上过程,直到Gibbs Sampling收敛;
4,统计文档中的topic分布,该分布就是 θ ⃗ \vec{\theta} θ

这时,我们就得到了文章的主题分布了。到这里问题似乎已经解决了,我们得到了 ϕ , θ , z \phi,\theta,z ϕ,θ,z,但是观察整个过程我们发现其实,从一开始我们就假设了 α ⃗ , η ⃗ \vec{\alpha},\vec{\eta} α ,η ,但是这两个先验分布的参数怎么确定呢?一种方法是经验方法:alpha 选择为 50/ k, 其中k是你选择的topic数,beta一般选为0.01,这都是经验值,貌似效果比较好,收敛比较快一点。有一篇paper, lda-based document models for ad-hoc retrieval里面的实验系数设置有提到一下;另一种就是通过EM算法估计超参数,我们下一篇再进行总结。

上一篇 LDA主题模型1——数学基础
下一篇 LDA主题模型3——EM算法求解
参考资料:
https://zhuanlan.zhihu.com/p/31470216
https://www.cnblogs.com/pinard/p/6867828.html#!comments
https://www.cnblogs.com/pinard/p/6831308.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值