26[NLP训练营]从LDA文章生成到Gibbs吉布斯采样


公式输入请参考: 在线Latex公式

前言

要搞清楚Gibbs,先要搞清楚通过LDA方法文章是怎么生成的,再反过来考虑怎么从文章里面训练模型,学习参数。
生成文章是一个过程,即process。我们的目标是生成document。也就是用一个生成模型来干这个事情。
从看不见的参数集合,生成看得见的文档。如果是从文档反推是什么参数生成我们的文档,这个过程就是inference。

LDA文章的生成过程(非官方)

第一步:确定主题
这个步骤有两种情况:
a:一个文章只有一个主题(朴素贝叶斯干这个事)
b:一个文章对应多个主题(这个是我们要讨论的)
在这里插入图片描述
第二步:根据主题的分布,生成文章,也就是要生成一堆的单词(类似LDA是不考虑单词的顺序的)
词表是已知的:
在这里插入图片描述
过程大概如下:
循环N次(N为要生成的单词格式)
step1按主题概率分布选择一个主题,例如体育
step2从选定主题中根据词库中的单词在该主题的概率分布选择一个单词,例如篮球

生成过程了解了以后(从主题分布和词表的分布来生成),就是理解反向inference的过程:
我们现在有文档,反推词表分布概率和主题分布概率。LDA是无监督算法(不是分类模型,相对于一个聚类模型),文档不需要任何的标注。LDA通常用于特征工程,例如在情感分析中,可以用LDA算法抽取文章的主题,然后用抽取的主题作为文章的特征向量(和其他特征向量结合在一起)进行下游的情感分析。

生成的例子

假设已知:
在这里插入图片描述
例如生成文档1(Doc1),它的主题分布对应的参数为 θ 1 \theta_1 θ1,用这个参数来采样主题,例如:
在这里插入图片描述
然后根据这些个主题生成单词:
在这里插入图片描述

文章的生成(官方)

