http://hi.baidu.com/flyer_hit/blog/item/2ec12d251dd9dd6835a80f55.html

http://blog.csdn.net/feixiangcq/archive/2010/06/06/5650672.aspx

http://fan.cos.name/cn/2010/10/fan16/

http://hi.baidu.com/flyer_hit/blog/item/84d29a733c7751148701b089.html

LDA是比PLSA更“高级”的一种topic model。“高级”在哪里呢?--它是一个Bayes Hierarchy Model。

所谓Bayes Hierarchy Model说白了就是把模型的参数看作随机变量,这样可以引入控制参数的参数。说起来,比价绕。

Topic model的一个通式为

P(w|d) = sigma{ p(w|z)*p(z|d) }

其中云里雾里的topic,说白了就是一个一元语言模型,没有任何特殊的地方。对应上面的公式,就是 p(w|z)。

而topic model,一般指的是两种分布:第一种就是topic~word的分布,就是p(w|z)。

第二种是p(z|d),这个是doc~topic分布。

有了这两种分布后,这个文档集合就有了一种立体化的感觉,闭上眼睛,仔细地想:

doc

|

----------------------------------------

|                       | ...                     |

topic_1            topic_2              topic_m

topic_i

|

----------------------------------------

|                       | ...                     |

word_1            word_2              word_n

一个三层的文档表示空间跃然纸上。

而最上层,就是人们常说的“降维”,其实是把文档投影到了“topic”空间。

doc~topic~word

这个Bayes Chain,就可以涵盖LDA的一个最基本的思想。

而PLSA其实也是这个链,那它和LDA有什么区别呢?

最大的区别就在于,doc~topic这一级,PLSA把这一级的所有变量都看作模型的参数,即有多少文档那么就有多少模型的参数;而LDA引入了一个超 参数,对doc~topic这一个层级进行model。这样无论文档有多少,那么最外层模型显露出来的[对于doc~topic]就只有一个超参数。

那么加什么先验呢?

最基本的PLSA和LDA在刻画doc~topic和topic~word都利用了一个模型,就是multinomial model。为了计算的方便及先验的有意义,共轭先验是首选。multinomial distribution的共轭分布是Dirichlet distribution,很nice的一个分布。这也是Latent Dirichlet Allocation中Dirichlet的由来。

Dirichlet prior是一个巨牛的先验:

Bayes prior smoothing的先验也是Dirichlet,因为在一元语言模型中,也采用了multinomial来刻画。

而且在PLSA中引入的先验也是Dirichlet。那么它到底有什么好处呢?让大家这么对它着迷。计算简单性是大家都知道的,现在说一点它的奇妙的implict idea:

拿Bayes prior smoothing说:

P(w|d) = {c(w,d)+mu*p(w|c)} / {|d| + mu}

而最大似然的估计是

P_ml(w|d) = c(w,d) / |d|

平滑后的分母为c(w,d)+mu*p(w|c){原来为c(w,d)}

平滑后的分子为|d| + mu {原来为|d|}

所以奇妙的地方就在不同的地方:

好像文档多了mu个词,在这个mu新词中,有mu*p(w|c)这么多的w

这就是pseudo count的思想。理解了这个以后,PLSA加先验的推导,就不用再手推了。只要把这些多出来的先验词加上。一切就OK了。

所以大家请记住吧,这对巨牛的共轭先验multinomial & Dirichlet

那么如何推导LDA的那些参数呢?

大体有两种方法:一种是作者的varitional inference;另外一种是Gibbs Sampling。

我比较熟悉的是Gibbs Sampling。大家可以上网去搜GibbsLDA的源代码。

只要学会了Gibbs Sampling,那么这个代码很简单。

Gibbs Sampling的一个最大的优点就是很好理解。具体理解部分略去。

回到上面的话题:

在这个层级结构中:doc~topic~word,刚才说到LDA是对(doc~topic)加了一个先验。然后他是如何利用这个先验的呢?利用了exchangabiltity。所谓可交换性,就是conditional independent and identically distributed;注意与i.i.d的区别,“conditional”

对应到LDA中,是那个超参数给定后,才能得出i.i.d。。。需要自己看paper理解。

在我给定了doc~topic的先验后,对于一个文档,我取不同的topic的过程完全是独立的。

这也是层级模型的一个很优美的地方。

Worker

\                     \       ...            \

product_1     product_2      product_m

举个直白的例子,一旦当一个工人生产能力确定后,那么那么下面它所生产出来个各种产品都是conditional independent and identically distributed

