LDA主题模型讲解及代码Python实现

1. LDA主题模型详解

1.1 Beta/Dirichlet 分布的一个性质

如果 图片, 则

图片

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

图片

把上式带入图片的计算式,得到

(5) 图片

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

(6) 图片

以上两个结论很重要,因为我们在后面的 LDA 数学推导中需要使用这个结论。

1.2 LDA-math-MCMC

吉布斯采样(Gibbs sampling)是统计学中用于马尔科夫蒙特卡洛(MCMC)的一种算法,用于在难以直接采样时从某一多变量概率分布中近似抽取样本序列。该序列可用于近似联合分布、部分变量的边缘分布或计算积分(如某一变量的期望值)。某些变量可能为已知变量,故对这些变量并不需要采样。
马氏链定理: 如果一个非周期马氏链具有转移概率矩阵图片,且它的任何两个状态是连通的,那么 图片 存在且与图片无关,记 图片, 我们有

  1. 图片
  2. 1
  3. 图片 是方程 图片 的唯一非负解

其中,

图片

图片称为马氏链的平稳分布。

这个马氏链的收敛定理非常重要,所有的 MCMC(Markov Chain Monte Carlo) 方法都是以这个定理作为理论基础的。 定理的证明相对复杂,一般的随机过程课本中也不给证明,所以我们就不用纠结它的证明了,直接用这个定理的结论就好了。我们对这个定理的内容做一些解释说明:

  1. 该定理中马氏链的状态不要求有限,可以是有无穷多个的;

  2. 定理中的“非周期“这个概念我们不打算解释了,因为我们遇到的绝大多数马氏链都是非周期的;

  3. 两个状态图片是连通并非指图片 可以直接一步转移到图片(图片),而是指 图片 可以通过有限的图片步转移到达图片(图片)。马氏链的任何两个状态是连通的含义是指存在一个图片, 使得矩阵图片 中的任何一个元素的数值都大于零。

  4. 我们用 图片 表示在马氏链上跳转第图片步后所处的状态,如果 图片 存在,很容易证明以上定理的第二个结论。由于

    图片

    上式两边取极限就得到 图片

从初始概率分布 图片 出发,我们在马氏链上做状态转移,记图片的概率分布为图片, 则有

图片

由马氏链收敛的定理, 概率分布图片将收敛到平稳分布 图片。假设到第图片步的时候马氏链收敛,则有

图片

所以 图片 都是同分布的随机变量,当然他们并不独立。如果我们从一个具体的初始状态 图片 开始,沿着马氏链按照概率转移矩阵做跳转,那么我们得到一个转移序列 图片 由于马氏链的收敛行为, 图片 都将是平稳分布 图片 的样本。

12312421541513414

*** Markov Chain Monte Carlo***

对于给定的概率分布图片,我们希望能有便捷的方式生成它对应的样本。由于马氏链能收敛到平稳分布, 于是一个很的漂亮想法是:如果我们能构造一个转移矩阵为图片的马氏链,使得该马氏链的平稳分布恰好是图片, 那么我们从任何一个初始状态图片出发沿着马氏链转移, 得到一个转移序列 图片, 如果马氏链在第图片步已经收敛了,于是我们就得到了 图片 的样本图片

这个绝妙的想法在1953年被 Metropolis想到了,为了研究粒子系统的平稳性质, Metropolis 考虑了物理学中常见的波尔兹曼分布的采样问题,首次提出了基于马氏链的蒙特卡罗方法,即Metropolis算法,并在最早的计算机上编程实现。Metropolis 算法是首个普适的采样方法,并启发了一系列 MCMC方法,所以人们把它视为随机模拟技术腾飞的起点。 Metropolis的这篇论文被收录在《统计学中的重大突破》中, Metropolis算法也被遴选为二十世纪的十个最重要的算法之一。

我们接下来介绍的MCMC 算法是 Metropolis 算法的一个改进变种,即常用的 Metropolis-Hastings 算法。由上一节的例子和定理我们看到了,马氏链的收敛性质主要由转移矩阵图片决定, 所以基于马氏链做采样的关键问题是如何构造转移矩阵图片,使得平稳分布恰好是我们要的分布图片。如何能做到这一点呢?我们主要使用如下的定理。