K K K:主题的个数
N N N:要生成的文章数量
N i N_i Ni:文章 i i i中的单词数量
θ i \theta_i θi:文章 i i i的主题分布(模型参数,未知,要先生成它,用 α \alpha α来生成它)
Z i j Z_{ij} Zij:第 i i i个文章中第 j j j个单词的主题(隐变量)
α , β \alpha,\beta α,β是超参数,分别生成 θ \theta θ(所有文章的 θ \theta θ都是同一个 α \alpha α生成的)和 ϕ \phi ϕ:词的分布(模型参数)
下图中外面的框代表对文章的循环( N N N次),里面的框代表对文章的单词的嵌套循环(( N i N_i Ni次)
下图红色数字代表依赖关系,其中 w i j w_{ij} wij同时依赖两个玩意,一个是 Z i j Z_{ij} Zij,一个是 ϕ \phi ϕ
在这里插入图片描述
在这里插入图片描述
再贴一个官方图:
在这里插入图片描述

1. α 生 成 θ \alpha生成\theta αθ

首先一个条件是所有的 θ i \theta_i θi对应的主题分布概率累加和为1.
例如:
这个文章主题有3个:
在这里插入图片描述
这里 θ i 1 + θ i 2 + θ i 3 = 1 \theta_{i1}+\theta_{i2}+\theta_{i3}=1 θi1+θi2+θi3=1
第二个条件是: θ i j ∈ [ 0 , 1 ] \theta_{ij}\in [0,1] θij[0,1]
要想生成这样的一个分布就是用狄利克雷Dirichlet distribution分布(当然还有别的方法来做这个事情,例如: θ i = s o f t m a x ( θ i ) \theta_i=softmax(\theta_i) θi=softmax(θi),但是狄利克雷分布比较好计算,刚好有一个参数 α \alpha α,采样出来的东西也满足上面两个条件)。记为:
θ i ∼ D i r ( α ) \theta_i\sim Dir(\alpha) θiDir(α)
如果用高斯分布 θ i ∼ N ( μ , Σ ) \theta_i\sim N(\mu,\Sigma) θiN(μ,Σ)来计算,采样出来的东西不能满足: ∑ θ i = 1 \sum\theta_i=1 θi=1
这里有介绍,要翻墙
https://en.wikipedia.org/wiki/Dirichlet_distribution
这里涉及到一个关于参数生成的一些经验,根据参数的定义域,我们可以选择不同的生成方式,例如,当 θ i ∈ ( 0 , 1 ) , ∑ θ i ≠ 1 \theta_i\in(0,1),\sum\theta_i\ne1 θi(0,1),θi=1则可以选用Gamma分布来生成参数。

2. θ i 生 成 Z i j \theta_i生成Z_{ij} θiZij

Z i j ∼ M u l t i n o m i a l ( θ i ) Z_ij\sim Multinomial(\theta_i) ZijMultinomial(θi)
如果i=3,那么:

3. β 生 成 ϕ \beta生成\phi βϕ

跟上面步骤1一样的,每个 ϕ k \phi_k ϕk的分布累加为1, ϕ k i ∈ [ 0 , 1 ] \phi_{ki}\in [0,1] ϕki[0,1],满足这两个条件可从 β \beta β的狄利克雷分布生成,记为:
ϕ k ∼ D i r ( β ) \phi_k\sim Dir(\beta) ϕkDir(β)

4. Z i j 和 ϕ 生 成 w i j Z_{ij}和\phi生成w_{ij} Zijϕwij

这里和步骤2类似,如下图所示,当 Z i j = 1 Z_{ij}=1 Zij=1时候,从第一列 ϕ 1 \phi_1 ϕ1采样:
在这里插入图片描述
w i j ∼ M u l t i n o m i a l ( ϕ Z i j ) w_ij\sim Multinomial(\phi_{Z_{ij}}) wijMultinomial(ϕZij)

整体生成过程

在这里插入图片描述

Gibbs sampling

Gibbs sampling的由来

由于上面的分析可知,如果要反向估计 { θ , ϕ , Z } \{\theta,\phi,Z\} {θ,ϕ,Z},也就是要求:
P ( θ , ϕ , Z ∣ w , α , β ) P(\theta,\phi,Z|w,\alpha,\beta) P(θ,ϕ,Zw,α,β)
这个是很难求的,只能用近似的方法来求,大概意思就是通过采样来近似,这个方法就是Gibbs sampling。
同时采样多个参数 { θ , ϕ , Z } \{\theta,\phi,Z\} {θ,ϕ,Z}是很困难的,把它展开:
{ θ 1 , θ 2 , . . . ϕ 1 , ϕ 2 , . . . Z 1 , Z 2 , . . . } \{\theta_1,\theta_2,...\phi_1,\phi_2,...Z_1,Z_2,...\} {θ1,θ2,...ϕ1,ϕ2,...Z1,Z2,...}
这个时候如果采样 θ 1 \theta_1 θ1,那么我们假定其他参数是已知的。以此类推。这个采样方法就是Gibbs sampling。类似coordinate descent。

θ i \theta_i θi的采样

根据上面的分析,可以写为:
θ i ∼ P ( θ i ∣ α , Z , w , ϕ , β ) \theta_i\sim P(\theta_i|\alpha,Z,w,\phi,\beta) θiP(θiα,Z,w,ϕ,β)
根据Markov Blanket定理,就是不直接相关的条件(不影响 θ \theta θ,或者不依赖 θ \theta θ)可以去掉,例如:
在这里插入图片描述
这里和A4不直接相关的A8,A3等可以从条件概率中去掉,他们两个的信息包含在了A5里面,所以A5保留,A6A7是由A4生成的,也保留。最后变成:P(A4|A1A2A5A6A7)
在这里插入图片描述
因此,根据上图的生成关系,上面的 θ i \theta_i θi可以写为:
θ i ∼ P ( θ i ∣ α , Z , w , ϕ , β ) = P ( θ i ∣ α , Z ) \theta_i\sim P(\theta_i|\alpha,Z,w,\phi,\beta)\\ =P(\theta_i|\alpha,Z) θiP(θiα,Z,w,ϕ,β)=P(θiα,Z)
由于 θ i \theta_i θi只依赖于当前文章(第 i i i篇文章)的单词,所以其他文章的单词,或者说主题可以不要:
θ i = P ( θ i ∣ α , Z i ⋅ ) \theta_i=P(\theta_i|\alpha,Z_{i\cdot}) θi=P(θiα,Zi)
上面的概率是已知条件中的 α , Z i ⋅ \alpha,Z_{i\cdot} α,Zi,求 θ i \theta_i θi,是明显的后验概率的形式,因此根据我们在学习前面MAP的经验,知道,后验概率正比于likelyhood×先验概率。
这里面likelyhood就是用 θ i \theta_i θi观察到 Z i ⋅ Z_{i\cdot} Zi的概率(写出来就是 P ( Z i ⋅ ∣ θ i ) P(Z_{i\cdot}|\theta_i) P(Ziθi),这个就是上面提到的multinomial),先验概率则是用 α \alpha α生成 θ i \theta_i θi的概率(写出来就是 P ( θ i ∣ α ) P(\theta_i|\alpha) P(θiα)这个就是上面提到的狄利克雷分布 θ i ∼ D i r ( α ) \theta_i\sim Dir(\alpha) θiDir(α)),因此可以得到:
θ i ∝ P ( θ i ∣ α ) P ( Z i ⋅ ∣ θ i ) \theta_i\propto P(\theta_i|\alpha)P(Z_{i\cdot}|\theta_i) θiP(θiα)P(Ziθi)
根据狄利克雷的PDF(概率密度函数)进行展开
在这里插入图片描述
上图来自百度百科
P ( θ i ∣ α ) = 1 B ( α ) ∏ k = 1 K θ i k α k − 1 P(\theta_i|\alpha)=\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\alpha_{k}-1} P(θiα)=B(α)1k=1Kθikαk1
多项式分布(Multinomial Distribution)也可以展开
P ( Z i ⋅ ∣ θ i ) = ∏ j = 1 N i ∏ k = 1 K θ i k I ( Z i j = k ) P(Z_{i\cdot}|\theta_i)=\prod_{j=1}^{N_i}\prod_{k=1}^K\theta_{ik}^{I(Z_{ij}=k)} P(Ziθi)=j=1Nik=1KθikI(Zij=k)
I ( Z i j = k ) I(Z_{ij}=k) I(Zij=k)表示当 Z i j = k Z_{ij}=k Zij=k成立时表达式为1,否则为0.
整理合并:
θ i ∝ 1 B ( α ) ∏ k = 1 K θ i k α k − 1 ∏ j = 1 N i ∏ k = 1 K θ i k I ( Z i j = k ) = 1 B ( α ) ∏ k = 1 K θ i k ∑ j = 1 N i I ( Z i j = k ) + α k − 1 = D i r ( α + ∑ j = 1 N i I ( Z i j = k ) ) \begin{aligned}\theta_i&\propto\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\alpha_{k}-1}\prod_{j=1}^{N_i}\prod_{k=1}^K\theta_{ik}^{I(Z_{ij}=k)}\\ &=\cfrac{1}{\Beta(\alpha)}\prod_{k=1}^K\theta_{ik}^{\sum_{j=1}^{N_i}I(Z_{ij}=k)+\alpha_{k}-1}\\ &=Dir(\alpha+\sum_{j=1}^{N_i}I(Z_{ij}=k))\end{aligned} θiB(α)1k=1Kθikαk1j=1Nik=1KθikI(Zij=k)=B(α)1k=1Kθikj=1NiI(Zij=k)+αk1=Dir(α+j=1NiI(Zij=k))
下面来说下这个公式的意思,现有一个狄利克雷分布来产生参数,然后由观测数据( ∑ j = 1 N i I ( Z i j = k ) + α k − 1 \sum_{j=1}^{N_i}I(Z_{ij}=k)+\alpha_{k}-1 j=1NiI(Zij=k)+αk1)来对参数进行修正。例如刚开始由 α \alpha α生成的参数 θ i ∼ D i r ( α ) \theta_i\sim Dir(\alpha) θiDir(α)是这个样子: α = ( 1 , 1 , 1 , 1 ) \alpha=(1,1,1,1) α=(1,1,1,1)
然后在第 i i i个文章中,有 n i j n_{ij} nij个单词背分类为主题 j j j,例如: n i 1 = 2 , n i 2 = 3 , n i 3 = 2 , n i 4 = 3 , n_{i1}=2,n_{i2}=3,n_{i3}=2,n_{i4}=3, ni1=2,ni2=3,ni3=2,ni4=3,
以上信息是可以从现有数据中统计出来的,修正后: α = ( 1 + 2 , 1 + 3 , 1 + 2 , 1 + 3 ) = ( 3 , 4 , 3 , 4 ) \alpha=(1+2,1+3,1+2,1+3)=(3,4,3,4) α=(1+2,1+3,1+2,1+3)=(3,4,3,4)
最后小结, θ i \theta_i θi的估计可以写为:
θ i ∼ D i r ( α + ∑ j = 1 N i I ( Z i j = k ) ) \theta_i\sim Dir(\alpha+\sum_{j=1}^{N_i}I(Z_{ij=k})) θiDir(α+j=1NiI(Zij=k))

