LDA模型学习

LDA模型学习

本文记录学习 LDA(隐含狄利克雷分布)时的一些笔记,该笔记主要记录的是LDA的思想和概率,对底层的数学知识未作详细说明。

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的三位作者给了一个简单的例子。比如假设事先给定了这几个主题:Arts、Budgets、Children、Education,然后通过学习训练,获取每个主题Topic对应的词语。如下图所示:
image.png
然后以一定的概率选取上述某个主题,再以一定的概率选取那个主题下的某个单词,不断的重复这两步,最终生成如下图所示的一篇文章(其中不同颜色的词语分别对应上图中不同主题下的词):
image.png
而当我们看到一篇文章后,往往喜欢推测这篇文章是如何生成的,我们可能会认为作者先确定这篇文章的几个主题,然后围绕这几个主题遣词造句,表达成文。 因此,LDA就是要干这事:**根据给定的一篇文档,反推其主题分布,得到每篇文档的主题分布后,根据它们之间的相似性来对文本聚类/分类。**通俗来说,可以假定认为人类是根据上述文档生成过程写成了各种各样的文章,现在有学者想让计算机利用LDA干一件事:你计算机给我推测分析网络上各篇文章分别都写了些啥主题,且各篇文章中各个主题出现的概率大小(主题分布)是啥。

3 LDA先验知识介绍

LDA 模型涉及很多数学知识,本节主要介绍LDA中涉及的数学知识(未涉及严格数学推导,会介绍基本概念及思想)。LDA涉及到的数学知识有:二项分布、Gamma函数、Beta分布、多项分布、Dirichlet分布、马尔科夫链、MCMC、Gibs Sampling、EM算法

3.1 词袋模型

LDA 采用词袋模型。所谓词袋模型,是将一篇文档,我们仅考虑一个词汇是否出现,而不考虑其出现的顺序。比如,在词袋模型中,“我喜欢你”和“你喜欢我”是等价的。与词袋模型相反的一个模型是 n-gram(指建立一个长度为N的窗口在文本上滑动,假定第N词出现的概率只与前面N-1个词相关,与其他词不相关,整句的概率就是各个词出现概率的乘积),即 n-gram 考虑了词汇出现的先后顺序。

3.2 二项分布

二项分布是从伯努利分布推进的。伯努利分布,又称两点分布或0-1分布,是一个离散型的随机分布,其中的随机变量只有两类取值,非正即负{+,-},而二项分布是N重伯努利分布,即为X ~ B(n, p)。简言之,只做一次实验,是伯努利分布,重复做了n次,是二项分布。
二项分布的概率密度公式为:
image.png

3.3 多项分布

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

3.4 Gamma函数

Gamma函数的定义:
image.png
对上式做分部积分后,可以发现Gamma函数如有这样的性质:
image.png
Gamma函数还具有以下性质:
image.png

3.5 Beta分布

Beta分布的定义:对于参数 α > 0, β > 0, 取值范围为[0, 1]的随机变量 x 的概率密度函数为:
image.png
其中,
image.png

3.6 共轭先验分布

什么又是共轭呢?轭的意思是束缚、控制,共轭从字面上理解,则是共同约束,或互相约束。
在贝叶斯概率理论中,如果后验概率P(θ|x)和先验概率p(θ)满足同样的分布律(同样的概率分布),那么,先验分布和后验分布被叫做共轭分布。同时,先验分布叫做似然函数的共轭先验分布。
比如,某观测数据服从概率分布P(θ)时,当观测到新的X数据时,我们一般会遇到如下问题:

  • 可否根据新观测数据X,更新参数θ?
  • 根据新观测数据可以在多大程度上改变参数θ,即
  • 当重新估计θ的时候,给出新参数值θ的新概率分布,即P(θ|x)

事实上,根据贝叶斯公式可知:
image.png
其中,P(θ|x)表示参数θ的后验分布;P(θ)是已有原始的θ概率分布(先验分布);P(x|θ)表示随机变量 x 的似然函数(给定参数θ,数据 x 会有怎么样的分布); p(x) 可视为使 p(θ|x) 为概率分布的归一化因子(注意到 p(x) 是与 θ 无关的函数)。

如果后验分布 p(θ|x) 与先验分布 p(θ) 是同一种分布(只是参数不同),则称先验分布 p(θ) 是关于似然函数 p(x|θ) 的共轭先验分布。
LDA中用到的结论:Beta分布是二项式分布的共轭先验分布,而狄利克雷(Dirichlet)分布是多项式分布的共轭分布。(严格数学证明)

3.7 Dirichlet(狄利克雷)分布

Dirichlet分布,是Beta分布在高维度上的推广。因此,Dirichlet的概率密度函数为:
image.png
其中,
image.png

4 LDA文本建模(数学原理)

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

  • 上帝都有什么样的骰子;
  • 上帝是如何抛掷这些骰子的;

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

4.1 Unigram Model

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

  • 1. 上帝只有一个骰子,这个骰子有V面,每个面对应一个词,各个面的概率不一;
  • 2. 每抛掷一次骰子,抛出的面就对应的产生一个词;如果一篇文档中N个词,就独立的抛掷n次骰子产生n个词;