可交换性其实是当我们信息不充足的时候的一个比较优美的假设,既然我们什么都不知道。那么我们就认为给定它的上级后,下面的东西都conditional independent and identically distributed

再举一个形象的例子,大家如果是懒人的话就会把袜子攒到一块洗,那么晾袜子就麻烦了,这么多袜子怎么办呢?于是商家很机警,他们发明了那种,头上一个钩,下面是一个大转盘的晾袜子的东西,这样袜子可以晾一圈。。。所以exchangabiltity指的是,如果袜子一样,那么一旦上面的钩子固定了,那么下面的袜子怎么转我们认为都没有关系的。

而条件独立则是一个更强的假设,整个转盘没有头上的钩子,但是确可以悬浮在概率空间中的任何一点,而认为整体形态没有改变。

好了,关于袜子话题告一段落。

还有一点需要注意的是,为了防止test阶段很多新词的出现,才引入了

topic~word的一个先验。大家可能想到了,也是Dirichlet分布。

LDA是一个三层贝叶斯概率模型,包含词、主题和文档三层结构。

文档到主题服从Dirichlet分布,主题到词服从多项式分布。

LDA对主题的混合权重θ(注意是主题维数)进了Dirichlet先验,用一个超参数α来产生参数θ,即参数的参数。

LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。由于Dirichlet分布随机向量各分量间的弱相关性(之所以还有点“相关”,是因为各分量之和必须为1),使得我们假想的潜在主题之间也几乎是不相关的,这与很多实际问题并不相符,从而造成了LDA的又一个遗留问题。

对于语料库中的每篇文档,LDA定义了如下生成过程(generative process):

1. 对每一篇文档,从主题分布中抽取一个主题;

2. 从上述被抽到的主题所对应的单词分布中抽取一个单词;

3. 重复上述过程直至遍历文档中的每一个单词。

更形式化一点说,语料库中的每一篇文档与 (通过反复试验等方法事先给定)个主题的一个多项分布(multinomial distribution)相对应,将该多项分布记为 。每个主题又与词汇表(vocabulary)中的 个单词的一个多项分布相对应,将这个多项分布记为 。上述词汇表是由语料库中所有文档中的所有互异单词组成,但实际建模的时候要剔除一些停用词(stopword),还要进行一些词干化(stemming)处理等。 和 分别有一个带有超参数(hyperparameter) 和 的Dirichlet先验分布。对于一篇文档 中的每一个单词,我们从该文档所对应的多项分布 中抽取一个主题 ,然后我们再从主题 所对应的多项分布 中抽取一个单词 。将这个过程重复 次,就产生了文档 ,这里的 是文档 的单词总数。这个生成过程可以用如下的图模型表示:

这个图模型表示法也称作“盘子表示法”(plate notation)。图中的阴影圆圈表示可观测变量(observed variable),非阴影圆圈表示潜在变量(latent variable),箭头表示两变量间的条件依赖性(conditional dependency),方框表示重复抽样,重复次数在方框的右下角。

该模型有两个参数需要推断(infer),一个”文档-主题“分布 ,另外是 个”主题-单词“分布 。通过学习(learn)这两个参数,我们可以知道文档作者感兴趣的主题,以及每篇文档所涵盖的主题比例。推断方法主要有LDA模型作者提出的变分-EM算法,还有现在常用的Gibbs抽样法。

LDA模型现在已经成为了主题建模(topic modeling)中的一个标准。LDA模型自从诞生之后有了许多扩展,特别是在社会网络和社会媒体研究领域最为常见。

预备知识

如果牢固掌握这些预备知识,理解原文会更容易些。

- p(X|Y)的记法。注意|右边的Y既可以表示随机变量(已经取定了某具体值),也可以表示普通的非随机变量。这样我们可以在最大似然估计和 Bayes方法间方便的“切换”,而不会让符号记法影响我们的表述。例如,考虑具有确定但未知参数μ,Σ的高斯分布p(x),可以记为p(x|μ,Σ); 若按照Bayes学派观点,可以将μ和Σ也看作随机变量,x的分布就能记为随机变量μ,Σ取定某值后的条件分布p(x|μ,Σ)——统一的记法。