Z的采样

用上面 θ i \theta_i θi的套路,写出 Z i j Z_{ij} Zij(这个玩意是离散值)的概率,
P ( Z i j = k ∣ w i j , ϕ k , θ i ) ∝ P ( Z i j = k ∣ θ i ) ⋅ P ( w i j ∣ Z i j = k , ϕ k ) = θ i k ⋅ ϕ k , w i j = exp ⁡ ( log ⁡ θ i k + log ⁡ ϕ k , w i j ) \begin{aligned}P(Z_{ij}&=k|w_{ij},\phi_k,\theta_i)\\&\propto P(Z_{ij}=k|\theta_i)\cdot P(w_{ij}|Z_{ij}=k,\phi_k)\\ &=\theta_{ik}\cdot\phi_{k,w_{ij}}\\&=\exp(\log\theta_{ik}+\log\phi_{k,w_{ij}})\end{aligned} P(Zij=kwij,ϕk,θi)P(Zij=kθi)P(wijZij=k,ϕk)=θikϕk,wij=exp(logθik+logϕk,wij)

ϕ \phi ϕ的采样略了。。。

小结

吉布斯采样的思想和之前在讲LASSO的时候提到过一个东西很相似,就是coordinate descent,就是固定其他变量,求其中一个变量。吉布斯采样可以用在所有的贝叶斯估计中
在这里插入图片描述
在这里插入图片描述
这个算法是有缺点的:就是参数个数比较多,不断采样上面三个参数,注意是有下标的(例如: Z i j Z_{ij} Zij是和文档中的单词个数有关)
因此我们要想,到底有没有必要对所有的参数进行采样?
其实有些情况是不必要的,例如:一个文档中有6个单词:
在这里插入图片描述
每个单词所属的主题分别是:
在这里插入图片描述
以上就是相当于 Z i j Z_{ij} Zij是知道的, Z i j Z_{ij} Zij就是单词主题的分布,我们就可以用 Z i j Z_{ij} Zij来估计参数 θ i \theta_i θi(文章主题的分布):
在这里插入图片描述
类似也可以用 Z i j Z_{ij} Zij来估计 ϕ \phi ϕ,通过这里例子,我们看到,没有必要采样所有参数,只需要采样 Z i j Z_{ij} Zij,然后用 Z i j Z_{ij} Zij来估计其他参数就可以了。
这样的估计方式就叫做collapsed gibbs sampling。上面用 Z i j Z_{ij} Zij来估计参数 θ i \theta_i θi ϕ \phi ϕ的过程就叫collapsed 或者Integral。(从概率上来看实际就是边缘化的操作)
collapsed gibbs sampling下节分析。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oldmao_2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值