这篇文章记录了对于统计学习中一些算法的思想、步骤、意义的理解,对于比较抽象的概念力求从不同的角度去看待,同时试图探索不同算法之间的联系。
LDA(Latent Dirichlet Allocation)是一种非常经典的主题模型,从提出之后便有非常多的应用。本篇文章主要从直观上去介绍LDA究竟在干什么。阅读本文需要对多项式分布,Beta分布,Dirichlet分布,Gibbs Sampling有基本的了解。
1 背景
1.1 问题概述
在生活中我们能够遇到许多文本,如果把文本储存为文档,每篇文档可以用一个有序词序列表示:
1.2 什么是LDA
了解LDA之前首先需要知道关于LDA的一些概要,在David M. Blei于2003年发表的文章中,LDA横空出世,这是一种无监督的,三层贝叶斯模型。所谓“主题”,可以看做对于文档内容的高度概括,比如一篇新闻的主题可以是“体育”,可以是“艺术”等,当然一篇文档也可以有多个主题,比如“体育,亚运会,竞技”等。在文本分析中,我们常常会通过一些关键词来判断文章的主题,比如如果文章中出现较多“比分”、“胜利”、“参赛”等词汇,那么我们可以判断这篇文章的主题大概率是体育类的。
2 LDA的具体过程
别忘了我们做这些事情的最终目的——对文档的生成过程进行建模,这里通过一个更为直观的例子来理解——上帝掷骰子。我们假设一篇文档中所有词汇都是通过“掷骰子”游戏随机生成的,那么我们的问题就可以转换为——这个“掷骰子”的游戏究竟是如何玩的。这个问题可以拆解为两个部分:(1)这些骰子是什么样的?(2)按照什么规则去投掷这些骰子?
2.1 Unigram模型
先考虑最简单的情况——上帝只有一个骰子(V个面,每个面对应一个单词,各个面概率不一),这就是Unigram模型。具体而言,我们认为一个有n个词语的文档是这样生成的:独立投掷这个骰子n次产生n个词语。我们可以用多项式分布来刻画这个抛掷V面骰子的实验:
这里我们假设了上帝只有一个固定的骰子,然鹅如果我们试着从贝叶斯的角度看待这个问题,我们可以去除骰子固定的假设,而是认为骰子
因此,这个掷骰子的游戏就变成了:上帝拥有一个装有无穷骰子的坛子,里面有很多种骰子:不同的形状(面数不同),每面有不同的概率。我们可以认为骰子
选好骰子之后,各个词语的出现就服从多项式分布了,由于狄利克雷分布和多项式分布的共轭性我们可以推出后验:
参数
结合上面的式子,我们可以计算出整个语料的产生概率:
2.2 从Unigram到PLSA
在Unigram模型中,我们就是假设一篇文章的n个词语都是简单地由骰子随机产生,然而我们知道,写一篇文章往往会围绕一个主题,比如写体育主题的文章就会比较多用到体育相关的词汇,少涉及经济、艺术方面的词汇。考虑到这一点,我们不妨这样假设文章的生成过程:先用骰子投出一个主题,再选择对应主题的骰子投出文章中的n个词语。
所以这里,上帝有两种骰子,一种是Doc-topic骰子,用于生成文章的主题,一种是Topic-word骰子,用于确定主题后生成词语。
我们将这个游戏过程用公式表达出来:游戏中我们有K个Topic-word骰子,记作
于是PLSA模型中第m篇文档
整篇文档的生成概率为:
2.3 从PLSA到LDA
同样我们从贝叶斯的视角去看待上述的过程:将骰子的参数
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的那个,投掷得到一个词语。
也就是说,每一篇文档中
LDA和PLSA的具体区别可以用图的方式直观表示出来,我们看到,LDA只不过是在PLSA的基础上加了两个Dirichlet先验,即LDA可以看作PLSA的贝叶斯化版本。
2.4 LDA的物理过程
通过将涉及到的变量用图的方式表示出来我们很容易就能看到:LDA模型的“游戏”中,主要有两个物理过程:
上图所示的红色部分是其中一个过程,表示在生成第m篇文档时,先从Doc-topic的坛子中抽取一个doc-topic骰子
在这个过程中,
其中
由于语料中M篇文章的topic生成过程相互独立,因此这里有M个相互独立的Dirichlet-Multinomial共轭结构,则语料中topics生成概率为:
接下来我们再看图中另外一个过程:
这个过程就是:在抽出的K个topic-word骰子
由于我们假设给定topic后词汇生成的独立性,我们不妨把语料中的词进行交换,将具有相同topic的词放在一起:
于是在这里我们不再以文档为单位进行处理,而是考虑由同一个topic生成的词。在这个过程中,
其中
结合两个过程的生成公式,我们就可以得到
3 LDA如何抽样:Gibbs Sampling
在上一节中我们求出了
在这个问题中,由于
这里我们同样利用Dirichlet-Multinomial共轭结构的性质,由于
综合上面三条式子,我们就能得到Gibbs Sampling的公式推导:
根据2.1中的Dirichlet参数估计公式,有:
所以最终LDA模型的Gibbs Sampling公式长这样:
看到了吗,这个公式实际上就是
4 LDA训练与推断
回到我们最开始提到的目标:对于文档的生成过程进行建模。拆解一下其实我们希望做到两件事情:(1)估计模型中的参数:
训练的过程其实很简单,就是通过Gibbs Sampling获取语料中的
而对于新的文档,计算该文档topic的语义分布(即inference)的过程和训练的过程非常类似。具体流程如下:
参考文献
[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).
回到目录