Correlated Topic model 的Gibbs sampling

1.关于经典LDA的 θ

自从David Blei 2003的一篇Latent Dirichlet Allocation文章横空出世之后,LDA模型就火遍全球了,无数的博士生就靠修改这个模型的图模型毕业了,呵呵,当然也包括我在内。在经典的LDA模型中,设置文档的主题分布是服从狄利克雷分布,即 θDir(α) 。这么做的主要原因是为了推导的方便,我们知道主题z是服从多项式分布的,即 zMult(θ) ,此时狄利克雷分布就和多项式构成了共轭分布。为什么便于推导,我们可以感受一下文献[1]中给出的关于 p(z⃗ |α)

p(z⃗ |α)=p(z⃗ |Θ)p(Θ|α)dΘ=[m=1Mk=1Kθnkmm,k][1Δ(α)m=1Mk=1Kθαk1m,k]dθ⃗ m=1Δ(α)m=1Mk=1Kθnkm+αk1m,kdθ⃗ m=m=1MΔ(n⃗ m+α⃗ )Δ(α⃗ ),n⃗ m={nkm}Kk=1,Δ(α)=[Γ(α)]KΓ(Kα)

这里写图片描述
上式中,很明显看到两个中括号中的形式非常相似,右边的中括号里的是狄利克雷分布,左边中括号里的是似然函数,是由多项式分布组织起来。这就是共轭分布的好处, 推理简单。然而,我们令 θ 服从狄利克雷分布的一个缺陷就是,不能建模各个主题的关系,这是由狄利克雷分布的性质导致的。下面我们我们介绍David Blei在2006年提出的一个新的模型Correlated Topic model。

2.Correlated Topic Model中的 θ

在实际中,主题之间并不是不相关的。例如一篇文档中如果有跟遗传学(genetics)有关的主题,那么非常有可能该篇文档也会涉及健康(health)以及疾病(disease)主题。而经典LDA中的狄利克雷分布,由于该分布自身的局限性,并不能很好的建模topics之间的correlation。为了解决这个问题,David Blei在2006年提出了Correlated Topic model(简称CTM)[2],该模型为了考虑主题之间的关系,摒弃了标准LDA模型中的先验狄利克雷分布,而是使logistic Normal分布,使用正态分布中的协方差矩阵 Σ 建模各个主题之间的关系。具体地一篇文档 d 的生成过程如下:

ηdN(μ,Σ),θkd=eηkdKj=1eηjd,n{1,...,Nd}:zdnMult(θd),wdnMult(Φzdn)

这里写图片描述
在文中,作者指出,该模型比LDA模型更具有表现力(expressive)。然而,问题来了,此时的先验与多项式分布并不是共轭分布,因此这会给模型求解带来了更大的困难(呵呵,这个世界总是不完美的)。Blei在文中使用的是近似推理(approximate techniques),也就是依赖于unwarranted mean-field assumptions的变分推理(variational inference)。此时,如果mean-field假设做的不好的话,那么近似的结果可能会令人unsatisfactory[3]。因此,近年来,有多位学者试图使用Gibbs sampling的方法来求解CTM模型。代表做有文献[3][4]。文献[4]中的作者还强调了:Gibbs sampling is more accurate than variational inference and better supports the construction of composite models。关于and后面一句我的理解是:我们如果对LDA模型进行各种改进,使用Gibbs sampling的话求解不会困难太多,但是如果使用变分的话,推理起来可能就难度特别大。本文主要参考文献[3]介绍一下,CTM模型的吉布斯抽样方法。

3. CTM的Gibbs sampling

首先我们给出标准LDA模型中关于主题 z 的抽样公式:

p(zdn=k|z⃗ n,wdn=t,w⃗ dn)=C(t)k,n+βtVj=1[C(j)k,n+βt]C(k)m,n+αk[Kk=1C(k)m+αk]1(1)

3.1 CTM中关于主题 z 的采样

按照文献[3],我们直接给出CTM模型中关于主题z的抽样公式,如下:

p(zdn=k|z⃗ n,wdn=t,w⃗ dn)=C(t)k,n+βtVj=1[C(j)k,n+βt]eηkdKj=1eηjd(2)

对比公式(1)和公式(2),我们发现区别就在于等式右边的第二项,二者都表示文档 d 中主题k所占的比例,但是因为所使用的先验不同,导致最终的式子不同。在标准LDA中,因为我们可以将 θ 积分掉(一般文献里称为integrated out),所以我们不需要对 θ 进行抽样,而在CTM中,因为是非共轭先验,所以 θ 积不掉,也就是 η 积不掉,因此我们需要对 η 进行抽样,这也就是使用Gibbs sampling求解CTM模型的核心。

3.2 CTM中关于文档主题分布参数 η 的后验分布

