LDA-Latent Dirichlet Allocation 学习笔记

以下内容主要基于《Latent Dirichlet Allocation,JMLR-2003一文,另加入了一些自己的理解,刚开始了解,有不对的还请各位指正。

 

LDA-Latent Dirichlet Allocation

JMLR-2003

 

摘要:本文讨论的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下的词分布为一个从参数为Dirichlet先验分布中sample出来的Multinomial分布(注意词典由term构成,每篇文章由word构成,前者不能重复,后者可以重复)。对于每篇文章,他首先会从一个泊松分布中sample一个值作为文章长度,再从一个参数为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

转载于:https://www.cnblogs.com/focus-ml/p/3713949.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

A5D2应用程序无法启动问题

给/lib/ld-2.22.so文件&#xff0c;建立名称为ld-linux.so.3的软连接即可。 或者编译程序的时候&#xff0c;用-s选项&#xff0c;将库文件编译进程序

mysql 表上限_mysql 数据库表的上限

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

app 图标规格参考表

转自&#xff1a;http://www.cocoachina.com/appstore/top/2012/1105/5031.html 像我一样记不住iOS应用图标像素尺寸的开发者不在少数&#xff0c;我经常需要查询不同设备上的应用尺寸&#xff0c;为了方便自己、方便大家&#xff0c;我制作了下面的图表供大家参考。 iPhone、i…

visual studio 的各个版本下载地址

Microsoft Visual Studio 6.0 下载&#xff1a;英文版360云盘下载&#xff1a; http://l11.yunpan.cn/lk/sVeBLC3bhumrI英文版115网盘下载&#xff1a; http://115.com/file/bew2qrau英文版迅雷下载&#xff1a; http://61.138.140.18/download/jlste_nw/vs6en.isoFTP下载&…

mysql数据表内容_MySQL数据表

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

.net Reflection(反射)- 二

反射 Reflection 中访问方法 新建一个ClassLibrary类库&#xff1a; public class Student{public string Name{ get; set; }public string School{ get; set; }public int Sum(int a, int b){return a b;}public string GetName(){return "this is book" ;} } /…

osg坐标系统

OpenGL的世界坐标轴向可以看做是&#xff1a;x轴向右&#xff0c;y轴向上&#xff0c;z轴向屏幕外。 在osg中实际上也是一样的&#xff0c;只不过漫游器在设置视点时把视点设置在了y轴负方向并朝向y轴正向&#xff0c;导致这二者看起来坐标系统不一致。 感觉像是OpenGL坐标系…

mysql数据库开启远程连接_安装MySQL数据库并开启远程访问

一、安装MySQL数据库MySQL安装在系统盘下(C:\Program Files)&#xff0c;方便系统备份。1.双击安装程序&#xff0c;勾选“I accept the license terms”&#xff0c;点击“Next”按钮。2.检测需要的安装&#xff0c;直接点击Next。3.按照下图所示步骤安装。4.设置密码&#xf…

sockaddr类型重定义

这时说的sockaddr类型重定义错误, 实际上包括一大堆: sockaddr, ;sockaddr_in等等. 这是由于windows.h和winsock2.h包含的顺序而造成的错误: 正确的顺序是先包含winsock2.h再包含windows.h, 但好多情况下, 程序最前端往往都是#include <windows.h>, 所以在后面的程序中(尤…

tomcat 访问去掉项目名 直接访问 localhsot

1.eclipse->项目->右键->Properties->Web Project Setting->context root 设置为"/"或者"" 2.tomcat5.0/6.0&#xff1a;<Host></Host>间加了一句<Context path"" docBase"/fts" debug"0" re…

mysql主从同步表结构_mysql主从同步的结构模式

一主一从(重要)&#xff0c;一主多从(最常用)&#xff0c;主从从&#xff0c;主主结构&#xff1b;控制主从同布时&#xff0c;备份指定的数据库而不是备份所有的库&#xff1a;1 在主数据库服务端配置&#xff1a;vim /etc/my.cnf[mysqld]binlog-do-dbdb_name #只允许同步这…

GDI+ 使用指南(basic guiding of GDI plus )

其实这个也没有什么用&#xff0c;毕竟已经是过时的技术了。不过技术的更新跟实际的使用还是有差距了&#xff0c;免不了还是要用这种过时的技术&#xff0c;所以还是记录下来&#xff0c;方便以后查阅。   GDI没记错的话是跟随XP诞生的&#xff0c;是XP系统上的图形绘制系统…

gunzip 和 unzip 解压文件到指定的目录

gunzip 和 unzip 解压文件到指定的目录 Linux 常用的压缩命令有 gzip 和 zip&#xff0c;两种压缩包的结尾不同&#xff1a;zip 压缩的后文件是 *.zip &#xff0c;而 gzip 压缩后的文件 *.gz 相应的解压缩命令则是 gunzip 和 unzip gzip 命令&#xff1a; # gzip test.txt 它会…

mysql 无法创建表_MYSQL-不能创建表

Cant create table .\ticket\user_role.frm (errno: 121)语法是对的&#xff0c;但显示上面的错误原因有三种1、表名重复2、以该名字命名的表之前创建过后来删除了&#xff0c;但是对应的.frm文件还留在磁盘上3、主键名字在全数据库范围内不是唯一的我出现的时候是第三个KEY FK…

3dmax模型转换为*.FLT格式的建模要点

要想在3dmax中建立模型&#xff0c;并将3dmax模型转换为OpenFlight模型并且能够使用&#xff0c;在Max中建模时我们必须注意以下几点&#xff1a;1.建立的模型要尽量采用比较简易的Box来表现&#xff0c;不能使用NURBS、polygon、patch建模方式建模。建议在3dmax中多采用Shape方…

一些有用的javascript实例分析(二)

一些有用的javascript实例分析(二) 原文:一些有用的javascript实例分析(二)1 5 求出数组中所有数字的和2 window.onload function ()3 {4 var oBtn document.getElementsByTagName("button")[0];5 var oInput document.getElementsByTagName("input&…

flume mysql hdfs_利用Flume将MySQL表数据准实时抽取到HDFS

一、为什么要用到Flume在以前搭建HAWQ数据仓库实验环境时&#xff0c;我使用Sqoop抽取从MySQL数据库增量抽取数据到HDFS&#xff0c;然后用HAWQ的外部表进行访问。这种方式只需要很少量的配置即可完成数据抽取任务&#xff0c;但缺点同样明显&#xff0c;那就是实时性。Sqoop使…

Gdiplus::GdiplusBase::operator new 函数不接受3 个参数问题的处理

微软的 DEBUG_NEW 和 GDI 不匹配造成的。 方法&#xff1a; 注释掉&#xff1a; #ifdef _DEBUG #define new DEBUG_NEW #endif

Careercup - Microsoft面试题 - 5428361417457664

2014-05-11 03:37 题目链接 原题&#xff1a; You have three jars filled with candies. One jar is filled with banana candies, one jar is filled with lemon candies and one jar has a mix of both. All the jars are mislabelled (i.e. all the jars have wrong labels…

erpnext mysql_windows7+docker+erpnext部署

erpnext 为开源的erp系统&#xff0c;采用python语言编写&#xff0c;本次部署采用windows7docker方式进行&#xff0c;erpnext需要运行python、redis、mariadb或者mysql、nginx。参考资料docker镜像erpnext基于ubuntu操作系统构建。pull erpnext镜像docker pull lukptr/erpnex…