LDA 隐含主题模型学习
来源:互联网 发布:话吧软件 编辑:程序博客网 时间:2024/04/30 09:50
说明:本文主要是本人在学习LDA相关总结,只做学习和交流用途。
目录:
0、LDA概率主题模型能做什么?
1、主题模型原理及一些数学公式(未完成)
2、LDA Gibbs Sampling 原理及 JGibbs 原代码说明(未完成)
3、LDA相关参数应用,如何优化?(未完成)
4、LDA拓展及应用(未完成)
先说说我开始学习缘由。主要组里是需要做些大量文本的文本信息处理,并且没有标注数据。而当时我了解的机器学习算法,比如朴素贝叶斯网络、支持向量机、决策树、KNN等,都比较偏向硬性的文本分类。当时也只好抱主题模型这个大腿了。现在看起来也许主题模型也只是NLU领域一个工具而已,但是其入门需要一定数学门槛,而且建立模型以后,还是不能直接应用于各种任务,还是需要对模型进行拓展。我也没用老师指导,只能自己查文献,找博客。当时走了不少弯路,希望大家能在学习NLU 算法的时候少走弯路。不过包括CSDN上有各种牛人,大家在学习算法的时候一定要善于借鉴这些牛人的博客。
—————————————————快乐的分割线———————————————————————
0、LDA概率主题模型能做什么?
主题模型(Topic Model) 有啥用?在NLP中用处还蛮大的。
a.自动发现大量文本中的规律性。首先概率主题模型提出一个“主题”的概念,可以自动发现主题,并且将主题相关的词语列出来。比如对大量科学论文进行LDA建模,可以将生物相关的主题发掘出来,并且给出主题词如“动物”、“植物”、“基因”。并且这个发现过程是非监督的,不需要人工干预的,很适合处理海量网络文本信息。
b.对于一篇文档如果很长的话,比如有几万字,如果我们使用文档的词语作为信息处理的单元,显然信息量太大,相当于一个上万维的向量,必须要进行信息维度的降维。而LDA主题模型正是一个良好的降维模型。比如我们将主题定为100个,对文档进行建模,就可以将一篇文档的信息降成100维。如下图。
这个图片可这么解释:
假如有M篇文档(doc),这些文档的词典的大小V,用矩阵C来表示文档集合,则Cij为第i篇文档中对应词典的第j个词的词频。那么矩阵C的大小有C=M*V。如果M=10000,V=5000,我们需要处理的数据量有500M个整数。 对这个矩阵处理起来就非常费时费力了。
那么我们可以利用主题模型进行简化。在主题模型看来,文档和词语背后都隐含一个主题的参量。假设M篇文档隐含K个主题(一般K<<M,K<<V),那么对于每个词语,对应每一个主题都有一个概率,这就是矩阵,大小是K*V的,在主题模型里点含义是
。
对于每篇文档,对应每一个主题也有一个概率,这就是矩阵,大小是M*K的。含义是
。
则每个词的产生概率为:
整篇doc的产生概率:
这样,如果是上面M=10000,V=5000的文本,进行主题建模,假设K取50,就可以得到一个50*5000的矩阵和一个10000*50的矩阵。利用这个矩阵进行文档的其他分析如聚类、分类,就可以大大减小处理的数量级。
生成的矩阵也很有价值。对于每个词v对于每个主题k,都可以给出一个概率P(v|k)。如果我们提取主题k对应的概率最大的T个word,就可以一定程度上表征这个主题。如下图,左边的图可以用来表征单篇文档在各个主题的概率,右边的4列词表则是列出了4个主题最相关的词。黑体加引号的词应该是作者Blei 自己总结的主题名称。顺便Blei就是LDA的发明者,机器学习明星科学家吴恩达的徒弟,好像Stanford Machine Learning第一节课上还露脸了。(吴恩达,Andrwa Ng,百度首席科学家,也是Latent_dirichlet_allocation的第二作者)。
图片来源:probability topic model Blei 2012
闲话休提。另外可以用来提取关键词,计算词的最大熵、互信息等等。
同样主题模型也可以对短文本进行升维。(这是我到猜测,我没有找到文献支持这个说法,请高手指点)
现在很多处理Microblog(微博、twitter)短文本也采样主题模型。
c.主题模型的本质是词频的多层贝叶斯网络。因此在进行适量的修改后,主题模型可以完成诸如文本聚类、文本摘要、信息提取(Information Retrieved)、话题趋势分析、个性化新闻推荐等。Topic Model 在百度、google等大公司都有重要的应用。而且,而且,更不可思议的是,这个3层贝叶斯模型在图像处理中都有用途哦。
如果您觉得Topic Model 很对自己的路子,建议您分4步学习Topic Model 。
0x1 大致了解主题模型及其参数,不需要深入(因为概率模型太繁琐了)
0x2 学会一种LDA的库,得出自己的主题模型
0x3 尝试修改参数、优化模型,这个时候会发现需要深入了解,并且觉得也没有那么难
0x4 在应用LDA后,你会渐渐觉得不满足了,会自己尝试修改代码,这时候就可以大量阅读文献,并且站在山顶上,一览众山小啦
1、主题模型原理及一些数学公式
什么是主题(topic)?
什么是主题呢?没有学概率主题模型之前,我觉得还蛮好回答的,就是一段文本主要说了些什么呗。搞了概率主题模型,突然发现蛮难解释这个主题的,此“topic”非我们常说的“主题”。
LDA主题模型示意图 从LDA数学八卦转载,版权归原作者
Topic 翻译为“主题”,也可以翻译为“话题”。借用 LDA数学八卦 rickjin的语言,我们可以这样解释主题模型:
在LDA模型看来,文章是这样产生的:
上帝有一天没事做,想创造一篇(或者多篇)文章。但是上帝就是上帝,做什么事情都要按照祂的规律。于是祂让天使们送来2个坛子,一个坛子是“文档-主题”坛子(doc-topic),一个是“主题-词语”坛子(topic-word)。“文档-主题”坛子里的是决定文档属于哪个主题的骰子。“主题-词语”坛子里是很多决定这个主题输出哪个词的骰子。
于是,上帝开始创造文章了!
0x00 祂首先从“主题-词语”坛子里按照一定规律拿出K个骰子,并编号为0~K-1,说:“这篇文章就用这K个主题吧。”
0x01 接着祂从“文档-主题”的坛子里按照一定规律拿出一个骰子,抛出去,骰子显示了数字j。
0x02 于是祂从K个骰子骰子中取出第j个,抛出去,骰子显示了词w。
0x03 祂重复0x01到0x02,知道祂觉得这篇文章可以完成了。
这就是LDA主题模型示意图所表示的过程。
如果您对这个概率学过程不太感冒,请先跳到 JGibbs 原代码说明 那一部分。
几个问题的说明:
上帝三下五除二创造了这篇文章。可旁边一个小天使没看懂这个过程,就偷偷问大天使:“我对上帝创造文章对过程还不太清楚,上帝的手真快啊,他是怎么首先从“主题-词语”坛子里按照一定规律拿出K个骰子的呢?”
大天使摸摸小天使的头说:“你真是个勤学好问的好孩子。来,我来告诉你吧。在这之前,我先讲个故事吧。
“在我还没有成为天使的时候,我为人谦虚、智慧过人、乐善好施、信仰虔诚。但是魔鬼总喜欢引诱聪明人的灵魂。有一天,魔鬼就来找到我,用很多为难的事情来考验我,我都没有被难倒。魔鬼生气了,开始耍赖,问了我一个问题:’加百列,之前那些问题,对你来说太简单了。我还有最后一个问题,如果你能解决,我就永远不为难你了。
这里有一个魔盒,我按20下会生成20个随机数,每个数都服从(0,1)的均匀分布,你给我猜猜看,第7个和第13个是什么?”
“可是我不明白,我是问上帝拿骰子的规律,您给我扯魔鬼干啥呢?”小天使听的一头雾水,着急了起来。
“孩子,你还年轻啊。如果你仔细想想,你会发现,上帝的骰子同我说的这个魔鬼的魔盒游戏,规律是相同的啊。”大天使和蔼地对小天使说。
小天使于是瞪大了眼睛,侧耳倾听,究竟上帝的骰子同魔鬼的魔盒游戏究竟哪里是相同的。
这个问题用概率学语言表述:
图片出处:LDA数学八卦 0.3.3 游戏3
魔鬼要求的这2个数满足的Dirichlet分布,
如果不止要求2个数,而是要求K个数,则
PS:禅宗大师百丈禅师说过,“如虫御木,偶尔成文”。就是说虫子在树上随机地咬呀咬,咬的木头多了,竟然碰巧地咬出一篇《LDA 隐含主题模型学习》来。禅师的说法和现在概率语言学派不谋而合。(好吧,我其实是在误解禅宗话头,但是这两句用来形容概率语言学话特别好)
- LDA数学八卦(靳志辉)
- Introduction to Probabilistic Topic Models(Blei2012)感谢翻译
- http://blog.csdn.net/cjl19880906/article/details/8676755
- Finding scientific topics
- 持之以恒 http://www.xperseverance.net/blogs/2012/03/17/
- Latent_dirichlet_allocation(blei)这是发明者的论文,采用EM算法,不推荐第一次学习LDA看
2、LDA Gibbs Sampling 原理及 JGibbs 原代码说明
- LDA 隐含主题模型学习
- 主题模型TopicModel:隐含狄利克雷分布LDA
- 主题模型TopicModel:隐含狄利克雷分布LDA
- LDA主题模型学习笔记
- 【LDA】LDA主题模型
- 概率图模型(PGM)-LDA 隐含狄利克雷分布学习记录
- 【机器学习系列】主题模型-LDA浅析
- 机器学习 之 LDA主题模型
- 王小草【机器学习】笔记--主题模型LDA
- lda+word2vec 主题模型结合深度学习
- 用scikit-learn学习LDA主题模型
- LDA主题模型简介
- LDA主题模型简介
- LDA主题模型简介
- 主题模型LDA研究
- LDA主题模型简介
- 主题模型-LDA浅析
- 主题模型-LDA浅析
- 2014——我的求职之路(四)
- C# 发送消息SendKeys、SendMessage、keybd_event的用法
- 工厂模式浅谈
- Openstack中RabbitMQ RPC代码分析
- 在java里拼接JSON
- LDA 隐含主题模型学习
- Cryptopp使用
- 这算是学程序以来第一篇博文吧
- leetcode Palindrome Number
- Amazon RDS的通用型存储(SSD)
- POJ 1565 Skew Binary(简单题)
- OSG+VS2010+win7环境搭建+OSGEARTH问题
- gdb调试技巧
- qcom linux release tag