在文档 d 中观测到主题k的概率为:

p(zdn=k)=eηkdKj=1eηjd(3)

很明显,在给定 Z 的情况下,这是一个多项式逻辑回归,Z是多项式观测值(multinomial observations)。因此观测到所有文档中的主题的似然概率函数为:
p(Z|η)=d=1Dn=1NdeηzdndKj=1eηjd(4)

加上先验, η 的后验分布为:
p(η|Z,W)d=1Dn=1NdeηzdndKj=1eηjdN(ηd|μ,Σ)(5)

公式(5)就是一个贝叶斯逻辑回归模型。因此我们可以在现有文献中寻找求解多项式逻辑回归模型的方法来抽样 eta ,例如文献[4]中提出可以参考文献[5]中的方法。本文主要介绍文献[3]中年给出的方法。这里为了方便描述,我们只考虑文档 d (事实上,在给定Z的情况下,其它文档对文档 d 的主题分布参数ηkd并没有影响,因此我们可以treat documents seperately)。依据文献[6],可以得到在能够观测到 Z 以及ηkd的情况下 ηkd 的似然函数,如下所示:
L(ηkd|Zd,ηkd)=n=1Nd(eρkd1+eρkd)zkdn(11+eρkd)1zkdn=(eρkd)Ckd(1+eρkd)Nd(6)

其中 ρkd=ηkdζkd ; ζkd=log(jkeηjd) ;并且 Ckd=Ndn=1zkdn 表示文档 d 中属于主题k的单词的数量。因此,加上 ηkd 的先验分布,我们就可以得到 ηkd 的后验分布,如下所示:
p(ηkd|ηkd,Z,W)L(ηkd|ηkd,Z)N(ηkd|μkd,σ2k)(7)

其中 μkd=μkΛ1kkΛk,k(ηkdμk) 以及 σ2k=Λ1kk Λ=Σ1 是正态分布的precision matrix。

3.3 CTM中关于文档主题分布参数 η 的Gibbs sampling

上一小节给出了文档主题分布参数 ηkd 的后验分布。因为非共轭性,导致我们无法直接根据后验分布形式进行采样。一般情况下,我们可以采用MH(Metropolis-Hastings)算法对参数 ηkd 进行采样,但是MH算法会存在两个问题:一个是我们需要指定一个合理建议分布(proposal distribution),这个不太好办;另一个就是接受率的问题,如果接受率过低会导致最终的采样非常缓慢。另一个种根据此后验分布进行采样的思路就是使用Data augmentation技术。例如文献[4]中使用的数据增加方法使得我们可以截断高斯分布中进行采样,但是文献[3]指出,该方法依然涉及到复杂的accept/reject strategies。本文介绍文献[3]中提出的方法,它是一个不需要指定建议分布并且简单精确地抽样方法,方法核心是参考文献[7]。首先根据文献[7]我们可以给出如下定理。

定理1(Scale Mixture Representation).似然函数 L(ηkd|ηkd,Z) 可以表示为

(eρkd)Ckd(1+eρkd)Nd=12Ndeκkdρkd0eλkd(ρkd)22p(λkd|Nd,0)dλkd

其中 κkd=CkdNd/2 并且 p(λkd|Nd,0) 是Polya-Gamma分布 PG(Nd,0)

其中是 λkd 辅助变量。从该定理中,我们很容易可以发现 p(ηkd|ηkd,Z,W) 是公式(8)联合分布 p(ηkd,λkd|ηkd,Z,W) 的边缘分布。

p(ηkd,λkd|ηkd,Z,W)12Ndexp(κkdρkdλkd(ρkd)22)N(ηkd|μkd,σ2k)(8)

基于公式(8),我们就可以交替采样 ηkd λkd 。在给定 λkd 的情况下(即discarding辅助变量),我们就可以根据后验分布 p(ηkd|ηkd,Z,W) 得到采样样本。具体地, 对于 ηkd ,有:
p(ηkd|ηkd,Z,W,λkd)exp(κkdηkdλkd(ρkd)22)N(ηkd|μkd,σ2k)=N(ηkd|γkd,(τkd)2)(9)

其中后验均值为 γkd=(τkd)2(μkdσ2k+κkd+λkdζkd) 并且后验分布的方差为 (τkd)2=(1σ2k+λkd)1 。这时候,从一元正态分布中进行采样就变得极其简单了,一般都有现成的采样代码。
对于 λkd ,有:
p(λkd|η,Z,W,)exp(λkd(ρkd)22)p(λkd|Nd,0)=PG(λkd;Nd,ρkd)(10)

可以很容易看出, λkd 的后验分布依然是ploya-Gamma分布。剩下的就是关于如何从PG分布中进行采样了。文献[7]中给出了一种从PG中进行采样的方法。

定理2(PG分布的可加性)假如 xiPG(1,ρ) 并且 y=ni=1xi ,那么有 yPG(n,ρ)

因此从 PG(Nd,ρkd) 中采样就是从 PG(1,ρkd) 抽样 Nd 个样本然后想加就是我们需要的 λkd Nd 一般是文档 d 中单词的数量。因为Nd经常是非常大,这会导致抽样变得非常慢,所以也可以取 MNd 个样本来代替,一般效果也不会太大。文献[7]同时给出了如何高效地从 PG(1,ρkd) 中抽取样本。
虽然文献[7]中的方法已经很赞,但是这里我们要介绍的文献[3]中的方法更加地赞。根据中心极限定理,当 Nd 足够大时, y 服从正态分布。即有:

λkdN(mkd,(nkd)2)(11)

文献[8]中给出了 PG(a,c) 分布的矩母函数为

f(t)=E[exp(λkdt)]=cosha(c/2)cosha(c22t2)(12)

因此我们可以根据矩母函数求解 PG(a,c) 分布的均值和方差,并将此均值方差当做正态分布的均值和方差。
E[λkd]=limt0f(t)=a2ctanh(c2)(13)E[(λkd)2]=limt0f′′(t)=a((2+a)c2+ac2cosh(c)+2csinh(c))8c4[cosh(c2)]2(14)

根据 Var(λkd)=E[(λkd)2][E[λkd]]2 就可以求得正态分布的近似方差。公式(14)得保证 c0 ,当 c=0 时,我们可以通过求极限的方式来计算均值和方差。例如:
limc0a2ctanh(c2)=a2limc0tanh(c2)c=a4
最后一步是通过洛必达法则实现的。同理可以得到方差为 a24 。(Note:关于如何从PG中进行精确采样可以参考 这里的java包。)
到这里,整个CTM的Gibbs推导就介绍完了,再下一小节我们介绍如何采样 η 的先验正态分布中的参数。

3.4 CTM中对先验分布 μ Σ 的采样

我们将 μ Σ 也看成是随机变量,并且再上面加共轭的Normal-Inverse-Wishart先验,即 π(μ,Σ)=NIW(μ0,ρ,κ,W) ,具体为:

Σ|κ,W1IW(κ,W1),μ|Σ,μ0,ρN(μ0,Σ/ρ)(15)

根据观测到的 η Z ,我们可以求得μ Σ 的后验分布,如下所示:
p(μ,Σ|η,Z,W)π(μ,Σ)dp(ηd|μ,Σ)=NIW(μ0,ρ,κ,W)(16)

具体地参数更新公式为: μ0=ρρ+Dμ0+Dρ+Dη¯ ρ=ρ+D κ=κ+D 并且 W=W+Q+ρDρ+D(η¯μ0)(η¯μ0)T ,其中 η¯=1Ddηd 以及 Q=d(ηdη¯)(ηdη¯)T
关于这四个参数的初始化可以设: ρ=κ=0.01D,μ0=0,andW=κI

全文终。

[1] Gregor Heinrich, Parameter estimation for text analysis
[2] David Blei, Correlated Topic Models
[3] Jianfei Chen, Jun Zhu, et al., Scalable Inference for Logistic-Normal Topic Models
[4] David Mimno et al., Gibbs Sampling for Logistic Normal Topic Models with Graph-Based Priors
[5] P. C. Groenewald & L. Mokgatlhe. Bayesian computation for logistic regression
[6] C. Holmes and L. Held. Bayesian auxiliary variable models for binary and multinomial regression
[7] N. G. Polson, J. G. Scott, and J. Windle. Bayesian inference for logistic models using Polya-Gamma latent variables
[8] N. G. Polson and J. G. Scott. Default bayesian analysis for multi-way tables:
a data-augmentation approach

