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),那么对于每个词语,对应每一个主题都有一个概率,这就是phi矩阵,大小是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 Blei2012

图片来源: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、主题模型原理及一些数学公式


第一部分参考 LDA数学八卦 rickjin的这篇文章是能找到的讲LDA数学原理的最好的博文了。大家可以google PDF版本,我放的链接是他在nlp网站上的连载,有的评论也非常精彩,值得参考。

什么是主题(topic)?

首先说说词袋模型(bag of words)。

显然,文章都是由词构成的。在很多自然语言处理过程中,为了简化模型,都会把文章的词一个一个拆开,并认为每个词都是独立的,这就是词袋模型(bag of words)。在LDA主题模型中,就采用这样一个模型。

比如"统计学 就是 猜测 上帝 的 游戏"这句话,在词袋模型中就认为是 统计学 :1, 就是:1,猜测:1,上帝:1,:1,游戏:1 ;这样的组成。如果词不变,句子变成”上帝 的 游戏 就是 统计学 猜测”那么在词袋模型认为是同一句话。(当然我默认分词结果一致)

那么你如果觉得“这个不对啊,这两句话显然不是一句话啊。”对的,这两句话确实不是一个意思。在真实的世界中,一篇文章中每个词也许和其他的词都有关系。词袋模型确实有它的缺点,不够精细。但词袋模型可以大大化简语言模型,减少计算量。相对的,还有个N元语言模型,就是认为某个词同前面N-1个词具有一定的联系(当然,当N=1就退化为词袋模型)。这种模型在NLP中也有很多应用,但是这种模型的信息量就成N的指数增长了。

什么是主题呢?没有学概率主题模型之前,我觉得还蛮好回答的,就是一段文本主要说了些什么呗。搞了概率主题模型,突然发现蛮难解释这个主题的,此“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 隐含主题模型学习》来。禅师的说法和现在概率语言学派不谋而合。(好吧,我其实是在误解禅宗话头,但是这两句用来形容概率语言学话特别好)


多项式分布-》D分布

几个参数的解释

参考文献:

  1. LDA数学八卦(靳志辉)
  2. Introduction to Probabilistic Topic ModelsBlei2012感谢翻译
  3. http://blog.csdn.net/cjl19880906/article/details/8676755
  4. Finding scientific topics 
  5. 持之以恒 http://www.xperseverance.net/blogs/2012/03/17/
  6. Latent_dirichlet_allocationblei)这是发明者的论文,采用EM算法,不推荐第一次学习LDA看

2、LDA Gibbs Sampling 原理及 JGibbs 原代码说明


参考文献:
Parameter_estimation_for_text_analysisGregor Heinrich
这个网上也有相应的翻译
GIBBS_SAMPLING_FOR_THE_UNINITIATED 经典文章 :吉比斯抽样门外汉
http://www.xperseverance.net/blogs/2013/03/1744/

(待续cnblog的编辑器真无语)

0 0