狄利克雷分布公式_[统计学习] 2 LDA (潜在狄利克雷分配) 算法过程的直观理解

本文通过直观的方式解释LDA(潜在狄利克雷分配)算法,从Unigram模型逐步过渡到PLSA再到LDA,探讨文档生成过程的建模,介绍了LDA的物理过程及Gibbs Sampling抽样方法,旨在帮助读者理解LDA的工作原理。
摘要由CSDN通过智能技术生成

这篇文章记录了对于统计学习中一些算法的思想、步骤、意义的理解,对于比较抽象的概念力求从不同的角度去看待,同时试图探索不同算法之间的联系。


LDA(Latent Dirichlet Allocation)是一种非常经典的主题模型,从提出之后便有非常多的应用。本篇文章主要从直观上去介绍LDA究竟在干什么。阅读本文需要对多项式分布,Beta分布,Dirichlet分布,Gibbs Sampling有基本的了解。

1 背景

1.1 问题概述

在生活中我们能够遇到许多文本,如果把文本储存为文档,每篇文档可以用一个有序词序列表示:

,许多文档可以构成一个语料库:
。我们希望利用一些统计学方法了解语料库中的词序列是如何生成的。LDA做的正是这一件事情——
对于文档的生成过程进行建模

1.2 什么是LDA

了解LDA之前首先需要知道关于LDA的一些概要,在David M. Blei于2003年发表的文章中,LDA横空出世,这是一种无监督的,三层贝叶斯模型。所谓“主题”,可以看做对于文档内容的高度概括,比如一篇新闻的主题可以是“体育”,可以是“艺术”等,当然一篇文档也可以有多个主题,比如“体育,亚运会,竞技”等。在文本分析中,我们常常会通过一些关键词来判断文章的主题,比如如果文章中出现较多“比分”、“胜利”、“参赛”等词汇,那么我们可以判断这篇文章的主题大概率是体育类的。

19a4c1c9b34efc1896af2d088ecc68bb.png

2 LDA的具体过程

别忘了我们做这些事情的最终目的——对文档的生成过程进行建模,这里通过一个更为直观的例子来理解——上帝掷骰子。我们假设一篇文档中所有词汇都是通过“掷骰子”游戏随机生成的,那么我们的问题就可以转换为——这个“掷骰子”的游戏究竟是如何玩的。这个问题可以拆解为两个部分:(1)这些骰子是什么样的?(2)按照什么规则去投掷这些骰子?

2.1 Unigram模型

先考虑最简单的情况——上帝只有一个骰子(V个面,每个面对应一个单词,各个面概率不一),这就是Unigram模型。具体而言,我们认为一个有n个词语的文档是这样生成的:独立投掷这个骰子n次产生n个词语。我们可以用多项式分布来刻画这个抛掷V面骰子的实验:

,具体过程如下图所示:

3e6a5eed384378f6b422c6b084381ea3.png

这里我们假设了上帝只有一个固定的骰子,然鹅如果我们试着从贝叶斯的角度看待这个问题,我们可以去除骰子固定的假设,而是认为骰子

也是一个
随机变量

因此,这个掷骰子的游戏就变成了:上帝拥有一个装有无穷骰子的坛子,里面有很多种骰子:不同的形状(面数不同),每面有不同的概率。我们可以认为骰子

也有一个概率分布:
,这个便是
骰子的先验分布。我们不知道在一次实验中上帝使用了哪个骰子,因此只能利用先验分布计算:

7caf7b40938dcedd663a882e1fca3146.png

选好骰子之后,各个词语的出现就服从多项式分布了,由于狄利克雷分布和多项式分布的共轭性我们可以推出后验:

参数

的估计我们取狄利克雷分布后验的平均值:

结合上面的式子,我们可以计算出整个语料的产生概率:

2.2 从Unigram到PLSA

在Unigram模型中,我们就是假设一篇文章的n个词语都是简单地由骰子随机产生,然而我们知道,写一篇文章往往会围绕一个主题,比如写体育主题的文章就会比较多用到体育相关的词汇,少涉及经济、艺术方面的词汇。考虑到这一点,我们不妨这样假设文章的生成过程:先用骰子投出一个主题,再选择对应主题的骰子投出文章中的n个词语

所以这里,上帝有两种骰子,一种是Doc-topic骰子,用于生成文章的主题,一种是Topic-word骰子,用于确定主题后生成词语。

我们将这个游戏过程用公式表达出来:游戏中我们有K个Topic-word骰子,记作

,对于包含M篇文档的语料库
中每一篇文档
,都有一个特定的Doc-topic骰子
。所有对应的骰子记作

b3373feaaad19a3b2afb03de4b11d762.png

于是PLSA模型中第m篇文档

中每个词语的生成概率为:

整篇文档的生成概率为:

2.3 从PLSA到LDA

同样我们从贝叶斯的视角去看待上述的过程:将骰子的参数

看作
随机变量,并且这些参数都有 先验分布。因此,类似Unigram模型的贝叶斯改造,我们可以用同样的方式对PLSA进行改造:也就是这两个骰子同样是从罐子里抽取出来的。

