深入浅出讲解LDA主题模型(一)

最近总是遇到主题模型LDA(Latent Dirichlet Allocation),网上的博客写的天花乱坠而不知所以然,无奈看了最厚的《LDA数学八卦》,观完略通一二,记录于此~顺便放两张遇到的图,挺有意思的,共勉吧:
深入浅出讲解LDA主题模型(一)
深入浅出讲解LDA主题模型(一)

主题模型

首先我们来看什么叫主题模型~我们来考虑一个问题:判断文本相关程度。怎么判断呢?是看相同词语出现的次数来判断吗(TF-IDF)?显然这太草率了。从内容角度来讲,只要两篇文章的主题是相同的,这两篇文章就是相关的。比如一片文章介绍的是京东618,另一片是天猫双11,主题基本相同。
我们来看看生成一篇文章有怎么的手段:

Unigram Model

假设我们的词典一共有V个词v1,v2,...,vV,那么最简单的主题模型就是认为上帝(你!就!是!上!帝!┗|`O′|┛ )是按照如下的游戏规则产生文本的:

※※※※※※※※※
Unigram Model
※※※※※※※※※
1.上帝只有一个骰(tou,有文化真可怕)子,这个骰子有V个面,每个面对应一个词,各个面的概率不一;
2。每抛一次骰子,抛出的面就对应的产生一个词;如果一片文档中有n个词,上帝就是独立的抛n次骰子产生这n个词。

PLSA

这个就是一个主题模型啦~Hoffman认为上帝是按照如下规则生成文本:

※※※※※※※※※※
PLSA Topic Model
※※※※※※※※※※
1. 上帝有两种类型的骰子,一类是doc-topic骰子,每个doc-topic骰子有K个面,每个面都是一个topic的编号;一类是topic-word骰子,每个topic-word骰子有V个面,每个面对应一个词;
深入浅出讲解LDA主题模型(一)
2. 上帝一共有K个topic-word骰子,每个有一个编号,编号1到K
3. 生成每篇文档之前,上帝都先为这篇文章制造一个特定的doc-topic骰子,然后重复如下的文档词语生成过程:

  • 投掷这个doc-topic骰子,得到一个topic编号z
  • 选择编号为z的topic-word骰子,投掷这个骰子得到一个词

贝叶斯学派

如果没有贝叶斯学派,大家都是频率主义学派,我们的这篇博文到此就差不多该结束了。我们看看贝叶斯学派有什么高见,作了什么补充吧。先简要的看看两个学派有什么区别:

频率主义学派

万物皆可频。每个事件都有个确定的概率,我们可以通过做实验得到频率,再用这个频率去估计概率。比如,扔硬币,正面向上一定是有个概率的。我们扔了5000次,有2000次正面向上,3000次背面向上,这这个概率就是2/3(频率主义内心OS:我不听我不听,我都做了5000次试验了,你还想怎样(;′⌒`))。

贝叶斯学派

你做5万次也没有用。。。2/3也许只是一个概率分布的极值罢了。没有绝对的概率值等着我们去接近,但是我们可以学概率分布:比如令正面向上的概率是高斯分布,然后做实验得到均值(2/3)方差什么的。

共轭

本文就提到两个共轭Beta-Binomial共轭和Dirichlet-Multinomial共轭
关于Beta-Binomial共轭,转一个不错的解读:

举一个简单的例子,熟悉棒球运动的都知道有一个指标就是棒球击球率(batting average),就是用一个运动员击中的球数除以击球的总数,我们一般认为0.266是正常水平的击球率,而如果击球率高达0.3就被认为是非常优秀的。

现在有一个棒球运动员,我们希望能够预测他在这一赛季中的棒球击球率是多少。你可能就会直接计算棒球击球率,用击中的数除以击球数,但是如果这个棒球运动员只打了一次,而且还命中了,那么他就击球率就是100%了,这显然是不合理的,因为根据棒球的历史信息,我们知道这个击球率应该是0.215到0.36之间才对啊。

对于这个问题,我们可以用一个二项分布表示(一系列成功或失败),一个最好的方法来表示这些经验(在统计中称为先验信息)就是用beta分布,这表示在我们没有看到这个运动员打球之前,我们就有了一个大概的范围。beta分布的定义域是(0,1)这就跟概率的范围是一样的。

接下来我们将这些先验信息转换为beta分布的参数,我们知道一个击球率应该是平均0.27左右,而他的范围是0.21到0.35,那么根据这个信息,我们可以取α=81,β=219

深入浅出讲解LDA主题模型(一)

之所以取这两个参数是因为:

beta分布的均值是α/(α+β)=81/(81+219)=0.27
从图中可以看到这个分布主要落在了(0.2,0.35)间,这是从经验中得出的合理的范围。
在这个例子里,我们的x轴就表示各个击球率的取值,x对应的y值就是这个击球率所对应的概率。也就是说beta分布可以看作一个概率的概率分布。

那么有了先验信息后,现在我们考虑一个运动员只打一次球,那么他现在的数据就是”1中;1击”。这时候我们就可以更新我们的分布了,让这个曲线做一些移动去适应我们的新信息。beta分布在数学上就给我们提供了这一性质,他与二项分布是共轭先验的(Conjugate_prior)。所谓共轭先验就是先验分布是beta分布,而后验分布同样是beta分布。结果很简单:

Beta(α0+hits,β0+misses)

其中α0和β0是一开始的参数,在这里是81和219。所以在这一例子里,α增加了1(击中了一次)。β没有增加(没有漏球)。这就是我们的新的beta分布Beta(81+1,219),我们跟原来的比较一下:

深入浅出讲解LDA主题模型(一)

可以看到这个分布其实没多大变化,这是因为只打了1次球并不能说明什么问题。但是如果我们得到了更多的数据,假设一共打了300次,其中击中了100次,200次没击中,那么这一新分布就是:

beta(81+100,219+200)

深入浅出讲解LDA主题模型(一)
注意到这个曲线变得更加尖,并且平移到了一个右边的位置,表示比平均水平要高。
一个有趣的事情是,根据这个新的beta分布,我们可以得出他的数学期望为:α/(α+β)=(82+100)/(82+100+219+200)=.303 ,这一结果要比直接的估计要小 100/(100+200)=.333 。你可能已经意识到,我们事实上就是在这个运动员在击球之前可以理解为他已经成功了81次,失败了219次这样一个先验信息。

因此,对于一个我们不知道概率是什么,而又有一些合理的猜测时,beta分布能很好的作为一个表示概率的概率分布。
OK.从出你多少能感受到那么点意思:先验分布确实有些道理。
在贝叶斯体系中

+=

在上述的例子中有:
Beta(p|α,β)+Binom(m1,m2)=Beta(p|α+m1,β+m2)

我们注意到这里先验分布和后验分布相同,满足这样的结构的分布我们叫:Beta-Binomial共轭。还有一组共轭Dirichlet-Multinomial共轭我们就知道个所以然啦~

LDA

终于迎来LDA模型。其实就是给PLSA主题模型加了贝叶斯先验。注意到PLSA中上帝掷document-topic骰子之前先现场做一个骰子的,进行整个语料库的实验时也是现场做k个topic-word骰子的。怎么能现场制作呢!贝叶斯ist愤怒了,应该是早就做好了现场拿才对!所以假设上帝有两个大坛子一个装满document-topic骰子,另一个装满topic-word骰子。做实验时现场抽取,而不是制作。而这个坛子里骰子的分布就是先验。既然是骰子,所以分布式多项分布,先验最好就是取Dirichlet分布啦~
深入浅出讲解LDA主题模型(一)
LDA的主题模型结构如下:
深入浅出讲解LDA主题模型(一)
其中α,β是Dirichlet参数。

http://blog.csdn.net/a358463121/article/details/52562940