定理:[细致平稳条件] 如果非周期马氏链的转移矩阵图片和分布图片 满足

(1) 图片

图片 是马氏链的平稳分布,上式被称为细致平稳条件(detailed balance condition)。

其实这个定理是显而易见的,因为细致平稳条件的物理含义就是对于任何两个状态图片, 从 图片转移出去到图片 而丢失的概率质量,恰好会被从 图片 转移回图片 的概率质量补充回来,所以状态图片上的概率质量图片是稳定的,从而图片是马氏链的平稳分布。数学上的证明也很简单,由细致平稳条件可得

图片

由于图片 是方程 图片的解,所以图片是平稳分布。

假设我们已经有一个转移矩阵为图片马氏链(图片表示从状态 图片转移到状态图片的概率,也可以写为 图片或者图片), 显然,通常情况下

图片

也就是细致平稳条件不成立,所以 图片 不太可能是这个马氏链的平稳分布。我们可否对马氏链做一个改造,使得细致平稳条件成立呢?譬如,我们引入一个 图片, 我们希望

(2) 图片

取什么样的 图片 以上等式能成立呢?最简单的,按照对称性,我们可以取

图片

于是(*)式就成立了。所以有

(3) 图片

于是我们把原来具有转移矩阵图片的一个很普通的马氏链,改造为了具有转移矩阵图片的马氏链,而 图片恰好满足细致平稳条件,由此马氏链图片的平稳分布就是图片

在改造 图片 的过程中引入的 图片称为接受率,物理意义可以理解为在原来的马氏链上,从状态 图片图片 的概率转跳转到状态图片 的时候,我们以图片的概率接受这个转移,于是得到新的马氏链图片的转移概率为图片

image-202109141saa1马氏链转移和接受概率

假设我们已经有一个转移矩阵Q(对应元素为图片), 把以上的过程整理一下,我们就得到了如下的用于采样概率分布图片的算法。

上述过程中 图片 说的都是离散的情形,事实上即便这两个分布是连续的,以上算法仍然是有效,于是就得到更一般的连续概率分布 图片的采样算法,而 图片 就是任意一个连续二元概率分布对应的条件分布。

以上的 MCMC 采样算法已经能很漂亮的工作了,不过它有一个小的问题:马氏链图片在转移的过程中的接受率 图片 可能偏小,这样采样过程中马氏链容易原地踏步,拒绝大量的跳转,这使得马氏链遍历所有的状态空间要花费太长的时间,收敛到平稳分布图片的速度太慢。有没有办法提升一些接受率呢?

假设 图片, 此时满足细致平稳条件,于是

图片

上式两边扩大5倍,我们改写为

图片

看,我们提高了接受率,而细致平稳条件并没有打破!这启发我们可以把细致平稳条件(**) 式中的图片 同比例放大,使得两数中最大的一个放大到1,这样我们就提高了采样中的跳转接受率。所以我们可以取

图片

于是,经过对上述MCMC 采样算法中接受率的微小改造,我们就得到了如下教科书中最常见的 Metropolis-Hastings 算法。

图片

对于分布 图片,我们构造转移矩阵 图片 使其满足细致平稳条件

图片

此处 图片 并不要求是一维的,对于高维空间的 图片,如果满足细致平稳条件

图片

那么以上的 Metropolis-Hastings 算法一样有效。


1.2.1 ✨重要理解✨

马氏链

MCMC的随机变量序列是\(X\)\(X\)中有状态(都是随机变量):\(x_1\)\(x_2\)\(x_3\)......,有限或者无限可列个。

用时间\(t\)表示\(X\)中的第几个状态,写作\(X_t\)\(X_t\)可以是\(x_1\)\(x_2\)\(x_3\)......中的任意一个,且遵循\(t\)时刻\(x\)的概率分布,每个时刻\(x\)的概率分布都是不同的。如,随机变量序列\(X\)={\(X_1\)=\(x_2\)\(X_2\)=\(x_1\)\(X_3\)=\(x_1\)\(X_4\)=\(x_3\)\(X_5\)=\(x_3\)},\(X_1\)的概率分布是\(π(x)\)注意大小写

状态转移矩阵