171624f9011834c1ad8669f56a84f5fb.png

LDA中的游戏规则如下:

  • Step1:从Topic-word坛子中独立抽出K个骰子(1, 2, ...,K)
  • Step2:生成文档前先从抽取一个Doc-topic骰子(确定主题),然后重复以下过程n次(生成该文档的n个词语):
    • Step2.1:投掷这个Doc-topic骰子,得到topic编号z
    • Step2.2:选择K个Topic-word骰子中编号为z的那个,投掷得到一个词语。

也就是说,每一篇文档中

,每个词语都有个对应的topic,这篇文档就是
。于是,M篇文档的语料库就可以用所有文档的词汇和词汇对应的topic表示:

LDA和PLSA的具体区别可以用图的方式直观表示出来,我们看到,LDA只不过是在PLSA的基础上加了两个Dirichlet先验,即LDA可以看作PLSA的贝叶斯化版本。

07e28e14f949971d7c64c74f39627d62.png

2.4 LDA的物理过程

通过将涉及到的变量用图的方式表示出来我们很容易就能看到:LDA模型的“游戏”中,主要有两个物理过程:

0fe9411efc8c8490945ae3f05297896b.png

上图所示的红色部分是其中一个过程,表示在生成第m篇文档时,先从Doc-topic的坛子中抽取一个doc-topic骰子

,然后投掷这个骰子生成文档中第n个词的topic编号

在这个过程中,

对应Dirichlet分布,
对应Multinomial分布,所以这是一个
Dirichlet-Multinomial共轭结构。根据2.1节中Unigram Model的公式,取每一篇文档来看,就是:

其中

表示第mpain文档中第k个topic产生词的个数。同样利用共轭结构可得参数
的后验分布为:

由于语料中M篇文章的topic生成过程相互独立,因此这里有M个相互独立的Dirichlet-Multinomial共轭结构,则语料中topics生成概率为:

接下来我们再看图中另外一个过程:

a3d5c2b8fc595a5b691e77d4abecf2a6.png

这个过程就是:在抽出的K个topic-word骰子

中,挑选编号为
的那个骰子进行投掷,然后生成词语

由于我们假设给定topic后词汇生成的独立性,我们不妨把语料中的词进行交换,将具有相同topic的词放在一起

,其中
表示这些词都是由第k个topic生成的,
对应这些词的topic编号(其中的分量都为k)。

于是在这里我们不再以文档为单位进行处理,而是考虑由同一个topic生成的词。在这个过程中,

对应Dirichlet分布,
对应Multinomial分布,所以这还是一个
Dirichlet-Multinomial共轭结构。同样根据2.1节中Unigram Model的公式,有:

其中

表示第k个topic产生的词中单词
的个数。利用Dirichlet-Multinomial共轭结构,
的后验分布为:
,而由于语料中K个topics生成单词的过程相互独立,所以这里有
K个相互独立的Dirichlet-Multinomial共轭结构,则语料中words的生成概率为:

结合两个过程的生成公式,我们就可以得到

的联合分布啦:

3 LDA如何抽样:Gibbs Sampling

在上一节中我们求出了

的联合分布,这个时候我们就可以使用Gibbs Sampling对
采样了。

在这个问题中,由于

可以观测,
为隐变量,其实就是对
采样。对于语料库中第i个词语,我们将其topic的编号记作
,这里
,表示这是第m个文档中第n个词。根据Gibbs Sampling的要求,我们需要求的就是这个:
,即
在假设其他所有词的topic都已知的条件下求第i个词topic的条件分布
表示除去第i个词)。假设我们观察到第i个词
,由贝叶斯法则有:

这里我们同样利用Dirichlet-Multinomial共轭结构的性质,由于

与其余
个共轭结构的
独立性,我们可以直接写出
的后验分布(仍然是Dirichlet):

综合上面三条式子,我们就能得到Gibbs Sampling的公式推导:

12a9cd640e2b7dbb0dc313393d6b7d54.png

根据2.1中的Dirichlet参数估计公式,有:

所以最终LDA模型的Gibbs Sampling公式长这样:

看到了吗,这个公式实际上就是

!也就是说,对于K个topic,我们在
这条路径中采样了K次。

4 LDA训练与推断

回到我们最开始提到的目标:对于文档的生成过程进行建模。拆解一下其实我们希望做到两件事情:(1)估计模型中的参数:

;(2)对于新的文档,推断这篇文档的topic分布

训练的过程其实很简单,就是通过Gibbs Sampling获取语料中的

样本。下面这幅图展现了LDA模型的具体训练流程:

910e1c0d457d322f741590bcd6fa46c3.png

而对于新的文档,计算该文档topic的语义分布(即inference)的过程和训练的过程非常类似。具体流程如下:

79a626e3b52c3a8abc2475caf164dfa6.png

参考文献

[1] Blei, D. M., Ng, A. Y., & Jordan, M. I. (2003). Latent dirichlet allocation. Journal of machine Learning research, 3(Jan), 993-1022.

[2] Rick, Jin. lda数学八卦(2014).

[3] 李航.统计学习方法. 清华大学出版社(2016).


回到目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值