参考

【NLP】LDA主题模型详解

【NLP】LDA主题模型的简单应用

主题模型简介

       主题模型(Topic Model)是用来在一系列文档中发现 抽象主题 的一种统计模型(自动分析每个文档,统计文档中的词语,根据统计的信息判断当前文档包含哪些主题以及各个主题所占比)。直观来讲,如果一篇文章有一个中心思想,那么一定存在一些特定词语会出现的比较频繁

  • 比方说,如果现在一篇文章是在讲苹果公司的,那么“乔布斯”和“IPhone”等词语出现的频率会更高一些;如果现在一篇文章是在描述微软公司的,那么“Windows”和“Microsoft”等词语出现的频率会更高一些;
  • 但真实情况下,一篇文章中通常包含多种主题,而且每个主题所占的比例各不相同,比如一篇文章中10%和苹果公司有关,90%和微软公司有关,那么和微软有关的关键字出现的次数应该是苹果关键字出现次数的9倍。

       主题模型 是对文本中 隐含主题 的一种建模方法,每个主题其实是词表上单词的概率分布;主题模型是一种生成模型,一篇文章中每个词都是通过“以一定概率选择某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的。这个过程好比我们在写文章:一般我们写文章的时候都是先给自己的文章定一个主题,然后我们会根据这个主题,用和这个主题有关的词语进行组合最后形成文章。

LDA主题模型

简介

LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,是一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题(分布)出来后,便可以根据主题(分布)进行主题聚类或文本分类。同时,它是一种典型的词袋模型,即一篇文档是由一组词构成,词与词之间没有先后顺序的关系。此外,一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_人工智能

人类写作:先确定自己将要写的文章的几个主题,然后围绕这几个主题遣词造句,写出优秀作文。

LDA 主题模型要干的事就是:根据给定的一篇文档,反推其主题分布。你计算机给我推测文章分别都写了些啥主题,且各篇文章中各个主题出现的概率大小(主题分布,后面还会提到)是啥。

流程

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_人工智能_02

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_人工智能_03

数学知识点

基本概率知识

 1)先验概率:在事情尚未发生前,对该事件发生概率的估计。利用过去历史资料计算出来得到的先验概率叫做客观先验概率;凭主观经验来判断而得到的先验概率叫做主观先验概率。
2)后验概率:通过调查或其它方式获取新的附加信息,利用贝叶斯公式对先验概率进行修正后,而得到的概率。
3)似然函数:给定模型参数 θ的条件下,样本数据服从这一概率模型的相似程度。


lda根据点互信息确认主题数量 lda主题数目的确认 短文本_人工智能_04

θ 1 ,θ 2表示模型的未知参数,X表示样本

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_nlp_05

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_nlp_06

二项分布

  伯努利分布,又称两点分布或0-1分布(掷硬币一次)。二项分布(掷硬币多次)即重复n次的伯努利试验。

多项分布

       多项分布式二项分布的推广,是指单次试验中随机变量的取值不再是0/1的,而是有多种离散值可能(1,2,3,...,k)(1,2,3,...,k)(1,2,3,...,k)。比如掷骰子,有6个面,N次试验结果服从K=6的多项分布。

Beta 分布

Beta分布 可以看作一个概率的概率分布,当你不知道一个东西的具体概率是多少时,它可以给出了所有概率出现的可能性大小。

狄利克雷分布(Dirichlet 分布)

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_主题模型_07


LDA

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_lda根据点互信息确认主题数量_08

基础模型之Unigram model

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_lda根据点互信息确认主题数量_09

个人认为,这有点像LDA流程图的下半部分:


lda根据点互信息确认主题数量 lda主题数目的确认 短文本_主题模型_10

LDA流程图

基础模型之Mixture of unigrams model

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_人工智能_11

 在Mixture of unigrams model中,假定一篇文档只有一个主题生成。可实际中,一篇文章往往有多个主题,只是这多个主题各自在文档中出现的概率大小不一样。

基础模型之PLSA

(1)pLSA模型下生成文档过程

   在上面的Mixture of unigrams model中,我们假定一篇文档只有一个主题生成,可实际中,一篇文章往往有多个主题,只是这多个主题各自在文档中出现的概率大小不一样。比如介绍一个国家的文档中,往往会分别从教育、经济、交通等多个主题进行介绍。那么在pLSA中,文档是怎样被生成的呢?

  • 假设你要写M篇文档,由于一篇文档由各个不同的词组成,所以你需要确定每篇文档里每个位置上的词。
  • 再假定你一共有K个可选的主题,有V个可选的词,咱们来玩一个扔骰子的游戏。

第一步:

   假设你每写一篇文档会制作一颗K面的“文档-主题”骰子(扔此骰子能得到K个主题中的任意一个),和K个V面的“主题-词项” 骰子(每个骰子对应一个主题,K个骰子对应之前的K个主题,且骰子的每一面对应要选择的词项,V个面对应着V个可选的词)。比如可令K=3,即制作1个含有3个主题的“文档-主题”骰子,这3个主题可以是:教育、经济、交通。然后令V = 3,制作3个有着3面的“主题-词项”骰子,其中,教育主题骰子的3个面上的词可以是:大学、老师、课程,经济主题骰子的3个面上的词可以是:市场、企业、金融,交通主题骰子的3个面上的词可以是:高铁、汽车、飞机。

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_nlp_12

