LDA主题模型发现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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看作一个单词序列
D中涉及的所有不同单词组成一个大集合VOCABULARY(简称VOC)
LDA以文档集合D作为输入(会有切词,去停用词,取词干等常见的预处理,
略去不表),希望训练出的两个结果向量(设聚成k个Topic,VOC中共包含m 个词):
对每个D中的文档d,对应到不同topic的概率θd
对每个T中的topic t,生成不同单词的概率φ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多摄氏度,用盆装满热水向空中一泼迅速就会结成冰凌;在室外行走半小时,睫毛就会挂上冰霜。
具体实现代码:
实现的效果: