隐含狄利克雷分布 (英语:Latent Dirichlet allocation ,简称LDA ),是一种主题模型 ,它可以将文档集中每篇文档的主题按照概率分布 的形式给出。同时它是一种无监督学习 算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。
LDA首先由 David M. Blei、吴恩达 和迈克尔·I·乔丹 于2003年提出[ 1] ,目前在文本挖掘 领域包括文本主题识别、文本分类以及文本相似度计算方面都有应用。
LDA贝斯网络结构
LDA是一种典型的词袋模型,即它认为一篇文档是由一组词构成的一个集合,词与词之间没有顺序以及先后的关系。一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。它以概率分布的形式揭示每个文档集的主题,以便在分析一些文档以提取其主题分布后,可以根据主题分布进行主题聚类或使用文本分类。每个主题都用一个词分布表示[ 2] 。
另外,正如Beta分布 是二项式分布 的共轭先验概率 分布,狄利克雷分布作为多项式分布的共轭先验概率 分布。因此正如LDA贝斯网络 结构中所描述的,在LDA模型中一篇文档生成的方式如下:
从狄利克雷分布
α
{\displaystyle \alpha }
中取样生成文档
i
{\displaystyle i}
的主题分布
θ
i
{\displaystyle \theta _{i}}
从主题的多项式分布
θ
i
{\displaystyle \theta _{i}}
中取样生成文档
i
{\displaystyle i}
中第
j
{\displaystyle j}
个主题
z
i
,
j
{\displaystyle z_{i,j}}
从狄利克雷分布
β
{\displaystyle \beta }
中取样生成主题
z
i
,
j
{\displaystyle z_{i,j}}
的词语分布
ϕ
z
i
,
j
{\displaystyle \phi _{z_{i,j}}}
从词语的多项式分布
ϕ
z
i
,
j
{\displaystyle \phi _{z_{i,j}}}
中采样最终生成词语
w
i
,
j
{\displaystyle w_{i,j}}
因此整个模型中所有可见变量以及隐藏变量的联合分布 是
p
(
w
i
,
z
i
,
θ
i
,
Φ
|
α
,
β
)
=
∏
j
=
1
N
p
(
θ
i
|
α
)
p
(
z
i
,
j
|
θ
i
)
p
(
Φ
|
β
)
p
(
w
i
,
j
|
ϕ
z
i
,
j
)
{\displaystyle p(w_{i},z_{i},\theta _{i},\Phi |\alpha ,\beta )=\prod _{j=1}^{N}p(\theta _{i}|\alpha )p(z_{i,j}|\theta _{i})p(\Phi |\beta )p(w_{i,j}|\phi _{z_{i,j}})}
最终一篇文档的单词分布的最大似然估计 可以通过将上式的
θ
i
{\displaystyle \theta _{i}}
以及
Φ
{\displaystyle \Phi }
进行积分和对
z
i
{\displaystyle z_{i}}
进行求和得到
p
(
w
i
|
α
,
β
)
=
∫
θ
i
∫
Φ
∑
z
i
p
(
w
i
,
z
i
,
θ
i
,
Φ
|
α
,
β
)
{\displaystyle p(w_{i}|\alpha ,\beta )=\int _{\theta _{i}}\int _{\Phi }\sum _{z_{i}}p(w_{i},z_{i},\theta _{i},\Phi |\alpha ,\beta )}
根据
p
(
w
i
|
α
,
β
)
{\displaystyle p(w_{i}|\alpha ,\beta )}
的最大似然估计,最终可以通过吉布斯采样 等方法估计出模型中的参数。
在LDA最初提出的时候,人们使用EM算法进行求解,后来人们普遍开始使用较为简单的Gibbs Sampling,具体过程如下:
首先对所有文档中的所有词遍历一遍,为其都随机分配一个主题,即
z
m
,
n
=
k
∼
M
u
l
t
(
1
/
K
)
{\displaystyle z_{m,n}=k\sim Mult(1/K)}
,其中m表示第m篇文档,n表示文档中的第n个词,k表示主题,K表示主题的总数,之后将对应的
n
m
k
+
1
{\displaystyle n_{m}^{k}+1}
,
n
m
+
1
{\displaystyle n_{m}+1}
,
n
k
t
+
1
{\displaystyle n_{k}^{t}+1}
,
n
k
+
1
{\displaystyle n_{k}+1}
,他们分别表示在m文档中k主题出现的次数,m文档中主题数量的和,k主题对应的t词的次数,k主题对应的总词数。
之后对下述操作进行重复迭代。
对所有文档中的所有词进行遍历,假如当前文档m的词t对应主题为k,则
n
m
k
−
1
{\displaystyle n_{m}^{k}-1}
,
n
m
−
1
{\displaystyle n_{m}-1}
,
n
k
t
−
1
{\displaystyle n_{k}^{t}-1}
,
n
k
−
1
{\displaystyle n_{k}-1}
,即先拿出当前词,之后根据LDA中topic sample的概率分布sample出新的主题,在对应的
n
m
k
{\displaystyle n_{m}^{k}}
,
n
m
{\displaystyle n_{m}}
,
n
k
t
{\displaystyle n_{k}^{t}}
,
n
k
{\displaystyle n_{k}}
上分别+1。
p
(
z
i
=
k
|
z
−
i
,
w
)
{\displaystyle p(z_{i}=k|z_{-i},w)}
∝
(
n
k
,
−
i
(
t
)
+
β
t
)
(
n
m
,
−
i
(
k
)
+
α
k
)
/
(
∑
t
=
1
V
n
k
,
−
i
(
t
)
+
β
t
)
{\displaystyle (n_{k,-i}^{(t)}+\beta _{t})(n_{m,-i}^{(k)}+\alpha _{k})/(\sum _{t=1}^{V}n_{k,-i}^{(t)}+\beta _{t})}
迭代完成后输出主题-词参数矩阵φ和文档-主题矩阵θ
ϕ
k
,
t
=
(
n
k
(
t
)
+
β
t
)
/
(
n
k
+
β
t
)
{\displaystyle \phi _{k,t}=(n_{k}^{(t)}+\beta _{t})/(n_{k}+\beta _{t})}
θ
m
,
k
=
(
n
m
(
k
)
+
α
k
)
/
(
n
m
+
α
k
)
{\displaystyle \theta _{m,k}=(n_{m}^{(k)}+\alpha _{k})/(n_{m}+\alpha _{k})}