LDA 是文本建模领域很常用的主题模型,在自然语言处理中占有重要的地位。这篇博客是根据我的 LDA 学习报告整理来的,主要的参考文献为《LDA 数学八卦》。对 LDA 稍微了解的同学应该知道,LDA 中涉及到一些数学的公式推导,但这篇博客旨在从整体上把握 LDA,刻意忽略了细节的公式推导,部分结论都是直接给出的。这样做的好处是,避免 LDA 的初学者一上来就陷入到痛苦的数学推导中,而不能很好的从整体上掌握 LDA。具体的公式推导,尤其是最重要的吉布斯采样公式的推导准备在接下来的博客详细给出。
先验分布、后验分布、共轭分布以及共轭先验分布
对于参数估计这个问题,频率学派认为参数是一个客观存在的定值,只是我们不知道是多少而已。而贝叶斯学派则认为参数不是一个定值,而是一个服从某一分布的随机变量,使用后验分布的均值或者极大值点作为参数的估计值。在这一参数估计的过程中,就有了先验分布、后验分布、共轭分布以及共轭先验分布的概念。
贝叶斯学派先验分布和后验分布的关系:
后
验
分
布
∝
似
然
函
数
⋅
先
验
分
布
,
即
:
P
(
X
∣
D
)
∝
P
(
D
∣
X
)
⋅
P
(
X
)
后验分布\propto似然函数\cdot先验分布,即:P(X|D)\propto P(D|X)\cdot P(X)
后验分布∝似然函数⋅先验分布,即:P(X∣D)∝P(D∣X)⋅P(X)
上面只是一个正比关系,再乘一个归一化系数
1
P
(
D
)
\frac{1}{P(D)}
P(D)1 就变成了等式关系,就是我们熟知的贝叶斯公式:
P
(
X
∣
D
)
=
P
(
D
∣
X
)
⋅
P
(
X
)
P
(
D
)
P(X|D)=\frac{P(D|X)\cdot P(X)}{P(D)}
P(X∣D)=P(D)P(D∣X)⋅P(X)
举个例子:假如我扔了 5 次硬币,先出现了 3 次正面,后出现了 2 次反面,那么这时的似然函数就应该是 P ( D ∣ X ) = L ( μ ) = μ ⋅ μ ⋅ μ ⋅ ( 1 − μ ) ⋅ ( 1 − μ ) P(D|X)=L(\mu)=\mu\cdot\mu\cdot\mu\cdot(1-\mu)\cdot(1-\mu) P(D∣X)=L(μ)=μ⋅μ⋅μ⋅(1−μ)⋅(1−μ)( μ \mu μ 是硬币抛正面的概率)
概率学派认为这个 μ \mu μ 是一个定值,使用极大似然估计(思想:利用已知样本结果,反推最有可能导致这样结果的参数),对 L ( μ ) L(\mu) L(μ) 求导,得到 μ ^ = 3 / 5 \hat{\mu}=3/5 μ^=3/5,然后就认为抛硬币为正面的概率为 3/5,最后再给出一个参数估计的置信度,表示这个估计值可能不准确。这个准确度与实验次数有关,根据大数定律,理论上实验次数足够多以后,求出来的值会越来越接近真实的概率值。
而贝叶斯学派认为 μ \mu μ 是服从某一分布的随机变量,后验概率是一个随 μ \mu μ 变化的分布: P ( X ∣ D ) = L ( μ ) ⋅ P ( X ) P ( D ) P(X|D)=\frac{L(\mu)\cdot P(X)}{P(D)} P(X∣D)=P(D)L(μ)⋅P(X) 。假设我们用 P ( X ∣ D ) P(X|D) P(X∣D) 的极大值来估计 μ \mu μ,其中 P ( D ) P(D) P(D) 可以简单地由古典概型算出来 P ( D ) = 1 / 32 P(D)=1/32 P(D)=1/32,所以 L ( μ ) L(\mu) L(μ) 的极大值点就是 P ( X ∣ D ) P(X|D) P(X∣D) 的极大值点,所以 μ \mu μ 代入 3/5 可得 P ( X ∣ D ) = 0.55296 P(X|D)=0.55296 P(X∣D)=0.55296,那么就认为抛硬币正面的概率为 0.55296。
可以看到概率学派的结果受实验次数的影响很大,而贝叶斯学派只是用实验的观测结果来修正先验概率,受实验次数的影响较小。当拥有无限数据量时,贝叶斯学派和频率学派得到的参数估计都是一样的。当在有限的数据量下,贝叶斯学派的参数估计介于先验均值和频率学派得到的参数估计之间。
共轭分布和共轭先验分布:
在贝叶斯学派中,如果先验分布与后验分布是同类分布,则称先验分布与后验分布为一对共轭分布,此时先验分布又称为似然函数的共轭先验分布。
先验分布与似然函数是共轭分布的好处是,从先验变换到后验的过程中从数据中补充的知识容易有物理解释,补充知识是对先验分布参数的修正。另外先验代表的是我们的直觉、经验和认知,如果从先验到后验变成了另一类分布是反直觉的,从而也不好解释。
一个函数和四个分布
Gamma函数,将阶乘的定义拓展到了实数集上
Γ
(
x
)
=
∫
0
+
∞
e
−
t
t
x
−
1
d
t
(
x
>
0
)
\Gamma(x)=\int_0^{+\infty}e^{-t}t^{x-1}dt(x>0)
Γ(x)=∫0+∞e−ttx−1dt(x>0)
二项分布: 重复 n 次伯努利实验(0-1分布)的分布,典型的,抛 n 次硬币就是一个二项分布
P
(
x
;
p
)
=
n
!
x
!
(
n
−
x
)
!
p
k
(
1
−
p
)
n
−
k
P(x;p)=\frac{n!}{x!(n-x)!}p^k(1-p)^{n-k}
P(x;p)=x!(n−x)!n!pk(1−p)n−k
多项分布: 是二项分布扩展到多维的情况,单次实验的取值不再仅是0和1,而是从多个离散值中取值。典型的,抛 n 次骰子就是一个多项分布
P
(
x
1
,
x
2
,
⋯
,
x
k
;
p
1
,
p
2
,
⋯
,
p
k
)
=
n
!
x
1
!
⋯
x
k
!
p
1
x
1
⋯
p
k
x
k
P(x_1,x_2,\cdots,x_k;p_1,p_2,\cdots,p_k)=\frac{n!}{x_1!\cdots x_k!}p_1^{x_1}\cdots p_k^{x_k}
P(x1,x2,⋯,xk;p1,p2,⋯,pk)=x1!⋯xk!n!p1x1⋯pkxk
其中,
∑
i
=
1
k
x
i
=
n
,
∑
i
=
1
k
p
i
=
1
\sum_{i=1}^kx_i=n,\sum_{i=1}^kp_i=1
∑i=1kxi=n,∑i=1kpi=1
Beta 分布: Beta 分布的物理意义就是,服从 [0,1] 区间上均匀分布的 n 个随机变量,其第 k 个顺序统计量值的分布。
f
(
x
;
α
,
β
)
=
Γ
(
α
+
β
)
Γ
(
α
)
Γ
(
β
)
x
α
−
1
(
1
−
x
)
β
−
1
f(x;\alpha,\beta)=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)}x^{\alpha-1}(1-x)^{\beta-1}
f(x;α,β)=Γ(α)Γ(β)Γ(α+β)xα−1(1−x)β−1
其中
α
=
k
,
β
=
n
−
k
+
1
\alpha=k,\beta=n-k+1
α=k,β=n−k+1,表示在
X
(
k
)
X_{(k)}
X(k) 左右变量的个数,所以 Beta 分布中参数
α
,
β
\alpha,\beta
α,β 都可以理解为计数,常被称为伪计数。
可以证明 Beta 分布和二项分布是一对共轭分布。
借用贝叶斯过程“先验分布 + 数据知识 = 后验分布”的表达是:
B
e
t
a
(
x
∣
α
,
β
)
+
B
i
n
o
m
C
o
u
n
t
(
m
1
,
m
2
)
=
B
e
t
a
(
x
∣
α
+
m
1
,
β
+
m
2
)
Beta(x|\alpha,\beta)+BinomCount(m_1,m_2)=Beta(x|\alpha+m_1,\beta+m_2)
Beta(x∣α,β)+BinomCount(m1,m2)=Beta(x∣α+m1,β+m2)
其中
m
1
,
m
2
m_1,m_2
m1,m2 对应二项分布中实验失败成功的计数。
狄利克雷分布,是Beta分布扩展到多维的情况:
f
(
x
1
,
x
2
,
⋯
,
x
k
;
α
1
,
α
2
,
⋯
,
α
k
)
=
1
Δ
(
α
⃗
)
∏
i
=
1
k
x
i
α
i
−
1
f(x_1,x_2,\cdots,x_k;\alpha_1,\alpha_2,\cdots,\alpha_k)=\frac{1}{\Delta(\vec\alpha)}\prod_{i=1}^kx_i^{\alpha_i-1}
f(x1,x2,⋯,xk;α1,α2,⋯,αk)=Δ(α)1i=1∏kxiαi−1
其中,
1
Δ
(
α
⃗
)
=
Γ
(
∑
i
=
1
k
α
i
)
∏
i
=
1
k
Γ
(
α
i
)
,
∑
i
=
1
k
x
i
=
1
\frac{1}{\Delta(\vec\alpha)}=\frac{\Gamma(\sum_{i=1}^k\alpha_i)}{\prod_{i=1}^k\Gamma(\alpha_i)},\sum_{i=1}^kx_i=1
Δ(α)1=∏i=1kΓ(αi)Γ(∑i=1kαi),i=1∑kxi=1
可以证明狄利克雷分布和多项分布是一对共轭分布。
贝叶斯过程的表述是:
D
i
r
(
p
⃗
∣
α
⃗
)
+
M
u
l
t
C
o
u
n
t
(
m
⃗
)
=
D
i
r
(
p
⃗
∣
α
⃗
+
m
⃗
)
Dir(\vec{p}|\vec{\alpha})+MultCount(\vec{m})=Dir(\vec{p}|\vec{\alpha}+\vec{m})
Dir(p∣α)+MultCount(m)=Dir(p∣α+m)
与Beta分布类似狄利克雷分布中的参数
α
⃗
\vec{\alpha}
α 也可以理解为物理计数。
马尔可夫链及 Gibbs Sampling
一般我们计算机生成服从某一分布的随机数的过程为,通过确定算法(线性同余发生器等)生成服从 [0,1] 均匀分布的伪随机数,然后通过对应的数学变换定理将 [0,1] 均匀分布等价变换为我们想要的分布。但是这些数学变换定理只能涵盖那些知名常用的分布,并不是所有分布都有对应的变换定理,这也不现实,毕竟分布有无穷多个。
当分布的形式很复杂,甚至无法显示计算时,就需要使用更加复杂的随机模拟的方法生成样本,MCMC(Markov Chain Montc Carlo)就是其中最常用的一种。
马氏链及其平稳分布
马氏链是一种状态的概率转移模型,马氏链的数学定义很简单:
P
(
X
t
+
1
=
x
∣
X
t
,
X
t
−
1
,
⋯
)
=
P
(
X
t
+
1
=
x
∣
X
t
)
P(X_{t+1}=x|X_t,X_{t-1},\cdots)=P(X_{t+1}=x|X_t)
P(Xt+1=x∣Xt,Xt−1,⋯)=P(Xt+1=x∣Xt)
也就是状态转移的概率只依赖于前一个状态。
马氏链是一种向量
π
\pi
π(和为1)依赖概率转移矩阵
P
P
P(行和为1)更新的过程。对于给定的
π
0
\pi_0
π0 更新过程如下:
π
1
=
π
0
P
π
2
=
π
1
P
⋮
π
n
=
π
n
−
1
P
\pi_1=\pi_0P\\\pi_2=\pi_1P\\\vdots\\\pi_n=\pi_{n-1}P
π1=π0Pπ2=π1P⋮πn=πn−1P
对于特定的概率转移矩阵
P
P
P,在某一个迭代后向量
π
\pi
π 就不再改变,即马氏链收敛
π
n
=
π
n
−
1
=
⋯
=
π
i
=
̸
π
i
−
1
\pi_n=\pi_{n-1}=\cdots=\pi_i=\not\pi_{i-1}
πn=πn−1=⋯=πi=πi−1。
该定理表明,马氏链是否收敛只与转移矩阵
P
P
P 有关,与初始向量
π
0
\pi_0
π0 无关。且最后收敛的
π
\pi
π 也只与转移矩阵
P
P
P 有关,与初始向量
π
0
\pi_0
π0 无关。
对于给定的概率分布
p
(
x
)
p(x)
p(x),我们希望能有便捷的方法生成它对应的样本。由于马氏链能收敛到平稳分布,于是有一个很好的想法是:如果我们能构造一个转移矩阵为
P
P
P 的马氏链,使得该马氏链的平稳分布恰是
p
(
x
)
p(x)
p(x) 的采样,那么我们从任何初始状态
x
0
x_0
x0 出发沿马氏链转移,如果马氏链在第
n
n
n 步已经收敛,那我们就得到了
p
(
x
)
p(x)
p(x) 的样本
x
n
x_n
xn。
这是一个普适的采样方法,首个使用这种方法的算法 Metropolis 算法也被遴选为二十世纪最重要的十大算法之一。
马氏链的收敛性质主要由转移矩阵决定,所以基于马氏链做采样问题的关键问题是如何构造转移矩阵,使得平稳分布恰好是我们要的分布。依赖如下定理:
证明如下:
∑
i
π
i
P
i
j
=
∑
i
π
j
P
j
i
=
π
j
∑
i
P
j
i
=
π
j
⟹
π
P
=
π
\sum_i\pi_iP_{ij}=\sum_i\pi_jP_{ji}=\pi_j\sum_iP_{ji}=\pi_j\Longrightarrow\pi P=\pi
i∑πiPij=i∑πjPji=πji∑Pji=πj⟹πP=π
吉布斯采样就是按照细致平稳条件来构造转移矩阵
P
P
P,进而实现对高维联合分布的采样。
以二维为例:
假设有一个概率分布
p
(
x
,
y
)
p(x,y)
p(x,y),考察
x
x
x 坐标相同的两个点
A
(
x
1
,
y
1
)
,
B
(
x
1
,
y
2
)
A(x_1,y_1),B(x_1,y_2)
A(x1,y1),B(x1,y2) 我们发现:
p
(
x
1
,
y
1
)
p
(
y
2
∣
x
1
)
=
p
(
x
1
)
p
(
y
1
∣
x
1
)
p
(
y
2
∣
x
1
)
p
(
x
1
,
y
2
)
p
(
y
1
∣
x
1
)
=
p
(
x
1
)
p
(
y
2
∣
x
1
)
p
(
y
1
∣
x
1
)
p(x_1,y_1)p(y_2|x_1)=p(x_1)p(y_1|x_1)p(y_2|x_1)\\p(x_1,y_2)p(y_1|x_1)=p(x_1)p(y_2|x_1)p(y_1|x_1)
p(x1,y1)p(y2∣x1)=p(x1)p(y1∣x1)p(y2∣x1)p(x1,y2)p(y1∣x1)=p(x1)p(y2∣x1)p(y1∣x1)
所以得到
p
(
x
1
,
y
1
)
p
(
y
2
∣
x
1
)
=
p
(
x
1
,
y
2
)
p
(
y
1
∣
x
1
)
p(x_1,y_1)p(y_2|x_1)=p(x_1,y_2)p(y_1|x_1)
p(x1,y1)p(y2∣x1)=p(x1,y2)p(y1∣x1)
即
p
(
A
)
p
(
y
2
∣
x
1
)
=
p
(
B
)
p
(
y
1
∣
x
1
)
p(A)p(y_2|x_1)=p(B)p(y_1|x_1)
p(A)p(y2∣x1)=p(B)p(y1∣x1)
基于以上等式,我们发现,在
x
=
x
1
x=x_1
x=x1 这条平行于
y
y
y 轴的直线上,如果使用条件分布
p
(
y
∣
x
1
)
p(y|x_1)
p(y∣x1) 作为该直线上任意两点的转移概率,那么显然满足细致平稳条件。
同理,如果我们在 y = y 1 y=y_1 y=y1 这条直线上任取两个点 A ( x 1 , y 1 ) , C ( x 2 , y 1 ) A(x_1,y_1),C(x_2,y_1) A(x1,y1),C(x2,y1),则以 p ( x ∣ y 1 ) p(x|y_1) p(x∣y1) 为 y = y 1 y=y_1 y=y1 上任意两点的转移概率,同样满足细致平稳条件。
于是我们可以构造平面上任意两点之间的转移概率矩阵
Q
Q
Q
{
Q
(
A
→
B
)
=
p
(
y
B
∣
x
1
)
x
A
=
x
B
=
x
1
Q
(
A
→
C
)
=
p
(
x
C
∣
y
1
)
y
A
=
y
C
=
y
1
Q
(
A
→
D
)
=
0
其
它
\left\{ \begin{array}{lcl} Q(A\rightarrow B)=p(y_B|x_1) && {x_A=x_B=x_1}\\ Q(A\rightarrow C)=p(x_C|y_1) && {y_A=y_C=y_1}\\ Q(A\rightarrow D)=0 && {其它}\\ \end{array} \right.
⎩⎨⎧Q(A→B)=p(yB∣x1)Q(A→C)=p(xC∣y1)Q(A→D)=0xA=xB=x1yA=yC=y1其它
容易验证对平面上任意两点
X
,
Y
X,Y
X,Y,满足
p
(
X
)
Q
(
X
→
Y
)
=
p
(
Y
)
Q
(
Y
→
X
)
p(X)Q(X\rightarrow Y)=p(Y)Q(Y\rightarrow X)
p(X)Q(X→Y)=p(Y)Q(Y→X)
于是这个二维空间上的马氏链将收敛到平稳分布
p
(
x
,
y
)
p(x,y)
p(x,y)。
以上过程很容易推广到高维情形,因为对所有平行于坐标轴的直线都有类似结论。所以
n
n
n 维空间中对于概率分布
p
(
x
1
,
x
2
,
⋯
,
x
n
)
p(x_1,x_2,\cdots,x_n)
p(x1,x2,⋯,xn) 可以定义如下转移矩阵:
- 如果当前状态为 ( x 1 , x 2 , ⋯ , x n ) (x_1,x_2,\cdots,x_n) (x1,x2,⋯,xn),马氏链转移的过程中,只能沿着坐标轴进行转移。沿着 x i x_i xi 这根坐标轴做转移的时候,转移概率由条件概率 p ( x i ∣ x 1 , ⋯ , x i − 1 , x i + 1 , ⋯ , x n ) p(x_i|x_1,\cdots,x_{i-1},x_{i+1},\cdots,x_n) p(xi∣x1,⋯,xi−1,xi+1,⋯,xn) 定义;
- 其它无法沿着单根坐标轴进行的跳转,转移概率都设置为 0。
PLSA
我们日常生活中总是产生大量文本,如果每一个文本存储为一篇文档,那每篇文档从人的观察来说就是有序的词的序列。
统计文本建模的目的就是追问这些观察到的语料库中的词序列是如何生成的。主题模型的灵感来源于人写文章的过程,在写文章之前,先定主题或者说主旨,首先考虑要写的这个文章想要体现哪些主题,然后再根据这些主题去写文章,当然文章中用的每一个词都应该与这些主题有关。
所以主题模型就在词和文档之间引入主题的概念,通过文档主题之间的相似性,来判别文档之间的相似性。直觉上,这也比通过词向量的相似性来判断文档相似性更好一些。
符号约定:
- 语料中共有 M 篇文档;
- 词典中共有 V 个词;
- 语料中共 K 个主题。
如果把生成主题和单词的过程看成是掷骰子的过程,那么 PLSA 文本生成模型,每篇文档对应一个特定的 dt 骰子,有 K 个面。另外还有 K 个 tw 骰子对应文档的 K 个主题,每个骰子有 V 个面。dt 骰子的每一个面对应一个 tw 骰子。PLSA 重复如下过程生成文档中的词:
- 投掷该文档对应的 dt 骰子,来选择一个 tw 骰子。
- 投掷这个 tw 骰子得到一个词。
图形化表示如下:
我们可以发现在上过程中,文档和文档之间是独立可交换的,同一个文档内的词也是独立可交换的,所以这是一个典型的词袋模型。
LDA
上面的 K 个 tw 骰子我们可以记为 φ ⃗ 1 , ⋯ , φ ⃗ K \vec{\varphi}_1,\cdots,\vec{\varphi}_K φ1,⋯,φK,M 篇文档对应的 dt 骰子分别记作 θ ⃗ 1 , ⋯ , θ ⃗ M \vec{\theta}_1,\cdots,\vec{\theta}_M θ1,⋯,θM。对于上述的 PLSA 模型,贝叶斯学派认为 dt 骰子 θ ⃗ m \vec{\theta}_m θm 和 tw 骰子 φ ⃗ k \vec{\varphi}_k φk 都是模型中的参数,参数都是随机变量,所以都要加上先验分布。
所以 LDA 就是在 PLSA 的基础上加上了贝叶斯框架。由于生成主题和生成词的过程都是多项分布,所以先验分布比较好的选择就是多项分布对应的共轭分布,即狄利克雷分布。
使用概率图模型表示,LDA 模型的过程如下图所示:
这个概率图可以被分解为两个主要的物理过程:
- α ⃗ → θ ⃗ m → z m , n \vec{\alpha}\rightarrow\vec{\theta}_m\rightarrow z_{m,n} α→θm→zm,n,这个过程表示在生成第 m 篇文档的时候,先从第一个坛子中抽了一个 dt 骰子 θ ⃗ m \vec{\theta}_m θm,然后投掷这个骰子生成了文档中第 n 个词的 topic 编号 ;
- β ⃗ → φ ⃗ k → w m , n ∣ k = z m , n \vec{\beta}\rightarrow\vec{\varphi}_k\rightarrow w_{m,n}|k=z_{m,n} β→φk→wm,n∣k=zm,n,这个过程表示生成语料中第 m 篇文档中的第 n 个词。在第二个坛子中抽取的 K 个 tw 骰子中,挑选编号为 z m , n z_{m,n} zm,n 的那个骰子 φ ⃗ k \vec{\varphi}_k φk 进行投掷,然后生成 word w m , n w_{m,n} wm,n。
在 LDA 生成模型中,M 篇文档会对应于 M 个独立的 Dirichlet-Multinomial 共轭结构;K 个 topic 会对应于 K 个独立的 Dirichlet-Multinational 共轭结构。
由第一个物理过程,我们知道 α ⃗ → θ ⃗ m → z ⃗ m \vec{\alpha}\rightarrow\vec{\theta}_m\rightarrow\vec{z}_m α→θm→zm 表示生成第 m 篇文档中所有词对应的 topics。
得到
p
(
z
⃗
m
∣
α
⃗
)
=
∫
p
(
z
⃗
m
∣
θ
⃗
m
)
p
(
θ
⃗
m
∣
α
⃗
)
d
θ
⃗
m
=
Δ
(
n
⃗
m
+
α
⃗
)
Δ
(
α
⃗
)
p(\vec{z}_m|\vec{\alpha})=\int p(\vec{z}_m|\vec{\theta}_m)p(\vec{\theta}_m|\vec{\alpha})d\vec{\theta}_m=\frac{\Delta(\vec{n}_m+\vec{\alpha})}{\Delta(\vec{\alpha})}
p(zm∣α)=∫p(zm∣θm)p(θm∣α)dθm=Δ(α)Δ(nm+α)
其中,
n
⃗
m
=
(
n
m
(
1
)
,
⋯
,
n
m
(
K
)
)
\vec{n}_m=(n_m^{(1)},\cdots,n_m^{(K)})
nm=(nm(1),⋯,nm(K)),
n
m
(
k
)
n_m^{(k)}
nm(k) 表示第 m 篇文档中第 k 个 topic 产生的词的个数。
由于语料中 M 篇文档的 topics 生成过程相互独立,所以整个语料的 topics 生成概率为:
p
(
z
⃗
∣
α
⃗
)
=
∏
m
=
1
M
Δ
(
n
⃗
m
+
α
⃗
)
Δ
(
α
⃗
)
p(\vec{z}|\vec{\alpha})=\prod_{m=1}^M\frac{\Delta(\vec{n}_m+\vec{\alpha})}{\Delta(\vec{\alpha})}
p(z∣α)=m=1∏MΔ(α)Δ(nm+α)
之前描述的 LDA 生成模型的过程,是一个文档一个文档的按顺序生成的,文档中每个词的生成都要抛两次骰子,第一次抛一个 dt 骰子得到一个 topic,第二次抛一个 tw 骰子得到一个 word。如果语料中共有 N 个词,则一共会抛 2N 次骰子,这 2N 次是两种骰子轮换着抛的。
但实际上可以等价的调整 2N 次抛骰子的次序,前 N 次只抛 dt 骰子,先生成语料中所有词的 topics,然后在基于得到的每个词的 topic 编号,再抛 N 次 tw 骰子,生成 N 个 word。
由于 LDA 也是一种典型的词袋模型,所以不用在意 word 的次序,我们可以把语料中词进行交换,把具有相同 topic 的词放在一起。
对应于概率图中第二个物理过程
β
⃗
→
φ
⃗
k
→
w
m
,
n
∣
k
=
z
m
,
n
\vec{\beta}\rightarrow\vec{\varphi}_k\rightarrow w_{m,n}|k=z_{m,n}
β→φk→wm,n∣k=zm,n,在
k
=
z
m
,
n
k=z_{m,n}
k=zm,n 的限制下。由于语料中任何两个由 topic k 生成的词都是可交换的,即便它们不在同一个文档中,所以我们此处不再考虑文档的概念,转而考虑由同一个 topic 生成的词。于是在新的抛骰子的顺序下,第二个物理过程变为了
β
⃗
→
φ
⃗
k
→
w
⃗
k
\vec{\beta}\rightarrow\vec{\varphi}_k\rightarrow\vec{w}_{k}
β→φk→wk,其中
w
⃗
k
\vec{w}_{k}
wk 表示由第 k 个 topic 生成的词向量,同一个 tw 骰子可以一直抛直到生成完该 topic 对应的所有词,这个
φ
⃗
k
→
w
⃗
k
\vec{\varphi}_k\rightarrow\vec{w}_{k}
φk→wk 的过程就对应多项分布,而
β
⃗
→
φ
⃗
k
\vec{\beta}\rightarrow\vec{\varphi}_k
β→φk 对应狄利克雷分布,所以整体也还是 Dirichlet-Multinomial 共轭结构
我们同理可得
p
(
w
⃗
k
∣
β
⃗
)
=
Δ
(
n
⃗
k
+
β
⃗
)
Δ
(
β
⃗
)
p(\vec{w}_k|\vec{\beta})=\frac{\Delta(\vec{n}_k+\vec{\beta})}{\Delta(\vec{\beta})}
p(wk∣β)=Δ(β)Δ(nk+β)
其中
n
⃗
k
=
(
n
k
(
1
)
,
⋯
,
n
k
(
V
)
)
\vec{n}_k=(n_k^{(1)},\cdots,n_k^{(V)})
nk=(nk(1),⋯,nk(V)),
n
k
(
v
)
n_k^{(v)}
nk(v) 表示第 k 个 topic 生成的词 v 的个数。
同理,得到整个语料中词的生成概率为
p
(
w
⃗
∣
z
⃗
,
β
⃗
)
=
∏
k
=
1
K
Δ
(
n
⃗
k
+
β
⃗
)
Δ
(
β
⃗
)
p(\vec{w}|\vec{z},\vec{\beta})=\prod_{k=1}^K\frac{\Delta(\vec{n}_k+\vec{\beta})}{\Delta(\vec{\beta})}
p(w∣z,β)=k=1∏KΔ(β)Δ(nk+β)
结合上面两式我们可以得到联合分布为:
p
(
w
⃗
,
z
⃗
∣
α
⃗
,
β
⃗
)
=
p
(
w
⃗
∣
z
⃗
,
β
⃗
)
p
(
z
⃗
∣
α
⃗
)
p(\vec{w},\vec{z}|\vec{\alpha},\vec{\beta})=p(\vec{w}|\vec{z},\vec{\beta})p(\vec{z}|\vec{\alpha})
p(w,z∣α,β)=p(w∣z,β)p(z∣α)
有了联合分布,我们就可以根据 Gibbs Sampling 得到所有词对应的主题。
LDA 的训练及推断
有了 LDA 模型,我们的目标有两个:
- 估计模型中的参数 φ ⃗ 1 , ⋯ , φ ⃗ K \vec{\varphi}_1,\cdots,\vec{\varphi}_K φ1,⋯,φK 和 θ ⃗ 1 , ⋯ , θ ⃗ M \vec{\theta}_1,\cdots,\vec{\theta}_M θ1,⋯,θM;
- 对于一篇新的文档能够得到其主题分布 θ ⃗ n e w \vec{\theta}_{new} θnew。
训练的过程就是通过 Gibbs Sampling 获取语料中的
(
z
,
w
)
(z,w)
(z,w) 样本,而模型中的所有参数都可以基于最终采样得到的样本进行估计。
训练流程如下:
由这个 topic-word 频率矩阵我们可以计算每个
p
(
w
o
r
d
∣
t
o
p
i
c
)
p(word|topic)
p(word∣topic) 的概率,从而算出模型参数
φ
⃗
1
,
⋯
,
φ
⃗
K
\vec{\varphi}_1,\cdots,\vec{\varphi}_K
φ1,⋯,φK,这就是前面说的 K 个 tw 骰子。参数
θ
⃗
1
,
⋯
,
θ
⃗
M
\vec{\theta}_1,\cdots,\vec{\theta}_M
θ1,⋯,θM 可以通过统计每篇文档中的 topic 的频率分布,就可以计算出
p
(
t
o
p
i
c
∣
d
o
c
)
p(topic|doc)
p(topic∣doc) 概率。由于参数
θ
⃗
1
,
⋯
,
θ
⃗
M
\vec{\theta}_1,\cdots,\vec{\theta}_M
θ1,⋯,θM 是和训练语料中的每篇文档相关的,对于我们理解新的文档没有用,所以一般不去管
θ
⃗
1
,
⋯
,
θ
⃗
M
\vec{\theta}_1,\cdots,\vec{\theta}_M
θ1,⋯,θM 参数。
推断过程和训练过程完全类似,对于新的文档,我们只要认为 Gibbs Sampling 中
φ
⃗
1
,
⋯
,
φ
⃗
K
\vec{\varphi}_1,\cdots,\vec{\varphi}_K
φ1,⋯,φK 是稳定不变的,由训练语料得到的模型提供,所以采样过程只要估计该文档的 topic 分布
θ
⃗
n
e
w
\vec{\theta}_{new}
θnew 就好了。
推断流程如下: