相信很多人第一次看到LDA算法都会头大,不管是看论文还是看博客,都少不了各种各样的公式和理论,概率分布、共轭分布、贝叶斯公式、Gibbs采样等等,一大堆耳熟又陌生的词,经常带着一大堆问号去学习,又带着一大堆问号离开。。。本篇文章将会一点点的将其攻克。
通篇内容比较多,但是总结的还算详细~~~
上一篇 LDA主题模型1——数学基础
下一篇 LDA主题模型3——EM算法求解
目录
在阅读这篇博文之前,希望大家能了解一下这些数学基础:贝叶斯概率、共轭分布、Gibbs采样、MCMC等,如果没有或者已经淡忘,可以参考我的这几篇博文。
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})
w∼Mult(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})
w∼Mult(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=1∏Kpknk
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(W∣p)。考虑贝叶斯的先验,那么语料库的的数据概率为:
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(W∣p)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=1∏Kpkαk−1
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(W∣p)p(p∣α)dp=∫k=1∏KpknkDir(p∣α)dp=Δ(α)1∫k=1∏Kpknkk=1∏Kpkαk−1dp=Δ(α)Δ(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=1∏Kpknk+αk−1
有了数据参数,我们可以用平均值作为估计值,估计现在的多项式分布的参数
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(w∣dm)=z=1∑Kp(w∣z)p(z∣dm)=z=1∑Kϕ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=1∏nz=1∑Kp(w∣z)p(z∣dm)=w=1∏nz=1∑Kϕ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(zd∣α)=∫p(zd∣θd)p(θd∣α)dθd=∫k=1∏Kpknd(k)Dirichlet(α)dθd=∫k=1∏Kpknd(k)Δα1k=1∏Kpkαk−1dθd=Δα1k=1∏Kpknd(k)+αk−1dθd=ΔαΔ(nd+α)
既然是生成过程,我们要计算的就是数据生成的概率表示,而这个公式计算的就是主题数据的概率表示,而且主题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(zd)=∏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(zd∣α)=∫p(zd∣θ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=1∏Mp(zd∣α)=d=1∏MΔαΔ(nd+α)
按照同样方法和思路,可以理解在某一主题下,词的生成过程:
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=1∏Kp(wk∣z,η)=k=1∏KΔηΔ(nk+η)
那么单词与主题的联合分布概率为:
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=1∏KΔηΔ(nk+η)d=1∏MΔαΔ(nd+α)
这个公式可以理解为,先把全部的主题采样生成完毕,然后这样的主题分布(概率)下,进行主题到词的生成(这里先不考虑文章的概念,将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}
z┐i表示语料库。
┐
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(zi∣z┐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(zi∣z┐i,w)=p(wi=t∣z┐i,w┐i)p(zi=k,wi=t∣z┐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(zi∣z┐i,w)∝p(zi=k,wi=t∣z┐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(θm∣z┐i,w┐i)p(ϕk∣z┐i,w┐i)=Dir(θm∣nm,┐i+α)=Dir(ϕk∣nk,┐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=k∣z┐i,w)∝∑k=1Knm,┐i(k)+αknm,┐i(k)+αk.∑k=1Knk,┐i(t)+ηtnk,┐i(t)+ηt
2.4.3 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} θ
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