技术干货:一文详解LDA主题模型

原标题:专栏 | 技术干货:一文详解LDA主题模型

达观数据专栏

作者:达观数据NLP组-夏琦

本篇博文将详细讲解LDA主题模型,从最底层数学推导的角度来详细讲解,只想了解LDA的读者,可以只看第一小节简介即可。PLSA和LDA非常相似,PLSA也是主题模型方面非常重要的一个模型,本篇也会有的放矢的讲解此模型。如果读者阅读起来比较吃力,可以定义一个菲波那切数列,第 f(n) = f(n-1) + f(n-2) 天再阅读一次,直到这个知识点收敛。如果读者发现文章中的错误或者有改进之处,欢迎交流。

1.简介

在机器学习领域,LDA是两个常用模型的简称:Linear Discriminant Analysis 和 Latent Dirichlet Allocation。本文的LDA仅指代Latent Dirichlet Allocation. LDA 在主题模型中占有非常重要的地位,常用来文本分类。

LDA由Blei, David M.、Ng, Andrew Y.、Jordan于2003年提出,用来推测文档的主题分布。它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一些文档抽取出它们的主题分布后,便可以根据主题分布进行主题聚类或文本分类。

2.先验知识

LDA 模型涉及很多数学知识,这也许是LDA晦涩难懂的主要原因。这一部分主要介绍LDA中涉及的数学知识。数学功底比较好的读者可以直接跳过本小节。

LDA涉及到的先验知识有:二项分布、Gamma函数、Beta分布、多项分布、Dirichlet分布、马尔科夫链、MCMC、Gibbs Sampling、EM算法等。限于篇幅,本文仅会有的放矢的介绍部分概念,不会每个概念都仔细介绍,亦不会涉及到每个概念的数学公式推导。如果每个概念都详细介绍,估计都可以写一本百页的书了。如果你对LDA的理解能达到如数家珍、信手拈来的程度,那么恭喜你已经掌握了从事机器学习方面的扎实数学基础。想进一步了解底层的数学公式推导过程,可以参考《数学全书》等资料。

2.1 词袋模型

LDA 采用词袋模型。所谓词袋模型,是将一篇文档,我们仅考虑一个词汇是否出现,而不考虑其出现的顺序。在词袋模型中,“我喜欢你”和“你喜欢我”是等价的。与词袋模型相反的一个模型是n-gram,n-gram考虑了词汇出现的先后顺序。有兴趣的读者可以参考其他书籍。

2.2 二项分布

二项分布是N重伯努利分布,即为X ~ B(n, p). 概率密度公式为:

2.3 多项分布

多项分布,是二项分布扩展到多维的情况. 多项分布是指单次试验中的随机变量的取值不再是0-1的,而是有多种离散值可能(1,2,3…,k).概率密度函数为:

2.4 Gamma函数

Gamma函数的定义:

分部积分后,可以发现Gamma函数如有这样的性质:

Gamma函数可以看成是阶乘在实数集上的延拓,具有如下性质:

2.5 Beta 分布

Beta分布的定义:对于参数,取值范围为[0, 1]的随机变量x的概率密度函数为:

其中,

2.6 共轭先验分布

在贝叶斯概率理论中,如果后验概率和先验概率满足同样的分布律,那么,先验分布和后验分布被叫做共轭分布,同时,先验分布叫做似然函数的共轭先验分布。

Beta分布是二项式分布的共轭先验分布,而狄利克雷(Dirichlet)分布是多项式分布的共轭分布。

共轭的意思是,以Beta分布和二项式分布为例,数据符合二项分布的时候,参数的先验分布和后验分布都能保持Beta分布的形式,这种形式不变的好处是,我们能够在先验分布中赋予参数很明确的物理意义,这个物理意义可以延续到后续分布中进行解释,同时从先验变换到后验过程中从数据中补充的知识也容易有物理解释。

2.7 Dirichlet 分布

Dirichlet的概率密度函数为:

其中,

根据Beta分布、二项分布、Dirichlet分布、多项式分布的公式,我们可以验证上一小节中的结论 – Beta分布是二项式分布的共轭先验分布,而狄利克雷(Dirichlet)分布是多项式分布的共轭分布。

2.8 Beta/Dirichlet分布的一个性质

如果 ,则

上式右边的积分对应到概率分布,对于这个分布,有

把上式带入E(p)的计算式,得到

这说明,对于Beta分布的随机变量,其均值可以来估计。Dirichlet分布也有类似的结论,如果,同样可以证明:

这两个结论非常重要,后面的LDA数学推导过程会使用这个结论。

2.9 MCMC和Gibbs Sampling

