当前位置:   article > 正文

LDA模型 -- 追根究底_lda模型解决什么问题

lda模型解决什么问题

Beta分布

首先讲一下数学基础,就是狄里克莱分布。

首先要讲的就是beta分布.

                                     

Beta分布的表达式是这样的,X表示的就是随机变量,就是随机变量,表示gama函数,理解就是输入一个数据进去返回一个值给你,输入是n+1的时候,返回的是n的阶层,输入的是小数的话返回的是别的数字,可以理解为阶层的推广,beta分布有什么作用呢,可以从两点分布说起,刚才不是举了一个掷硬币的例子了么,硬币本身是不均匀的,正反两面不是各50%,可能是正面40%,反面60%,不知道这个分布参数具体是多少,试图通过实验得出分布参数,扔10万次,如果4万次正面向上,认为向上的可能形式40%,这个是频率学派的观点,因为有一个大数定理,当实验很大数量的时候,频率会逼近分布参数,这个事情也可以使用最大似然在里面得到的一个解释,但是如果有一些情况的制约,只允许你实验一分钟,或者只允许实验规定的次数,比如不能超过10次,这样的话样本就太小了,这个时候beta分布可以帮忙,硬币两点分布的参数p,出现正面向上的概率p,0.3,0.4,0.5都是有可能的,这里的概率是通过相同次数的实验得到的,我们认为这个p是满足beta分布的,满足这个式子,比如取值α等于7,β等于4,就得到这个公式,α和β都是预先给定的,假设硬币两点分布的p满足这个式子,p取0.35的可能性有多大呢,就是将x=0.35带进去,取值0.4的概率多少也,也是带入进去,都能计算出一个概率。

为什么一定要取beta分布呢,而且α等于7,β等于4,不能是别的分布么,这个是什么原因呢。

Beta分布和两点分布是共轭的,共轭的意思就是我们可以使用下面的式子表达。

如果硬币的两点分布的参数p满足beta分布的话,从随机的机器里面拿出一个p出来,这个p拿出来是满足beta分布的,然后再使用p来扔硬币,最后看扔硬币的结果还是满足beta分布的,就是我们从beta分布的先验分布出发,通过两点分布来扔硬币,最后的结果还是满足beta分布的,这个beta分布可以保持分布的原状,作为先验分布,使得扔硬币的过程一直保持扔硬币的状态,只是里面的α,β发生了变化,当扔了m1次正面,m2次反面的时候,一次相当于是通过固定次数得到的概率,比如说固定抛10次,做m1+m2词,看得到的正面概率pi,pi大于p的次数是m1,小于p的概率是m2,就变成了,开始的时候,beta分布可能有一些不合理,但是随着扔硬币的过程,观察这个结果,来纠正这个beta分布,反过来解释你的概率大概应该是多少,得到正面的概率应该是多少,比如一开始的实时α和β都是1,扔了10次,出现4次正面,m1等于4,m2等于6,这个时候p就满足beta(p|,4+4,7+6)这样的beta分布,这样就能得到我们能得到这个p的可能性,取最大可能,为什么取beta分布呢,beta和两点分布是共轭的,共轭的意思就是在这个过程中可以保持beta分布没有变化。

狄里克莱分布

 

这个是狄里克莱分布的表达式,α是一个向量,有α1-αk组成,p代表多点分布的概率,可能有k个点,约束条件就是这些概率的和等于1,所以这里这些符号写成向量的形式,其实是beta分布的推广,现在可以认为是一个掷一个多面骰子,使用多点的狄里克莱分布来描述,狄里克莱分布和多点分布是共轭的,掷骰子每一个面的概率,假设从狄里克莱分布抽出各个面的概率,再去掷骰子,这个就是多点分布了,这两个过程组合出来依然得到一个狄里克莱分布。

Gibbs抽样

还有一个是gibbs抽样,首先讲一下随机数产生,产生0-1之间均匀的随机数是比较简单的,编程的时候使用时间作为种子,产生随机数,如果产生的不是均匀随机数,是正态分布的随机数。

首先抽取u1和u2两个随机数,这两个随机数是在0-1之间的,对u1和u2做一个变换,Z0和Z1就出来了,他们相互之间是独立的,并且是满足标准正态分布的,得到正态分布能不能得到泊松分布,指数分布这些呢,有没有更加一般的办法可以解决这个情况呢,就是gibbs抽样。

假如有概率分布p(x,y),抽样的样本要符合这个分布,首先抽样出来的肯定是平面里面的一个点,首先从平面里面取一个初始点,这个初始点可以乱取,p(y|x)里面这个x0已经知道了,p(y|x0)=p(x0,y)/P(x0),x0是已知的,所有这个式子变成了一元概率公式,例如,p(x,y)是二元的正态分布,如果将x固定为x0的话,剩下一个y,y就满足一元的正态分布,一元的正态分布就可以抽样了,这样就能抽取y1了,同样的道理在y0知道的情况下就可以抽取x,p(x|y0),这个也是一员的概率分布函数,可以在分布密度的基础上做一个抽样,抽取x1,这样就得到的了x1和y1,就好像在平面中移动了两下,得到新的点之后又能重复这个过程,不断重复一直走下去,游走的过程是一个马氏过程,最终会收敛起来,收敛起来的点就是一个样本点。

首先去任意一个点作为初始点,先固定一个值,比如x,这个时候y就是一个以为概率密度,抽取出一个y,然后将有y固定成为上次抽取的y值,抽取x,然后将有x固定成为上次抽取的x值,依次下去,直到最终收敛,收敛的点就是一个样本点。

k点分布就是每个固定k-1个点,直到整个序列收敛。

抽样三个过程:

  1. 初始化
  2. Burn in 就是进入采样的过程,就是每走一步都是一个样本点,一直走下去就能描画出整个分布的情况,进入采样之前的过程就是burn in,就是抵消初始化位置的影响。
  3. 进入采样阶段,每走一步都是一个采样,知道将样本采集完,这个过程无穷无尽做下去,每一次都是一个样本。

这里有一个问题就是上一步和下一步之间不是条件独立的,如果想两个采样点之间将自相关去掉使得独立的话可以序列里面不要连续取值,每个一段距离再次取值,每个100步去一个样本点,这样可以看成是条件独立的。

LDA模型

   

α和β都是向量,代表一个狄里克莱先验分布,这两个先验分布分别会决定两颗骰子,一个是,一个是φk,这里的m往往代表的是文档,变化范围是1-m,表示骰子有k个面,这k个面表示选择不同的主题,首先通过狄里克莱分布产生m棵骰子,每篇文章分配一个骰子,这些骰子的分布参数是不一样的,有一些是均匀地扔出topic,有一些是不均匀的,每一颗骰子的参数都不相同,首先要决定每一篇文章的长度是多少,这个长度是抽取出来的,假设满足泊松分布,对m篇文章通过泊松参数产生长度,比如手上有10篇文章,第一篇可能是100个词,第二篇是300个词,长度符合泊松分布,这个条件不是很重要。

现在每一篇文章有自己的骰子,这些骰子是通过狄里克莱分布得到的,每一颗骰子的参数不一样,摇出不同面的概率不一样,拿出不同的文章的骰子,这篇文章有多长就扔多少次,比如第一篇文章是θ1,长度是100的话就扔100次,扔出来的结果是zm,n,m代表文章,n代表你扔了第几次,比如z1,20代表的就是第一篇文章的第20个词,n最大不会超过那篇文章长度,zm,n表示你摇的词应该属于什么隐分类,属于什么topic,zm,n的取值是1-k之间,因为topic是1-k,这个是第一个狄里克莱分布,α是多少维的呢,θm有k个面,所以θm是k维的,α也是k维的。

这里有了一个以β为参数的狄里克莱分布,又使用他来产生骰子,这个骰子是φk,k的意思是主题数,这个是为不同的主题选词的骰子,给第一个topic选词就使用φ1,给第二个topic选词就使用φ2。

下面看一下选词的过程,现在要给第m篇文章的n个位置选择,现在只有位置以及指导他是属于哪个topic,还没有词,根据zm,n,比如zm,n等于30,就说明topic是等于30,于是就找φ20这颗骰子,首先查一下zm,n是多少,然后找对应的φ,这颗骰子有多少个面呢,有v的绝对值这么多的面,这个v的绝对值就是词典的大小,总共有多少个词呢,有一个词典将所有的词都装在里面,词典里面的词和文章里面的词是不一样的,文章里面的词是可以重复的,词典里面的词是不能重复的,如果词典里面有10000个单词,这个φ30有多少个面呢,就是10000个面,β同样也是有10000个维度,因为两个维度要一致,如果值出来是7001,就将词典中第7001个位置的词赋值给这个位置,这个就是wm,n,这个过程就是这样的。

                         

这里为什么一定要狄里克莱分布呢,p(θ|w),这个w代表我们的语料,θ代表的是我们得参数,比如说扔骰子这些的多点分布,p(θ|w) = p(θ,w)/ p(w) = p(w|θ)*p(θ)/p(w),p(w)一般是一个固定的数,所以这个概率是和分子呈正比的,如果知道语料w再来求θ的话是一个后验概率,p(θ)满足先验分布的话,p(w|θ)就会满足多点分布,最终p(θ|w)就会满足狄里克莱分布,也就是先验和后验同时满足狄里克莱分布,这样的话我们看起来在数学上比较有美感,另外对数学的推导过程比较有好处,取狄里克莱分布的原因就是先验分布和后验分布统一,先验概率就是取骰子里面的参数的概率,在数学上统一,显得比较简洁。

为什么引入狄里克莱分布,因为经过多点分布之后,经过多次掷筛子之后还是一个狄里克莱分布,可以在分布统一底下求解这个问题,如果先验分布是x分布,后验分布是y分布,好像是掷一下骰子,整个分布都变了,在数学上就不太好。

LDA模型解决的问题:

我们手头上有一堆文章,每一篇文章里面有很多词,上面说的topic是想象出来的,现在还没有计算好,就是一篇文章里面有多少topic,一个topic里面对应有多少词,现在还不知道,现在手头上还只有语料,现在要求解的,求解的是模型里面的参数,φ1-φk,θ1-θk,将筛子扔出各个面的可能性求出来,φ代表的就是将词安排到某个位置里面去,类似Plsa里面P(zk|wj),描述的是词和topic之间的联系,θ1-θk是给文章里面的词选择topic,本质上就是告诉大家文章里面有哪些topic,实际上说的就是这个事情,就是对应p(zk|di),在行的维度上是topic,在列的维度上是文档,这里一个φ或者θ就是一个骰子,将每一个骰子,每一个面的概率求解出来,相当于是将Plsa里面的每一个元素求出来,只是那个时候使用线性代数的语言俩描述,现在使用概率的语言来描述,plsa可以看成是LDA的特殊情况来理解。

这些参数求解完了之后,相当于矩阵已经分解完了,比如说拿来一篇文档,拿到里面的词可以计算出这篇文档里面的topic分布的情况,另外可以计算两篇文档是不是相似,一系列的问题都可以解决了。

 

LDA如何进行训练

       训练算法的主要思路是这个样子的,首先给出一个联合分布公式,联合分布公式里面有一些计算要涉及到隐变量 topic,如果不知道这个topic是不知道怎么算出来的,所以这个联合分布公式给出来也没有什么用处。

从联合分布里面推导出条件概率公式,等一下来做gibbs分布,现在有一个联合分布,涉及到n个变量,假装里面n-1个变量已经知道了,在n-1个变量是给定值的情况下,在抽样给出最后缺失的变量,就得到新的坐标的分量,将其他的坐标求出来得到一个新的样本点,条件概率公式就是完成gibbs抽样的步骤。

通过gibbs抽样就可以将满足联合分布密度的样本点抽取出来,就是每个词跟他的topic,抽取出来之后联合分布里面的量就可以计算了,然后技能推测出需要的骰子各个面的概率,多点分布的参数就能推导出来。

这个公式就是在求联合概率密度,α和β是假设已知的,这个先验的狄里克莱参数,一般来说可以根据经验值来取α和β,也可以按照贝叶斯学派的基本思想,如果不知道怎么取的话就取全部等可能,α箭头里面的分量全部都是相等的,知道这些参数的情况下求w和z,w表示wm,n的全体,z表示zm,n全体。

因为w和α是条件独立的,z和β是条件独立的。

上式中φ是全体的狄里克莱分布,

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/928136
推荐阅读
相关标签
  

闽ICP备14008679号