已标记关键词 清除标记
相关推荐
<p> <strong><span style="font-size:24px;">课程简介:</span></strong><br /> <span style="font-size:18px;">历经半个多月的时间,</span><span style="font-size:18px;">Debug</span><span style="font-size:18px;">亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。</span><span></span> </p> <p> <span style="font-size:18px;">其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,</span><span style="font-size:18px;">Debug</span><span style="font-size:18px;">还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程!</span><span></span> </p> <p> <br /> </p> <p> <span style="font-size:24px;"><strong>核心技术栈列表</strong></span><span style="font-size:24px;"><strong>:</strong></span> </p> <p> <br /> </p> <p> <span style="font-size:18px;">值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括</span><span style="font-size:18px;">Spring Boot</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Spring MVC</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Mybatis</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Mybatis-Plus</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Shiro(</span><span style="font-size:18px;">身份认证与资源授权跟会话等等</span><span style="font-size:18px;">)</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Spring AOP</span><span style="font-size:18px;">、防止</span><span style="font-size:18px;">XSS</span><span style="font-size:18px;">攻击、防止</span><span style="font-size:18px;">SQL</span><span style="font-size:18px;">注入攻击、过滤器</span><span style="font-size:18px;">Filter</span><span style="font-size:18px;">、验证码</span><span style="font-size:18px;">Kaptcha</span><span style="font-size:18px;">、热部署插件</span><span style="font-size:18px;">Devtools</span><span style="font-size:18px;">、</span><span style="font-size:18px;">POI</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Vue</span><span style="font-size:18px;">、</span><span style="font-size:18px;">LayUI</span><span style="font-size:18px;">、</span><span style="font-size:18px;">ElementUI</span><span style="font-size:18px;">、</span><span style="font-size:18px;">JQuery</span><span style="font-size:18px;">、</span><span style="font-size:18px;">HTML</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Bootstrap</span><span style="font-size:18px;">、</span><span style="font-size:18px;">Freemarker</span><span style="font-size:18px;">、一键打包部署运行工具</span><span style="font-size:18px;">Wagon</span><span style="font-size:18px;">等等,如下图所示:</span><span></span> </p> <img src="https://img-bss.csdn.net/201908070402564453.png" alt="" /> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:24px;">课程内容与收益</span><span style="font-size:24px;">:</span><span></span> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070403452052.png" alt="" /> </p> <p> <span style="font-size:18px;">总的来说,</span><span style="font-size:18px;">本课程是一门具有很强实践性质的“项目实战”课程,即“</span><span style="font-size:18px;">企业应用员工角色权限管理平台</span><span style="font-size:18px;">”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于</span><span style="font-size:18px;">Shiro</span><span style="font-size:18px;">的资源授权实现员工</span><span style="font-size:18px;">-</span><span style="font-size:18px;">角色</span><span style="font-size:18px;">-</span><span style="font-size:18px;">操作权限、员工</span><span style="font-size:18px;">-</span><span style="font-size:18px;">角色</span><span style="font-size:18px;">-</span><span style="font-size:18px;">数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图:</span> </p> <p> <span></span> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070404285736.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p> <span style="font-size:18px;"><strong>以下为项目整体的运行效果截图:</strong></span> <span></span> </p> <img src="https://img-bss.csdn.net/201908070404538119.png" alt="" /> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405002904.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405078322.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405172638.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405289855.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405404509.png" alt="" /> </p> <p> <br /> </p> <p> <img src="https://img-bss.csdn.net/201908070405523495.png" alt="" /> </p> <p> <br /> </p> <p> <br /> </p> <p> <br /> </p> <p style="text-align:left;"> <span style="font-size:18px;">值得一提的是,在本课程中,</span><span style="font-size:18px;">Debug</span><span style="font-size:18px;">也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:</span><span></span> </p> <img src="https://img-bss.csdn.net/201908070406328884.png" alt="" /> <p> <br /> </p>
<p> <strong><span style="background-color:#FFFFFF;color:#E53333;font-size:24px;">本页面购买不发书!!!仅为视频课购买!!!</span></strong> </p> <p> <strong><span style="color:#E53333;font-size:18px;">请务必到</span></strong><a href="https://edu.csdn.net/bundled/detail/49?utm_source=banner"><strong><span style="color:#E53333;font-size:18px;">https://edu.csdn.net/bundled/detail/49</span></strong></a><strong><span style="color:#E53333;font-size:18px;">下单购买课+书。</span></strong> </p> <p> <span style="font-size:14px;">本页面,仅为观看视频页面,如需一并购买图书,请</span><span style="font-size:14px;">务必到</span><a href="https://edu.csdn.net/bundled/detail/49?utm_source=banner"><span style="font-size:14px;">https://edu.csdn.net/bundled/detail/49</span></a><span style="font-size:14px;">下单购买课程+图书!!!</span> </p> <p> <br /> </p> <p> <span style="font-size:14px;">疯狂Python精讲课程覆盖《疯狂Python讲义》全书的主体内容。</span> </p> <span style="font-size:14px;">内容包括Python基本数据类型、Python列表、元组和字典、流程控制、函数式编程、面向对象编程、文件读写、异常控制、数据库编程、并发编程与网络编程、数据可视化分析、Python爬虫等。</span><br /> <span style="font-size:14px;"> 全套课程从Python基础开始介绍,逐步步入当前就业热点。将会带着大家从Python基础语法开始学习,为每个知识点都提供对应的代码实操、代码练习,逐步过渡到文件IO、数据库编程、并发编程、网络编程、数据分 析和网络爬虫等内容,本课程会从小案例起,至爬虫、数据分析案例终、以Python知识体系作为内在逻辑,以Python案例作为学习方式,最终达到“知行合一”。</span><br />
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页