4.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的那个,投掷这个骰子,得到一个词;

image.png
image.png
一篇文档的生成概率为:
image.png
由于文档之间相互独立,很容易写出整个语料的生成概率。求解PLSA 可以使用著名的 EM 算法(此处不做介绍)进行求得局部最优解。

4.3 LDA 模型
4.3.1 PLSA 和 LDA 的区别

首先,我们来看看PLSA和LDA生成文档的方式。在PLSA中,生成文档的方式如下:
image.png
LDA 中,生成文档的过程如下:
image.png
可以看出,LDA 在 PLSA 的基础上,为主题分布和词分布分别加了两个 Dirichlet 分布
看一个例子:
image.png
上图中有三个主题,在PLSA中,我们会以固定的概率来抽取一个主题词,比如0.5的概率抽取教育这个主题词,然后根据抽取出来的主题词,找其对应的词分布,再根据词分布,抽取一个词汇。由此,可以看出PLSA中,主题分布和词分布都是唯一确定的。
但是,在LDA中,主题分布和词分布是不确定的,LDA的作者们采用的是贝叶斯派的思想(在贝叶斯学派看来,一切参数都是随机变量,而不是固定的),认为它们应该服从一个分布,主题分布和词分布都是多项式分布,因为多项式分布和狄利克雷分布是共轭结构,在LDA中主题分布和词分布使用了Dirichlet分布作为它们的共轭先验分布。
用例子解释:
PLSA:在PLSA中,选主题和选词都是两个随机的过程,先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.2}中抽取出词:大学。
LDA:而在LDA中,选主题和选词依然都是两个随机的过程,依然可能是先从主题分布{教育:0.5,经济:0.3,交通:0.2}中抽取出主题:教育,然后再从该主题对应的词分布{大学:0.5,老师:0.3,课程:0.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先验随机确定。
所以,也就有了一句广为流传的话:LDA 就是 PLSA 的贝叶斯化版本
下面两张图片很好的体现了两者的区别:

给定一篇文档d,主题分布是一定的,比如{ P(zi|d), i = 1,2,3 }可能就是{0.4,0.5,0.1},表示z1、z2、z3,这3个主题被文档d选中的概率都是个固定的值:P(z1|d) = 0.4、P(z2|d) = 0.5、P(z3|d) = 0.1

但在贝叶斯框架下的LDA中,我们不再认为主题分布(各个主题在文档中出现的概率分布)和词分布(各个词语在某个主题下出现的概率分布)是唯一确定的(而是随机变量),而是有很多种可能。(LDA为它们弄了两个Dirichlet先验参数,这个Dirichlet先验为某篇文档随机抽取出某个主题分布和词分布
给定一篇文档d,现在有多个主题z1、z2、z3,它们的主题分布{ P(zi|d), i = 1,2,3 }可能是{0.4,0.5,0.1},也可能是{0.2,0.2,0.6},即这些主题被d选中的概率都不再认为是确定的值,可能是P(z1|d) = 0.4、P(z2|d) = 0.5、P(z3|d) = 0.1,也有可能是P(z1|d) = 0.2、P(z2|d) = 0.2、P(z3|d) = 0.6等等,而主题分布到底是哪个取值集合我们不确定(为什么?这就是贝叶斯派的核心思想,把未知参数当作是随机变量,不再认为是某一个确定的值),但其先验分布是dirichlet 分布,所以可以从无穷多个主题分布中按照dirichlet 先验随机抽取出某个主题分布出来。

在PLSA和LDA的两篇论文中,使用了下面的图片来解释模型,它们也很好的对比了PLSA和LDA的不同之处:
PLSA:

d:文档 z:主题 w:单词
图中被涂色的d、w表示可观测变量,未被涂色的z表示未知的隐变量,N表示一篇文档中总共N个单词,M表示M篇文档
上图中,文档d和词w是我们得到的样本(样本随机,参数虽未知但固定,所以PLSA属于频率派思想)
LDA:


对于LDA,只有 W 是观察到的变量,其他都是隐变量或者参数,其中,Φ表示词分布,Θ表示主题分布,α 是主题分布Θ的先验分布(即Dirichlet 分布)的参数,β 是词分布Φ的先验分布(即Dirichlet 分布)的参数,N表示文档的单词总数,M表示文档的总数。
所以,对于一篇文档d中的每一个单词,LDA根据先验知识 α 确定某篇文档的主题分布θ,然后从该文档所对应的多项分布(主题分布)θ中抽取一个主题z,接着根据先验知识 β 确定当前主题的词语分布ϕ,然后从主题z所对应的多项分布(词分布)ϕ中抽取一个单词w。然后将这个过程重复N次,就产生了文档d。

4.3.2 LDA Training(训练)

根据上一小节,我们的目标有两个:
image.png
ϕ:主题-词语 骰子
θ:文档-主题 骰子
如何估计参数?Gibbs Sampling 通过求解出主题分布和词分布的后验分布,从而成功解决主题分布和词分布这两参数未知的问题。
LDA 模型的 Gibbs Sampling 公式为:
image.png
训练的过程:
image.png
image.png

4.3.3 LDA Inference(预测)

image.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. 一文详解LDA主题模型

  3. 通俗理解LDA主题模型

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值