第二步:

   每写一个词,先扔该“文档-主题”骰子选择主题,再使用和主题结果对应的那颗“主题-词项”骰子,选择要写的词。

  • 先扔“文档-主题”的骰子,假设(以一定的概率)得到的主题是 教育,所以下一步便是扔 教育 主题筛子,(以一定的概率)得到教育主题筛子对应的某个词:大学。
  • 上面投骰子产生词的过程简化下便是:“先以一定的概率选取主题,再以一定的概率选取词”。事实上,一开始可供选择的主题有3个:教育、经济、交通,那为何偏偏选取教育这个主题呢?其实是随机选取的,只是这个随机遵循一定的概率分布。比如可能选取教育主题的概率是0.5,选取经济主题的概率是0.3,选取交通主题的概率是0.2,那么这3个主题的概率分布便是 {教育:0.5,经济:0.3,交通:0.2},我们把各个主题z在文档d中出现的概率分布称为 主题分布,是一个多项分布。
  • 同样的,从主题分布中随机抽取出教育主题后,依然面对着3个词:大学、老师、课程,这3个词都可能被选中,但它们被选中的概率也是不一样的。比如大学这个词被选中的概率是0.5,老师这个词被选中的概率是0.3,课程被选中的概率是0.2,那么这3个词的概率分布便是 {大学:0.5,老师:0.3,课程:0.2},我们把各个词语w在主题z下出现的概率分布称之为 词分布,这个词分布也是一个多项分布
  • 所以,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该教育主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。

第三步:

  最后,你重复扔“文档-主题”骰子和”主题-词项“骰子,重复N次(产生N个词),完成一篇文档重复这产生一篇文档的方法M次,则完成M篇文档。

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_人工智能_13

(2)根据文档反推其主题分布

        反过来,既然文档已经产生,那么如何根据已经产生好的文档反推其主题呢?这个利用看到的文档推断其隐藏的主题(分布)的过程(其实也就是产生文档的逆过程),便是主题建模的目的:自动地发现文档集中的主题(分布)

   换言之,人类根据文档生成模型写成了各类文章,然后丢给了计算机,相当于计算机看到的是一篇篇已经写好的文章。现在计算机需要根据一篇篇文章中看到的一系列词归纳出当篇文章的主题,进而得出各个主题各自不同的出现概率:主题分布。即文档 ddd 和单词 www 是可被观察到的,但主题 zzz 却是隐藏的。

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_自然语言处理_14

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_自然语言处理_15

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_lda根据点互信息确认主题数量_16

EM算法 参考:【机器学习】EM算法从小白到理解,附带案例代码

(3)EM算法估计pLSA的两个未知参数

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_nlp_17

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_自然语言处理_18

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_nlp_19

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_自然语言处理_20

综上,在pLSA中:

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_人工智能_21


LDA 模型

事实上,理解了pLSA模型,也就差不多快理解了LDA模型,因为LDA就是在pLSA的基础上加层贝叶斯框架,即 LDA 就是 pLSA 的贝叶斯版本(正因为LDA被贝叶斯化了,所以才需要考虑历史先验知识,才加的两个先验参数)。

(1)pLSA跟LDA的对比:生成文档与参数估计

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_nlp_22

(2)那PLSA跟LDA的区别在于什么地方呢?

  • PLSA中,主题分布和词分布是唯一确定的,能明确的指出主题分布可能就是{教育:0.5,经济:0.3,交通:0.2},词分布可能就是{大学:0.5,老师:0.3,课程:0.2}。
  • 但在LDA中,主题分布和词分布不再唯一确定不变,即无法确切给出。例如主题分布可能是{教育:0.5,经济:0.3,交通:0.2},也可能是{教育:0.6,经济:0.2,交通:0.2},到底是哪个我们不再确定(即不知道),因为它是随机的可变化的。但再怎么变化,也依然服从一定的分布,即主题分布跟词分布由Dirichlet先验随机确定。

前面我们提到的是,有很多个主题或词,各个主题或词被抽中的概率不一样,所以抽取主题或词是随机抽取了。但是现在主题分布和词分布也不确定了,也就是说,在我们抽取主题的时候,之前是从一个固定的主题分布中,现在是这个主题分布也是不确定的,可能是{教育:0.5,经济:0.3,交通:0.2},也可能是{教育:0.6,经济:0.2,交通:0.2}。正因为LDA是PLSA的贝叶斯版本,所以主题分布跟词分布本身由先验知识随机给定。

pLSA中:

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_自然语言处理_23

LDA中:

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_自然语言处理_24

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_主题模型_25

(3)LDA生成文档过程的进一步理解

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_主题模型_26

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_自然语言处理_27

LDA参数估计:Gibbs采样

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_自然语言处理_28

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_lda根据点互信息确认主题数量_29

Gibbs采样流程

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_主题模型_30

 LDA参数学习-Gibbs采样


lda根据点互信息确认主题数量 lda主题数目的确认 短文本_主题模型_31

好有道理的亚子,就是看不懂


lda根据点互信息确认主题数量 lda主题数目的确认 短文本_主题模型_10

LDA流程图

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_lda根据点互信息确认主题数量_33

 Gibbs采样总结

lda根据点互信息确认主题数量 lda主题数目的确认 短文本_人工智能_34