LDA主题模型
几种早期的文本模型
TF-IDF
TF-IDF文本模型是早期文本模型的代表之一,TF-IDF公式的计算是对两个部分进行乘积,第一个部分称为词频部分(即TF部分),用来表示文本中某个词在该文本中出现的频率,计算上是用该词在该文本中出现的次数除以该文本包含的词的个数;第二个部分称为逆文本部分(即IDF部分),用来表示在语料库中有多少篇文本包含了这个词,计算上是用总文本数除于含该词的文本数再取对数,两个部分的计算公式以及总的计算公式如下(i代表词语,j代表文本,(i,j)代表第j个文本的第i个词):
t
f
i
,
j
=
n
i
,
j
∑
k
n
k
,
j
i
d
f
i
=
l
o
g
∣
D
∣
∣
{
j
:
t
i
∈
d
j
}
∣
(
t
f
−
i
d
f
)
i
,
j
=
t
f
i
,
j
∗
i
d
f
i
tf_{i,j}=\frac{n_{i,j}}{\sum_kn_{k,j}} \\idf_i=log\frac{|D|}{|\{j:t_i\in d_j\}|} \\(tf-idf)_{i,j}=tf_{i,j}*idf_i
tfi,j=∑knk,jni,jidfi=log∣{j:ti∈dj}∣∣D∣(tf−idf)i,j=tfi,j∗idfi
计算好每个词的tf-idf值之后,我们就可以对目标语料库进行建模了。假设语料库中有N篇文档,M个不同的词,那么我们就可以建立一个M * N的矩阵,每一列代表一篇文档,每一行代表某个词在这篇文档中对应的tf-idf值,到此建模就完成啦。我们发现无论每篇包含多少个词,这样建模后每篇文档都被表示成了一个同样长度的向量,向量的每个值就是对应词的tf-idf值。建模矩阵如下图所示:
Unigram文本模型
文档中的每个词都是从一个单独的多项分布中独立采样而得的,是概率文本模型中最简单的情形,其概率模型图如下所示:
文本中词语的概率生成公式为:
p
(
w
)
=
∏
n
=
1
N
p
(
w
n
)
p(w)=\prod_{n=1}^Np(w_n)
p(w)=n=1∏Np(wn)
mixture of unigrams
在Unigram文本模型引入了一个服从离散分布的隐变量Z。在这个模型中,文本的生成过程是先选择一个主题z,然后从条件多项分布p(w|z)中独立地生成N个词,以此来构建出文本。该模型的概率模型图如下所示:
文本生成的概率公式为:
p
(
w
)
=
∑
z
p
(
z
)
∗
∏
n
=
1
N
p
(
w
n
∣
z
)
p(w)=\sum_z p(z)*\prod_{n=1}^Np(w_n|z)
p(w)=z∑p(z)∗n=1∏Np(wn∣z)
从这个过程中我们可以看出,该模型假定了每篇文档只能属于一个主题,这使得该模型在实际的文本建模中非常受限制,因为一篇文档往往属于多个主题。
pLSI
pLSI文本模型是在LDA提出之前最“先进”的文本模型,它打破了mixture of unigrams文本模型中“每篇文档只能有一个主题”的束缚,通过引入文本变量来使得对于一个特定的目标文本,可以有多个主题以加权的形式结合在一起。它的概率图模型如下图所示:
这里我们可以看到,在pLSI中,词语和文档向量都是观测变量,主题的生成取决于文档里面有什么词语。也就是说,在训练这个文本模型的时候,模型里面的主题词只能来自于训练集中的文档,用到测试集的时候可能提取到的主题都是有范围的了,即只能提取出在训练集文档中出现过的词语。所以从这点来看,pLSI文本模型并不是一个泛化能力很好的模型,对于一个里面大部分词都没在训练集文档中出现过的“未知”文档,它会显得很无能为力。pLSI另一个很严重的问题是,由于产生的主题由训练集中文档的信息来决定,所以随着训练集中文档数目的增长,所需要训练的参数也就跟着线性增长,而在机器学习的算法中,参数过多意味着会发生过拟合,这是一个严重的问题。
Latent Dirichlet allocation
概率图模型
LDA生成词的过程:
语料库中M个文档:
1.令N服从泊松分布
2.令
θ
\theta
θ服从狄利克雷分布
3.对于每个文档中的N个词每个词
w
n
w_n
wn
(a)一篇文档的摸个主题
z
n
z_n
zn服从Multinomial分布
(b)通过多项分布
z
n
z_n
zn来选择一个词
w
n
w_n
wn
符号与术语
词word为离散数据的一个基本单位,使用一个{1,…,V}的词表索引。其中的V是整个语料库中的词的个数。
θ
、
w
、
z
\theta 、w、z
θ、w、z的联合分布的概率计算公式:
对于上面的这个公式,我们可以对
θ
\theta
θ 进行积分(因为
θ
\theta
θ 服从的是连续分布)并对z进行求和(因为z服从的是离散分布),这样就可以得到一个文档生成的概率公式:
最后,我们把训练用的语料库中所有的文档的生成的概率公式都作为联合分布的关系乘到一块,便得到了生成整个语料库的概率公式:
LDA中的参数估计
LDA对应的概率图模型:
我们现在使用LDA面临的首要问题是推断给定文档的隐变量z的后验概率。
p
(
θ
,
z
∣
w
,
α
,
β
)
=
p
(
θ
,
z
,
w
∣
α
,
β
)
p
(
w
∣
α
,
β
)
p(\theta,z|w,\alpha,\beta)=\frac{p(\theta,z,w|\alpha,\beta)}{p(w|\alpha,\beta)}
p(θ,z∣w,α,β)=p(w∣α,β)p(θ,z,w∣α,β)这个分布通常很难去计算,我们首先边缘化隐变量并写入
展开可得:
现在我们要考虑的是求解LDA模型中的参数,让其能够应用到未知的文本中。由于LDA文本模型主要用来提取文本主题,我们要求解的主要参数是主题变量z的后验分布P(z|w)的参数。直接去计算这个概率是很困难的,主要是由于参数数目过多以及参数之间的互相组合、嵌套,有很多方法可以用来求解这种困难的参数,依据论文的内容,本文主要介绍用变分推断来求解的方法。
变分推断
LDA中的变分分布为:
其中的
γ
j
\gamma_j
γj和
π
j
\pi_j
πj是自由变分参数
我们现在要求解
θ
\theta
θ和z的后验分布参数,所以我们分别定义两个近似函数:
我们现在从文档层次来进行变分推断,从文档j来看,q对p的KL divergence是
D
(
q
∣
∣
p
)
=
∫
θ
j
∑
z
j
q
(
z
j
,
θ
j
∣
γ
j
,
π
j
)
l
o
g
q
(
z
j
,
θ
∣
γ
j
,
π
j
)
p
(
z
j
,
θ
j
∣
w
j
,
α
,
Φ
)
d
θ
j
D(q||p)=\int_{\theta_j}\sum_{z_j}q(\bf z_j,\theta_j|\gamma_j,\pi_j)log\frac{q( z_j,\theta|\gamma_j,\pi_j)}{p(z_j,\theta_j|\bf w_j,\alpha,\Phi)}d\theta_j
D(q∣∣p)=∫θjzj∑q(zj,θj∣γj,πj)logp(zj,θj∣wj,α,Φ)q(zj,θ∣γj,πj)dθj
然后将其重写为:
其中,
l
o
g
p
(
w
j
∣
α
,
Φ
)
log p(\bf w_j|\alpha,\Phi)
logp(wj∣α,Φ)对于q是固定的,所以我们现在要最小化前面的部分:
对期望中的函数进行拆分:
L
(
γ
j
,
ϕ
j
∣
α
,
β
)
=
E
q
[
l
n
p
(
θ
j
∣
α
)
]
+
E
q
[
l
n
p
(
z
j
∣
θ
j
)
]
+
E
q
[
l
n
p
(
w
j
∣
z
j
,
Φ
)
]
−
E
q
[
l
n
p
(
θ
j
∣
γ
j
)
]
−
E
q
[
l
n
p
(
z
j
∣
π
j
)
]
\mathcal L(\gamma_j,\phi_j|\alpha,\beta)=E_q[lnp(\theta_j|\alpha)]+E_q[lnp(z_j|\theta_j)]\\+E_q[lnp(w_j|z_j,\Phi)]-E_q[lnp(\theta_j|\gamma_j)]-E_q[lnp(z_j|\pi_j)]
L(γj,ϕj∣α,β)=Eq[lnp(θj∣α)]+Eq[lnp(zj∣θj)]+Eq[lnp(wj∣zj,Φ)]−Eq[lnp(θj∣γj)]−Eq[lnp(zj∣πj)]
先引入一个公式如果x服从dirchlet分布则:
E
[
x
1
]
=
α
i
∑
α
i
E
[
l
n
x
i
]
=
Ψ
(
α
i
)
−
Ψ
(
∑
α
i
)
其
中
:
Ψ
(
x
)
=
d
l
n
[
Γ
(
x
)
]
d
x
=
Γ
′
(
x
)
Γ
(
x
)
E[x_1]=\frac{\alpha_i}{\sum \alpha_i} \\ E[lnx_i]=\Psi(\alpha_i)-\Psi(\sum\alpha_i) \\其中:\Psi(x)=\frac{dln[\Gamma(x)]}{dx}=\frac{\Gamma'(x)}{\Gamma(x)}
E[x1]=∑αiαiE[lnxi]=Ψ(αi)−Ψ(∑αi)其中:Ψ(x)=dxdln[Γ(x)]=Γ(x)Γ′(x)
如
E
q
[
l
o
g
p
(
θ
j
∣
α
)
]
E_q[log p(\theta_j|\alpha)]
Eq[logp(θj∣α)]展开为:
我们将上式转换为指数族分布的形式
a
(
γ
j
)
=
∑
i
=
1
k
l
o
g
Γ
(
γ
j
,
j
)
−
l
o
g
Γ
(
∑
i
=
1
γ
j
,
i
)
a(\gamma_j)=\sum_{i=1}^k log \Gamma(\gamma_{j,j})-log\Gamma(\sum_{i=1}\gamma_{j,i})
a(γj)=i=1∑klogΓ(γj,j)−logΓ(i=1∑γj,i)
由此q的期望可以写成,这其中的
Ψ
\Psi
Ψ为digamma函数log gamma函数的一阶导:
我们将ELOB中的每一项展开可以得到:
接下来我们可以用拉格朗日数乘法用
π
\pi
π来对ELOB进行最大化。π的限制条件加和为1:
对π求偏导得:
令偏导为0:
对于
γ
j
,
i
\gamma_{j,i}
γj,i没有限制条件我们有:
对gamma求偏导可以得到:
令偏导等于0,解得
γ
j
,
i
=
α
i
+
∑
t
=
1
N
j
π
j
,
t
,
i
\gamma_{j,i}=\alpha_i+\sum_{t=1}^{N_j}\pi_{j,t,i}
γj,i=αi+t=1∑Njπj,t,i
变分参数优化的过程为:
对于每个i(主题)和n(词)初始化
π
n
i
0
=
1
k
\pi_{ni}^0=\frac1k
πni0=k1
对于每个i(主题)初始化
γ
i
=
α
i
+
N
/
k
\gamma_i=\alpha_i+N/k
γi=αi+N/k
repeat t
for n=1 to N //遍历每个词
for i=1 ot k //遍历每个主题
pi[n][i][t+1]=beta[i][wn]exp(Psi(gamma[i][t]))
sum(pi[n][i][t+1],1,k)=1
gamma[t+1]=alpha+sum(pi[n][t+1],1,N)
变分算法
现在我们已经推导出了对每个文档j,最小化KL divergence 的更新:
π
j
,
t
,
i
∝
ϕ
i
,
w
j
,
t
e
x
p
(
Ψ
(
γ
j
,
i
)
−
Ψ
(
∑
k
=
1
K
γ
j
,
k
)
)
γ
j
,
i
=
α
i
+
∑
t
=
1
N
j
π
j
,
t
,
i
\pi_{j,t,i}\propto \phi_{i,w_{j,t}}exp(\Psi(\gamma_{j,i})-\Psi(\sum_{k=1}^K\gamma_{j,k})) \\ \gamma_{j,i}=\alpha_i+\sum_{t=1}^{N_j}\pi_{j,t,i}
πj,t,i∝ϕi,wj,texp(Ψ(γj,i)−Ψ(k=1∑Kγj,k))γj,i=αi+t=1∑Njπj,t,i
我们现在的推断是在每个文档j的层次上的,作者推断迭代次数为线性的O(
N
j
N_j
Nj)即每个文档的长度。
虽然在这个过程中可以找到的参数γj代替模型的潜在变量θj,但是它没有直接找到模型参数Φ(实际主题)。 作者提出了用于估计该参数的变分期望最大化(变分EM)。 基本思想是:对每个文档j运行先前的变分推理方法,直到收敛。 然后,使用这些固定的变分参数,在给定这些固定的变分参数的情况下更新模型参数Φ的估计值。 迭代地完成这两个步骤,直到对数似然的下限收敛。
E步:最小化KL(q||p):
π
j
,
t
,
i
∝
ϕ
i
,
w
j
,
t
e
x
p
(
Ψ
(
γ
j
,
i
)
−
Ψ
(
∑
k
=
1
K
γ
j
,
k
)
)
γ
j
,
i
=
α
i
+
∑
t
=
1
N
j
π
j
,
t
,
i
\pi_{j,t,i}\propto \phi_{i,w_{j,t}}exp(\Psi(\gamma_{j,i})-\Psi(\sum_{k=1}^K\gamma_{j,k})) \\ \gamma_{j,i}=\alpha_i+\sum_{t=1}^{N_j}\pi_{j,t,i}
πj,t,i∝ϕi,wj,texp(Ψ(γj,i)−Ψ(k=1∑Kγj,k))γj,i=αi+t=1∑Njπj,t,i
M步:利用新的q来重新估计参数
Φ
\Phi
Φ
ϕ
i
,
v
∝
∑
j
=
1
M
∑
t
=
1
N
j
π
j
,
t
,
i
1
(
w
j
,
t
=
v
)
\phi_{i,v}\propto \sum_{j=1}^M\sum_{t=1}^{N_j}\pi_{j,t,i}\Bbb1(w_{j,t}=v)
ϕi,v∝j=1∑Mt=1∑Njπj,t,i1(wj,t=v)
其中
1
(
∗
)
为
若
符
合
条
件
为
1
否
则
为
0
\Bbb1(*)为若符合条件为1否则为0
1(∗)为若符合条件为1否则为0