LDA的发展过程

摘要:本文讨论的LDA是对于离散数据集,如文本集,的一种生成式概率模型。LDA是一个三层的贝叶斯分层模型,将数据集中每一项,如每个文本,建模为某些未知的topic组成的集合的混合。每个topic又建模为某种混合概率分布。在文本建模中,话题的概率就提供了每个doc的具体表示。

个人理解:1.生成式模型,就好像我们要写出一篇文章(生成一篇文档),我们在下笔的时候脑袋里要先有这个文章的主题,然后在这个主题下再构建合适的词来组成文档。这样的过程就是这篇文章里‘生成’的过程。

2.doc->mixture of topics; 每个topic->mixture of words,文中的Dirichlet分布也体现在这个分布的分布上,原因后续讲解。

 

基础知识,如果都懂,可以跳过:

一、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{\beta}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

topic model的介绍性文章已经很多,在此仅做粗略介绍,本文假设读者已经较为熟悉Topic Medel。

Topic Model (LDA)认为一个离散数据集合(如文档集合,图片集合,为行文方便,本文统统以文档集合作为描述对象,其他的数据集合只需换掉对应的术语即可)是由隐含在数据集合背后的topic set 生成的,这个set中的每一个topic都是词的概率分布。对于文档中的每一篇文档,先抽取一个topics proportion \theta;然后对于这个文档中的每一个词的位置 w_i, LDA 先从\theta中选择一个topic,然后再从这个topic对应的词分布中选择一个词去填充;按照上述步骤直到整个文档集合产生完毕。


上述是LDA生成一个文档集合过程的简要介绍,下面我会把目前出现的topic models进行分门别类。

我认为topic models主要可以分为四大类:1)无监督的、无层次结构的topic model;2)无监督的、层次结构的topic model;3)有监督的、无层次结构的topic model;4)有监督的、层次结构的topic model。

对于1)主要有: PLSA, LDA, Correlated Topic Model, PAM,Concept Topic Model等

对于2)主要有: HLDA, HDP,HPAM等

对于3)主要有: S-LDA, Disc-LDA, MM-LDA, Author-Model, Labeled LDA, PLDA 等等

对于4)主要有: hLLDA, HSLDA

以上模型对应的文章名字,用google直接搜索即可得到,这里就不列出。


很多人都在或者想使用已有的Topic Model,当然最理想的应该是我们自己设计适合我们问题的topic model来解决问题。

然而这是很难的一个问题,一方面我们需要较为合理地设计适合问题的模型;另外一方面还需要较为强的数学基础去为自己的模型做相关的数学推导,如参数学习和推理。

在这里,就我自己的经验,总结了一下topic model设计中的一些设计原则

A. 在topic model的设计中,非常关键的一点是怎么看待topic,下面是一些总结:

1). 把topic看为一个词的分布,这是最基本的;如LDA等模型

2). 不仅把topic看做是一个词的分布,而且topic还可以是一堆topic的分布,即建立了topic之间的层次关系;如HPAM模型等

3). 把topic对应于标签,即一个topic有对应的一个标签,这样就可以建立有监督的topic model;如labeled LDA模型等


B. 另外,在topic model中建立有监督模型的方法大概有两类:一类是生成式的;一类是判别式的

对第一类,主要是把标签看为了一个topic,从而建立一个概率模型,用数据去训练得到参数,然后去应用;如labeled LDA, HLLDA等

对第二类,主要是先应用topic model的方法建模相应的变量,然后认为标签和这些变量存在某种关系,如回归关系(S-LDA)或者正态分布等;例如HSLDA等模型


C. 如何建立层次关系

目前主要有这样几种方法:

1). 用Hierarchical Dirichlet process去建立层次关系,比较有名的模型,如HDP,HLDA等;

2).  人工指定存在某种层次关系,然后去刻划之间的关系,如HPAM/PAM模型;

3).  在有监督的模型,这种层次关系已经存在(例如标签是一个层次结构),一种处理方法是认为这些标签都是topic,然后用概率模型去刻划变量之间的关系,如labeled LDA;


至于如何进行推理和学习,常用的方法有EM算法,变分推断方法,Gibbs采样方法等,最主要还是最后两种方法,

其中最简单的是Gibbs采样方法,最容易理解,然后是EM算法,最后变分推断方法是最难的,需要较多数学基础,由于内容多,这里只作简单的介绍,以后有时间再详细的写写。

EM算法:这个是PLSA论文里面用到的方法,在数学领域早已有之,它其实不是一个算法,而是一类问题进行近似计算的理论框架,主要的思想就是在Q函数的基础上进行迭代,最后逼近最优值,值得注意的是,最后的值不一定是全局最优值,很大可能是局部最优,这个算法相对较为简单,花上几个小时应该能够弄明白;

变分推断方法:这个方法的基本思想是,如果一个分布很难求,我们就找一个容易求的近似分布来代替它,如何来刻划近似呢?就是用KL度量来衡量两个分布的近似程度,在得到容易求的近似分布之后,问题就变简单了。

Gibbs采样方法:这个算法的基本思想是:用来自一系列的容易采样的条件分布的样本来得到对应的全概率分布的样本,从而用这些样本来求取相应的统计量,这里的理论基础是这一系列的条件分布在经过一段时间采样后会达到平衡分布,这个平衡分布就是要求取的全概率分布。这里说得较为简单抽象,具体详细内容请参考蒙特卡罗方法的相关书籍。


by MXL, PKU,SEWM group



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据降维是一种常见的数据预处理技术,可以通过降低数据维度来减少计算复杂度、节省存储空间、提高算法效率等。下面是数据降维方法的发展历程: 1. 主成分分析(PCA):PCA是最早被提出的降维方法之一,它通过线性变换将高维数据映射到低维空间中,使得数据在新的坐标系下具有最大的方差。这样可以最大程度地保留数据的信息。 2. 线性判别分析(LDA):与PCA相似,LDA也是一种线性变换技术,但是它的目标是在保留数据信息的同时,最大化不同类别之间的距离,最小化同类别之间的距离。因此,LDA通常用于分类问题。 3. 局部线性嵌入(LLE):LLE是一种非线性降维方法,它基于局部线性近似,通过保持距离关系来实现数据降维。LLE将每个数据点表示为其最近邻点的线性组合,然后在低维空间中寻找最佳表示。 4. 独立成分分析(ICA):ICA假设数据由多个独立成分组成,通过寻找独立成分来实现数据降维。ICA通常用于信号处理和图像处理领域。 5. t-SNE:t-SNE是一种非线性降维方法,它通过最小化高维数据和低维数据之间的KL散度来实现数据降维。t-SNE能够很好地保留数据的局部结构和聚类结构,因此在可视化和聚类分析中被广泛应用。 以上是数据降维方法的发展历程的简要介绍。随着人工智能和机器学习领域的不断发展,数据降维方法也在不断更新和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值