- k取1分布/多项式分布(Multinomial)。考虑取3个离散值的随机变量x ~ p(x)。这个看似很平庸的分布...就是所谓的k 取1分布或称多项式分布。一般我们习惯的把它记为p(x_i) = u_i, i = 1,2,3,且u_1 + u_2 + u_3 = 1. 但在有 些数学推导中,将它记为指数形式会更方便些.将x看作3维的随机向量,各分量是“互斥”的,即它只能取(1,0,0),(0,1,0),(0,0,1)三 组值。于是可将分布重新记为 p(x) = (u_1^x_1)*(u_2^x_2)*(u_3^x_3).注意论文原文中Multinomial就是这 儿说的k取1分布,与一些概率教科书中的定义不同。一般的k维情况依次类推。具体参[Bishop]的2.2节.

- 共轭先验分布(Conjugate Prior)。考虑某概率密度函数,要估计其中的参数t。按照Bayes学派的观点,参数 t ~ p(t).我们有p(t|X) ∝ p(X|t)p(t),这个式子说:在没有做任何观测时,我们对t的知识用先验分布p(t)表示。当观察到X 后,就通过该式将先验概率p(t)更新(计算)为后验概率p(t|X),使我们对t的知识增加。仔细观察,若p(t)与p(X|t)有相同的函数形式,那 么后验概率p(t|X)就与先验概率p(t)有相同的函数形式——这使得t的后验概率与先验概率具有相同的表达式,只是参数被更新了! 更妙的是,本次后 验概率可以作为下次观测时的先验概率,于是当继续进行观测X_2,X_3...时,只是不断的在更新先验概率p(t)的参数,p(t)的函数形式不变。具 体参见[Bishop]的2.2节。

这也是Bayes学派饱受批评的地方:先验概率的选取有时只是方便数学推导,而非准确的反映我们的先验知识。

- Dirichlet分布。现在我们可以说,Dirichlet分布就是k取1分布的Conjugate Prior。若k维随机向量 θ ~ Drichlet分布,则θ的k个分量θ_1,θ_2,...,θ_k都取连续的非负值,且 θ_1 + θ_2 + ... + θ_k = 1。Dirichlet分布的具体表达式参见[Bishop]的2.2节。

- Simplex。考虑2维的例子:以(0,1)与(1,0)为端点的线段就是simplex。考虑3维的例子,以(0,0,1), (0,1,0),(0,0,1)为端点的三角形内部就是simplex。更高维的情况可依次类推。考虑θ ~ Drichlet分布。注意到θ的k个分量 θ_1,θ_2,...,θ_k都取连续的非负值,且θ_1 + θ_2 + ... + θ_k = 1,可知Dirichlet分布的定义域是一个 simplex.这也就是原文中Figure 2那个三角形的含义(k = 3的示意图,让这个simplex三角形平躺在水平面上)。参见 [Bishop]的2.2节

- Graphical Models. 就是用图来表示随机变量中的依赖关系。这个tutorial一google一大把。建议参考 [Bishop]的8.1节,了解几个符号(空心圆圈——隐藏(latent)变量,实心圆圈——观察(observed)变量,方框——重复次数)就足 够看懂原文中的Figure 1和Figure 3了。最多再看看[Bishop]的8.2节

- EM.关于这个的tutorial很多,但我觉得[Bishop]的9.2节是数学处理最为简洁,最容易看懂的(有个tutorial在关键 的几步中用了大量∑和∏,让人抓狂) 。另外[Bishop]的9.4节也值得看,为理解其它内容如variational inference有好处。

- Variational Inference. 就是计算后验概率的近似方法。考虑随机变量{X,Z},其中X是观察变 量,Z = {Z_1,Z_2}是隐藏变量。用EM法或做Bayes推理的关键一步,就是要求后验概率p(Z|X).不巧的是,在一些复杂问题中 p(Z|X)没有解析表达式,需要近似求解.相关的方法很多,一种经常使用的是基于可分解(factorization)假设的方 法:p(Z|X) ≈ p(Z_1|X)p(Z_2|X)——就是说强行假设Z_1和Z_2条件独立——然后进行后续推导。

这一假设当然会产生误差,考虑二维高斯分布p(Z|X) = p(Z_1,Z_2|X),Z_1与Z_2不独立,所以p(Z_1,Z_2|X)的 等高图是同心椭圆,椭圆可任意倾斜(例如,若Z_1与Z_2的线性相关系数是1,则椭圆倾斜45°)。现简记 p(Z_1|X) = q_1(Z_1), p(Z_2|X) = q_2(Z_2),我们想改变q_1与q_2,用q_1*q_2去拟合 p(Z_1,Z_2|X).但无论如何改变q_1与q_2的形式,q_1*q_2的椭圆等高线都是长轴、短轴分别与Z_1轴、Z_2轴平行!不过,合适的 q_1与q_2保证q_1*q_2与p(Z|X)的峰值点重合,一般这就足以解决实际问题了。详细讲解可以参见[Bishop]的第10章。也可参考 [Winn]的1.8节。

