引言
LDA(Latent Dirichlet Allocation)称为潜在狄利克雷分布,是文本语义分析中比较重要的一个模型,同时,LDA模型中使用到了贝叶斯思维的一些知识,这些知识是统计机器学习的基础。为了能够对LDA原理有清晰的认识,也为了能够对贝叶斯思维有全面的了解,在这里对基本知识以及LDA的相关知识进行阐述,本系列包括两个部分:
- Latent Dirichlet Allocation——理论篇
- Latent Dirichlet Allocation——实践篇
在理论篇中将重点阐述贝叶斯相关的知识和LDA的基本思想,基本的知识点包括Gamma函数和分布,Beta函数和分布,Dirichlet函数和分布,贝叶斯定理,Gibbs采样等等。在接下来的文章,我们通过以下几个方面具体介绍LDA的核心思想:
- 基础知识:二项分布,多项式分布,Gamma分布,Beta分布,Dirichlet分布,贝叶斯定理,共轭分布
- 文本建模:Unigram Model,概率主题模型,Gibbs采样以及贝叶斯推理
一、基础知识
在贝叶斯思维以及LDA中需要使用到一些概率的知识,下面我们罗列下会使用到的一些基本知识。
1、二项分布
二项分布是概率分布里面最简单也是最基本的分布,要理解二项分布,我们首先得定义 n <script type="math/tex" id="MathJax-Element-1">n</script>次独立重复试验的概念:n<script type="math/tex" id="MathJax-Element-2">n</script>次独立重复试验是指在相同的条件下,重复做的 n <script type="math/tex" id="MathJax-Element-3">n</script>次试验称为n<script type="math/tex" id="MathJax-Element-4">n</script>次独立重复试验。
假设对于一个事件 A <script type="math/tex" id="MathJax-Element-5">A</script>,在一次试验中,其发生的概率为p<script type="math/tex" id="MathJax-Element-6">p</script>,那么其不发生的概率为 1−p <script type="math/tex" id="MathJax-Element-7">1-p</script>,那么在 n <script type="math/tex" id="MathJax-Element-8">n</script>次独立重复试验中事件A<script type="math/tex" id="MathJax-Element-9">A</script>恰好发生 k <script type="math/tex" id="MathJax-Element-10">k</script>次的概率为:
Pn(k)=Cknpk(1−p)n−k
<script type="math/tex; mode=display" id="MathJax-Element-11">P_n\left ( k \right )=C_n^kp^{k}\left ( 1-p \right )^{n-k}</script>
在这里,参数 k <script type="math/tex" id="MathJax-Element-12">k</script>是一个随机变量,便称这样的随机变量k<script type="math/tex" id="MathJax-Element-13">k</script>服从二项分布,记为: k∼B(n,p) <script type="math/tex" id="MathJax-Element-14">k\sim B\left ( n,p \right )</script>。
可以验证下式成立:
∑k=0nPn(k)=∑k=0nCknpk(1−p)n−k=1
<script type="math/tex; mode=display" id="MathJax-Element-15">\sum _{k=0}^{n}P_n\left ( k \right )=\sum _{k=0}^{n}C_n^kp^{k}\left ( 1-p \right )^{n-k}=1</script>
2、多项式分布
多项式分布是二项分布的一个推广形式,在二项分布中,事件 A <script type="math/tex" id="MathJax-Element-16">A</script>的取值可能只能是发生或者是没有发生,而在多项式分布中事件A<script type="math/tex" id="MathJax-Element-17">A</script>的取值可能有 k <script type="math/tex" id="MathJax-Element-18">k</script>种,取每一种可能的概率为pi<script type="math/tex" id="MathJax-Element-19">p_i</script>,其中 pi <script type="math/tex" id="MathJax-Element-20">p_i</script>满足:
∑i=1kpi=1
<script type="math/tex; mode=display" id="MathJax-Element-21">\sum _{i=1}^{k}p_i=1</script>
多项式分布的概率形式为:
P(x1,x2,⋯,xk;n;p1,p2,⋯,pk)=n!x1!x2!⋯xk!px11px22⋯pxkk
<script type="math/tex; mode=display" id="MathJax-Element-22">P\left ( x_1,x_2,\cdots ,x_k\; ;n\; ;p_1,p_2,\cdots ,p_k \right )=\frac{n!}{x_1!x_2!\cdots x_k!}p_1^{x_1}p_2^{x_2}\cdots p_k^{x_k}</script>
3、Gamma分布
Gamma函数的具体形式如下:
Γ(x)=∫∞0e−uux−1du
<script type="math/tex; mode=display" id="MathJax-Element-23">\Gamma \left ( x \right )=\int_{0}^{\infty }e^{-u}u^{x-1}du</script>
其中, x>0 <script type="math/tex" id="MathJax-Element-24">x> 0</script>。Gamma函数的图像如下所示:

Gamma函数 Γ(x) <script type="math/tex" id="MathJax-Element-25">\Gamma \left ( x \right )</script>具有如下的一些性质:
Γ(x+1)=xΓ(x)
<script type="math/tex; mode=display" id="MathJax-Element-26">\Gamma \left ( x+1 \right )=x\Gamma \left ( x \right )</script>
这个性质可以通过分部积分的方法得到证明,证明如下:
Γ(x+1)=∫∞0e−uuxdu=∫∞0−uxde−u=−uxe−u∣∞0−∫∞0−euxux−1du=x∫∞0e−uux−1du=xΓ(x)
<script type="math/tex; mode=display" id="MathJax-Element-27">\begin{matrix} \Gamma \left ( x+1 \right )=\int_{0}^{\infty }e^{-u}u^{x}du\\ =\int_{0}^{\infty }-u^{x}de^{-u}=-u^xe^{-u}\mid _0^{\infty }-\int_{0}^{\infty }-e^{u}xu^{x-1}du\\ =x\int_{0}^{\infty }e^{-u}u^{x-1}du=x\Gamma \left ( x \right ) \end{matrix}</script>
Γ(1)=1,Γ(12)=π√
<script type="math/tex; mode=display" id="MathJax-Element-28">\Gamma \left ( 1 \right )=1,\; \Gamma \left ( \frac{1}{2} \right )=\sqrt{\pi }</script>
Γ(n+1)=n!
<script type="math/tex; mode=display" id="MathJax-Element-29">\Gamma \left ( n+1 \right )=n!</script>
4、Beta分布
Beta函数的具体形式如下:
Beta(a,b)=∫10xa−1(1−x)b−1dx
<script type="math/tex; mode=display" id="MathJax-Element-30">Beta\left ( a,b \right )=\int_{0}^{1}x^{a-1}\left ( 1-x \right )^{b-1}dx</script>
其中, a>0,b>0 <script type="math/tex" id="MathJax-Element-31">a> 0,\; b>0</script>。Beta函数有如下的一个性质:
Beta(a,b)=Γ(a)Γ(b)Γ(a+b)
<script type="math/tex; mode=display" id="MathJax-Element-32">Beta\left ( a,b \right )=\frac{\Gamma \left ( a \right )\Gamma \left ( b \right )}{\Gamma \left ( a+b \right )}</script>
上述的关于Beta函数的性质将Beta函数与Gamma函数联系起来,对于该性质的证明如下所示:
Γ(a)Γ(b)=∫∞0e−uua−1du⋅∫∞0e−vvb−1dv=∫∞0∫∞0e−(u+v)ua−1vb−1dudv
<script type="math/tex; mode=display" id="MathJax-Element-33">\begin{matrix} \Gamma \left ( a \right )\Gamma \left ( b \right )=\int_{0}^{\infty }e^{-u}u^{a-1}du\cdot \int_{0}^{\infty }e^{-v}v^{b-1}dv\\ =\int_{0}^{\infty }\int_{0}^{\infty }e^{-\left ( u+v \right )}u^{a-1}v^{b-1}dudv\\ \end{matrix}</script>
此时,令 z=u+v <script type="math/tex" id="MathJax-Element-34">z=u+v</script>, t=uu+v <script type="math/tex" id="MathJax-Element-35">t=\frac{u}{u+v}</script>,上式可转化为:
Γ(a)Γ(b)=∫∞0∫10e−z(zt)a−1[z(1−t)]b−1zdzdt=∫∞0e−zza−1zdz⋅∫10ta−1(1−t)b−1dt=Γ(a+b)⋅∫10ta−1(1−t)b−1dt=Γ(a+b)⋅Beta(a,b)
<script type="math/tex; mode=display" id="MathJax-Element-36">\begin{matrix} \Gamma \left ( a \right )\Gamma \left ( b \right )=\int_{0}^{\infty }\int_{0}^{1}e^{-z}\left ( zt \right )^{a-1}\left [ z\left ( 1-t \right ) \right ]^{b-1}zdzdt\\ =\int_{0}^{\infty }e^{-z}z^{a-1}zdz\cdot \int_{0}^{1}t^{a-1}\left ( 1-t \right )^{b-1}dt\\ =\Gamma \left ( a+b \right )\cdot \int_{0}^{1}t^{a-1}\left ( 1-t \right )^{b-1}dt\\ =\Gamma \left ( a+b \right )\cdot Beta\left ( a,b \right ) \end{matrix}</script>
由此可知: Beta(a,b)=Γ(a)Γ(b)Γ(a+b) <script type="math/tex" id="MathJax-Element-37">Beta\left ( a,b \right )=\frac{\Gamma \left ( a \right )\Gamma \left ( b \right )}{\Gamma \left ( a+b \right )}</script>。
5、Dirichlet分布
Dirichlet函数的基本形式为:
D(a1,a2,⋯,ak)=∫⋯∫xa1−11⋯xak−1kdx1⋯dxk
<script type="math/tex; mode=display" id="MathJax-Element-38">D\left ( a_1,a_2,\cdots ,a_k \right )=\int \cdots \int x_1^{a_1-1}\cdots x_k^{a_k-1}dx_1\cdots dx_k</script>
其中, x1⋯xk⩾0 <script type="math/tex" id="MathJax-Element-39">x_1\cdots x_k\geqslant 0</script>, ∑ki=1xi=1 <script type="math/tex" id="MathJax-Element-40">\sum _{i=1}^{k}x_i=1</script>。而Dirichlet分布的概率密度函数为:
p(x1,⋯,xk)=1D(a1,⋯,ak)xa11⋯xakk
<script type="math/tex; mode=display" id="MathJax-Element-41">p\left ( x_1,\cdots ,x_k \right )=\frac{1}{D\left ( a_1,\cdots ,a_k \right )}x_1^{a_1}\cdots x_k^{a_k}</script>
其中, 0⩽x1⋯xn⩽1 <script type="math/tex" id="MathJax-Element-42">0\leqslant x_1\cdots x_n\leqslant 1</script>,且 ∑ki=1xk=1 <script type="math/tex" id="MathJax-Element-43">\sum_{i=1}^{k}x_k=1</script>, D(a1,⋯,ak) <script type="math/tex" id="MathJax-Element-44">D\left ( a_1,\cdots ,a_k \right )</script>的形式为:
D(a1,⋯,ak)=Γ(a1)⋯Γ(ak)Γ(a1+⋯+ak)
<script type="math/tex; mode=display" id="MathJax-Element-45">D\left ( a_1,\cdots ,a_k \right )=\frac{\Gamma \left ( a_1 \right )\cdots \Gamma \left ( a_k \right )}{\Gamma \left ( a_1+\cdots +a_k \right )}</script>
注意到Beta分布是特殊的Dirichlet分布,即 k=2 <script type="math/tex" id="MathJax-Element-46">k=2</script>时的Dirichlet分布。
6、贝叶斯定理
贝叶斯定理中牵涉到概率的一些基本知识,包括:
条件概率的表达形式为: P(A∣B) <script type="math/tex" id="MathJax-Element-47">P\left ( A\mid B \right )</script>,其表示的含义是事件 A <script type="math/tex" id="MathJax-Element-48">A</script>在事件B<script type="math/tex" id="MathJax-Element-49">B</script>发生的条件下发生的概率。
联合概率的表达形式为: P(A,B) <script type="math/tex" id="MathJax-Element-50">P\left ( A,\; B \right )</script>,其表示的含义是事件 A <script type="math/tex" id="MathJax-Element-51">A</script>和事件B<script type="math/tex" id="MathJax-Element-52">B</script>同时发生的概率。
事件 A <script type="math/tex" id="MathJax-Element-53">A</script>的边缘概率的表达形式为:P(A)<script type="math/tex" id="MathJax-Element-54">P\left ( A \right )</script>,其表示的含义是事件 A <script type="math/tex" id="MathJax-Element-55">A</script>发生的概率。
有了以上的定义,贝叶斯定理可以通过如下的贝叶斯公式表示:
P(B∣A)=P(A∣B)P(B)P(A)
<script type="math/tex; mode=display" id="MathJax-Element-56">P\left ( B\mid A \right )=\frac{P\left ( A\mid B \right )P\left ( B \right )}{P\left ( A \right )}</script>
对于上述的贝叶斯公式, P(B) <script type="math/tex" id="MathJax-Element-57">P\left ( B \right )</script>称为先验概率,即在得到新的数据前某一假设的概率; P(B∣A) <script type="math/tex" id="MathJax-Element-58">P\left ( B\mid A \right )</script>称为后验概率,即在得到了新的数据后,对原假设的修正; P(A) <script type="math/tex" id="MathJax-Element-59">P\left ( A \right )</script>称为标准化常量; P(A∣B) <script type="math/tex" id="MathJax-Element-60">P\left ( A\mid B \right )</script>称为似然度。
对于两个相互独立的事件的联合概率有如下的性质:
P(A,B)=P(A)P(B)
<script type="math/tex; mode=display" id="MathJax-Element-61">P\left ( A,\; B \right )=P\left ( A \right )P\left ( B \right )</script>
7、共轭分布
有了如上的贝叶斯定理,对于贝叶斯派而言,有如下的思考方式:
先验分布+样本信息 ⇒ <script type="math/tex" id="MathJax-Element-62">\Rightarrow </script>后验分布
上述的形式定义是贝叶斯派的思维方式,人们对于事物都会存在着最初的认识(先验分布),随着收集到越来越多的样本信息,新观察到的样本信息会不断修正人们对事物的最初的认识,最终得到对事物较为正确的认识(后验分布)。若这样的后验概率 P(θ∣x) <script type="math/tex" id="MathJax-Element-63">P\left ( \theta \mid x \right )</script>和先验概率 P(x) <script type="math/tex" id="MathJax-Element-64">P\left ( x \right )</script>满足同样的分布,那么先验分布和后验分布被称为共轭分布,同时,先验分布叫做似然函数的共轭先验分布。
有了如上的的共轭先验分布的定义,有如下的两个性质:
1、Beta分布是二项分布的共轭先验分布,即:
Beta(p∣α,β)+Count(m1,m2)=Beta(p∣α+m1,β+m2)
<script type="math/tex; mode=display" id="MathJax-Element-65">Beta\left ( p\mid \alpha ,\beta \right )+Count\left ( m_1,m_2 \right )=Beta\left ( p\mid \alpha +m_1 ,\beta +m_2 \right )</script>
对于上式,对于事件 A <script type="math/tex" id="MathJax-Element-66">A</script>,假设其发生的概率为p<script type="math/tex" id="MathJax-Element-67">p</script>,不发生的概率为 1−p <script type="math/tex" id="MathJax-Element-68">1-p</script>,发生的次数为 m1 <script type="math/tex" id="MathJax-Element-69">m_1</script>,不发生的概率为 m2 <script type="math/tex" id="MathJax-Element-70">m_2</script>,且有 m1+m2=n <script type="math/tex" id="MathJax-Element-71">m_1+m_2=n</script>。则对于参数 m1 <script type="math/tex" id="MathJax-Element-72">m_1</script>,则有:
P(m1∣p)=pm1(1−p)n−m1=pm1(1−p)m2
<script type="math/tex; mode=display" id="MathJax-Element-73">P\left ( m_1\mid p \right )=p^{m_1}\left ( 1-p \right )^{n-m_1}=p^{m_1}\left ( 1-p \right )^{m_2}</script>
而对于参数 p <script type="math/tex" id="MathJax-Element-74">p</script>,则是服从参数为α<script type="math/tex" id="MathJax-Element-75">\alpha </script>和 β <script type="math/tex" id="MathJax-Element-76">\beta </script>的Beta分布:
P(p∣α,β)=pa−1(1−p)b−1∫10pa−1(1−p)b−1dp
<script type="math/tex; mode=display" id="MathJax-Element-77">P\left ( p\mid \alpha ,\beta \right )=\frac{p^{a-1}\left ( 1-p \right )^{b-1}}{\int_{0}^{1}p^{a-1}\left ( 1-p \right )^{b-1}dp}</script>
已知在贝叶斯定理中有如下的公式成立:
P(B∣A)=P(A∣B)P(B)P(A)∝P(A∣B)P(B)
<script type="math/tex; mode=display" id="MathJax-Element-78">P\left ( B\mid A \right )=\frac{P\left ( A\mid B \right )P\left ( B \right )}{P\left ( A \right )}\propto P\left ( A\mid B \right )P\left ( B \right )</script>
则对于上述的后验概率,即为:
P(p∣m1)=P(m1∣p)⋅P(p)P(m1)∝P(m1∣p)⋅P(p)=pm1(1−p)m2⋅pa−1(1−p)b−1∫10pa−1(1−p)b−1dp∝pm1(1−p)m2⋅pa−1(1−p)b−1=pa+m1−1(1−p)b+m2−1
<script type="math/tex; mode=display" id="MathJax-Element-79">\begin{matrix} P\left ( p\mid m_1 \right )=\frac{P\left ( m_1\mid p \right )\cdot P\left ( p \right )}{P\left ( m_1 \right )}\\ \propto P\left ( m_1\mid p \right )\cdot P\left ( p \right )\\ =p^{m_1}\left ( 1-p \right )^{m_2}\cdot \frac{p^{a-1}\left ( 1-p \right )^{b-1}}{\int_{0}^{1}p^{a-1}\left ( 1-p \right )^{b-1}dp}\\ \propto p^{m_1}\left ( 1-p \right )^{m_2}\cdot p^{a-1}\left ( 1-p \right )^{b-1}\\ =p^{a+m_1-1}\left ( 1-p \right )^{b+m_2-1} \end{matrix}</script>
由上可知,Beta分布是二项分布的共轭先验分布。
2、Dirichlet分布是多项式分布的共轭先验分布,即:
Dir(p⃗ ∣α⃗ )+MultCount(m⃗ )=Dir(p⃗ ∣α⃗ +m⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-80">Dir\left ( \vec{p}\mid \vec{\alpha } \right )+MultCount\left ( \vec{m} \right )=Dir\left ( \vec{p}\mid \vec{\alpha }+\vec{m} \right )</script>
我们对上式采用与Beta分布同样的证明方式,对于多项式分布,有下式成立:
P(m⃗ ∣p⃗ )=pm11pm22⋯pmkk
<script type="math/tex; mode=display" id="MathJax-Element-81">P\left ( \vec{m}\mid \vec{p} \right )=p_1^{m_1}p_2^{m_2}\cdots p_k^{m_k}</script>
然而概率 p⃗ <script type="math/tex" id="MathJax-Element-82">\vec{p}</script>服从的参数为 α⃗ <script type="math/tex" id="MathJax-Element-83">\vec{\alpha }</script>的Dirichlet分布,即:
P(p⃗ ∣α⃗ )=pα11pα22⋯pαkkD(α1,α2,⋯,αk)
<script type="math/tex; mode=display" id="MathJax-Element-84">P\left ( \vec{p}\mid \vec{\alpha } \right )=\frac{p_1^{\alpha _1}p_2^{\alpha _2}\cdots p_k^{\alpha _k}}{D\left ( \alpha _1,\alpha _2,\cdots ,\alpha _k \right )}</script>
由贝叶斯定理可知:
P(p⃗ ∣m⃗ )=P(m⃗ ∣p⃗ )⋅P(p⃗ )P(m⃗ )∝P(m⃗ ∣p⃗ )⋅P(p⃗ )=pm11pm22⋯pmkk⋅pα11pα22⋯pαkkD(α1,α2,⋯,αk)∝pm11pm22⋯pmkk⋅pα11pα22⋯pαkk=pm1+α11pm2+α22⋯pmk+αkk
<script type="math/tex; mode=display" id="MathJax-Element-85">\begin{matrix} P\left ( \vec{p}\mid \vec{m} \right )=\frac{P\left ( \vec{m}\mid \vec{p} \right )\cdot P\left ( \vec{p} \right )}{P\left ( \vec{m} \right )}\\ \propto P\left ( \vec{m}\mid \vec{p} \right )\cdot P\left ( \vec{p} \right )\\ =p_1^{m_1}p_2^{m_2}\cdots p_k^{m_k}\cdot \frac{p_1^{\alpha _1}p_2^{\alpha _2}\cdots p_k^{\alpha _k}}{D\left ( \alpha _1,\alpha _2,\cdots ,\alpha _k \right )}\\ \propto p_1^{m_1}p_2^{m_2}\cdots p_k^{m_k}\cdot p_1^{\alpha _1}p_2^{\alpha _2}\cdots p_k^{\alpha _k}\\ =p_1^{m_1+\alpha _1}p_2^{m_2+\alpha _2}\cdots p_k^{m_k+\alpha _k} \end{matrix}</script>
由此可知,Dirichlet分布是多项式分布的共轭先验分布。
二、文本建模
对于一篇文章,是文章中出现的次的过程,在文章中,我们已经知道每个词出现的概率,则在省城文章的过程中,我们在词库中根据概率取出每个词,形成一篇文章。
1、Unigram Model
1.1、频率派
上述的过程说明了最简单的文本是如何产生的,我们对上述的过程数学化,假设:
- 词库中(即对所有文档中的词去停用词)共有 V <script type="math/tex" id="MathJax-Element-86">V</script>个词:v1,v2,⋯,vV<script type="math/tex" id="MathJax-Element-87">v_1,v_2,\cdots ,v_V</script>;
- 词库中每一个词出现的次数记为: n1,n2,⋯,nV <script type="math/tex" id="MathJax-Element-88">n_1,n_2,\cdots ,n_V</script>,所有词出现的总次数为 N <script type="math/tex" id="MathJax-Element-89">N</script>;
- 每个词对用的概率记为:p⃗ ={p1,p2,⋯,pV}<script type="math/tex" id="MathJax-Element-90">\vec{p}=\left \{ p_1,p_2,\cdots ,p_V \right \}</script>。
假设有 m <script type="math/tex" id="MathJax-Element-91">m</script>篇文档,记为W=(w⃗ 1,w⃗ 2,⋯,w⃗ m)<script type="math/tex" id="MathJax-Element-92">W=\left ( \vec{w}_1,\vec{w}_2,\cdots ,\vec{w}_m \right )</script>,则整个文档的概率为:
P(W)=P(w⃗ 1,w⃗ 2,⋯,w⃗ m)
<script type="math/tex; mode=display" id="MathJax-Element-93">P\left ( W \right )=P\left ( \vec{w}_1,\vec{w}_2,\cdots ,\vec{w}_m \right )</script>
在这里,我们假设文档与文档之间是相互独立的,而且进一步词与词之间也是相互独立的——词袋模型(Bag-of-words)。词袋模型表名词的顺序是无关紧要。基于这样的假设后上述的概率可以表示为:
P(W)=P(w⃗ 1)P(w⃗ 2)⋯P(w⃗ m)
<script type="math/tex; mode=display" id="MathJax-Element-94">P\left ( W \right )=P\left ( \vec{w}_1 \right )P\left ( \vec{w}_2 \right )\cdots P\left ( \vec{w}_m \right )</script>
对所有的这 m <script type="math/tex" id="MathJax-Element-95">m</script>篇文档中,词vi<script type="math/tex" id="MathJax-Element-96">v_i</script>出现的次数为 ni <script type="math/tex" id="MathJax-Element-97">n_i</script>,由于文档与文档之间是相互独立的,且词与词之间也是相互独立的,则对于所有的文档集 W <script type="math/tex" id="MathJax-Element-98">W</script>,我们将相同的词记在一起,即对于词vi<script type="math/tex" id="MathJax-Element-99">v_i</script>,记为总共出现的次数为 ni <script type="math/tex" id="MathJax-Element-100">n_i</script>。从词库中选择每个词的过程满足多项式分布,总共需要从词库中抽取 N <script type="math/tex" id="MathJax-Element-101">N</script>次,则全体文档的概率为:
P(W)=P(w⃗ 1)P(w⃗ 2)⋯P(w⃗ m)=∏k=1N∏i=1Vpnii
<script type="math/tex; mode=display" id="MathJax-Element-102">\begin{matrix} P\left ( W \right )=P\left ( \vec{w}_1 \right )P\left ( \vec{w}_2 \right )\cdots P\left ( \vec{w}_m \right )\\ =\prod_{k=1}^{N}\prod_{i=1}^{V}p_i^{n_i} \end{matrix}</script>
至此,已经计算出全部文档的联合概率,但是对于每个词被选择的概率 pi <script type="math/tex" id="MathJax-Element-103">p_i</script>是一个未知数,一个很重要的任务就是估计上式中的每个词被选择的概率,通常使用的方法是使用最大似然估计的方法:
log(P(W))=N⋅∑i=1Vni⋅log(pi)
<script type="math/tex; mode=display" id="MathJax-Element-104">log\; \left ( P\left ( W \right ) \right )=N\cdot \sum_{i=1}^{V}n_i\cdot log\left ( p_i \right )</script>
- 对上述似然函数取最大值,即对每个概率值 pi <script type="math/tex" id="MathJax-Element-105">p_i</script>求导数:
最终,可以求得参数 pi <script type="math/tex" id="MathJax-Element-106">p_i</script>的估计值:
pi=niN
<script type="math/tex; mode=display" id="MathJax-Element-107">p_i=\frac{n_i}{N}</script>
1.2、贝叶斯派
对于贝叶斯派来说,其并不认同上述的求解参数值估计的方法,贝叶斯思维认为,一切的参数都是随机变量,因此上述的选择每个词的概率不是一个确定的值,而是一个随机变量,随机变量就应该服从一个分布。因此参数 p⃗ <script type="math/tex" id="MathJax-Element-108">\vec{p}</script>是由分布 P(p⃗ ) <script type="math/tex" id="MathJax-Element-109">P\left ( \vec{p} \right )</script>决定的,该分布称为先验分布。则上述的过程就变成了如下的两个过程:
- 首先由先验分布 P(p⃗ ) <script type="math/tex" id="MathJax-Element-110">P\left ( \vec{p} \right )</script>得到参数的样本 p⃗ <script type="math/tex" id="MathJax-Element-111">\vec{p}</script>;
- 由参数 p⃗ <script type="math/tex" id="MathJax-Element-112">\vec{p}</script>生成文档。
上述的过程,可以由下面的概率图模型表示:

依据上述的观点,则文档的概率可以表示为:
P(W)=∫P(W∣p⃗ )⋅P(p⃗ )dp⃗
<script type="math/tex; mode=display" id="MathJax-Element-113">P\left ( W \right )=\int P\left ( W\mid \vec{p} \right )\cdot P\left ( \vec{p} \right )d\vec{p}</script>
此处的 P(p⃗ ) <script type="math/tex" id="MathJax-Element-114">P\left ( \vec{p} \right )</script>称为先验分布,已知 P(W∣p⃗ ) <script type="math/tex" id="MathJax-Element-115">P\left ( W\mid \vec{p} \right )</script>服从多项式分布,由上述的共轭分布的知识可知:
多项式分布的共轭分布是Dirichlet分布。
因此对于先验分布 P(p⃗ ) <script type="math/tex" id="MathJax-Element-116">P\left ( \vec{p} \right )</script>可以选择为Dirichlet分布:
Dir(p⃗ ∣α⃗ )=1Δ(α⃗ )∏i=1Vpαi−1i
<script type="math/tex; mode=display" id="MathJax-Element-117">Dir\left ( \vec{p}\mid \vec{\alpha } \right )=\frac{1}{\Delta \left ( \vec{\alpha } \right )}\prod_{i=1}^{V}p_i^{\alpha _i-1}</script>
其中, α⃗ =(α1,α2,⋯,αV) <script type="math/tex" id="MathJax-Element-118">\vec{\alpha }=\left ( \alpha _1,\alpha _2,\cdots ,\alpha _V \right )</script>, Δ(α⃗ ) <script type="math/tex" id="MathJax-Element-119">\Delta \left ( \vec{\alpha } \right )</script>称为归一化因子:
Δ(α⃗ )=∫∏i=1Vpαi−1idp⃗
<script type="math/tex; mode=display" id="MathJax-Element-120">\Delta \left ( \vec{\alpha } \right )=\int \prod_{i=1}^{V}p_i^{\alpha _i-1}d\vec{p}</script>
由共轭分布的知识可知:
先验分布为Dirichlet分布+多项分布的数据知识=后验分布为Dirichlet分布
Dir(p⃗ ∣α⃗ )+MultCount(n⃗ )=Dir(p⃗ ∣α⃗ +n⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-121">Dir \left ( \vec{p}\mid \vec{\alpha } \right )+MultCount\left ( \vec{n} \right )=Dir \left ( \vec{p}\mid \vec{\alpha }+\vec{n} \right )</script>
基于上述的共轭分布的性质,已知了参数 p⃗ <script type="math/tex" id="MathJax-Element-122">\vec{p}</script>的先验分布为 Dir(p⃗ ∣α⃗ ) <script type="math/tex" id="MathJax-Element-123">Dir \left ( \vec{p}\mid \vec{\alpha } \right )</script>,对于每个词出现的次数的统计服从多项式分布,则可以通过上述的性质得到后验分布:
P(p⃗ ∣W,α⃗ )=Dir(p⃗ ∣n⃗ +a⃗ )=1Δ(n⃗ +a⃗ )∏i=1Vpni+αi−1i
<script type="math/tex; mode=display" id="MathJax-Element-124">P\left ( \vec{p}\mid W,\vec{\alpha } \right )=Dir\left ( \vec{p}\mid \vec{n}+\vec{a} \right )\\=\frac{1}{\Delta \left ( \vec{n}+\vec{a} \right )}\prod_{i=1}^{V}p_i^{n_i+\alpha _i-1}</script>
为了求得后验分布中的参数 p⃗ <script type="math/tex" id="MathJax-Element-125">\vec{p}</script>,可以使用其均值来估计每一个参数,即:
E(p⃗ )=(n1+α1∑Vi=1(ni+αi),n2+α2∑Vi=1(ni+αi),⋯,nV+αV∑Vi=1(ni+αi))
<script type="math/tex; mode=display" id="MathJax-Element-126">E\left ( \vec{p} \right )=\left ( \frac{n_1+\alpha _1}{\sum_{i=1}^{V}\left ( n_i+\alpha _i \right )},\frac{n_2+\alpha _2}{\sum_{i=1}^{V}\left ( n_i+\alpha _i \right )},\cdots , \frac{n_V+\alpha _V}{\sum_{i=1}^{V}\left ( n_i+\alpha _i \right )} \right )</script>
即:
p^i=ni+αi∑Vi=1(ni+αi)
<script type="math/tex; mode=display" id="MathJax-Element-127">\hat{p}_i=\frac{n_i+\alpha _i}{\sum_{i=1}^{V}\left ( n_i+\alpha _i \right )}</script>
对于整个文本的概率:
P(W∣α⃗ )=∫P(W∣p⃗ )⋅P(p⃗ ∣α⃗ )dp⃗
<script type="math/tex; mode=display" id="MathJax-Element-128">P\left ( W\mid \vec{\alpha } \right )=\int P\left ( W\mid \vec{p} \right )\cdot P\left ( \vec{p}\mid \vec{\alpha } \right )d\vec{p}</script>
由于 P(W∣p⃗ ) <script type="math/tex" id="MathJax-Element-129">P\left ( W\mid \vec{p} \right )</script>服从多项式分布,而 P(p⃗ ∣α⃗ ) <script type="math/tex" id="MathJax-Element-130">P\left ( \vec{p}\mid \vec{\alpha } \right )</script>服从的Dirichlet分布,则上式可以表示成:
P(W∣α⃗ )=∫∏i=1Vpnii⋅Dir(p⃗ ∣α⃗ )dp⃗ =∫∏i=1Vpnii⋅1Δ(α⃗ )∏i=1Vpαi−1idp⃗ =1Δ(α⃗ )∫∏i=1Vpni+αi−1idp⃗
<script type="math/tex; mode=display" id="MathJax-Element-131">\begin{matrix} P\left ( W\mid \vec{\alpha } \right )=\int \prod_{i=1}^{V}p_i^{n_i}\cdot Dir\left ( \vec{p}\mid \vec{\alpha } \right )d\vec{p}\\ =\int \prod_{i=1}^{V}p_i^{n_i}\cdot \frac{1}{\Delta \left ( \vec{\alpha } \right )}\prod_{i=1}^{V}p_i^{\alpha _i-1}d\vec{p}\\ =\frac{1}{\Delta \left ( \vec{\alpha } \right )}\int \prod_{i=1}^{V}p_i^{n_i+\alpha _i-1}d\vec{p} \end{matrix}</script>
而已知: Δ(α⃗ )=∫∏Vi=1pαi−1idp⃗ <script type="math/tex" id="MathJax-Element-132">\Delta \left ( \vec{\alpha } \right )=\int \prod_{i=1}^{V}p_i^{\alpha _i-1}d\vec{p}</script>,则上式可以表示成:
P(W∣α⃗ )=Δ(n⃗ +α⃗ )Δ(α⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-133">P\left ( W\mid \vec{\alpha } \right )=\frac{\Delta \left ( \vec{n}+\vec{\alpha } \right )}{\Delta \left ( \vec{\alpha } \right )}</script>
2、概率主题模型
前面对文档的生成方式做了简单的介绍,其实在写文章的过程中,每一篇文章都会有一些主题,表示这篇文章主要讲的是关于哪方面的文章,如本篇文章主要是在介绍贝叶斯,LDA等等,而文章的基本组成单元式词,文章的主题则主要表现在词在不同组题的分布上,每一个词是在这些确定的主题上产生的,具体的如下图所示:

文章的主题最终体现在词在每个主题的分布上。在写文章的过程中,首先我们需要做的是确定文章的主题,在确定了文章的主题的前提下,我们产生每一个词,从而构成了整篇文章。
如果要写一篇文章,我们往往是先确定其主题,比如这篇文章是写社会的,还是写的技术类的,或者游记类的,在主题确定的条件下,如要写一篇关于机器学习方面的文章,在确定了主题的条件下,会谈及到损失函数,模型,神经网络,深度学习等等,每个词在这篇文章中的比重会有所不同。这便是文章的生成过程,即:
一篇文章,通常是由多个主题构成的,而每个主题大概可以用于该主题相关的频率最高的一些词来描述。
在上面们提及到一篇文章的生成过程,即:
2.1、频率派
频率派的观点是选择每个主题的概率和根据主题选择具体词的概率都是具体的值,根据上述的概率主题模型的思想,我们假设文档集中有 M <script type="math/tex" id="MathJax-Element-134">M</script>篇文档,每一篇文章对应的主题的概率为:θ⃗ m,m∈[1,M]<script type="math/tex" id="MathJax-Element-135">\vec{\theta} _m, m\in \left [ 1,M \right ]</script>,在选定了文章的主题后,对于一篇文章,可能会有几个主题,此时,在主题确定的条件下,选择每个主题对应的词,对于第 m <script type="math/tex" id="MathJax-Element-136">m</script>篇文章中的第n<script type="math/tex" id="MathJax-Element-137">n</script>个词,有其所属主题的编号 zm,n <script type="math/tex" id="MathJax-Element-138">z_{m,n}</script>,假设有 K <script type="math/tex" id="MathJax-Element-139">K</script>个主题,在每个主题下选择词的概率为:φ⃗ 1,φ⃗ 2,⋯,φ⃗ K<script type="math/tex" id="MathJax-Element-140">\vec{\varphi} _1,\vec{\varphi} _2,\cdots ,\vec{\varphi} _K</script>,在对应的第 k <script type="math/tex" id="MathJax-Element-141">k</script>个主题下依据概率φ⃗ k<script type="math/tex" id="MathJax-Element-142">\vec{\varphi }_k</script>选择词。
注意:这里的文档与文档之间是相互独立的,同一个文档中的词与词之间也是相互独立的。
因此,上述过程中很多步骤是可以合并在一起的,同样,我们有如下的假设:
- 词库中(即对所有文档中的词去停用词)共有 V <script type="math/tex" id="MathJax-Element-143">V</script>个词:v1,v2,⋯,vV<script type="math/tex" id="MathJax-Element-144">v_1,v_2,\cdots ,v_V</script>;
- 词库中每一个词出现的次数记为: n1,n2,⋯,nV <script type="math/tex" id="MathJax-Element-145">n_1,n_2,\cdots ,n_V</script>,所有词出现的总次数为 N <script type="math/tex" id="MathJax-Element-146">N</script>;
- 第k<script type="math/tex" id="MathJax-Element-147">k</script>个主题下对应的词的概率为: φ⃗ k={φk,1,φk,2,⋯,φk,V} <script type="math/tex" id="MathJax-Element-148">\vec{\varphi }_k=\left \{ \varphi _{k,1},\varphi _{k,2},\cdots ,\varphi _{k,V} \right \}</script>,其中 k∈[1,K] <script type="math/tex" id="MathJax-Element-149">k\in \left [ 1,K \right ]</script>;
- 第 m <script type="math/tex" id="MathJax-Element-150">m</script>篇文档对应的主题的概率记为:θ⃗ m={θm,1,θm,2,⋯,θm,K}<script type="math/tex" id="MathJax-Element-151">\vec{\theta }_m=\left \{ \theta _{m,1},\theta _{m,2},\cdots ,\theta _{m,K} \right \}</script>,其中 m∈[1,M] <script type="math/tex" id="MathJax-Element-152">m\in \left [ 1,M \right ]</script>;
- 对于每一篇文章中对应的词所属主题的编号为: zm,n <script type="math/tex" id="MathJax-Element-153">z_{m,n}</script>。
则对于第 m <script type="math/tex" id="MathJax-Element-154">m</script>篇文档dm<script type="math/tex" id="MathJax-Element-155">d_m</script>中的每一个词的生成概率为:
P(w∣dm)=∑z=1KP(w∣z)P(z∣dm)
<script type="math/tex; mode=display" id="MathJax-Element-156">P\left ( w\mid d_m \right )=\sum_{z=1}^{K}P\left ( w\mid z \right )P\left ( z\mid d_m \right )</script>
其中 P(z∣dm) <script type="math/tex" id="MathJax-Element-157">P\left ( z\mid d_m \right )</script>表示的是在每一篇文章对应的主题的编号,可以由 θm,z <script type="math/tex" id="MathJax-Element-158">\theta _{m,z}</script>表示; P(w∣z) <script type="math/tex" id="MathJax-Element-159">P\left ( w\mid z \right )</script>表示的是在主题编号确定的条件下选择词的概率,可以由 φz,w <script type="math/tex" id="MathJax-Element-160">\varphi _{z,w}</script>,因此上式可以表示成:
P(w∣dm)=∑z=1Kφz,w⋅θm,z
<script type="math/tex; mode=display" id="MathJax-Element-161">P\left ( w\mid d_m \right )=\sum_{z=1}^{K}\varphi _{z,w}\cdot \theta _{m,z}</script>
由于在文档中词与词之间是相互独立的,因此对于一篇文档,其生成概率为:
P(w⃗ ∣dm)=∏i=1Nm∑z=1KP(wi∣z)P(z∣dm)=∏i=1Nm∑z=1Kφz,wi⋅θm,z
<script type="math/tex; mode=display" id="MathJax-Element-162">\begin{matrix} P\left ( \vec{w}\mid d_m \right )=\prod_{i=1}^{N_m}\sum_{z=1}^{K}P\left ( w_i\mid z \right )P\left ( z\mid d_m \right )\\ =\prod_{i=1}^{N_m}\sum_{z=1}^{K}\varphi _{z,w_i}\cdot \theta _{m,z} \end{matrix}</script>
2.2、贝叶斯派
上面介绍的思路中,对于文档选择主题的概率以及依据主题选择每一个词的概率都是固定的数,对于贝叶斯派来说,这是无法接受的,贝叶斯派认为所有的值都是随机变量,因此,在文档对应的主题以及依据指定的主题选择每一个词的概率都服从特定的分布。因此上述的过程可以通过如下的概率图模型表示:

该图可以分解成如下的两个部分:
1、 α⃗ →θ⃗ m→zm,n <script type="math/tex" id="MathJax-Element-163">\vec{\alpha }\rightarrow \vec{\theta }_m\rightarrow z_{m,n}</script>,表示的是对于第 m <script type="math/tex" id="MathJax-Element-164">m</script>篇文档,我们首先根据参数α⃗ <script type="math/tex" id="MathJax-Element-165">\vec{\alpha }</script>计算出其对应的主题的概率 θ⃗ m <script type="math/tex" id="MathJax-Element-166">\vec{\theta }_m</script>,然后生成该文档中的第 n <script type="math/tex" id="MathJax-Element-167">n</script>个词对应的主题的编号zm,n<script type="math/tex" id="MathJax-Element-168">z_{m,n}</script>;
2、 β⃗ →φ⃗ k→wm,n∣k=zm,n <script type="math/tex" id="MathJax-Element-169">\vec{\beta }\rightarrow \vec{\varphi }_k\rightarrow w_{m,n}\mid k=z_{m,n}</script>,表示的是根据参数 β⃗ <script type="math/tex" id="MathJax-Element-170">\vec{\beta }</script>计算出在主题编号确定的条件下主题对应的词的概率,依据这个概率选择出每个词。
对于上述过程中的两个阶段,其中从文档的主题的概率到词对应主题的编号服从的是多项式分布,由上述的共轭先验分布的知识可以知道:
多项式分布的共轭分布是Dirichlet分布。
可以选择 θ⃗ m <script type="math/tex" id="MathJax-Element-171">\vec{\theta }_m</script>是服从参数为 α⃗ <script type="math/tex" id="MathJax-Element-172">\vec{\alpha }</script>的Dirichlet分布,同样,我们可以选择 φ⃗ k <script type="math/tex" id="MathJax-Element-173">\vec{\varphi }_k</script>是服从参数为 β⃗ <script type="math/tex" id="MathJax-Element-174">\vec{\beta }</script>的Dirichlet分布。
对于整个文档集来说,文档与文档之间是相互独立的,单个文档中词与词之间也是相互独立的,因此上述的两个过程我们可以分解成如下的两个过程:
- 首先对于 M <script type="math/tex" id="MathJax-Element-175">M</script>篇文档生成其对应的词对应的主题的编号
- 对于K<script type="math/tex" id="MathJax-Element-176">K</script>个主题,生成所有的文本
有了上述的两个过程的分解,对于整个文档集,我们可以得到下述的生成概率:
P(W,Z∣α⃗ ,β⃗ )=P(W∣Z,β⃗ )⋅P(Z∣α⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-177">P\left ( W,Z\mid \vec{\alpha },\vec{\beta } \right )=P\left ( W\mid Z,\vec{\beta } \right )\cdot P\left ( Z\mid \vec{\alpha } \right )</script>
其中, P(W∣Z,β⃗ ) <script type="math/tex" id="MathJax-Element-178">P\left ( W\mid Z,\vec{\beta } \right )</script>表示的是在文章主题确定的条件下生成词的概率, P(Z∣α⃗ ) <script type="math/tex" id="MathJax-Element-179">P\left ( Z\mid \vec{\alpha } \right )</script>表示的是文档对应主题的概率。
对于上述的第一个过程有:
P(z⃗ m∣α⃗ )=∫P(z⃗ m∣θ⃗ m)⋅P(θ⃗ m∣α⃗ )dθ⃗ m
<script type="math/tex; mode=display" id="MathJax-Element-180">P\left ( \vec{z}_m\mid \vec{\alpha } \right )=\int P\left ( \vec{z}_m\mid \vec{\theta }_m \right )\cdot P\left ( \vec{\theta }_m\mid \vec{\alpha } \right )d\vec{\theta }_m</script>
已知 P(z⃗ m∣θ⃗ m) <script type="math/tex" id="MathJax-Element-181">P\left ( \vec{z}_m\mid \vec{\theta }_m \right )</script>服从的是多项式分布,而 P(θ⃗ m∣α⃗ ) <script type="math/tex" id="MathJax-Element-182">P\left ( \vec{\theta }_m\mid \vec{\alpha } \right )</script>服从的是Dirichlet分布,因此,上式可以转换成为:
P(z⃗ m∣α⃗ )=∫∏k=1Kθnkm,k⋅Dir(θ⃗ m∣α⃗ )dθ⃗ m=∫∏k=1Kθnkm,k⋅1Δ(α⃗ )∏k=1Kθαk−1m,kdθ⃗ m=1Δ(α⃗ )∫∏k=1Kθnk+αk−1m,kdθ⃗ m=Δ(n⃗ m+α⃗ )Δ(α⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-183">\begin{matrix} P\left ( \vec{z}_m\mid \vec{\alpha } \right )=\int \prod_{k=1}^{K}\theta _{m,k}^{n_k}\cdot Dir\left ( \vec{\theta }_m\mid \vec{\alpha } \right )d\vec{\theta }_m\\ =\int \prod_{k=1}^{K}\theta _{m,k}^{n_k}\cdot \frac{1}{\Delta \left ( \vec{\alpha } \right )}\prod_{k=1}^{K}\theta _{m,k}^{\alpha _k-1}d\vec{\theta }_m\\ =\frac{1}{\Delta \left ( \vec{\alpha } \right )}\int \prod_{k=1}^{K}\theta _{m,k}^{n_k+\alpha _k-1}d\vec{\theta }_m\\ =\frac{\Delta \left ( \vec{n}_m+\vec{\alpha } \right )}{\Delta \left ( \vec{\alpha } \right )} \end{matrix}</script>
其中, n⃗ m=(n(1)m,n(2)m,⋯,n(K)m) <script type="math/tex" id="MathJax-Element-184">\vec{n}_m=\left ( n_m^{\left ( 1 \right )},n_m^{\left ( 2 \right )},\cdots ,n_m^{\left ( K \right )} \right )</script>, n(k)m <script type="math/tex" id="MathJax-Element-185">n_m^{\left ( k \right )} </script>表示的是第 m <script type="math/tex" id="MathJax-Element-186">m</script>篇文档中属于第k<script type="math/tex" id="MathJax-Element-187">k</script>个主题的词的个数。则对于所有的 M <script type="math/tex" id="MathJax-Element-188">M</script>篇文档有:
P(Z∣α⃗ )=∏m=1MP(z⃗ m∣α⃗ )=∏m=1MΔ(n⃗ m+α⃗ )Δ(α⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-189">P\left ( Z\mid \vec{\alpha } \right )=\prod_{m=1}^{M}P\left ( \vec{z}_m\mid \vec{\alpha } \right )=\prod_{m=1}^{M}\frac{\Delta \left ( \vec{n}_m+\vec{\alpha } \right )}{\Delta \left ( \vec{\alpha } \right )}</script>
对于第二个过程,有下式成立:
P(w⃗ k∣z⃗ k,β⃗ )=∫P(w⃗ k∣φ⃗ k)⋅P(φ⃗ k∣z⃗ k,β⃗ )dφ⃗ k
<script type="math/tex; mode=display" id="MathJax-Element-190">P\left ( \vec{w}_{k}\mid \vec{z}_{k}, \vec{\beta } \right )=\int P\left ( \vec{w}_k\mid \vec{\varphi }_k \right )\cdot P\left ( \vec{\varphi }_k\mid \vec{z}_{k}, \vec{\beta } \right )d\vec{\varphi }_k</script>
其中, P(w⃗ k∣φ⃗ k) <script type="math/tex" id="MathJax-Element-191">P\left ( \vec{w}_k\mid \vec{\varphi }_k \right )</script>服从的是多项式分布,而 P(φ⃗ k∣z⃗ k,β⃗ ) <script type="math/tex" id="MathJax-Element-192">P\left ( \vec{\varphi }_k\mid \vec{z}_{k}, \vec{\beta } \right )</script>服从的是Dirichlet分布,则上式可以转化为:
P(w⃗ k∣z⃗ k,β⃗ )=∫∏v=1Vφnvk,v⋅Dir(φ⃗ k∣β⃗ )dφ⃗ k=∫∏v=1Vφnvk,v⋅1Δ(β⃗ )∏v=1Vφβv−1k,vdφ⃗ k=1Δ(β⃗ )∫∏v=1Vφnv+βv−1k,vdφ⃗ k=Δ(n⃗ k+β⃗ )Δ(β⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-193">\begin{matrix} P\left ( \vec{w}_{k}\mid \vec{z}_{k}, \vec{\beta } \right )=\int \prod_{v=1}^{V}\varphi _{k,v}^{n_v}\cdot Dir\left ( \vec{\varphi }_k\mid \vec{\beta } \right )d\vec{\varphi }_k\\ =\int \prod_{v=1}^{V}\varphi _{k,v}^{n_v}\cdot \frac{1}{\Delta \left ( \vec{\beta } \right )}\prod_{v=1}^{V}\varphi _{k,v}^{\beta _v-1}d\vec{\varphi }_k\\ =\frac{1}{\Delta \left ( \vec{\beta } \right )}\int \prod_{v=1}^{V}\varphi _{k,v}^{n_v+\beta _v-1}d\vec{\varphi }_k\\ =\frac{\Delta \left ( \vec{n}_k+\vec{\beta } \right )}{\Delta \left ( \vec{\beta } \right )} \end{matrix}</script>
其中, n⃗ k=(n(1)k,n(2)k,⋯,n(V)k) <script type="math/tex" id="MathJax-Element-194">\vec{n}_k=\left ( n_k^{\left ( 1 \right )},n_k^{\left ( 2 \right )},\cdots ,n_k^{\left ( V \right )} \right )</script>, n(v)k <script type="math/tex" id="MathJax-Element-195">n_k^{\left ( v \right )}</script>表示的是属于第 k <script type="math/tex" id="MathJax-Element-196">k</script>个主题的词中词v<script type="math/tex" id="MathJax-Element-197">v</script>的个数,对于有所的 V <script type="math/tex" id="MathJax-Element-198">V</script>个词,有下面的公式成立:
P(W∣Z,β⃗ )=∏k=1KP(w⃗ k∣z⃗ k,β⃗ )=∏k=1KΔ(n⃗ k+β⃗ )Δ(β⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-199">P\left ( W\mid Z, \vec{\beta } \right )=\prod_{k=1}^{K}P\left ( \vec{w}_{k}\mid \vec{z}_{k}, \vec{\beta } \right )=\prod_{k=1}^{K}\frac{\Delta \left ( \vec{n}_k+\vec{\beta } \right )}{\Delta \left ( \vec{\beta } \right )}</script>
因此,对于整个文档,有:
P(W,Z∣α⃗ ,β⃗ )=P(W∣Z,β⃗ )⋅P(Z∣α⃗ )=∏k=1KΔ(n⃗ k+β⃗ )Δ(β⃗ )⋅∏m=1MΔ(n⃗ m+α⃗ )Δ(α⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-200">P\left ( W,Z\mid \vec{\alpha },\vec{\beta } \right )=P\left ( W\mid Z, \vec{\beta } \right )\cdot P\left ( Z\mid \vec{\alpha } \right )=\prod_{k=1}^{K}\frac{\Delta \left ( \vec{n}_k+\vec{\beta } \right )}{\Delta \left ( \vec{\beta } \right )}\cdot \prod_{m=1}^{M}\frac{\Delta \left ( \vec{n}_m+\vec{\alpha } \right )}{\Delta \left ( \vec{\alpha } \right )}</script>
3、LDA训练——Gibbs采样
3.1、Markov Chain的相关概念
MCMC(Markov Chain Monte Carlo)和Gibbs采样算法是用来生成样本的随机模拟方法,Gibbs采样算法是LDA中参数求解的一种很有效的方法,想要理解Gibbs采样,必须了解以下的几个概念:
1、马尔可夫链
马尔可夫链的数学表示如下所示:
P(Xt+1=x∣Xt,Xt−1,⋯)=P(Xt+1=x∣Xt)
<script type="math/tex; mode=display" id="MathJax-Element-201">P\left ( X_{t+1}=x\mid X_t,X_{t-1},\cdots \right )=P\left ( X_{t+1}=x\mid X_t \right )</script>
上述公式的含义是由状态 Xt <script type="math/tex" id="MathJax-Element-202">X_t</script>到状态 Xt+1 <script type="math/tex" id="MathJax-Element-203">X_{t+1}</script>只与状态 Xt <script type="math/tex" id="MathJax-Element-204">X_t</script>有关,而与之前的状态无关。
2、马氏链的平稳分布
如果一个非周期马氏链具有转移概率矩阵为 P <script type="math/tex" id="MathJax-Element-205">P</script>,且它的任何两个状态是连通的,那么limn→∞Pnij<script type="math/tex" id="MathJax-Element-206">\lim_{n\rightarrow \infty }P_{ij}^n</script>存在且与 i <script type="math/tex" id="MathJax-Element-207">i</script>无关,记limn→∞Pnij=π(j)<script type="math/tex" id="MathJax-Element-208">\lim_{n\rightarrow \infty }P_{ij}^n=\pi \left ( j \right )</script>,我们有:
a.
limn→∞Pnij=⎡⎣⎢⎢⎢⎢⎢⎢π(1)π(1)⋯π(1)⋯π(2)π(2)⋯π(2)⋯⋯⋯⋯⋯⋯π(j)π(j)⋯π(j)⋯⋯⋯⋯⋯⋯⎤⎦⎥⎥⎥⎥⎥⎥
<script type="math/tex; mode=display" id="MathJax-Element-209">\lim_{n\rightarrow \infty }P_{ij}^n=\begin{bmatrix} \pi \left ( 1 \right ) & \pi \left ( 2 \right ) & \cdots & \pi \left ( j \right ) &\cdots \\ \pi \left ( 1 \right ) & \pi \left ( 2 \right ) & \cdots & \pi \left ( j \right ) &\cdots \\ \cdots & \cdots & \cdots & \cdots & \cdots \\ \pi \left ( 1 \right ) & \pi \left ( 2 \right ) & \cdots & \pi \left ( j \right ) & \cdots \\ \cdots & \cdots & \cdots & \cdots & \cdots \end{bmatrix}</script>
b.
π(j)=∑i=0∞π(i)Pij
<script type="math/tex; mode=display" id="MathJax-Element-210">\pi \left ( j \right )=\sum_{i=0}^{\infty }\pi \left ( i \right )P_{ij}</script>
c. π <script type="math/tex" id="MathJax-Element-211">\pi </script>是方程 πP=π <script type="math/tex" id="MathJax-Element-212">\pi P=\pi </script>的唯一非负解,其中:
π=[π(1),π(2),⋯,π(j),⋯]
<script type="math/tex; mode=display" id="MathJax-Element-213">\pi =\left [ \pi \left ( 1 \right ),\pi \left ( 2 \right ),\cdots ,\pi \left ( j \right ),\cdots \right ]</script>
∑i=∞πi=1
<script type="math/tex; mode=display" id="MathJax-Element-214">\sum_{i=}^{\infty }\pi _i=1</script>
π <script type="math/tex" id="MathJax-Element-215">\pi </script>称为马氏链的平稳分布。
3、细致平稳条件
如果非周期马氏链的转移矩阵 P <script type="math/tex" id="MathJax-Element-216">P</script>和分布π(x)<script type="math/tex" id="MathJax-Element-217">\pi \left ( x \right )</script>满足:
π(i)Pij=π(j)Pji,∀i,j
<script type="math/tex; mode=display" id="MathJax-Element-218">\pi \left ( i \right )P_{ij}=\pi \left ( j \right )P_{ji},\; \forall i,j</script>
则 π(x) <script type="math/tex" id="MathJax-Element-219">\pi \left ( x \right )</script>是马氏链的平稳分布,上式被称为细致平稳条件。
以上三条定理摘自参考文献1。
3.2、Gibbs采样
现在我们假设平面上有一些点,这些点服从概率分布 P(x,y) <script type="math/tex" id="MathJax-Element-220">P\left ( x,y \right )</script>,取其中两个点 A <script type="math/tex" id="MathJax-Element-221">A</script>和B<script type="math/tex" id="MathJax-Element-222">B</script>,这两个点的横坐标一致,记为 x <script type="math/tex" id="MathJax-Element-223">x</script>,且每个点的概率由其坐标决定,即点A<script type="math/tex" id="MathJax-Element-224">A</script>的概率为 P(x,yA) <script type="math/tex" id="MathJax-Element-225">P\left ( x,y_A \right )</script>,同样,点 B <script type="math/tex" id="MathJax-Element-226">B</script>的概率为P(x,yB)<script type="math/tex" id="MathJax-Element-227">P\left ( x,y_B \right )</script>。由点 A <script type="math/tex" id="MathJax-Element-228">A</script>转移到点B<script type="math/tex" id="MathJax-Element-229">B</script>的概率为 P(yB∣x) <script type="math/tex" id="MathJax-Element-230">P\left ( y_B\mid x\right )</script>,同样,由点 B <script type="math/tex" id="MathJax-Element-231">B</script>转移到点A<script type="math/tex" id="MathJax-Element-232">A</script>的概率为 P(yA∣x) <script type="math/tex" id="MathJax-Element-233">P\left ( y_A\mid x\right )</script>,则有如下的公式成立:
P(x,yA)⋅P(yB∣x)=P(x)⋅P(yA∣x)⋅P(yB∣x)
<script type="math/tex; mode=display" id="MathJax-Element-234">P\left ( x,y_A \right )\cdot P\left ( y_B\mid x \right )=P\left ( x \right )\cdot P\left ( y_A\mid x \right )\cdot P\left ( y_B\mid x \right )</script>
P(x,yB)⋅P(yA∣x)=P(x)⋅P(yB∣x)⋅P(yA∣x)
<script type="math/tex; mode=display" id="MathJax-Element-235">P\left ( x,y_B \right )\cdot P\left ( y_A\mid x \right )=P\left ( x \right )\cdot P\left ( y_B\mid x \right )\cdot P\left ( y_A\mid x \right )</script>
由上式可得:
P(x,yB)⋅P(yA∣x)=P(x,yA)⋅P(yB∣x)
<script type="math/tex; mode=display" id="MathJax-Element-236">P\left ( x,y_B \right )\cdot P\left ( y_A\mid x \right )=P\left ( x,y_A \right )\cdot P\left ( y_B\mid x \right )</script>
由上式可以知道,如果以 P(y∣x) <script type="math/tex" id="MathJax-Element-237">P\left ( y\mid x \right )</script>作为任意两点之间的转移概率,那么任何两点之间的转移满足细致平稳条件,前提是两点之间的转移概率的条件是相同的,即在两点之间转移,必须保证这两点的其中一个维度是相同的,如上式中的横坐标 x <script type="math/tex" id="MathJax-Element-238">x</script>是相同的。
由此,我们可以得到Gibbs采样的通俗理解方式,即已知样本(x0,y0)<script type="math/tex" id="MathJax-Element-239">\left ( x_0,y_0 \right )</script>,我们可以利用 P(x∣y0) <script type="math/tex" id="MathJax-Element-240">P\left ( x\mid y_0 \right )</script>产生 (x1,y0) <script type="math/tex" id="MathJax-Element-241">\left ( x_1,y_0 \right )</script>,同样,可以由 P(y∣x1) <script type="math/tex" id="MathJax-Element-242">P\left ( y\mid x_1 \right )</script>产生 (x1,y1) <script type="math/tex" id="MathJax-Element-243">\left ( x_1,y_1 \right )</script>,依次,我们便可以得到样本序列:
(x0,y0),(x1,y0),(x1,y1),(x2,y1),⋯ <script type="math/tex" id="MathJax-Element-244">\left ( x_0,y_0 \right ),\left ( x_1,y_0 \right ),\left ( x_1,y_1 \right ),\left ( x_2,y_1 \right ),\cdots </script>
当马氏链收敛后,得到的样本:
(xt,yt),(xt+1,yt),(xt+1,yt+1),⋯
<script type="math/tex; mode=display" id="MathJax-Element-245">\left ( x_t,y_t \right ),\left ( x_{t+1},y_t \right ),\left ( x_{t+1},y_{t+1} \right ),\cdots </script>便是服从概率为
P(x,y) <script type="math/tex" id="MathJax-Element-246">P\left ( x,y \right )</script>的样本。
上述过程可由下面的形式描述:

这样的情况很容易推广到多维的情况:

上述两张图来自参考文献1。
3.3、LDA训练
对于LDA,我们希望的是能够计算在词确定的条件下计算其所属主题的概率,即如下的条件分布:
P(Z∣W,α⃗ ,β⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-247">P\left ( Z\mid W, \vec{\alpha },\vec{\beta } \right )</script>
由于主题 Z <script type="math/tex" id="MathJax-Element-248">Z</script>是一个隐含的变量,我们通过如上的Gibbs采样去求解,由贝叶斯公式可知:
P(zi=k∣Z−i)∝P(zi=k,wi=t∣Z−i,W−i)
<script type="math/tex; mode=display" id="MathJax-Element-249">P\left ( z_i=k\mid Z_{-i} \right )\propto P\left ( z_i=k,w_i=t\mid Z_{-i},W_{-i} \right )</script>
而已知:
P(θ⃗ m∣Z−i,W−i)=Dir(θ⃗ m∣n⃗ m,−i+α⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-250">P\left ( \vec{\theta }_m\mid Z_{-i},W_{-i} \right )=Dir\left ( \vec{\theta }_m\mid \vec{n}_{m,-i}+\vec{\alpha } \right )</script>
P(φ⃗ k∣Z−i,W−i)=Dir(φ⃗ k∣n⃗ k,−i+β⃗ )
<script type="math/tex; mode=display" id="MathJax-Element-251">P\left ( \vec{\varphi }_k\mid Z_{-i},W_{-i} \right )=Dir\left ( \vec{\varphi }_k\mid \vec{n}_{k,-i}+\vec{\beta } \right )</script>
则可以推出下面的式子:
P(zi=k∣Z−i,W)∝P(zi=k,wi=t∣Z−i,W−i)=∫P(zi=k,wi=t,θ⃗ m,φ⃗ k∣Z−i,W−i)dθ⃗ mdφ⃗ k=∫P(zi=k,θ⃗ m∣Z−i,W−i)⋅P(wi=t,φ⃗ k∣Z−i,W−i)dθ⃗ mdφ⃗ k=∫P(zi=k∣θ⃗ m)P(θ⃗ m∣Z−i,W−i)⋅P(wi=t∣φ⃗ k)P(φ⃗ k∣Z−i,W−i)dθ⃗ mdφ⃗ k∫P(zi=k∣θ⃗ m)Dir(θ⃗ m∣n⃗ m,−i+α⃗ )dθ⃗ m⋅∫P(wi=t∣φ⃗ k)Dir(φ⃗ k∣n⃗ k,−i+β⃗ )dφ⃗ k
<script type="math/tex; mode=display" id="MathJax-Element-252">\begin{matrix} P\left ( z_i=k\mid Z_{-i},W \right )\propto P\left ( z_i=k,w_i=t\mid Z_{-i},W_{-i} \right )\\ =\int P\left ( z_i=k,w_i=t,\vec{\theta }_m,\vec{\varphi }_k\mid Z_{-i},W_{-i} \right )d\vec{\theta }_md\vec{\varphi }_k \\ =\int P\left ( z_i=k,\vec{\theta }_m\mid Z_{-i},W_{-i} \right )\cdot P\left ( w_i=t,\vec{\varphi }_k\mid Z_{-i},W_{-i} \right )d\vec{\theta }_md\vec{\varphi }_k\\ =\int P\left ( z_i=k\mid \vec{\theta }_m \right )P\left ( \vec{\theta }_m\mid Z_{-i},W_{-i} \right )\cdot P\left ( w_i=t\mid \vec{\varphi }_k \right )P\left (\vec{\varphi }_k\mid Z_{-i},W_{-i} \right )d\vec{\theta }_md\vec{\varphi }_k\\ \int P\left ( z_i=k\mid \vec{\theta }_m \right )Dir\left ( \vec{\theta }_m\mid \vec{n}_{m,-i}+\vec{\alpha } \right )d\vec{\theta }_m\cdot \int P\left ( w_i=t\mid \vec{\varphi }_k \right )Dir\left ( \vec{\varphi }_k\mid \vec{n}_{k,-i}+\vec{\beta } \right )d\vec{\varphi }_k \end{matrix}</script>
=∫θmkDir(θ⃗ m∣n⃗ m,−i+α⃗ )dθ⃗ m⋅∫φktDir(φ⃗ k∣n⃗ k,−i+β⃗ )dφ⃗ k=E(θmk)⋅E(φkt)=θmk^⋅φkt^
<script type="math/tex; mode=display" id="MathJax-Element-253">\begin{matrix} =\int \theta _{mk}Dir\left ( \vec{\theta }_m\mid \vec{n}_{m,-i}+\vec{\alpha } \right )d\vec{\theta }_m\cdot \int \varphi _{kt}Dir\left ( \vec{\varphi }_k\mid \vec{n}_{k,-i}+\vec{\beta } \right )d\vec{\varphi }_k\\ =E\left ( \theta _{mk} \right )\cdot E\left ( \varphi _{kt} \right )\\ =\hat{\theta _{mk}}\cdot \hat{\varphi _{kt}} \end{matrix}</script>
在Dirichlet分布中,我们知道:
θmk^=n(k)m,−i+αk∑Kk=1(n(k)m,−i+αk)
<script type="math/tex; mode=display" id="MathJax-Element-254">\hat{\theta _{mk}}=\frac{n_{m,-i}^{\left ( k \right )}+\alpha _k}{\sum_{k=1}^{K}\left ( n_{m,-i}^{\left ( k \right )}+\alpha _k \right )}</script>
φkt^=n(t)k,−i+βt∑Vt=1(n(t)k,−i+βt)
<script type="math/tex; mode=display" id="MathJax-Element-255">\hat{\varphi _{kt}}=\frac{n_{k,-i}^{\left ( t \right )}+\beta _t}{\sum_{t=1}^{V}\left ( n_{k,-i}^{\left ( t \right )}+\beta _t \right )}</script>
因此有:
P(zi=k∣Z−i,W)∝n(k)m,−i+αk∑Kk=1(n(k)m,−i+αk)⋅n(t)k,−i+βt∑Vt=1(n(t)k,−i+βt)
<script type="math/tex; mode=display" id="MathJax-Element-256">P\left ( z_i=k\mid Z_{-i},W \right )\propto \frac{n_{m,-i}^{\left ( k \right )}+\alpha _k}{\sum_{k=1}^{K}\left ( n_{m,-i}^{\left ( k \right )}+\alpha _k \right )}\cdot \frac{n_{k,-i}^{\left ( t \right )}+\beta _t}{\sum_{t=1}^{V}\left ( n_{k,-i}^{\left ( t \right )}+\beta _t \right )}</script>
LDA的训练过程如下所示:

4、LDA推理
LDA推理的过程与LDA训练的过程类似,具体过程如下所示:

两张图来自参考文献1。
参考文献
1、LDA数学八卦
2、通俗理解LDA主题模型
3、零基础小白使用LDA模型
4、LDA理解以及源码分析(二)
5、Xuan-Hieu Phan and Cam-Tu Nguyen. GibbsLDA++: A C/C++ implementation of latent Dirichlet allocation (LDA), 2007
所有评论(0)