1、LSA
潜在语义分析(Latent Semantic Analysis, LSA),也叫做Latent Semantic
Indexing(LSI),是一种常用的简单的主题模型。LSA是基于奇异值分解(SVD)的方法得到文本主题的一种方式。
A
m
∗
n
=
U
m
∗
m
Σ
m
∗
n
V
n
∗
n
T
A
m
∗
n
≈
U
m
∗
k
Σ
k
∗
k
V
n
∗
k
T
\begin{aligned} A_{m*n}&=U_{m*m}\Sigma_{m*n}V_{n*n}^T \\ A_{m*n}&\approx U_{m*k}\Sigma_{k*k}V_{n*k}^T \end{aligned}
Am∗nAm∗n=Um∗mΣm∗nVn∗nT≈Um∗kΣk∗kVn∗kT
我们输入的有m个文本,每个文本有n个词。而
A
i
j
A_{ij}
Aij则对应第i个文本的第j个词的特征值。k是我们假设的主题数,一般要比文本数少。SVD分解后,
U
i
l
U_{il}
Uil对应第i个文本和第l个主题的相关度。
V
j
m
V_{jm}
Vjm对应第j个词和第m个词义的相关度。
Σ
l
m
Σ_{lm}
Σlm对应第l个主题和第m个词义的相关度。
通过SVD矩阵分解我们可以得到文本、词与主题、语义之间的相关性,但是这个时候计算出来的内容存在负数,我们比较难解释,所以我们可以对LSI得到文本主题矩阵使用余弦相似度计算文本的相似度的计算。这个时候直接在文本主题矩阵的基础上直接应用聚类算法即可。
LSA主题模型总结
除非数据规模比较小,而且希望快速的粗粒度的找出一些主题分布关系,否则我们一般不会使用LSA主题模型。
- 优点:
- 原理简单,一次SVD分解即可得到主题模型,可以同时解决词义的问题
- 缺点:
- SVD分解的计算非常耗时,对于高维度矩阵做SVD分解非常困难
- 主题模型数量的选取对于结果的影响非常大,很难选择合适的k值
- LSA模型不是概率模型,缺乏统计基础,结果难以直观的解释
2、NMF
非负矩阵分解(Non-negative Matrix Factorization, NMF)是一种常用的矩阵分解方式,常用于矩阵分解、降维、主题模型等应用场景。
NMF虽然和SVD一样都是矩阵分解,但是NMF不同的是:它的目标是希望将矩阵分解成为两个子矩阵。
V
m
∗
n
≈
W
m
∗
k
H
k
∗
n
V_{m*n}\approx W_{m*k}H_{k*n}
Vm∗n≈Wm∗kHk∗n
在NMF中求解出来的W和H,分别体现的是文本和主题的概率相关度,以及词和主题的概率相关度。NMF的期望是找到两个W、H矩阵,使得WH的矩阵乘积结果和对应的原矩阵V对应位置的值相比误差尽可能的小。
min
W
,
H
f
(
W
,
H
)
≡
1
2
∑
i
=
1
n
∑
j
=
1
m
(
V
i
j
−
(
W
H
)
i
j
)
2
s
.
t
.
W
i
a
≥
0
,
H
b
j
≥
0
,
∀
i
,
a
,
b
,
j
∑
i
=
1
n
∑
j
=
1
m
(
V
i
j
−
(
W
H
)
i
j
)
2
=
∣
∣
V
−
W
H
∣
∣
F
2
\begin{aligned} &\min_{W, H}f(W, H)\equiv\frac{1}{2}\sum_{i=1}^n\sum_{j=1}^m(V_{ij}-(WH)_{ij})^2 \\ &s.t. \ \ \ \ W_{ia}\ge0,H_{bj}\ge0, \forall i, a, b, j \\ &\sum_{i=1}^n\sum_{j=1}^m(V_{ij}-(WH)_{ij})^2=||V-WH||_F^2 \end{aligned}
W,Hminf(W,H)≡21i=1∑nj=1∑m(Vij−(WH)ij)2s.t. Wia≥0,Hbj≥0,∀i,a,b,ji=1∑nj=1∑m(Vij−(WH)ij)2=∣∣V−WH∣∣F2
NMF的目标函数中总共包含了
m
∗
k
+
k
∗
n
m*k+k*n
m∗k+k∗n个参数,可以直接使用梯度下降法或者拟牛顿法来进行求解。
W
k
+
1
=
max
(
0
,
W
k
−
α
k
∇
W
f
(
W
k
,
H
k
)
)
H
k
+
1
=
max
(
0
,
H
k
−
α
k
∇
H
f
(
W
k
,
H
k
)
)
W^{k+1}=\max(0, W^k-\alpha_k\nabla_Wf(W^k, H^k)) \\ H^{k+1}=\max(0, H^k-\alpha_k\nabla_Hf(W^k, H^k))
Wk+1=max(0,Wk−αk∇Wf(Wk,Hk))Hk+1=max(0,Hk−αk∇Hf(Wk,Hk))
为了防止过拟合,也可以在NMF的目标函数的基础上添加一个正则化项:
1
2
∣
∣
X
−
W
H
∣
∣
F
r
o
2
+
α
ρ
∣
∣
W
∣
∣
1
+
α
ρ
∣
∣
H
∣
∣
1
+
α
(
1
−
ρ
)
2
∣
∣
W
∣
∣
F
r
o
2
+
α
(
1
−
ρ
)
2
∣
∣
H
∣
∣
F
r
o
2
\frac{1}{2}||X-WH||_{Fro}^2+\alpha\rho||W||_1+\alpha\rho||H||_1+\frac{\alpha(1-\rho)}{2}||W||_{Fro}^2+\frac{\alpha(1-\rho)}{2}||H||_{Fro}^2
21∣∣X−WH∣∣Fro2+αρ∣∣W∣∣1+αρ∣∣H∣∣1+2α(1−ρ)∣∣W∣∣Fro2+2α(1−ρ)∣∣H∣∣Fro2
但是当加入L1正则项后,由于没法求解出正常的导函数出来(导函数不是连续的),也就没法使用梯度下降法和拟牛顿法求解参数,此时一般采用坐标轴下降法来进行参数的求解。
3、坐标轴下降法
坐标轴下降法(Coordinate Descent,CD)是一种迭代法,通过启发式的方法一步步的迭代求解函数的最小值,和梯度下降法(GD)不同的时候,坐标轴下降法是沿着坐标轴的方向去下降,而不是采用梯度的负方向下降。
坐标轴下降法利用EM算法的思想,在参数更新过程中,每次均先固定m-1个参数值,求解剩下的一个参数的局部最优解;然后进行迭代式的更新操作。
坐标轴下降法的核心思想是多变量函数F(X)可以通过每次沿着一个方向优化来获取最小值。其数学依据是:对于一个可微凸函数
f
(
θ
)
f(θ)
f(θ),其中
θ
θ
θ为
n
∗
1
n*1
n∗1的向量,如果对于一个解
θ
=
(
θ
1
,
θ
2
,
…
,
θ
n
)
θ=(θ_1, θ_2, \dots, θ_n)
θ=(θ1,θ2,…,θn),使得
f
(
θ
)
f(θ)
f(θ)在某个坐标轴
θ
i
(
i
=
1
,
2
,
.
.
,
n
)
θ_i(i=1,2,..,n)
θi(i=1,2,..,n)上都能达到最小值,则
θ
=
(
θ
1
,
θ
2
,
…
,
θ
n
)
θ=(θ_1, θ_2, \dots, θ_n )
θ=(θ1,θ2,…,θn)就是
f
(
θ
)
f(θ)
f(θ)的全局的最小值点。
在坐标轴下降法中,优化方向从算法的一开始就固定了,即沿着坐标的方向进行变化。在算法中,循环最小化各个坐标方向的目标函数。即:如果
x
k
x_k
xk给定,那么
x
k
+
1
x_{k+1}
xk+1的第i维度为:
x
i
k
+
1
=
arg
min
y
∈
R
f
(
x
1
k
+
1
,
…
,
x
i
−
1
k
+
1
,
y
,
x
i
+
1
k
,
…
,
x
n
k
)
x_i^{k+1}=\arg\min_{y\in R}f(x_1^{k+1}, \dots, x_{i-1}^{k+1}, y, x_{i+1}^k, \dots, x_n^k)
xik+1=argy∈Rminf(x1k+1,…,xi−1k+1,y,xi+1k,…,xnk)
因此,从一个初始的
x
0
x_0
x0求得函数F(x)的局部最优解,可以迭代获取
x
0
、
x
1
、
x
2
.
.
.
x_0、x_1、x_2...
x0、x1、x2...的序列,从而可以得到:
F
(
x
0
)
≥
F
(
x
1
)
≥
F
(
x
2
)
≥
…
F(x_0)\ge F(x_1)\ge F(x_2)\ge\dots
F(x0)≥F(x1)≥F(x2)≥…
坐标轴下降法算法过程:
- 给 θ θ θ向量随机选取一个初值,记做 θ 0 θ_0 θ0
- 对于第k轮的迭代,从
θ
1
k
θ_1^k
θ1k开始计算,
θ
n
k
θ_n^k
θnk到为止,计算公式如下:
θ 1 k = arg min θ 1 J ( θ 1 , θ 2 k − 1 , θ 3 k − 1 , … , θ n k − 1 ) θ 2 k = arg min θ 2 J ( θ 1 k , θ 2 , θ 3 k − 1 , … , θ n k − 1 ) … θ n k = arg min θ n J ( θ 1 k , θ 2 k , θ 3 k , … , θ n ) \begin{aligned} \theta_1^k&=\arg\min_{\theta_1}J(\theta_1,\theta_2^{k-1}, \theta_3^{k-1}, \dots, \theta_n^{k-1}) \\ \theta_2^k&=\arg\min_{\theta_2}J(\theta_1^k,\theta_2, \theta_3^{k-1}, \dots, \theta_n^{k-1}) \\ \dots \\ \theta_n^k&=\arg\min_{\theta_n}J(\theta_1^k,\theta_2^k, \theta_3^k, \dots, \theta_n) \end{aligned} θ1kθ2k…θnk=argθ1minJ(θ1,θ2k−1,θ3k−1,…,θnk−1)=argθ2minJ(θ1k,θ2,θ3k−1,…,θnk−1)=argθnminJ(θ1k,θ2k,θ3k,…,θn) - 检查 θ k θ_k θk和 θ k − 1 θ_{k-1} θk−1向量在各个维度上的变化情况,如果所有维度的变化情况都比较小的话,那么认为结束迭代,否则继续k+1轮的迭代
- 在求解每个参数局部最优解的时候可以求导的方式来求解
4、概率分布
(1)二项分布
二项分布是从伯努利分布推进的。伯努利分布,又称两点分布或0-1分布,是一个离散型的随机分布,其中的随机变量只有两类取值,非正即负{+,-}。而二项分布即重复n次的伯努利试验,记为
X
∼
b
(
n
,
p
)
X\sim b(n,p)
X∼b(n,p)。简言之,只做一次实验,是伯努利分布,重复做了n次,是二项分布。二项分布的概率密度函数为:
P
(
K
=
k
)
=
C
n
k
p
k
(
1
−
p
)
n
−
k
C
n
k
=
n
!
k
!
(
n
−
k
)
!
\begin{aligned} P(K=k)&=C_n^kp^k(1-p)^{n-k} \\ C_n^k&=\frac{n!}{k!(n-k)!} \end{aligned}
P(K=k)Cnk=Cnkpk(1−p)n−k=k!(n−k)!n!
(2)Beta分布
Beta分布是二项分布的共轭分布,条件概率公式如下:
f
(
x
)
=
1
B
(
α
,
β
)
x
α
−
1
(
1
−
x
)
β
−
1
,
x
∈
[
0
,
1
]
1
B
(
α
,
β
)
=
Γ
(
α
+
β
)
Γ
(
α
)
+
Γ
(
β
)
Γ
(
n
)
=
(
n
−
1
)
!
\begin{aligned} f(x)&=\frac{1}{B(\alpha, \beta)}x^{\alpha-1}(1-x)^{\beta-1}, x\in[0, 1] \\ \frac{1}{B(\alpha, \beta)}&=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)+\Gamma(\beta)} \\ \Gamma(n)&=(n-1)! \end{aligned}
f(x)B(α,β)1Γ(n)=B(α,β)1xα−1(1−x)β−1,x∈[0,1]=Γ(α)+Γ(β)Γ(α+β)=(n−1)!
(3)多项分布
多项分布是二项分布扩展到多维的情况。多项分布是指单次试验中的随机变量的取值不再是0-1的,而是有多种离散值可能(1,2,3…,k)。比如投掷6个面的骰子实验,N次实验结果服从K=6的多项分布。其中,
∑
i
=
1
k
p
i
=
1
,
p
i
>
0
\sum_{i=1}^kp_i=1, \ \ \ \ \ \ p_i\gt 0
i=1∑kpi=1, pi>0
多项分布的概率密度函数为:
P
(
x
1
,
x
2
,
…
,
x
k
,
n
,
p
1
,
p
2
,
…
,
p
k
)
=
n
!
x
1
!
…
x
k
!
p
1
x
1
…
p
k
x
k
P(x_1, x_2, \dots, x_k, n, p_1, p_2, \dots, p_k)=\frac{n!}{x_1!\dots x_k!}p_1^{x_1}\dots p_k^{x_k}
P(x1,x2,…,xk,n,p1,p2,…,pk)=x1!…xk!n!p1x1…pkxk
(4)Dirichlet分布
Dirichlet分布是Beta分布扩展到多维的情况。
f
(
x
1
,
…
,
x
k
;
α
1
,
…
,
α
k
)
=
1
B
(
α
)
∏
i
=
1
K
x
i
α
i
−
1
B
(
α
)
=
∏
i
=
1
K
Γ
(
α
i
)
Γ
(
∑
i
=
1
K
α
i
)
,
α
=
(
α
1
,
…
,
α
K
)
\begin{aligned} &f(x_1, \dots, x_k; \alpha_1, \dots, \alpha_k)=\frac{1}{B(\alpha)}\prod_{i=1}^Kx_i^{\alpha_i-1} \\ &B(\alpha)=\frac{\prod_{i=1}^K\Gamma(\alpha_i)}{\Gamma(\sum_{i=1}^K\alpha_i)}, \alpha=(\alpha_1, \dots, \alpha_K) \end{aligned}
f(x1,…,xk;α1,…,αk)=B(α)1i=1∏Kxiαi−1B(α)=Γ(∑i=1Kαi)∏i=1KΓ(αi),α=(α1,…,αK)
5、LDA
隐含狄利克雷分布(Latent Dirichlet Allocation,LDA)是一种基于贝叶斯算法模型,利用先验分布对数据进行似然估计并最终得到后验分布的一种方式。LDA是一种比较常用的主题模型。
LDA假设文档主题是多项分布,多项分布的参数(先验分布)服从Dirichlet分布,其实LDA是一种三层的贝叶斯模型。
LDA详细解释
- 共有M篇文档,每个文档有 N m N_m Nm个单词,一共涉及到K个主题
- 每篇文档都有各自的主题,主题分布是多项式分布,该多项式分布的参数服从Dirichlet分布,该Dirichlet分布的参数为α
- 每个主题都有各自的词分布,词分布为为多项式分布,该多项式分布的参数服从Dirichlet分布,该Dirichlet分布的参数为η
- 对于某篇文档d中的第n个词,首先从该文档的主题分布中采用一个主题,然后再这个主题对应的词分布中采用一个词,不断重复该操作,直到m篇文档全部完成上述过程
- 词汇表中共有V个term(不可重复)
- 语料库中共有m篇文档 d 1 , d 2 , … , d m d_1, d_2, \dots, d_m d1,d2,…,dm,对于文档 d i d_i di,是由 N i N_i Ni个word组成的(word可重复)。语料库共有K个主题 T 1 , T 2 , … , T k T_1, T_2, \dots, T_k T1,T2,…,Tk
- α和η是先验分布(Dirichlet分布)的参数
- θ是每篇文档的主题分布,是一个K维的向量
- 对于第i篇文档 d i d_i di,在主题分布 θ i θ_i θi下,可以确定一个具体的主题 z i j = k z_{ij}=k zij=k
- β是每个主题的词分布,是一个V维的向量
- 由 z i j z_{ij} zij选择 β z i j β_{zij} βzij,表示由词分布 β z i j β_{zij} βzij确定term,即可得到最终的观测值 w i j w_{ij} wij
LDA参数学习-Gibbs采样
对于一个n维的概率分布
π
(
x
1
,
x
2
,
…
,
x
n
)
π(x_1, x_2, \dots, x_n)
π(x1,x2,…,xn),可以通过在n个坐标上轮换采样,来得到新的样本,对于轮换到任意一个坐标
x
i
x_i
xi上的转移,马尔可夫链的状态转移概率为
p
(
x
i
∣
x
1
,
x
2
,
…
,
x
i
−
1
,
x
i
+
1
,
…
,
x
n
)
p(x_i |x_1, x_2, \dots, x_{i-1}, x_{i+1}, \dots, x_n )
p(xi∣x1,x2,…,xi−1,xi+1,…,xn),即固定n-1个坐标轴,在某一个坐标上移动。
Gibbs采样算法在高维空间采样的时候具有比较高的优势,GIbbs采样的过程比较类似这个坐标轴下降法。
Gibbs采样算法流程
- 输入稳定的分布 π ( x 1 , x 2 , … , x n ) π(x_1, x_2, \dots, x_n) π(x1,x2,…,xn)或者对应特征的条件概率分布,设定状态转移次数阈值 n 1 n_1 n1,需要的样本数 n 2 n_2 n2
- 随机初始化状态值 ( x 1 1 , x 2 1 , … , x n 1 ) (x_1^1, x_2^1, \dots, x_n^1 ) (x11,x21,…,xn1)
- 进行迭代数据采样(迭代
n
1
+
n
2
−
1
n_1+n_2-1
n1+n2−1次),从条件概率分布中采样得到对应的样本:
x j t + 1 → p ( x j ∣ x 1 t + 1 , x 2 t + 1 , … , x j − 1 t + 1 , x j + 1 t , … , x n t ) x_j^{t+1}\to p(x_j|x_1^{t+1}, x_2^{t+1}, \dots, x_{j-1}^{t+1}, x_{j+1}^t, \dots, x_n^t) xjt+1→p(xj∣x1t+1,x2t+1,…,xj−1t+1,xj+1t,…,xnt) - 最终得到的样本集为:
{ ( x 1 n 1 , x 2 n 1 , … , x n n 1 ) , … , ( x 1 n 1 + n 2 − 1 , x 2 n 1 + n 2 − 1 , … , x n n 1 + n 2 − 1 ) } \{(x_1^{n_1}, x_2^{n_1}, \dots, x_n^{n_1}), \dots, (x_1^{n_1+n_2-1}, x_2^{n_1+n_2-1}, \dots, x_n^{n_1+n_2-1})\} {(x1n1,x2n1,…,xnn1),…,(x1n1+n2−1,x2n1+n2−1,…,xnn1+n2−1)}
Gibbs采样
给定一个文档集合,w是可以观察到的值,α和η是根据经验给定的先验参数,其它的各个z,θ、β都是未知的隐含变量,都是需要根据观测到的数据进行学习的。
具体来讲,所有文档联合起来形成的词向量w是已知数据,但是不知道语料库的主题z的分布。假设可以先求解出w、z的联合分布p(w,z),进而就可以求出某个词
w
i
w_i
wi对应主题特征
z
i
z_i
zi的条件概率分布
p
(
z
i
=
k
∣
w
,
z
−
i
)
p(z_i =k|w,z_{-i})
p(zi=k∣w,z−i),其中
z
−
i
z_{-i}
z−i表示去掉下标i后的主题分布,有了条件概率,那么就可以使用Gibbs采样,最终可以得到第i个词的主题。
如果通过采样得到所有词的主题,那么可以通过统计所有词的主题数,从而得到各个主题的词分布。接着统计各个文档对应词的主题数,从而可以得到各个文档的主题分布。
简化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
=
1
Δ
(
α
⃗
)
∏
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}^Kp_k^{\alpha_k-1} \\ &=\frac{1}{\Delta(\vec{\alpha})}\prod_{k=1}^Kp_k^{\alpha_k-1} \end{aligned}
Dirichlet(p∣α)=∏k=1KΓ(αk)Γ(∑k=1Kαk)k=1∏Kpkαk−1=Δ(α)1k=1∏Kpkαk−1
计算文档的主题条件分布:
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(\theta_d|\vec{\alpha})d\vec{\theta}_d \\ &=\int\prod_{k=1}^Kp_k^{n_d^{(k)}}Dirichlet(\vec{\alpha})d\vec{\theta}_d \\ &=\int\prod_{k=1}^Kp_k^{n_d^{(k)}}\frac{1}{\Delta(\vec{\alpha})}\prod_{k=1}^Kp_k^{\alpha_k-1}d\vec{\theta}_d \\ &=\frac{1}{\Delta(\vec{\alpha})}\int\prod_{k=1}^Kp_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=Δ(α)1∫k=1∏Kpknd(k)+αk−1dθd=Δ(α)Δ(nd+α)
在第d个文档中,第k个主题的词的个数表示为:
n
d
(
k
)
n_d^{(k)}
nd(k),对应的多项分布的计数可以表示为:
n
⃗
d
=
(
n
d
(
1
)
,
n
d
(
2
)
,
…
,
n
d
(
K
)
)
\vec{n}_d=(n_d^{(1)}, n_d^{(2)}, \dots, n_d^{(K)})
nd=(nd(1),nd(2),…,nd(K))
有了一个文档的主题条件分布,则可以得到所有文档的主题条件分布为:
p
(
z
⃗
∣
α
⃗
)
=
∏
d
=
1
M
p
(
z
⃗
d
∣
α
⃗
)
=
∏
d
=
1
M
Δ
(
n
⃗
d
+
α
⃗
)
Δ
(
α
⃗
)
\begin{aligned} p(\vec{z}|\vec{\alpha})&=\prod_{d=1}^Mp(\vec{z}_d|\vec{\alpha}) \\ &=\prod_{d=1}^M\frac{\Delta(\vec{n}_d+\vec{\alpha})}{\Delta(\vec{\alpha})} \end{aligned}
p(z∣α)=d=1∏Mp(zd∣α)=d=1∏MΔ(α)Δ(nd+α)
使用同样的方式,可以得到第k个主题对应的词的条件分布
p
(
w
∣
z
,
η
)
p(w|z,η)
p(w∣z,η)为:
p
(
w
⃗
∣
z
⃗
,
η
⃗
)
=
∏
k
=
1
K
p
(
w
⃗
k
∣
z
⃗
,
η
⃗
)
=
∏
k
=
1
K
Δ
(
n
⃗
k
+
η
⃗
)
Δ
(
η
⃗
)
\begin{aligned} p(\vec{w}|\vec{z}, \vec{\eta})&=\prod_{k=1}^Kp(\vec{w}_k|\vec{z}, \vec{\eta}) \\ &=\prod_{k=1}^K\frac{\Delta(\vec{n}_k+\vec{\eta})}{\Delta(\vec{\eta})} \end{aligned}
p(w∣z,η)=k=1∏Kp(wk∣z,η)=k=1∏KΔ(η)Δ(nk+η)
其中第k个主题中,第v个词的个数表示为
n
k
v
n_k^v
nkv,对应的多项式分布计数表示为:
n
⃗
k
=
(
n
k
(
1
)
,
n
k
(
2
)
,
…
,
n
k
(
V
)
)
\vec{n}_k=(n_k^{(1)}, n_k^{(2)}, \dots, n_k^{(V)})
nk=(nk(1),nk(2),…,nk(V))
最终得到主题和词向量的联合分布为:
p
(
w
⃗
,
z
⃗
)
∝
p
(
w
⃗
,
z
⃗
∣
α
⃗
,
η
⃗
)
=
p
(
z
⃗
∣
α
⃗
)
p
(
w
⃗
∣
z
⃗
,
η
⃗
)
=
∏
d
=
1
M
Δ
(
n
⃗
d
+
α
⃗
)
Δ
(
α
⃗
)
=
∏
k
=
1
K
Δ
(
n
⃗
k
+
η
⃗
)
Δ
(
η
⃗
)
\begin{aligned} p(\vec{w}, \vec{z})&\propto p(\vec{w}, \vec{z}|\vec{\alpha}, \vec{\eta}) \\ &=p(\vec{z}|\vec{\alpha})p(\vec{w}|\vec{z}, \vec{\eta}) \\ &=\prod_{d=1}^M\frac{\Delta(\vec{n}_d+\vec{\alpha})}{\Delta(\vec{\alpha})} \\ &=\prod_{k=1}^K\frac{\Delta(\vec{n}_k+\vec{\eta})}{\Delta(\vec{\eta})} \end{aligned}
p(w,z)∝p(w,z∣α,η)=p(z∣α)p(w∣z,η)=d=1∏MΔ(α)Δ(nd+α)=k=1∏KΔ(η)Δ(nk+η)
基于联合分布,就可以使用求解Gibbs采样所需要的条件分布
p
(
z
i
=
k
∣
w
,
z
−
i
)
p(z_i=k|w,z_{-i})
p(zi=k∣w,z−i),对于下标i,由于它对应的词
w
i
w_i
wi是可以观察到的,因此有公式如下:
p
(
z
i
=
k
∣
w
⃗
,
z
⃗
−
i
)
∝
p
(
z
i
=
k
,
w
i
=
t
∣
w
⃗
−
i
,
z
⃗
−
i
)
p(z_i=k|\vec{w},\vec{z}_{-i})\propto p(z_i=k, w_i=t|\vec{w}_{-i},\vec{z}_{-i})
p(zi=k∣w,z−i)∝p(zi=k,wi=t∣w−i,z−i)
对于
z
i
=
k
z_i=k
zi=k,
w
i
=
t
w_i=t
wi=t,只涉及到第d篇文档和第k个主题两个Dirichlet共轭,即:
α
⃗
→
θ
⃗
d
→
z
⃗
d
η
⃗
→
β
⃗
k
→
w
⃗
k
\begin{aligned} &\vec{\alpha}\to\vec{\theta}_d\to\vec{z}_d \\ &\vec{\eta}\to\vec{\beta}_k\to\vec{w}_k \end{aligned}
α→θd→zdη→βk→wk
至于其他的Dirichlet共轭和这两个是互相独立的,也就是说从语料库中去掉
z
i
z_i
zi和
w
i
w_i
wi后,并不会改变共轭结构。所以对应的后验分布为:
p
(
θ
⃗
d
∣
w
⃗
−
i
,
z
⃗
−
i
)
=
D
i
r
i
c
h
l
e
t
(
θ
⃗
d
∣
n
⃗
d
,
−
i
+
α
⃗
)
p(\vec{\theta}_d|\vec{w}_{-i}, \vec{z}_{-i})=Dirichlet(\vec\theta_d|\vec n_{d, -i}+\vec\alpha)
p(θd∣w−i,z−i)=Dirichlet(θd∣nd,−i+α)
开始计算Gibbs采样的条件概率:
p
(
z
i
=
k
∣
w
⃗
,
z
⃗
−
i
)
∝
p
(
z
i
=
k
,
w
i
=
t
∣
w
⃗
−
i
,
z
⃗
−
i
)
=
∫
p
(
z
i
=
k
,
w
i
=
t
,
θ
⃗
d
,
β
⃗
k
∣
w
⃗
−
i
,
z
⃗
−
i
)
d
θ
⃗
d
d
β
⃗
k
=
∫
p
(
z
i
=
k
,
θ
⃗
d
∣
w
⃗
−
i
,
z
⃗
−
i
)
p
(
w
i
=
t
,
β
⃗
k
∣
w
⃗
−
i
,
z
⃗
−
i
)
d
θ
⃗
d
d
β
⃗
k
=
∫
p
(
z
i
=
k
∣
θ
⃗
d
)
p
(
θ
⃗
d
∣
w
⃗
−
i
,
z
⃗
−
i
)
p
(
w
i
=
t
∣
β
⃗
k
)
p
(
β
⃗
k
∣
w
⃗
−
i
,
z
⃗
−
i
)
d
θ
⃗
d
d
β
⃗
k
=
∫
p
(
z
i
=
k
∣
θ
⃗
d
)
D
i
r
i
c
h
l
e
t
(
θ
⃗
d
∣
n
⃗
d
,
−
i
+
α
⃗
)
d
θ
⃗
d
×
∫
p
(
w
i
=
t
∣
β
⃗
k
)
D
i
r
i
c
h
l
e
t
(
β
⃗
k
∣
n
⃗
k
,
−
i
+
η
⃗
)
d
β
⃗
k
=
∫
θ
d
k
D
i
r
i
c
h
l
e
t
(
θ
⃗
d
∣
n
⃗
d
,
−
i
+
α
⃗
)
d
θ
⃗
d
∫
β
k
t
D
i
r
i
c
h
l
e
t
(
β
⃗
k
∣
n
⃗
k
,
−
i
+
η
⃗
)
d
β
⃗
k
=
E
D
i
r
i
c
h
l
e
t
(
θ
d
)
(
θ
d
k
)
E
D
i
r
i
c
h
l
e
t
(
β
k
)
(
β
k
t
)
\begin{aligned} p(z_i=k|\vec{w},\vec{z}_{-i})&\propto p(z_i=k, w_i=t|\vec{w}_{-i},\vec{z}_{-i}) \\ &=\int p(z_i=k, w_i=t, \vec\theta_d, \vec\beta_k|\vec{w}_{-i},\vec{z}_{-i})d\vec\theta_dd\vec\beta_k \\ &=\int p(z_i=k, \vec\theta_d|\vec{w}_{-i},\vec{z}_{-i})p(w_i=t, \vec\beta_k|\vec{w}_{-i},\vec{z}_{-i})d\vec\theta_dd\vec\beta_k \\ &=\int p(z_i=k|\vec\theta_d)p(\vec\theta_d|\vec{w}_{-i},\vec{z}_{-i})p(w_i=t|\vec\beta_k)p(\vec\beta_k|\vec{w}_{-i},\vec{z}_{-i})d\vec\theta_dd\vec\beta_k \\ &=\int p(z_i=k|\vec\theta_d)Dirichlet(\vec\theta_d|\vec n_{d, -i}+\vec\alpha)d\vec\theta_d \\ &\times\int p(w_i=t|\vec\beta_k)Dirichlet(\vec\beta_k|\vec n_{k, -i}+\vec\eta)d\vec\beta_k \\ &=\int\theta_{dk}Dirichlet(\vec\theta_d|\vec n_{d, -i}+\vec\alpha)d\vec\theta_d\int\beta_{kt}Dirichlet(\vec\beta_k|\vec n_{k, -i}+\vec\eta)d\vec\beta_k \\ &=E_{Dirichlet(\theta_d)}(\theta_{dk})E_{Dirichlet(\beta_k)}(\beta_{kt}) \end{aligned}
p(zi=k∣w,z−i)∝p(zi=k,wi=t∣w−i,z−i)=∫p(zi=k,wi=t,θd,βk∣w−i,z−i)dθddβk=∫p(zi=k,θd∣w−i,z−i)p(wi=t,βk∣w−i,z−i)dθddβk=∫p(zi=k∣θd)p(θd∣w−i,z−i)p(wi=t∣βk)p(βk∣w−i,z−i)dθddβk=∫p(zi=k∣θd)Dirichlet(θd∣nd,−i+α)dθd×∫p(wi=t∣βk)Dirichlet(βk∣nk,−i+η)dβk=∫θdkDirichlet(θd∣nd,−i+α)dθd∫βktDirichlet(βk∣nk,−i+η)dβk=EDirichlet(θd)(θdk)EDirichlet(βk)(βkt)
Dirichlet分布的期望公式如下,带入条件概率中,可以得到最终的条件概率公式:
E
D
i
r
i
c
h
l
e
t
(
θ
d
)
(
θ
d
k
)
=
n
d
,
−
i
k
+
α
k
∑
s
=
1
K
n
d
,
−
i
s
+
α
s
E
D
i
r
i
c
h
l
e
t
(
β
k
)
(
β
k
t
)
=
n
k
,
−
i
t
+
η
t
∑
f
=
1
V
n
k
,
−
i
f
+
η
f
p
(
z
i
=
k
∣
w
⃗
,
z
⃗
−
i
)
=
n
d
,
−
i
k
+
α
k
∑
s
=
1
K
n
d
,
−
i
s
+
α
s
⋅
n
k
,
−
i
t
+
η
t
∑
f
=
1
V
n
k
,
−
i
f
+
η
f
\begin{aligned} E_{Dirichlet(\theta_d)}(\theta_{dk})&=\frac{n_{d,-i}^k+\alpha_k}{\sum_{s=1}^Kn_{d,-i}^s+\alpha_s} \\ E_{Dirichlet(\beta_k)}(\beta_{kt})&=\frac{n_{k,-i}^t+\eta_t}{\sum_{f=1}^Vn_{k,-i}^f+\eta_f} \\ p(z_i=k|\vec w, \vec z_{-i})&=\frac{n_{d,-i}^k+\alpha_k}{\sum_{s=1}^Kn_{d,-i}^s+\alpha_s}\cdot\frac{n_{k,-i}^t+\eta_t}{\sum_{f=1}^Vn_{k,-i}^f+\eta_f} \end{aligned}
EDirichlet(θd)(θdk)EDirichlet(βk)(βkt)p(zi=k∣w,z−i)=∑s=1Knd,−is+αsnd,−ik+αk=∑f=1Vnk,−if+ηfnk,−it+ηt=∑s=1Knd,−is+αsnd,−ik+αk⋅∑f=1Vnk,−if+ηfnk,−it+ηt
Gibbs采样训练流程
- 选择合适的主题数K,选择合适的超参数α、η
- 对于语料库中每一篇文档的每一个词,随机的赋予一个主题编号z
- 重新扫描语料库,对于每一个词,利用Gibbs采样公式更新它的topic的编号,并更新语料库中该词的编号
- 重复第三步中基于坐标轴轮询的Gibbs采样,直到Gibbs采样收敛
- 统计语料库中各个文档各个词的主题,得到文档主题分布;然后统计语料库中各个主题词的分布,得到主题与词的分布
Gibbs采样预测流程
- 对应当前文档的每一个词,随机的赋予一个主题编号z
- 重新扫描当前文档,对于每一个词,利用Gibbs采样算法更新它的topic编号
- 重复第二步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛
- 统计文档中各个词的主题,得到该文档主题分布
安装LDA
pip install lda