zoukankan      html  css  js  c++  java
  • 【转】LDA

    论文看了前三个section, 然后搜资料发现了些不错的。

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

    LDA math: http://www.52nlp.cn/lda-math-%E6%B1%87%E6%80%BB-lda%E6%95%B0%E5%AD%A6%E5%85%AB%E5%8D%A6

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

    转自:http://www.xperseverance.net/blogs/2012/03/17/

    一、预备知识:

           1. 概率密度和二项分布、多项分布,在这里

           2. 狄利克雷分布,在这里,主要内容摘自《Pattern Recognition and Machine Learning》第二章

           3. 概率图模型,在PRML第九章有很好的介绍

    二、变量表示:

          1. word:word是最基本的离散概念,在自然语言处理的应用中,就是词。我觉得比较泛化的定义应该是观察数据的最基本的离散单元。word的表示可以是一个V维向量v,V是所有word的个数。这个向量v只有一个值等于1,其他等于0。呵呵,这种数学表示好浪费,我以前做过的项目里一般中文词在200-300w左右,每一个都表示成300w维向量的话就不用活了。哈哈,所以真正应用中word只要一个编号表示就成了。

         2. document:一个document就是多个word的合体。假设一篇文档有N个词,这些word是不计顺序的,也就是exchangeable的,LDA论文 3.1有说这个概念。论文中document的个数是M。

         3. topic:就是主题啦,比如“钱”的主题可能是“经济”,也可能是“犯罪”~ LDA中主题的表示是隐含的,即只预先确定主题的个数,而不知道具体的主题是什么。论文中表示主题个数的字母是k,表示主题的随机变量是z。

    好了,总结一下所有的变量的意思,V是所有单词的个数(固定值),N是单篇文档词的个数(随机变量),M是总的文档的个数(固定值),k是主题的个数(需要预先根据先验知识指定,固定值)。

     

    三、基础模型:

            先从两个基础模型说起:

           1. Unitgram model (LDA 4.1)

           一个文档的概率就是组成它的所有词的概率的乘积,这个一目了然,无需多说:

    p(w)=n=1Np(wn)

           图模型:

            2. Mixture of unigrams (LDA 4.2)

            假如我们假设一篇文档是有一个主题的(有且仅有一个主题),可以引入主题变量z,那么就成了mixture of unigrams model。它的图模型如下图:

    p(w)=zp(z)n=1Np(wn|z)

           这个模型的generate过程是,首先选择一个topic z for each docoment,然后根据这个z以及p(w|z)独立同分布产生w。观察这个图,z是在N饼外面的,所以每一个w均来自同一个z,就是说一个文档N个词只有一个topic。这和LDA中z在N饼里面不一样。

    四、LDA

           接下来正式说LDA的产生过程,对于一个文档w:

          1. 选择 NPossion(ξ)

              这一步其实只是选个单词的个数,对整个模型没啥影响

          2. 选择一个多项分布参数 θDir(α)

              这α是狄利克雷分布的参数(k+1维),θ⃗ =(θ1, , θk)是产生主题的多项分布的参数,其中每一个θi代表第i个主题被选择的概率。从狄利克雷产生参数θ之后,再用θ去产生z

          3. 上两步完成后,开始产生文档中的N个词

                  (a) 首先选个一个topic zMultinomial(θ)

                        z是从以θ为参数的多项分布中挑选出来的,总共有k个topic,根据θ的概率参数选择其中一个topic作为z

                  (a) 然后选择一个word from p(wn|zn,β)

                       这个参数β也是多项分布,是一个k×V的矩阵,表示从zi到wj的产生概率即βij=p(wj=1|zi=1)。若已选定zn,则矩阵的第n行就成了用来选择产生w的多项分布,根据这个多项分布产生一个w

           至此,产生过程完成。上概率图模型:

    整个图的联合概率为(只算单个文档,不算整个corpus的M个文档):

    p(θ,z,w|α,β)=p(θ|α)n=1Np(zn|θ)p(wn|zn,β)

    把上式对应到图上,可以大致解释成这个样子:

    在上面这个新图中,LDA的三个表示层被用三种颜色表示了出来:

    1. corpus-level (红色):α和β是语料级别的参数,也就是说对于每个文档都是一样的,因此在generate过程中只需要sample一次。

    2.document-level (橙色):θ是文档级别的参数,意即每个文档的θ参数是不一样的,也就是说每个文档产生topic z的概率是不同的,所以对于每个文档都要sample一次θ。

    3. word-level (绿色):最后z和w都是文档级别的变量,z由参数θ产生,之后再由z和β共同产生w,一个w对应一个z。

    五、几何学解释

    来看下面这个图:

            这个图的意思是这样的,外面大三角形的三个顶点代表三个word,这三个word组成一个simplex,那么这个simplex中的一个点,代表什么意思呢?它代表的意思就是一个点就是一个产生这三个word的多项分布的概率密度(对于这个图多项分布的它是一个三维向量)。具体点来说,例如红色的点p1,它就在word1上。这个意思就是说,p1是一个多项分布,其参数为(1.0, 0, 0),也就是它产生word1的概率为1,产生其它两个word的概率为0。再来看蓝色的点p2,它产生word1的概率正比于它到word1对边的距离(注意可不是到word1那个点的距离哈)。因为正三角形内部任意一点到三边的垂线之和等于高,也就是可以视为等于1。那么正好这个性质满足概率之和等于1。所以p2到三边的垂线非别代表p2产生垂线对面那个顶点的概率。因此,p2产生word 1的概率看起来像是0.1, word2的概率像是0.4,word3像是0.5。

           了解了上面这层意思之后,我们再来看这个topic simplex。它是包含在word simplex里面的(sub-simplex),所以topic simplex上的一点同时也是word simplex上的一个点。这样topic simplex上的一个点,就有了两层含义,一层含义是它是一个产生word的多项分布概率密度,另一层含义就是它是产生topic的多项分布概率密度。在这个图上,还可以发现topic的点相对于word simplex是已经固定的,其实这topic simplex 上的三个顶点到word simplex上的三个顶点对边垂直线总共9个距离,也就是9个概率值,正好是一个3×3的矩阵,这个矩阵就是LDA中的β参数。

          知道了这些之后,我们就可以来看mixture of unigrams在图上应该怎么表示了。还记得mixture of unigrams是要先选择一个文档的topic z的,然后根据这个topic产生word。所以它在这个图上的产生过程就是,先随机挑选topic simplx(注意是topic simplex)三个顶点中的一个,然后根据这个顶点到word simplex顶点对边线的距离,也就是这个顶点在word simplex上的多项分布产生每一个word。

          再来看pLSI,图中间每一个带叉的圈圈就是一个pLSI中的文档,每一个文档(在pLSI中文档被视为观察变量,即每个文档都被视为word那样是有编号的)都有一个独立的产生topic的多项分布,文档点的位置就表示了它产生三个topic的概率值。

         对于LDA,汗,不是很理解,LDA places a smooth distribution on the topic simplex denoted by the contour lines。只好先放着了。

         2012@3@28,关于上面这个LDA的图形为啥是曲线的问题,我专门请教了北大赵鑫大牛,他的回答很给力而且一针见血。要理解LDA为啥是曲线,要先从pLSI为啥是点说起。因为pLSI中,由文档w产生topic z的概率是一个参数,对于每个单独文档这个参数要被估计一次,参数可不是随机变量,而是固定的值。因此pLSI中每个文档在图中表示为一个确定的点。而LDA呢,文档w产生topic z的概率在论文里后面inference部分已经给出了,它是p(z|w)=p(θ,z|w,α,β)=p(θ,z,w|α,β)p(w|α,β),也就是隐含变量z的后验分布,它是一个概率分布,这也是整个LDA inference部分最需要估计的东东。因此图中用曲线来表示LDA,也就是说LDA places a smooth distribution on the topic simplex …

         2012@4@18 今天看到《Parameter estimation for text analysis》(PETA)里的内容,可以更深入地解释“LDA places a smooth distribution on the topic simplex denoted by the contour lines”这句话。首先给出PETA里面的原话:LDA with a uniform prior Dir(1) is a full Bayesian estimator for the same model for which PLSA provides an ML or MAP estimator。这句话说明了pLSA是用的是最大似然推断或最大后验推断,在最大后验推断中,p(z|w)是一个给定的置信值(这一点PETA中也有说明:最大后验推断中的置信值不等同于概率),这个置信值是一个常量。LDA用的是贝叶斯推断,所以LDA中的p(z|w)是一个概率分布。

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

    转自http://blog.sina.com.cn/s/blog_5033f3b40101flbj.html

    一、tf-idf scheme

    tf-idf scheme: 首先选中一个基字典basic vocabulary, 然后对每一个文档doc,查找每个词word的出现次数,然后进行归一化,最后得到的表示形式为一个term-by-document的矩阵X,而将任意长度的doc表示成固定长度的一个向量,而所有的doc则可以用一个list,也就是矩阵X,来表示:

                                              doc_1      doc _2     …    doc _ N

    word_1          *     *           …    *

    word _2         *     xij         …    *

    ……                     … …

    word _|V|              *     *           …    *

    其中xij=#num of word_i / # num of total words in doc_j .

     

    优点:可以简明易懂的将每个文档表示出来,而且无论每个文档本身长度如何,都缩减为固定长度(|V|)的向量;

    缺点1.如果选择的词典vocabulary比较大,那这个表示矩阵的维度也会比较大,而且其list的长度会随着库中文本数目的增加而增加;2.另外,这样的表示没有考虑文档与文档之间以及各文档内部的结构信息。

    个人理解:除以上缺点外,这种方法的相似性判断建立的基础是认为文档之间重复的词语越多越相似,然而有一些属于语义层的相关,而并非表面的词语的相关,例如‘电脑’与‘微型计算机’这两个词并不相同,但意思相同,这时候如果用tf-idf方法通过统计单词个数比较相似性的方法,效果就不会太好。而主题模型就解决了这个问题,它的相关性体现在隐藏的主题的相关性上,而不是仅仅由表面的词语的重复度来决定。,如下图所示(摘自Thomas Huffman_ppt)。

    LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记

    二、LSI-Latent Semantic Indexing

    针对缺点1LSI1990)将矩阵X进行奇异值分解,然后只取一部分作为其特征,此过程其实就相当于对X进行pca降维。将原始的向量转化到一个低维的隐含语义空间中,而保留下来的维度(根据奇异值大小决定)所对应的奇异值就对应了每个‘隐含语义’的权重,去掉的那些维度就相当于把那些不重要的‘隐含语义’的权重赋值为0.

    LSI的作者Deerwester称由LSI得到的特征能够捕获一些基本的语义概念,例如同义词等。个人理解,这是由pca的性质决定的,。

    LSI如其名字Latent Semantic Indexing, 旨在在词频矩阵X的基础上找出latent semantic,潜藏的语义信息。

    其缺点是:不能解决多义词问题;

    个人理解:这种方法就像词包模型一样,有一定的道理,但没有明确化,不像概率模型一样具体化。原文中说‘Given a generative model of text, however, it is not clear why one should adopt the LSI methodology’,个人觉得就是说他的理论基础不够明白,所以后续推出PLSI,就是能够从数学上,从理论上具有严格意义的说明是怎么回事,到底是为什么有效,又怎么得出理论解。

     

    三、pLSI-probabilistic LSI

    LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记

    (pLSI图模型表示)

     

    pLSI如上图,其中D,Z,W分别表示文档doc,主题topic,和单词word,在pLSI中对每一个都进行了建模,从文档到主题,建模为混合模型,从主题到单词也是一个混合模型,每个单词都是从这个混合模型中抽取出来的,不过在pLSI中每个混合模型的成分都是multinomial分布,根据上图,其中后验概率可以表示为:

    p(z_k|d,w)=p(w|z_k)p(z_k|d)/sum_l(p(w|z_l)p(z_l|d))

    EM算法可以求解出各成分的参数。

     

    个人理解:1.pLSI中,每个doc已经可以有多个topic,每个topic出现的概率不等,这一点在LDA中也有。只不过LDApLSI多了一层。

    2.上述混合模型的理解:类比于混合高斯模型一样,在混合高斯模型GMM中,是由多个高斯分布混合mixture而成的,在这里,每个混合模型的分量不是高斯分布,而是multinomial分布-多项式分布而已,而且区别于普通GMM,这里是有两层结构的,每一层都是一个混合模型,doc->topic层是一个混合模型,topic->word层也是一个混合模型,每个混合成分都是一个多项式分布,然后每个混合模型中包含了各个成分本身的参数和各个成分的权重的参数。

    2.从上面这个图可以看出在pLSI中已经有了topic的概念,而且对于文档-主题和主题-单词两个层面都进行了建模(混合模型),但是也可以看出这个模型是对每一个文档集的,每一个文档集都对应着模型的一堆参数,如果新来一个文档(不在原来的训练集里),就没法处理。而LDA就可以不仅对已有的文本进行估计,也会对其他新的相似的文本给一个较高的probability。(注:在pLSI模型中,假设有ktopicvocabulary长度为V,对于这ktopicMmixture,那总共有kV+kM个参数,这个数目是随着M的增加而增加的,当文本集中文档数目太大时就会overfitting)。

    3.每个文档的表示就是一个list,其中的每个number表示了每个topic在其中的比例(mixing proportions)。这种表示,当文本集很大时,仍然会有很长的一个list

          

    四、LDA-latent dirichlet allocation

    LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记

    LDA的图模型表示)

    LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记

    然后,由其概率模型图可以比较容易的得到模型如下:

    LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记

    推断

    计算后验概率:LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记


     

    似然函数LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记


     

    这个式子中对于betaaplha都有指数幂而相互耦合,两个参数求导后都不能消掉,因此没办法直接用最大似然或者em求解,这时候引入变分推断(variational inference)。变分推断就是为了顾及后验分布,在无法直接对似然函数求解的情况下寻找一个似然函数的下界。然后利用EM的思想进行迭代,让这个下界逐次增大,达到最后收敛。

     

           针对pLSI的缺陷,LDA很大的一个特点是将doc->topic这一层的mixture weights作为是一个k-d的随机变量,而不是像pLSI一样作为直接与训练集中的每个doc相关联的参数集合。就是原文中的theta作为一个随机变量。对于一个有ktopic的模型来说,他总共有k+kV个参数(alphak个参数,betakV个参数),与训练集中的文档数目M无关。

     

    基础:无论是LSI,PLSI还是LDA都有一个假设,就是无序性假设(exchangeability),即认为文档中的word的出现位置先后没有关系,文档集中的各个doc的位置也不计较先后关系。

           LDA中,文档中topic的分布取为multinomial分布,其先验取为multinomial分布的共轭先验-dirichlet分布;而每个topicword的分布也取为multinomial分布,其先验也取其共轭先验-dirichlet分布。

           参考网址1,关于LDA中各个分布的一个通俗解释如下:“我们可以假想有一位大作家,比如莫言,他现在要写m篇文章,一共涉及了KTopic,每个Topic下的词分布为一个从参数为http://latex.codecogs.com/gif.latex?vec{eta}Dirichlet先验分布中sample出来的Multinomial分布(注意词典由term构成,每篇文章由word构成,前者不能重复,后者可以重复)。对于每篇文章,他首先会从一个泊松分布中sample一个值作为文章长度,再从一个参数为http://latex.codecogs.com/gif.latex?vec{alpha}Dirichlet先验分布中sample出一个Multinomial分布作为该文章里面出现每个Topic下词的概率;当他想写某篇文章中的第n个词的时候,首先从该文章中出现每个Topic下词的Multinomial分布中sample一个Topic,然后再在这个Topic对应的词的Multinomial分布中sample一个词作为他要写的词。不断重复这个随机生成过程,直到他把m篇文章全部写完。这就是LDA的一个形象通俗的解释。”

     

    推断:后验概率p(theta,z|alpha,beta,w)中theta与beta有指数幂不能直接求解,为此得用近似推断的方法,文章中用的是变分推断。变分推断就是要找一个与原来的不能直接求解的后验概率等价或近似的函数q,这个函数要好解,一般最简单直接的方法就是假设q中各个参数独立,形成q=product_n(q_n),这篇文章中选取的q为:

    LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记

    对应的图模型为

    LDA-Latent <wbr>Dirichlet <wbr>Allocation <wbr>学习笔记,也就是将原来的图模型中的w节点去掉并且去掉了theta 与z之间的边而得到近似。

    在得到近似函数后,就通过求解最优近似函数q的参数来得到原后验的参数。

     

    一些参考资料:

    1.http://blog.csdn.net/yangliuy/article/details/8330640,这里是一个系列,总共有5篇文章,从PLSAemLDA都有介绍,其中有pLSA的详细实现过程;

    2. http://hi.baidu.com/hehehehello/item/677f9446b729a72210ee1e8b pLSILDA详细的区别;

    3. http://hi.baidu.com/linecong/item/8c115b196232147a7b5f2598  

    4.百度搜索官方博客:http://stblog.baidu-tech.com/?p=1190

    5.丕子博文

    6.关于LSA中用到的SVD奇异值分解可以参考之前转的一篇文章:  http://blog.sina.com.cn/s/blog_5033f3b40101a61t.html

    7.plsa http://moonwith.blog.163.com/blog/static/12368689120099220115495/

    其他资源:以下摘自网络:

     (1)D. M. Blei, et al., "Latent Dirichlet allocation," Journal of Machine Learning Research, vol. 3, pp. 993-1022, 2003.

    (2)T. L. Griffiths and M. Steyvers, "Finding scientific topics," Proceedings of the National Academy of Sciences, vol. 101, pp. 5228-5235, 2004.

    (3)D. M. Blei, et al., "Hierarchical Topic Models and the Nested Chinese Restaurant Process," NIPS, 2003.
    (4)Blei的LDA视频教程:http://videolectures.net/mlss09uk_blei_tm/
    (5)Teh的关于Dirichlet Processes的视频教程:http://videolectures.net/mlss07_teh_dp/
    (6)Blei的毕业论文:http://www.cs.princeton.edu/~blei/papers/Blei2004.pdf
    (7)Jordan的报告:http://www.icms.org.uk/downloads/mixtures/jordan_talk.pdf
    (8)G. Heinrich, "Parameter Estimation for Text Analysis," http://www.arbylon.net/publications/text-est.pdf
    基础知识:
    (1)P. Johnson and M. Beverlin, “Beta Distribution,” http://pj.freefaculty.org/ps707/Distributions/Beta.pdf
    (2)M. Beverlin and P. Johnson, “The Dirichlet Family,” http://pj.freefaculty.org/stat/Distributions/Dirichlet.pdf
    (3)P. Johnson, “Conjugate Prior and Mixture Distributions”, http://pj.freefaculty.org/stat/TimeSeries/ConjugateDistributions.pdf
    (4)P.J. Green, “Colouring and Breaking Sticks:Random Distributions and Heterogeneous Clustering”, http://www.maths.bris.ac.uk/~mapjg/papers/GreenCDP.pdf
    (5)Y. W. Teh, "Dirichlet Process", http://www.gatsby.ucl.ac.uk/~ywteh/research/npbayes/dp.pdf

    (6)Y. W. Teh and M. I. Jordan, "Hierarchical Bayesian Nonparametric Models with Applications,”
    http://www.stat.berkeley.edu/tech-reports/770.pdf
    (7)T. P. Minka, "Estimating a Dirichlet Distribution", http://research.microsoft.com/en-us/um/people/minka/papers/dirichlet/minka-dirichlet.pdf
    (8)北邮论坛的LDA导读:[导读]文本处理、图像标注中的一篇重要论文Latent Dirichlet Allocation,http://bbs.byr.edu.cn/article/PR_AI/2530?p=1
    (9)Zhou Li的LDA Note:http://lsa-lda.googlecode.com/files/Latent Dirichlet Allocation note.pdf
    (10)C. M. Bishop, “Pattern Recognition And Machine Learning,” Springer, 2006.
    代码:
    (1)Blei的LDA代码(C):http://www.cs.princeton.edu/~blei/lda-c/index.html
    (2)BLei的HLDA代码(C):http://www.cs.princeton.edu/~blei/downloads/hlda-c.tgz
    (3)Gibbs LDA(C++):http://gibbslda.sourceforge.net/
    (4)Delta LDA(Python):http://pages.cs.wisc.edu/~andrzeje/research/deltaLDA.tgz
    (5)Griffiths和Steyvers的Topic Modeling工具箱:http://psiexp.ss.uci.edu/research/programs_data/toolbox.htm
    (6)LDA(Java):http://www.arbylon.net/projects/
    (7)Mochihashi的LDA(C,Matlab):http://chasen.org/~daiti-m/dist/lda/
    (8)Chua的LDA(C#):http://www.mysmu.edu/phdis2009/freddy.chua.2009/programs/lda.zip
    (9)Chua的HLDA(C#):http://www.mysmu.edu/phdis2009/freddy.chua.2009/programs/hlda.zip
     
    --------------------------------------------------------------------------------------------------------------------------------------------------
    一个分布式的LDA
    http://cxwangyi.github.io/story/html/02_lda_and_mapreduce.md.html
  • 相关阅读:
    .net core2.2
    9_山寨系统调用 SystemCallEntry
    7_API调用
    8_InlineHook
    6_再次开中断STI的正确姿势
    5_中断现场下
    4_中断现场中
    3_中断现场上
    2_多核复杂性
    1_中断提权
  • 原文地址:https://www.cnblogs.com/parapax/p/3687636.html
Copyright © 2011-2022 走看看