在现实应用中,我们很多时候很难精确求出精确的概率分布,常常采用近似推断方法。近似推断方法大致可分为两大类:第一类是采样(Sampling), 通过使用随机化方法完成近似;第二类是使用确定性近似完成近似推断,典型代表为变分推断(variational inference)。

在很多任务中,我们关心某些概率分布并非因为对这些概率分布本身感兴趣,而是要基于他们计算某些期望,并且还可能进一步基于这些期望做出决策。采样法正式基于这个思路。具体来说,假定我们的目标是计算函数f(x)在概率密度函数p(x)下的期望

则可根据p(x)抽取一组样本,然后计算f(x)在这些样本上的均值

以此来近似目标期望E[f]。若样本独立,基于大数定律,这种通过大量采样的办法就能获得较高的近似精度。可是,问题的关键是如何采样?对概率图模型来说,就是如何高效地基于图模型所描述的概率分布来获取样本。概率图模型中最常用的采样技术是马尔可夫链脸蒙特卡罗(Markov chain Monte Carlo, MCMC)。给定连续变量的概率密度函数p(x), x在区间A中的概率可计算为

若有函数,则可计算f(x)的期望

若x不是单变量而是一个高维多元变量x, 且服从一个非常复杂的分布,则对上式求积分通常很困难。为此,MCMC先构造出服从p分布的独立同分布随机变量再得到上式的无偏估计

然而,若概率密度函数p(x)很复杂,则构造服从p分布的独立同分布样本也很困难。MCMC方法的关键在于通过构造“平稳分布为p的马尔可夫链”来产生样本:若马尔科夫链运行时间足够长,即收敛到平稳状态,则此时产出的样本X近似服从分布p.如何判断马尔科夫链到达平稳状态呢?假定平稳马尔科夫链T的状态转移概率(即从状态X转移到状态的概率)为,t时刻状态的分布为p(x^t), 则若在某个时刻马尔科夫链满足平稳条件

则p(x是马尔科夫链的平稳分布,且马尔科夫链在满足该条件时已收敛到平稳条件。也就是说,MCMC方法先设法构造一条马尔科夫链,使其收敛至平稳分布恰为待估计参数的后验分布,然后通过这条马尔科夫链来产生符合后验分布的样本,并基于这些样本来进行估计。这里马尔科夫链转移概率的构造至关重要,不同的构造方法将产生不同的MCMC算法。

Metropolis-Hastings(简称MH)算法是MCMC的重要代表。它基于“拒绝采样”(reject sampling)来逼近平稳分布p。算法如下:

输入:先验概率

过程:

1. 初始化x^0;

2. for t = 1, 2, … do

3. 根据采样出候选样本

4. 根据均匀分布从(0, 1)范围内采样出阈值u;

5. if

6.

7. else

8.

9. end if

10. enf for

11. return

输出:采样出的一个样本序列

于是, 为了达到平稳状态,只需将接受率设置为

吉布斯采样(Gibbs sampling)有时被视为MH算法的特例,它也使用马尔科夫链读取样本,而该马尔科夫链的平稳分布也是采用采样的目标分布p(x).具体来说,假定,目标分布为p(x), 在初始化x的取值后,通过循环执行以下步骤来完成采样:

1. 随机或以某个次序选取某变量;

2. 根据x中除外的变量的现有取值,计算条件概率,其中

3. 根据对变量采样,用采样值代替原值。

3. 文本建模

一篇文档,可以看成是一组有序的词的序列,从统计学角度来看,文档的生成可以看成是上帝抛掷骰子生成的结果,每一次抛掷骰子都生成一个词汇,抛掷N词生成一篇文档。在统计文本建模中,我们希望猜测出上帝是如何玩这个游戏的,这会涉及到两个最核心的问题:

上帝都有什么样的骰子;

上帝是如何抛掷这些骰子的;

第一个问题就是表示模型中都有哪些参数,骰子的每一个面的概率都对应于模型中的参数;第二个问题就表示游戏规则是什么,上帝可能有各种不同类型的骰子,上帝可以按照一定的规则抛掷这些骰子从而产生词序列。

3.1 Unigram Model

在Unigram Model中,我们采用词袋模型,假设了文档之间相互独立,文档中的词汇之间相互独立。假设我们的词典中一共有 V 个词,那么最简单的 Unigram Model 就是认为上帝是按照如下的游戏规则产生文本的。

1. 上帝只有一个骰子,这个骰子有V面,每个面对应一个词,各个面的概率不一;

2. 每抛掷一次骰子,抛出的面就对应的产生一个词;如果一篇文档中N个词,就独立的抛掷n次骰子产生n个词;

3.1.1 频率派视角

对于一个骰子,记各个面的概率为,每生成一个词汇都可以看做一次多项式分布,记为。一篇文档,其生成概率是

文档之间,我们认为是独立的,对于一个语料库,其概率为:

假设语料中总的词频是N,记每个词的频率为,那么,服从多项式分布

整个语料库的概率为

此时,我们需要估计模型中的参数,也就是词汇骰子中每个面的概率是多大,按照频率派的观点,使用极大似然估计最大化p(W), 于是参数的估计值为

3.1.2 贝叶斯派视角

对于以上模型,贝叶斯统计学派的统计学家会有不同意见,他们会很挑剔的批评只假设上帝拥有唯一一个固定的骰子是不合理的。在贝叶斯学派看来,一切参数都是随机变量,以上模型中的骰子不是唯一固定的,它也是一个随机变量。所以按照贝叶斯学派的观点,上帝是按照以下的过程在玩游戏的:

1. 现有一个装有无穷多个骰子的坛子,里面装有各式各样的骰子,每个骰子有V个面;

2. 现从坛子中抽取一个骰子出来,然后使用这个骰子不断抛掷,直到产生语料库中的所有词汇

坛子中的骰子无限多,有些类型的骰子数量多,有些少。从概率分布角度看,坛子里面的骰子服从一个概率分布,这个分布称为参数的先验分布。在此视角下,我们并不知道到底用了哪个骰子,每个骰子都可能被使用,其概率由先验分布来决定。对每个具体的骰子,由该骰子产生语料库的概率为,故产生语料库的概率就是对每一个骰子上产生语料库进行积分求和

先验概率有很多选择,但我们注意到。我们知道多项式分布和狄利克雷分布是共轭分布,因此一个比较好的选择是采用狄利克雷分布

此处,就是归一化因子,即

由多项式分布和狄利克雷分布是共轭分布,可得:

此时,我们如何估计参数呢?根据上式,我们已经知道了其后验分布,所以合理的方式是使用后验分布的极大值点,或者是参数在后验分布下的平均值。这里,我们取平均值作为参数的估计值。根据第二小节Dirichlet分布中的内容,可以得到:

对于每一个,我们使用下面的式子进行估计

在 Dirichlet 分布中的物理意义是事件的先验的伪计数,上式表达的是:每个参数的估计值是其对应事件的先验的伪计数和数据中的计数的和在整体计数中的比例。由此,我们可以计算出产生语料库的概率为:

3.2 PLSA模型

Unigram Model模型中,没有考虑主题词这个概念。我们人写文章时,写的文章都是关于某一个主题的,不是满天胡乱的写,比如一个财经记者写一篇报道,那么这篇文章大部分都是关于财经主题的,当然,也有很少一部分词汇会涉及到其他主题。所以,PLSA认为生成一篇文档的生成过程如下:

1. 现有两种类型的骰子,一种是doc-topic骰子,每个doc-topic骰子有K个面,每个面一个topic的编号;一种是topic-word骰子,每个topic-word骰子有V个面,每个面对应一个词;

2. 现有K个topic-word骰子,每个骰子有一个编号,编号从1到K;

3. 生成每篇文档之前,先为这篇文章制造一个特定的doc-topic骰子,重复如下过程生成文档中的词:

3.1 投掷这个doc-topic骰子,得到一个topic编号z;

3.2 选择K个topic-word骰子中编号为z的那个,投掷这个骰子,得到一个词;

PLSA中,也是采用词袋模型,文档和文档之间是独立可交换的,同一个文档内的词也是独立可交换的。K 个topic-word 骰子,记为;对于包含M篇文档的语料中的每篇文档,都会有一个特定的doc-topic骰子,所有对应的骰子记为,为了方便,我们假设每个词都有一个编号,对应到topic-word 骰子的面。于是在 PLSA 这个模型中,第m篇文档中的每个词的生成概率为

一篇文档的生成概率为:

由于文档之间相互独立,很容易写出整个语料的生成概率。求解PLSA 可以使用著名的 EM 算法进行求得局部最优解,有兴趣的读者参考 Hoffman 的原始论文,或者李航的《统计学习方法》,此处略去不讲。

3.3 LDA模型

3.3.1 PLSA 和 LDA 的区别

首先,我们来看看PLSA和LDA生成文档的方式。在PLSA中,生成文档的方式如下:

1. 按照先验概率选择一篇文档

2.从Dirichlet分布中取样生成文档的主题分布,主题分布由超参数为的Dirichlet分布生成

3.从主题的多项式分布中取样生成文档第 j 个词的主题

4.从Dirichlet分布中取样生成主题对应的词语分布 ,词语分布由参数为的Dirichlet分布生成

5.从词语的多项式分布中采样最终生成词语

可以看出,LDA 在 PLSA 的基础上,为主题分布和词分布分别加了两个 Dirichlet 先验。

我们来看一个例子,如图所示:

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20171211C06XP400?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区