文本主题模型之LDA(一) LDA基础

在前面我们讲到了基于矩阵分解的LSI和NMF主题模型,这里我们开始讨论被广泛使用的主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,以下简称LDA)。注意机器学习还有一个LDA,即线性判别分析,主要是用于降维和分类的,如果大家需要了解这个LDA的信息,参看之前写的线性判别分析LDA原理总结。文本关注于隐含狄利克雷分布对应的LDA。

1. LDA贝叶斯模型

    LDA是基于贝叶斯模型的,涉及到贝叶斯模型离不开“先验分布”,“数据(似然)”和"后验分布"三块。在朴素贝叶斯算法原理小结中我们也已经讲到了这套贝叶斯理论。在贝叶斯学派这里:

先验分布 + 数据(似然)= 后验分布

    这点其实很好理解,因为这符合我们人的思维方式,比如你对好人和坏人的认知,先验分布为:100个好人和100个的坏人,即你认为好人坏人各占一半,现在你被2个好人(数据)帮助了和1个坏人骗了,于是你得到了新的后验分布为:102个好人和101个的坏人。现在你的后验分布里面认为好人比坏人多了。这个后验分布接着又变成你的新的先验分布,当你被1个好人(数据)帮助了和3个坏人(数据)骗了后,你又更新了你的后验分布为:103个好人和104个的坏人。依次继续更新下去。

2. 二项分布与Beta分布

    对于上一节的贝叶斯模型和认知过程,假如用数学和概率的方式该如何表达呢?

    对于我们的数据(似然),这个好办,用一个二项分布就可以搞定,即对于二项分布:

Binom(k|n,p)=(nk)pk(1?p)n?kBinom(k|n,p)=(nk)pk(1?p)n?k

    其中p我们可以理解为好人的概率,k为好人的个数,n为好人坏人的总数。

    虽然数据(似然)很好理解,但是对于先验分布,我们就要费一番脑筋了,为什么呢?因为我们希望这个先验分布和数据(似然)对应的二项分布集合后,得到的后验分布在后面还可以作为先验分布!就像上面例子里的“102个好人和101个的坏人”,它是前面一次贝叶斯推荐的后验分布,又是后一次贝叶斯推荐的先验分布。也即是说,我们希望先验分布和后验分布的形式应该是一样的,这样的分布我们一般叫共轭分布。在我们的例子里,我们希望找到和二项分布共轭的分布。

    和二项分布共轭的分布其实就是Beta分布。Beta分布的表达式为:

Beta(p|α,β)=Γ(α+β)Γ(α)Γ(β)pα?1(1?p)β?1Beta(p|α,β)=Γ(α+β)Γ(α)Γ(β)pα?1(1?p)β?1

    其中ΓΓ是Gamma函数,满足Γ(x)=(x?1)!Γ(x)=(x?1)!

    仔细观察Beta分布和二项分布,可以发现两者的密度函数很相似,区别仅仅在前面的归一化的阶乘项。那么它如何做到先验分布和后验分布的形式一样呢?后验分布P(p|n,k,α,β)P(p|n,k,α,β)推导如下:

P(p|n,k,α,β)∝P(k|n,p)P(p|α,β)=P(k|n,p)P(p|α,β)=Binom(k|n,p)Beta(p|α,β)=(nk)pk(1?p)n?k×Γ(α+β)Γ(α)Γ(β)pα?1(1?p)β?1∝pk+α?1(1?p)n?k+β?1 (1)(2)(3)(4)(5)(1)P(p|n,k,α,β)∝P(k|n,p)P(p|α,β)(2)=P(k|n,p)P(p|α,β)(3)=Binom(k|n,p)Beta(p|α,β)(4)=(nk)pk(1?p)n?k×Γ(α+β)Γ(α)Γ(β)pα?1(1?p)β?1(5)∝pk+α?1(1?p)n?k+β?1 

    将上面最后的式子归一化以后,得到我们的后验概率为:

P(p|n,k,α,β)=Γ(α+β+n)Γ(α+k)Γ(β+n?k)pk+α?1(1?p)n?k+β?1P(p|n,k,α,β)=Γ(α+β+n)Γ(α+k)Γ(β+n?k)pk+α?1(1?p)n?k+β?1

    可见我们的后验分布的确是Beta分布,而且我们发现:

Beta(p|α,β)+BinomCount(k,n?k)=Beta(p|α+k,β+n?k)Beta(p|α,β)+BinomCount(k,n?k)=Beta(p|α+k,β+n?k)

    这个式子完全符合我们在上一节好人坏人例子里的情况,我们的认知会把数据里的好人坏人数分别加到我们的先验分布上,得到后验分布。 

    我们在来看看Beta分布Beta(p|α,β)Beta(p|α,β)的期望:

E(Beta(p|α,β))=∫10tBeta(p|α,β)dt=∫10tΓ(α+β)Γ(α)Γ(β)tα?1(1?t)β?1dt=∫10Γ(α+β)Γ(α)Γ(β)tα(1?t)β?1dt(6)(7)(8)(6)E(Beta(p|α,β))=∫01tBeta(p|α,β)dt(7)=∫01tΓ(α+β)Γ(α)Γ(β)tα?1(1?t)β?1dt(8)=∫01Γ(α+β)Γ(α)Γ(β)tα(1?t)β?1dt

    由于上式最右边的乘积对应Beta分布Beta(p|α+1,β)Beta(p|α+1,β),因此有:

∫10Γ(α+β+1)Γ(α+1)Γ(β)pα(1?p)β?1=1∫01Γ(α+β+1)Γ(α+1)Γ(β)pα(1?p)β?1=1

    这样我们的期望可以表达为:

E(Beta(p|α,β))=Γ(α+β)Γ(α)Γ(β)Γ(α+1)Γ(β)Γ(α+β+1)=αα+βE(Beta(p|α,β))=Γ(α+β)Γ(α)Γ(β)Γ(α+1)Γ(β)Γ(α+β+1)=αα+β

    这个结果也很符合我们的思维方式。

3. 多项分布与Dirichlet 分布

    现在我们回到上面好人坏人的问题,假如我们发现有第三类人,不好不坏的人,这时候我们如何用贝叶斯来表达这个模型分布呢?之前我们是二维分布,现在是三维分布。由于二维我们使用了Beta分布和二项分布来表达这个模型,则在三维时,以此类推,我们可以用三维的Beta分布来表达先验后验分布,三项的多项分布来表达数据(似然)。

    三项的多项分布好表达,我们假设数据中的第一类有m1m1个好人,第二类有m2m2个坏人,第三类为m3=n?m1?m2m3=n?m1?m2个不好不坏的人,对应的概率分别为p1,p2,p3=1?p1?p2p1,p2,p3=1?p1?p2,则对应的多项分布为:

multi(m1,m2,m3|n,p1,p2,p3)=n!m1!m2!m3!pm11pm22pm33multi(m1,m2,m3|n,p1,p2,p3)=n!m1!m2!m3!p1m1p2m2p3m3

    那三维的Beta分布呢?超过二维的Beta分布我们一般称之为狄利克雷(以下称为Dirichlet )分布。也可以说Beta分布是Dirichlet 分布在二维时的特殊形式。从二维的Beta分布表达式,我们很容易写出三维的Dirichlet分布如下:

Dirichlet(p1,p2,p3|α1,α2,α3)=Γ(α1+α2+α3)Γ(α1)Γ(α2)Γ(α3)pα1?11(p2)α2?1(p3)α3?1Dirichlet(p1,p2,p3|α1,α2,α3)=Γ(α1+α2+α3)Γ(α1)Γ(α2)Γ(α3)p1α1?1(p2)α2?1(p3)α3?1

    同样的方法,我们可以写出4维,5维,。。。以及更高维的Dirichlet 分布的概率密度函数。为了简化表达式,我们用向量来表示概率和计数,这样多项分布可以表示为:Dirichlet(p? |α? )Dirichlet(p→|α→),而多项分布可以表示为:multi(m? |n,p? )multi(m→|n,p→)。

    一般意义上的K维Dirichlet 分布表达式为:

Dirichlet(p? |α? )=Γ(∑k=1Kαk)∏Kk=1Γ(αk)∏k=1Kpαk?1kDirichlet(p→|α→)=Γ(∑k=1Kαk)∏k=1KΓ(αk)∏k=1Kpkαk?1

    而多项分布和Dirichlet 分布也满足共轭关系,这样我们可以得到和上一节类似的结论:

Dirichlet(p? |α? )+MultiCount(m? )=Dirichlet(p? |α? +m? )Dirichlet(p→|α→)+MultiCount(m→)=Dirichlet(p→|α→+m→)

    对于Dirichlet 分布的期望,也有和Beta分布类似的性质:

E(Dirichlet(p? |α? ))=(α1∑k=1Kαk,α2∑k=1Kαk,...,αK∑k=1Kαk)E(Dirichlet(p→|α→))=(α1∑k=1Kαk,α2∑k=1Kαk,...,αK∑k=1Kαk)

4. LDA主题模型

    前面做了这么多的铺垫,我们终于可以开始LDA主题模型了。

    我们的问题是这样的,我们有MM篇文档,对应第d个文档中有有NdNd个词。即输入为如下图:

    我们的目标是找到每一篇文档的主题分布和每一个主题中词的分布。在LDA模型中,我们需要先假定一个主题数目KK,这样所有的分布就都基于KK个主题展开。那么具体LDA模型是怎么样的呢?具体如下图:

    LDA假设文档主题的先验分布是Dirichlet分布,即对于任一文档dd, 其主题分布θdθd为:

θd=Dirichlet(α? )θd=Dirichlet(α→)

    其中,αα为分布的超参数,是一个KK维向量。

    LDA假设主题中词的先验分布是Dirichlet分布,即对于任一主题kk, 其词分布βkβk为:

βk=Dirichlet(η? )βk=Dirichlet(η→)

    其中,ηη为分布的超参数,是一个VV维向量。VV代表词汇表里所有词的个数。

    对于数据中任一一篇文档dd中的第nn个词,我们可以从主题分布θdθd中得到它的主题编号zdnzdn的分布为:

zdn=multi(θd)zdn=multi(θd)

    而对于该主题编号,得到我们看到的词wdnwdn的概率分布为:

wdn=multi(βzdn)wdn=multi(βzdn)

    理解LDA主题模型的主要任务就是理解上面的这个模型。这个模型里,我们有MM个文档主题的Dirichlet分布,而对应的数据有MM个主题编号的多项分布,这样(α→θd→z? dα→θd→z→d)就组成了Dirichlet-multi共轭,可以使用前面提到的贝叶斯推断的方法得到基于Dirichlet分布的文档主题后验分布。

    如果在第d个文档中,第k个主题的词的个数为:n(k)dnd(k), 则对应的多项分布的计数可以表示为

n? d=(n(1)d,n(2)d,...n(K)d)n→d=(nd(1),nd(2),...nd(K))

    利用Dirichlet-multi共轭,得到θdθd的后验分布为:

Dirichlet(θd|α? +n? d)Dirichlet(θd|α→+n→d)

    同样的道理,对于主题与词的分布,我们有KK个主题与词的Dirichlet分布,而对应的数据有KK个主题编号的多项分布,这样(η→βk→w? (k)η→βk→w→(k))就组成了Dirichlet-multi共轭,可以使用前面提到的贝叶斯推断的方法得到基于Dirichlet分布的主题词的后验分布。

    如果在第k个主题中,第v个词的个数为:n(v)knk(v), 则对应的多项分布的计数可以表示为

n? k=(n(1)k,n(2)k,...n(V)k)n→k=(nk(1),nk(2),...nk(V))

    利用Dirichlet-multi共轭,得到βkβk的后验分布为:

Dirichlet(βk|η? +n? k)Dirichlet(βk|η→+n→k)

    由于主题产生词不依赖具体某一个文档,因此文档主题分布和主题词分布是独立的。理解了上面这M+KM+K组Dirichlet-multi共轭,就理解了LDA的基本原理了。

    现在的问题是,基于这个LDA模型如何求解我们想要的每一篇文档的主题分布和每一个主题中词的分布呢?

    一般有两种方法,第一种是基于Gibbs采样算法求解,第二种是基于变分推断EM算法求解。

    如果你只是想理解基本的LDA模型,到这里就可以了,如果想理解LDA模型的求解,可以继续关注系列里的另外两篇文章。

转载自   文本主题模型之LDA(一) LDA基础 - 刘建平Pinard - 博客园  https://www.cnblogs.com/pinard/p/6831308.html

原文地址:https://www.cnblogs.com/hx868/p/10063221.html

时间: 2024-12-22 22:47:11

文本主题模型之LDA(一) LDA基础的相关文章

文本主题模型之LDA(三) LDA求解之变分推断EM算法

文本主题模型之LDA(一) LDA基础 文本主题模型之LDA(二) LDA求解之Gibbs采样算法 文本主题模型之LDA(三) LDA求解之变分推断EM算法 本文是LDA主题模型的第三篇,读这一篇之前建议先读文本主题模型之LDA(一) LDA基础,同时由于使用了EM算法,如果你对EM算法不熟悉,建议先熟悉EM算法的主要思想.LDA的变分推断EM算法求解,应用于Spark MLlib和Scikit-learn的LDA算法实现,因此值得好好理解. 1. 变分推断EM算法求解LDA的思路 首先,回顾L

文本主题模型之LDA(二) LDA求解之Gibbs采样算法

本文是LDA主题模型的第二篇,读这一篇之前建议先读文本主题模型之LDA(一) LDA基础,同时由于使用了基于MCMC的Gibbs采样算法,如果你对MCMC和Gibbs采样不熟悉,建议阅读之前写的MCMC系列MCMC(四)Gibbs采样. 1. Gibbs采样算法求解LDA的思路 首先,回顾LDA的模型图如下: 在Gibbs采样算法求解LDA的方法中,我们的α,ηα,η是已知的先验输入,我们的目标是得到各个zdn,wknzdn,wkn对应的整体z? ,w? z→,w→的概率分布,即文档主题的分布和

我是这样一步步理解--主题模型(Topic Model)、LDA(案例代码)

1. LDA模型是什么 LDA可以分为以下5个步骤: 一个函数:gamma函数. 四个分布:二项分布.多项分布.beta分布.Dirichlet分布. 一个概念和一个理念:共轭先验和贝叶斯框架. 两个模型:pLSA.LDA. 一个采样:Gibbs采样 关于LDA有两种含义,一种是线性判别分析(Linear Discriminant Analysis),一种是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),本文讲后者. 按照wiki上的介绍,L

文本主题模型--LDA

隐含狄利克雷分布(Latent Dirichlet Allocation ,简称LDA) 贝叶斯模型贝叶斯模型主要涉及"先验分布", "数据(似然)"和"后验分布"三块,在贝叶斯学派中:                   先验分布 + 数据(似然)= 后验分布可以理解为通过在现先验分布的基础上更新后验分布 二项分布$a = a -2$   原文地址:https://www.cnblogs.com/xz824/p/10034134.html

主题模型TopicModel:隐含狄利克雷分布LDA

http://blog.csdn.net/pipisorry/article/details/42649657 主题模型LDA简介 隐含狄利克雷分布简称LDA(Latent Dirichlet allocation),是一种主题模型,它可以将文档集中每篇文档的主题按照概率分布的形式给出. 同时它是一种无监督学习算法,在训练时不需要手工标注的训练集,需要的仅仅是文档集以及指定主题的数量k即可.此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它. LDA首先由Blei, David

通俗理解LDA主题模型(boss)

0 前言 看完前面几篇简单的文章后,思路还是不清晰了,但是稍微理解了LDA,下面@Hcy开始详细进入boss篇.其中文章可以分为下述5个步骤: 一个函数:gamma函数 四个分布:二项分布.多项分布.beta分布.Dirichlet分布 一个概念和一个理念:共轭先验和贝叶斯框架 两个模型:pLSA.LDA(在本文第4 部分阐述) 一个采样:Gibbs采样 本文便按照上述5个步骤来阐述,希望读者看完本文后,能对LDA有个尽量清晰完整的了解.同时,本文基于邹博讲LDA的PPT.rickjin的LDA

LDA主题模型三连击-入门/理论/代码

本文将从三个方面介绍LDA主题模型--整体概况.数学推导.动手实现. 关于LDA的文章网上已经有很多了,大多都是从经典的<LDA 数学八卦>中引出来的,原创性不太多. 本文将用尽量少的公式,跳过不需要的证明,将最核心需要学习的部分与大家分享,展示出直观的理解和基本的数学思想,避免数学八卦中过于详细的推导.最后用python 进行实现. [TOC] 概况 第一部分,包括以下四部分. 为什么需要 LDA是什么 LDA的应用 LDA的使用 为什么需要 挖掘隐含语义信息.一个经典的例子是 "

重磅︱R+NLP:text2vec包简介(GloVe词向量、LDA主题模型、各类距离计算等)

词向量的表示主流的有两种方式,一种当然是耳熟能详的google的word2vec,还有一类就是GloVe.那么前面一类有三个开源的包,后面这一类我倒是看到得不多,恰好是在我关注了许久的一个包里面有,它就是text2vec啦.该包提供了一个强大API接口,能够很好地处理文本信息. 本包是由C++写的,流处理器可以让内存得到更好的利用,一些地方是用RcppParallel包进行并行化加乘,同时兼容各个系统的服务器.如果没有并行的地方,大家也可以自己用foreach包来自己加速. ----------

Spark机器学习(8):LDA主题模型算法

1. LDA基础知识 LDA(Latent Dirichlet Allocation)是一种主题模型.LDA一个三层贝叶斯概率模型,包含词.主题和文档三层结构. LDA是一个生成模型,可以用来生成一篇文档,生成时,首先根据一定的概率选择一个主题,然后在根据概率选择主题里面的一个单词,这样反复进行,就可以生成一篇文档:反过来,LDA又是一种非监督机器学习技术,可以识别出大规模文档集或语料库中的主题. LDA原始论文给出了一个很简单的例子.Arts.Budgets.Children.Educatio