LDA主题模型发现

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

LDA主题模型发现

1.LDA概念:

LDA(Latent Dirichlet Allocation)主题模型由Blei于2003年提出,是在概率隐性语义索引(probabilistic Latent Semantic Indexing,pLSI)上扩展得到的三层贝叶斯概率模型,是文档生成概率模型。LDA模型包含词项、主题和文档三层结构,其基本思想是把文档看成其隐含主题的混合,而每个主题则表现为跟该主题相关的词项的概率分布,LDA可以用来识别大规模文档集或语料库中潜在的主题信息。LDA基于词袋(bag of words)模型,认为文档和单词都是可交换的,忽略单词在文档中的顺序和文档在语料库中的顺序,从而将文本信息转化为易于建模的数字信息。在主题模型中,主题表示一个概念、一个方面,表现为一系列相关的单词,是这些单词的条件概率。形象来说,主题就是一个桶,里面装了出现概率较高的单词,这些单词与这个主题有很强的相关性。

2.LDA生成过程:

首先,可以用生成模型来看文档和主题这两件事。所谓生成模型,就是说,我们认为一篇文章的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的。那么,如果我们要生成一篇文档,它里面的每个词语出现的概率为:

这个概率公式可以用矩阵表示

其中”文档-词语”矩阵表示每个文档中每个单词的词频,即出现的概率;”主题-词语”矩阵表示每个主题中每个单词的出现概率;”文档-主题”矩阵表示每个文档中每个主题出现的概率。

LDA整体流程为:

先定义一些字母的含义:

文档集合D,topic集合T

D中每个文档d看作一个单词序列,wi表示第i个单词,设d有n个单词。(LDA里面称之为word bag,实际上每个单词的出现位置对LDA算法无影响)

D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC)

LDA以文档集合D作为输入(会有切词,去停用词,取词干等常见的预处理,

略去不表),希望训练出的两个结果向量(设聚成k个Topic,VOC中共包含m 个词):

对每个D中的文档d,对应到不同topic的概率θd,其中,pti表示d对应T中第i个topic的概率。计算方法是直观的,pti=nti/n,其中nti表示d中对应第i个topic的词的数目,n是d中所有词的总数。

对每个T中的topic t,生成不同单词的概率φt,其中,pwi表示t生成VOC中第i个单词的概率。计算方法同样很直观,pwi=Nwi/N,其中Nwi表示对应到topic t的VOC中第i个单词的数目,N表示所有对应到topic t的单词总数。

LDA的核心公式如下:

p(w|d)=p(w|t)*p(t|d)

直观的看这个公式,就是以Topic作为中间层,可以通过当前的θd和φt 给出了文档d中出现单词w的概率。其中p(t|d)利用θd计算得到,p(w|t)利用φt计算得到。

实际上,利用当前的θd和φt,我们可以为一个文档中的一个单词计算它对应任意一个Topic时的p(w|d),然后根据这些结果来更新这个词应该对应的topic。然后,如果这个更新改变了这个单词所对应的Topic,就会反过来影响θd和φt。

3.利用python代码实现LDA

目前已有不少成熟的LDA库,例如java中的Gibbslda工具包,以及python 的lda库和genism包,等等。而这些工具的使用例子大多是英文语料。不过lda 对语言的敏感性并不高,所以即使中文语料,效果也不会逊色,只需在构建VSM 模型之前,先做中文分词和清理停用词等工作。

在实验中,我采用的是结巴分词工具、哈工大的停用词表,以及python的lda库。选取的语料为新浪微博中两个不同类型的热门话题,具体为:

1.【库里三节37分邓肯休战勇士120-90马刺】勇士终结马刺13连胜同时收获4连胜,库里三节砍下37分,生涯得分破万,利文斯顿6投6中得13分,格林、汤普森各取11分。马刺的莱昂纳德16分5篮板,韦斯特12分5篮板,阿德9中2、帕克6中2、马努6中1,邓肯休战。战报。

2.【哈尔滨市民向空中泼洒热水瞬间凝成冰凌——提提神儿!】1月21日,哈尔滨市民向空中泼洒热水,泼出的水立刻凝成冰凌。冰城哈尔滨迎来一年中最冷的季节,室外温度已经降到零下30多摄氏度,用盆装满热水向空中一泼迅速就会结成冰凌;在室外行走半小时,睫毛就会挂上冰霜。

具体实现代码:

实现的效果:

相关文档
最新文档