状态转移阵\(P_{x_ix_j}\)其概率是从随机变量\(x_1\)\(x_2\)\(x_3\)......中相互转换的概率,而不是\(X_1\)\(X_2\)\(X_3\)......之间的转移概率。简写为\(P_{ij}\)


1.3 Gibbs Sampling

对于高维的情形,由于接受率 图片的存在(通常 图片), 以上 Metropolis-Hastings 算法的效率不够高。能否找到一个转移矩阵Q使得接受率 图片 呢?我们先看看二维的情形,假设有一个概率分布 图片, 考察图片坐标相同的两个点图片,我们发现

图片

所以得到

(4) 图片

图片

基于以上等式,我们发现,在 图片 这条平行于 图片轴的直线上,如果使用条件分布 图片做为任何两个点之间的转移概率,那么任何两个点之间的转移满足细致平稳条件。同样的,如果我们在 图片 这条直线上任意取两个点 图片,也有如下等式

图片

图片平面上马氏链转移矩阵的构造

于是我们可以如下构造平面上任意两点之间的转移概率矩阵Q

图片

有了如上的转移矩阵 Q, 我们很容易验证对平面上任意两点 图片, 满足细致平稳条件

图片

于是这个二维空间上的马氏链将收敛到平稳分布 图片。而这个算法就称为 Gibbs Sampling 算法,是 Stuart Geman 和Donald Geman 这两兄弟于1984年提出来的,之所以叫做Gibbs Sampling 是因为他们研究了Gibbs random field, 这个算法在现代贝叶斯分析中占据重要位置。

图片

图片二维Gibbs Sampling 算法中的马氏链转移

以上采样过程中,如图所示,马氏链的转移只是轮换的沿着坐标轴 图片轴和图片轴做转移,于是得到样本 图片 马氏链收敛后,最终得到的样本就是 图片 的样本,而收敛之前的阶段称为 burn-in period。额外说明一下,我们看到教科书上的 Gibbs Sampling 算法大都是坐标轴轮换采样的,但是这其实是不强制要求的。最一般的情形可以是,在图片时刻,可以在图片轴和图片轴之间随机的选一个坐标轴,然后按条件概率做转移,马氏链也是一样收敛的。轮换两个坐标轴只是一种方便的形式。

以上的过程我们很容易推广到高维的情形,对于(***) 式,如果图片 变为多维情形图片,可以看出推导过程不变,所以细致平稳条件同样是成立的

(5) 图片

此时转移矩阵 Q 由条件分布 图片 定义。上式只是说明了一根坐标轴的情形,和二维情形类似,很容易验证对所有坐标轴都有类似的结论。所以图片维空间中对于概率分布 图片 可以如下定义转移矩阵

  1. 如果当前状态为图片,马氏链转移的过程中,只能沿着坐标轴做转移。沿着图片 这根坐标轴做转移的时候,转移概率由条件概率 图片定义;
  2. 其它无法沿着单根坐标轴进行的跳转,转移概率都设置为 0。

于是我们可以把Gibbs Smapling 算法从采样二维的 图片 推广到采样图片 维的 图片

图片

以上算法收敛后,得到的就是概率分布图片的样本,当然这些样本并不独立,但是我们此处要求的是采样得到的样本符合给定的概率分布,并不要求独立。同样的,在以上算法中,坐标轴轮换采样不是必须的,可以在坐标轴轮换中引入随机性,这时候转移矩阵图片 中任何两个点的转移概率中就会包含坐标轴选择的概率,而在通常的 Gibbs Sampling 算法中,坐标轴轮换是一个确定性的过程,也就是在给定时刻图片,在一根固定的坐标轴上转移的概率是1。

2. 所需工具库

image-20210811154440334

3. python实现

python工具库:

image-20210811164032252

3.1 初始化停止语料

image-20210811154801603

image-20210811154842370

3.2 读入语料数据

image-20210811155014608


image-20210811155056399

3.3 建立词典

image-20210811155238482

image-20210811155903993

3.4 LDA模型拟合推断

image-20210811155808263

3.5 随机打印某10个文档的主题

image-20210811160123057

image-20210811160208716

image-20210811162207030

image-20210811162436717

4. 项目代码链接

https://gitee.com/JupiterLi/ldapython-project

posted @ 2021-08-11 16:31    阅读(3454)  评论(0编辑  收藏  举报