Latent Dirichlet Allocation (LDA)

本文详细介绍了LDA(潜在狄利克雷分配)模型,这是一种用于识别大规模文档集中隐藏主题信息的非监督机器学习技术。LDA采用词袋方法,将文本转化为便于建模的数字信息,并通过Dirichlet分布进行主题和单词的建模。文章阐述了生成过程、模型结构、参数推断方法以及先验选择的重要性,包括Dirichlet分布和Bayes priors smoothing的作用。
摘要由CSDN通过智能技术生成

from: http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/

      LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。它采用了词袋(bag of words)的方法,这种方法将每一篇文档视为一个词频向量,从而将文本信息转化为了易于建模的数字信息。但是词袋方法没有考虑词与词之间的顺序,这简化了问题的复杂性,同时也为模型的改进提供了契机。每一篇文档代表了一些主题所构成的一个概率分布,而每一个主题又代表了很多单词所构成的一个概率分布。由于Dirichlet分布随机向量各分量间的弱相关性(之所以还有点“相关”,是因为各分量之和必须为1),使得我们假想的潜在主题之间也几乎是不相关的,这与很多实际问题并不相符,从而造成了LDA的又一个遗留问题。
对于语料库中的每篇文档,LDA定义了如下生成过程(generative process):
1. 对每一篇文档,从主题分布中抽取一个主题;
2. 从上述被抽到的主题所对应的单词分布中抽取一个单词;
3. 重复上述过程直至遍历文档中的每一个单词。
      语料库中的每一篇文档与T(通过反复试验等方法事先给定)个主题的一个多项分布(multinomial distribution)相对应,将该多项分布记为θ。每个主题又与词汇表(vocabulary)中的V个单词的一个多项分布相对应,将这个多项分布记为φ。上述词汇表是由语料库中所有文档中的所有互异单词组成,但实际建模的时候要剔除一些停用词(stopword),还要进行一些词干化(stemming)处理等。θ和φ分别有一个带有超参数(hyperparameter)α和β的Dirichlet先验分布。LDA对主题的混合权重θ(注意是主题维数)进了Dirichlet先验,用一个超参数α来产生参数θ,即参数的参数。为了防止test阶段很多新词的出现,才引入了topic~word的一个先验β,β也是Dirichlet分布。
这个图模型表示法也称作“盘子表示法”(plate notation)。图中的阴影圆圈表示可观测变量(observed variable),非阴影圆圈表示潜在变量(latent variable),箭头表示两变量间的条件依赖性(conditional dependency),方框表示重复抽样,重复次数在方框的右下角。
doc
|
----------------------------------------
                      | ...                     |
topic_1            topic_2              topic_m
topic_i
|
----------------------------------------
                      | ...                     |
word_1            word_2              word_n
最基本的PLSA和LDA在刻画doc~topic和topic~word都利用了一个模型,就是multinomial model。为了计算的方便及先验的有意义,共轭先验是首选。multinomial distribution的共轭分布是Dirichlet distribution,很nice的一个分布。这也是Latent Dirichlet Allocation中Dirichlet的由来。
Bayes prior smoothing的先验也是Dirichlet,因为在一元语言模型中,也采用了multinomial来刻画。
而且在PLSA中引入的先验也是Dirichlet。那么它到底有什么好处呢?让大家这么对它着迷。计算简单性是大家都知道的,现在说一点它的奇妙的implict idea:
拿Bayes prior smoothing说:
P_ml(w|d) = c(w,d) / |d|
平滑后的分子为|d| + mu {原来为|d|}
好像文档多了mu个词,在这个mu新词中,有mu*p(w|c)这么多的w
对应到LDA中,是那个超参数给定后,才能得出i.i.d。。。需要自己看paper理解。
这也是层级模型的一个很优美的地方。
                    \       ...            \
product_1     product_2      product_m
而条件独立则是一个更强的假设,整个转盘没有头上的钩子,但是确可以悬浮在概率空间中的任何一点,而认为整体形态没有改变。

      LDA是一个三层贝叶斯概率模型,包含词、主题和文档三层结构。文档到主题服从Dirichlet分布,主题到词服从多项式分布。     

这个生成过程可以用如下的图模型表示:


 

Topic model的一个通式为: P(w|d) = ∑ p(w|z)*p(z|d)

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


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

doc~topic~word

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

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

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

那么加什么先验呢?

Dirichlet prior是一个巨牛的先验:

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

而最大似然的估计是

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

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

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

 

那么如何推导LDA的那些参数呢?大体有两种方法:一种是作者的varitional inference;另外一种是Gibbs Sampling。

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

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

Worker

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

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

该模型有两个参数需要推断(infer),θ和φ。通过学习(learn)这两个参数,我们可以知道文档作者感兴趣的主题φ,以及每篇文档所涵盖的主题比例θ。

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

        Latent dirichlet allocation note  By: Zhou Li (smzlkimi@gmail.com)



原文地址:http://blog.sina.com.cn/s/blog_50d4c97b0100n9ee.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值