LDA学习

LDA(Latent Dirichlet Allocation)是一种概率主题模型,用于推断文档的主题分布。它基于贝叶斯定理,通过狄利克雷分布和多项分布来生成文档和词语。LDA模型包括文档生成过程和参数估计,其中主题分布和词分布是随机变量,服从Dirichlet先验。与pLSA相比,LDA引入了Dirichlet先验,使得主题分布和词分布成为随机变量,从而更好地处理不确定性。通过Gibbs采样算法,LDA可以学习和更新文档及主题的分布。
  1. 概述

LDALatent Dirichlet Allocation)中文为隐含狄利克雷分布,是一种概率主题模型。它可以将文档集中每篇文档的主题以概率分布的形式给出,即根据给定的一篇文档,推测其主题分布。

LDA模型中,一篇文档生成的方式如下:

  • 从狄利克雷分布α中取样生成文档i的主题分布θi
  • 从主题的多项式分布θi中取样生成文档ij个词的主题分布zi,j
  • 从狄利克雷分布β中取样生成主题zi,j的对应词语分布Φzi,j
  • 从词语的多项式分布Φzi,j中采样最终生成词语wi,j

LDA的图模型结构如下图所示:


 

  1. 前置概念
    1. Gamma函数

    定义为

 

同时,Gamma函数可以看作阶乘在实数集上的延拓

 


    1. 二项分布

二项分布是从伯努利分布推进的。伯努利分布,又称两点分布或0-1分布,是一个离散型的随机分布,其中的随机变量只有两类取值(01)。而二项分布即重复n次的伯努利试验。

概率密度为


 

    1. 多项分布

多项分布是指单次试验中的随机变量的取值不再是0-1的,而是有多种离散值可能(1,2,3...,k),是二项分布扩展到多维的情况。

概率密度为

 

    1. Beta分布

对于问题1

 

X(k)的分布即为一种Beta分布。

其概率密度为:

 

    1. Dirichlet分布

超过二维的Beta分布我们一般称之为狄利克雷(Dirichlet)分布。

其概率密度为:

 

    1. LDA贝叶斯模型

贝叶斯派思考问题的方式:

先验分布 + 样本信息 = 后验分布

    1. Beta-Binomial共轭

问题2

 

解得此问题分布满足

 

问题2中第2点即样本信息,整个问题流程为

 

根据贝叶斯参数估计的基本流程,以上流程可写作:

 

    1. Dirichlet-Multinomial 共轭

是将Beta-Binomial共轭推广到多维形式。

例如问题2推广为问题3

 

问题33点同样为样本信息,根据贝叶斯参数估计流程,上述问题同样可以表示为以下形式:

 

同样满足

先验分布 + 样本信息 = 后验分布

这种观测到的数据符合多项分布,参数的先验分布和后验分布都是Dirichlet 分布的情况,就是Dirichlet-Multinomial 共轭。换言之,至此已经证明了Dirichlet分布的确就是多项式分布的共轭先验概率分布。

  1. PLSA模型
    1. 文档生成

文档生成方式:

假设你要写M篇文档,由于一篇文档由各个不同的词组成,所以你需要确定每篇文档里每个位置上的词。

假定你一共有K个可选的主题,有V个可选的词,咱们来玩一个扔骰子的游戏。

  1. 假设你每写一篇文档会制作一颗K面的文档-主题骰子(扔此骰子能得到K个主题中的任意一个),和KV面的主题-词项骰子(每个骰子对应一个主题,K个骰子对应之前的K个主题,且骰子的每一面对应要选择的词项,V个面对应着V个可选的词)。
    • 比如可令K=3,即制作1个含有3个主题的文档-主题骰子,这3个主题可以是:教育、经济、交通。然后令V = 3,制作3个有着3面的主题-词项骰子,其中,教育主题骰子的3个面上的词可以是:大学、老师、课程,经济主题骰子的3个面上的词可以是:市场、企业、金融,交通主题骰子的3个面上的词可以是:高铁、汽车、飞机。
  1. 每写一个词,先扔该文档-主题骰子选择主题,得到主题的结果后,使用和主题结果对应的那颗主题-词项骰子,扔该骰子选择要写的词。
    • 先扔文档-主题的骰子,假设(以一定的概率)得到的主题是教育,所以下一步便是扔教育主题筛子,(以一定的概率)得到教育主题筛子对应的某个词:大学。
      • 上面这个投骰子产生词的过程简化下便是:先以一定的概率选取主题,再以一定的概率选取词。事实上,一开始可供选择的主题有3个:教育、经济、交通,那为何偏偏选取教育这个主题呢?其实是随机选取的,只是这个随机遵循一定的概率分布。比如可能选取教育主题的概率是0.5,选取经济主题的概率是0.3,选取交通主题的概率是0.2,那么这3个主题的概率分布便是{教育:0.5,经济:0.3,交通:0.2},我们把各个主题z在文档d中出现的概率分布称之为主题分布,且是一个多项分布
      • 同样的,从主题分布中随机抽取出教育主题后,依然面对着3个词:大学、老师、课程,这3个词都可能被选中,但它们被选中的概率也是不一样的。比如大学这个词被选中的概率是0.5,老师这个词被选中的概率是0.3,课程被选中的概率是0.2,那么这3个词的概率分布便是{大学:0.5,老师:0.3,课程:0.2},我们把各个词语w在主题z下出现的概率分布称之为词分布,这个词分布也是一个多项分布。
      • 所以,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。

 

  1. 最后,你不停的重复扔文档-主题骰子和主题-词项骰子,重复N次(产生N个词),完成一篇文档,重复这产生一篇文档的方法M次,则完成M篇文档。


pLSA是一种词袋模型,该模型假设一组共现(co-occurrence)词项关联着一个隐含的主题类别 。同时定义:

  • 表示海量文档中某篇文档被选中的概率。
  •   表示词 在给定文档 中出现的概率。
  •   表示具体某个主题 在给定文档 下出现的概率。
  • 表示具体某个 在给定主题 下出现的概率,与主题关系越密切的词,其条件概率 越大。

    利用上述的第134个概率,我们便可以按照如下的步骤得到文档-词项的生成模型:

  1. 按照概率 选择一篇文档 
  2. 选定文档 后,从主题分布中按照概率 选择一个隐含的主题类别 
  3. 选定 后,从词分布中按照概率 选择一个词 

    所以pLSA中生成文档的整个过程便是选定文档生成主题,确定主题生成词。

    1. 根据文档反推其主题分布

 

被涂色的dw表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档

文档d和词w是我们得到的样本,可观测得到,所以对于任意一篇文档,其 是已知的。

从而可以根据大量已知的文档-词项信息 ,训练出文档-主题 和主题-词项 ,如下公式所示:

 

故得到文档中每个词的生成概率为:

 

    由于 可事先计算求出,而 未知,所以  就是我们要估计的参数(值),通俗点说,就是要最大化这个

  1. 由于 未知,所以我们用EM算法去估计这个参数的值。
  2. 而后,用 表示词项 出现在主题 中的概率,即 ,用 表示主题 出现在文档 中的概率,即  ,从而把 转换成了主题-词项矩阵 (主题生成词),把转换成了文档-主题矩阵(文档生成主题)。
  3. 最终求解出


  1. LDA主题模型
    1. pLSALDA的对比:生成文档与参数估计

pLSA模型中,我们按照如下的步骤得到文档-词项的生成模型:

  1. 按照概率 选择一篇文档 
  2. 选定文档 后,确定文章的主题分布
  3. 从主题分布中按照概率 选择一个隐含的主题类别 
  4. 选定 后,确定主题 下的词分布
  5. 从词分布中按照概率选择一个词 

对比下本文开头所述的LDA模型中一篇文档生成的方式:

  1. 按照先验概率 选择一篇文档 
  2. 从狄利克雷分布(即Dirichlet分布) 中取样生成文档 的主题分布 ,换言之,主题分布 由超参数为 Dirichlet分布生成
  3. 从主题的多项式分布 中取样生成文档 j个词的主题 
  4. 从狄利克雷分布(即Dirichlet分布) 中取样生成主题 对应的词语分布 ,换言之,词语分布 由参数为 Dirichlet分布生成
  5. 从词语的多项式分布 中采样最终生成词语 

从上面两个过程可以看出,LDAPLSA的基础上,为主题分布和词分布分别加了两个Dirichlet先验。

继续拿之前讲解PLSA的例子进行具体说明。如前所述,在PLSA中,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。

 


而在LDA中,选主题和选词依然都是两个随机的过程,依然可能是先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后再从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。

PLSALDA的区别在于什么地方呢?区别就在于:

PLSA中,主题分布和词分布是唯一确定的,能明确的指出主题分布可能就是{教育:0.5,经济:0.3,交通:0.2},词分布可能就是{大学:0.5,老师:0.3,课程:0.2}

但在LDA中,主题分布和词分布不再唯一确定不变,即无法确切给出。例如主题分布可能是{教育:0.5,经济:0.3,交通:0.2},也可能是{教育:0.6,经济:0.2,交通:0.2},到底是哪个我们不再确定(即不知道),因为它是随机的可变化的。但再怎么变化,也依然服从一定的分布,即主题分布跟词分布由Dirichlet先验随机确定。

进一步,可以发现:

pLSA中,主题分布和词分布确定后,以一定的概率( )分别选取具体的主题和词项,生成好文档。而后根据生成好的文档反推其主题分布、词分布时,最终用EM算法(极大似然估计思想)求解出了两个未知但固定的参数的值:  (由 转换而来)和 (由 转换而来)。

文档d产生主题z的概率,主题z产生单词w的概率都是两个固定的值。

举个文档d产生主题z的例子。给定一篇文档d,主题分布是一定的,比如{ P(zi|d), i = 1,2,3 }可能就是{0.4,0.5,0.1},表示z1z2z3,这3个主题被文档d选中的概率都是个固定的值:P(z1|d) = 0.4P(z2|d) = 0.5P(z3|d) = 0.1,如下图所示:

 

但在贝叶斯框架下的LDA中,我们不再认为主题分布(各个主题在文档中出现的概率分布)和词分布(各个词语在某个主题下出现的概率分布)是唯一确定的(而是随机变量),而是有很多种可能。但一篇文档总得对应一个主题分布和一个词分布吧,怎么办呢?LDA为它们弄了两个Dirichlet先验参数,这个Dirichlet先验为某篇文档随机抽取出某个主题分布和词分布。

文档d产生主题z(准确的说,其实是Dirichlet先验为文档d生成主题分布Θ,然后根据主题分布Θ产生主题z)的概率,主题z产生单词w的概率都不再是某两个确定的值,而是随机变量。

还是举文档d具体产生主题z的例子。给定一篇文档d,现在有多个主题z1z2z3,它们的主题分布{ P(zi|d), i = 1,2,3 }可能是{0.4,0.5,0.1},也可能是{0.2,0.2,0.6},即这些主题被d选中的概率都不再认为是确定的值,可能是P(z1|d) = 0.4P(z2|d) = 0.5P(z3|d) = 0.1,也有可能是P(z1|d) = 0.2P(z2|d) = 0.2P(z3|d) = 0.6等等,而主题分布到底是哪个取值集合我们不确定(为什么?这就是贝叶斯派的核心思想,把未知参数当作是随机变量,不再认为是某一个确定的值),但其先验分布是dirichlet 分布,所以可以从无穷多个主题分布中按照dirichlet 先验随机抽取出某个主题分布出来。如下图所示(图):

 

换言之,LDApLSA的基础上给这两参数( )加了两个先验分布的参数(贝叶斯化):一个主题分布的先验分布Dirichlet分布 ,和一个词语分布的先验分布Dirichlet分布

综上,LDA真的只是pLSA的贝叶斯版本,文档生成后,两者都要根据文档去推断其主题分布和词语分布(即两者本质都是为了估计给定文档生成主题,给定主题生成词语的概率),只是用的参数推断方法不同,在pLSA中用极大似然估计的思想去推断两未知的固定参数,而LDA则把这两参数弄成随机变量,且加入dirichlet先验。

所以,pLSALDA的本质区别就在于它们去估计未知参数所采用的思想不同,前者用的是频率派思想,后者用的是贝叶斯派思想。

好比,我去一朋友家:

按照频率派的思想,我估计他在家的概率是1/2,不在家的概率也是1/2,是个定值。

而按照贝叶斯派的思想,他在家不在家的概率不再认为是个定值1/2,而是随机变量。比如按照我们的经验(比如当天周末),猜测他在家的概率是0.6,但这个0.6不是说就是完全确定的,也有可能是0.7。如此,贝叶斯派没法确切给出参数的确定值(0.3,0.40.6,0.70.8,0.9都有可能),但至少明白在哪个范围或哪些取值(0.6,0.70.8,0.9)更有可能,哪个范围或哪些取值(0.3,0.4 不太可能。进一步,贝叶斯估计中,参数的多个估计值服从一定的先验分布,而后根据实践获得的数据(例如周末不断跑他家),不断修正之前的参数估计,从先验分布慢慢过渡到后验分布。

    1. LDA文档生成

重复一下该模型生成文档的基本流程:

  • 从狄利克雷分布α中取样生成文档i的主题分布θi
  • 从主题的多项式分布θi中取样生成文档ij个词的主题zi,j
  • 从狄利克雷分布β中取样生成主题zi,j的对应词语分布Φzi,j
  • 从词语的多项式分布Φzi,j中采样最终生成词语wi,j

该主题模型有以下特点:

主题分布(各个主题在文档中出现的概率分布)和词分布(各个词语在某个主题下出现的概率分布)是唯一确定的(而是随机变量),而是有很多种可能。

生成文档基本流程可解读为

  1. 对此模型,假定语料库中共有M篇文章,每篇文章下的Topic的主题分布是一个从参数为αDirichlet先验分布中采样得到的Multinomial分布,每个Topic下的词分布是一个从参数为βDirichlet先验分布中采样得到的Multinomial分布。
  2. 对于某篇文章中的第n个词,首先从该文章中出现的每个主题的Multinomial分布(主题分布)中选择或采样一个主题,然后再在这个主题对应的词的Multinomial分布(词分布)中选择或采样一个词。不断重复这个随机生成过程,直到M篇文章全部生成完成。

对照贝叶斯参数估计流程,可以将整个流程如下表示:

 

 

可看出生成主题,从主题生成单词的过程都是一种Dirichlet-Multinomial 共轭结构,由于LDA把要估计的主题分布和词分布看作是其先验分布是Dirichlet分布的随机变量,所以,在LDA这个估计主题分布、词分布的过程中,它们的先验分布(即Dirichlet分布)事先由人为给定,那么LDA就是要去求它们的后验分布

  1. Gibbs采样算法求解LDA

LDA模型中,给定一个文档集合,词wi,j是可以观察到的已知变量,αβ是根据经验给定的先验参数,其他的变量主题zi,jθφ都是未知的隐含变量,需要根据观察到的变量来学习估计的。

 

Gibbs采样算法的基本求解思路是:先求出wi,jzi,j的联合分布,进而可以求出某一个词wi,j对应主题zi,j的条件概率分布。有了该条件概率分布,我们就可以进行Gibbs采样,最终在Gibbs采样收敛后得到第i个词的主题。如果我们通过采样得到了所有词的主题,那么通过统计所有词的主题计数,就可以得到各个主题的词分布。接着统计各个文档对应词的主题计数,就可以得到各个文档的主题分布。

根据概率论知识推导得主题和词的联合分布概率为:

 

    某一个词wi,j对应主题zi,j的条件概率分布:

  

该公式右边就是

物理意义即在如下K条路径中(K个主题)采样:

 

训练流程(认为足够大样本下的频率等价于概率):

  1. 选择合适的主题数K, 选择合适的超参数向量αβ;
  2. 对应语料库中每一篇文档的每一个词,随机的赋予一个主题编号z;
  3. 重新扫描语料库,对于每一个词,利用Gibbs采样公式更新它的topic编号,并更新语料库中该词的编号。
  4. 重复第2步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛。
  5. 统计语料库中的各个文档各个词的主题,得到文档主题分布θi,统计语料库中各个主题词的分布,得到LDA的主题与词的分布Φzi,j


当新文档出现时,为统计该文档的主题,此时我们的模型已定,也就是LDA的各个主题的词分布Φzi,j已经确定,我们需要得到的是该文档的主题分布θi

算法流程如下

  1. 对应语料库中每一篇文档的每一个词,随机的赋予一个主题编号z;
  2. 重新扫描语料库,对于每一个词,利用Gibbs采样公式更新它的topic编号;
  3. 重复第2步的基于坐标轴轮换的Gibbs采样,直到Gibbs采样收敛;
  4. 统计语料库中的各个文档各个词的主题,得到文档主题分布。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值