plsa java_LDA和PLSA的区别相关推荐

  1. plsa java_LSA vs PLSA及EM求解

    文本处理中经典的LSA与PLSA 对比,EM算法,EM算法求解PLSA 主要参考: 1. 引子 Bag-of-Words 模型是NLP和IR领域中的一个基本假设.在这个模型中,一个文档(documen ...

  2. 主题模型TopicModel:Unigram、LSA、PLSA模型

    http://blog.csdn.net/pipisorry/article/details/42560693 主题模型历史 Papadimitriou.Raghavan.Tamaki和Vempala ...

  3. 主题模型、LDA、LSA、LSI、pLSA

    主题模型.LDA.LSA.LSI.pLSA LSA = LSI PLSA = PLSI LSA(SVD),PLSA,NMF,LDA均可用于主题模型. LFM.LSI.PLSI.LDA都是隐含语义分析技 ...

  4. EM推导PLSA模型

    EM推导PLSA模型 回归EM算法 以上是EM算法的框架,基本思想是: E步骤:求当隐变量给定后当前估计的参数条件下的后验概率 M步骤:最大化complete data对数似然函数的期望,把E步当做是 ...

  5. 让机器读懂文章: pLSA模型推导及实现

    让机器读懂文章: pLSA模型推导及实现 概述 pLSA模型 pLSA的EM算法推导 pLSA的实现 总结 参考文献 概述 人类读懂文章是一个很自然的行为,当我们读完一篇<背影>的时候,我 ...

  6. plsa java_PLSA

    PLSA模型 PLSA和LDA很像,都属于主题模型,即它们都认为上帝在写文章时先以一定概率选择了一个主题,然后在这主题下以一定概率选择了一个词,重复这个过程就完成了一篇文章,即$p(d_i,w_j)= ...

  7. 常见面试之机器学习算法思想简单梳理

    找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位 ...

  8. 通俗理解LDA主题模型

    0 前言 印象中,最开始听说"LDA"这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印过一次,但不知是因为这篇 ...

  9. ML大杂烩:**常见机器学习算法公式梳理

              机器学习方法有一个进阶的过程,不同的方法族,都有其基础和逐渐进化的模型.每一个更新的模型一般是对上一个简单模型的改进,比如SVM就直接改进了近邻方法,降低了保留的实例个数.     ...

最新文章

  1. linux 内存管理 Transparent HugePages 透明大页 简介
  2. 2016年第二季度全球以太网交换机销量破60亿美元
  3. a extends b java_(class B extends A) 怎么解释?A是上一个类名
  4. 糖尿病动物模型知识点整理
  5. easyui打开新的选项卡_IntelliJ IDEA 2020.3 正式版发布,多项超酷新功能
  6. containerd安装及常用命令
  7. python多线程调用携程,进程、线程和携程的通俗解释【刘新宇Python】
  8. 将网卡中断分布到多个cpu上的方法
  9. JSPatch库, 一个Apple官方支持的实现在线更新iOS应用的库
  10. Visual Studio2013配置安装Opencv2.4.9详细过程
  11. android studio 全局变量和变量保存到xml文件的方法及应用
  12. MyEclipse 8.6.1下载|MyEclipse 8下载|MyEclipse 8.6.1官网下载
  13. 在 Visual Studio 2010 中配置SharpPcap
  14. 在word表格里打勾和打叉
  15. lena图的直方图以及与其他图像的直方图匹配
  16. 制作u盘版的kail linux 系统,即插即用,用于破解邻居妹子家的wifi
  17. 冰汽朋克侦查机器人_冰汽时代机器流玩法 寒霜朋克机器人流玩法怎么玩
  18. LPC1768-GPIO
  19. 微信企业号突飞猛进,移步到微为何坐稳移动审批头把交椅
  20. 日志php-error错误日志查看

热门文章

  1. 12 自定义登录异常
  2. SpringBoot+Redisson实现分布式锁
  3. 【最大子区间和】打水漂 rqnoj145
  4. 【Windows】miniconda安装以及环境配置
  5. ElasticSearch原理应用以及京东搜索案例
  6. Algorithms(week 1,普林斯顿大学公开课)
  7. 2019年软件架构师考试时间
  8. 电脑键盘常见故障处理
  9. 用Python勾勒世界地图和中国地图
  10. js对象转json,json转对象