LDA主题模型原理

宏观理解

LDA有两种含义

  • 线性判别器(Linear Discriminant Analysis)
  • 隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)

本文讲解的是后者,它常常用于浅层语义分析,在文本语义分析中是一个很有用的模型。

LDA模型是一种主题模型,它可以将文档集中的每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题(分布)出来后,便可以根据主题(分布)进行主题聚类或文本分类。同时,它是一种典型的词袋模型,即一篇文档是由一组词构成,词与词之间没有先后顺序的关系。

上面的大家在任何的地方都能看到一句话,然鹅我在第一看的时候一点都没有看懂。

如果用通俗的语言来讲,假设我们有一个文档集,里面有M个文档,对于第d个文档中会出现一堆单词,其中有一个单词是“周杰伦”,那么通过这个单词我们就可以理解为该文档的主题可能是“娱乐”,但是这个文档中还出现“姚明”,“孙杨”,“张继科”这些单词,此时该文档为“体育”主题的概率将大大上升,LDA模型就是要根据给定一篇文档,推断这个文档的主题是什么,并给出各个主题的概率大小是多少。

那么对于我们刚刚提到的文档,“周杰伦”,“姚明”,“孙杨”,“张继科”,为”娱乐“主题的概率为1/4,为“体育”主题的概率为3/4,此时的LDA模型就说这个文档的主题为"体育"。

这样一想其实LDA主题模型的想法非常简单,但是具体到内部的细节,还是会有点懵。

琐碎但必要的知识

Gamma函数

这个Gamma函数其实是为后面的Beta分布和Dirichlet分布做准备,具体它的数学之美我们就不在本文讨论,只需要记住以下的东西

Gamma函数定义:

通过分部积分的方法,可以推导出这个函数有如下的递归性质:

于是gamma函数可以当成是阶乘在实数集上的延展,具有如下性质:

Beta分布

此时我们先引出个数学概念

  • 在贝叶斯流派中,如果先验分布和后验分布是同类,则先验分布和后验分布被称为共轭分布,先验分布被称为似然函数的共轭先验

什么是Beta分布,它是指一组定义在(0,1)(0,1) 区间的连续概率分布,有两个参数α,β>0α,β>0 ,通俗的解释,beta分布可以看作一个概率的概率分布,当你不知道一个东西的概率是多少,它给你指出了所有可能出现的概率的概率大小,它的概率密度函数为

LDA主题模型原理_第1张图片

其中Bete函数为

Beta分布是二项分布的共轭先验分布,Beta分布描述了二项分布中P取值的可能性,对于Betaf分布的随机变量,其均值可以估计为

Beta-Binomial共轭

首先我们要记住贝叶斯参数估计的基本过程为:

先验分布+数据的知识=后验分布

更一般的,对于非负实数α,βα,β ,我们有如下关系:

我们可以看到,参数的先验分布和后验分布都能够保持Beta分布的形式。

Dirichlet分布

狄利克雷分布是一组连续多变量概率分布,是多变量普遍化的Beta分布。

其中α⃗α→ 是Dirichlet分布的参数。Dirichlet分布是多项式分布的共轭先验分布。

它的期望为

 

细致详解

LDA主题模型原理_第2张图片

LDA主题模型原理_第3张图片

 

LDA假设文档主题的先验分布是DIrichlet分布,即对于任一文档dd ,其主题分布θdθd 为:

 

θd=Dirichlet(α⃗)θd=Dirichlet(α→)

 

其中,αα 为分布的超参数,是一个KK 维向量。

LDA假设主题中词的先验分布是DIrichlet分布,即对于任一主题kk ,其词分布βkβk 为:

 

βk=Dirichlet(η⃗)βk=Dirichlet(η→)

 

其中,ηη 为分布的超参数,是一个VV 维向量,VV 代表词汇表里所有词的个数。

对于数据中任一一篇文档dd 中的第nn 个词,我们可以从主题分布ηdηd 中得到它的主题编号zdnzdn 的分布为:

 

zdn=multi(θd)zdn=multi(θd)

 

而对于该主题编号,得到我们看到的词wdnwdn 的概率分布为:

 

wdn=multi(βzdn)wdn=multi(βzdn)

 

理解LDA主题模型的主要任务就是理解上面的这个模型,这个模型,我们有MM 个文档主题的Dirichlet分布,而对应的数据有MM 个主题编号的多项分布,这样(α→θd→z⃗dα→θd→z→d )就组成了Dirichlet-multi共轭,可以使用前面提到的贝叶斯推断的方法得到基于Dirichlet分布的文档主题后验分布

如果在第dd 个文档中,第kk 个主题的词的个数为:n(k)dnd(k) ,则对应的多项分布的计数可以表示为

 

n⃗d=(n(1)d,n(2)d,...n(K)d)n→d=(nd(1),nd(2),...nd(K))

 

利用Dirichlet-multi共轭,得到θdθd 的后验分布为:

 

Dirichlet(θd|α⃗+n⃗d)Dirichlet(θd|α→+n→d)

 

同样的道理,对于主题与词的分布,我们有KK 个主题与词的Dirichlet的分布,而对应的数据有KK 个主题编号的多项分布,这样(η→βk→w⃗(k)η→βk→w→(k) )就组成了组成了Dirichlet-multi共轭,可以使用前面提到的贝叶斯推断的方法得到基于Dirichlet分布的主题词的后验分布

如果在第k个主题中,第v个词的个数为:n(v)knk(v) ,则对应的多项分布的计数可以表示为:

 

n⃗k=(n(1)k,n(2)k,...n(V)k)n→k=(nk(1),nk(2),...nk(V))

 

利用Dirichlet-multi共轭,得到βkβk 的后验分布为:

$$Dirichlet(\beta_k | \vec \eta+ \vec n_k)$$

由于主题产生词不依赖具体某一个文档,因此文档主题分布和主题词分布是独立的。理解了上面这$M+K$组Dirichlet-multi共轭,就理解了LDA的基本原理了。

 

 

参考资料

[1] 通俗理解LDA主题模型

[2] 文本主题模型之LDA(一) LDA基础

[3] LDA-数学八卦

[4] LDA(Latent Dirichlet Allocation)主题模型

你可能感兴趣的:(python)