LDA涉及的知识不少,对于做者这样的菜鸟来讲想要弄清楚LDA要费一番功夫,想简单说清更是不易,写下此文,也是但愿在行文的过程当中,把握LDA主要脉络,理顺思路。也但愿我理解的方式与顺序,能帮到一部分初学的朋友。若是有不对的地方,也欢迎做出指正。算法
首先咱们简单了解一下什么是LDA以及LDA能够用来作什么。markdown
LDA(Latent Dirichlet Allocation)是一种文档生成模型。它认为一篇文章是有多个主题的,而每一个主题又对应着不一样的词。一篇文章的构造过程,首先是以必定的几率选择某个主题,而后再在这个主题下以必定的几率选出某一个词,这样就生成了这篇文章的第一个词。不断重复这个过程,就生成了整片文章。固然这里假定词与词之间是没顺序的。less
LDA的使用是上述文档生成的逆过程,它将根据一篇获得的文章,去寻找出这篇文章的主题,以及这些主题对应的词。机器学习
如今来看怎么用LDA,LDA会给咱们返回什么结果。分布式
LDA是非监督的机器学习模型,而且使用了词袋模型。一篇文章将会用词袋模型构形成词向量。LDA须要咱们手动肯定要划分的主题的个数,超参数将会在后面讲述,通常超参数对结果无很大影响。函数
上图是推断《Seeking Life’s Bare(Genetic)Necessities》(Figure 1)的例子。使用主题建模算法(假设有100个主题)推断《科学》上17000篇文章的潜在主题结构,而后推断出最能描述图1中示例文章的主题分布(图左)。须要注意的是,尽管主题分布上有无穷个主题,但事实上只有其中的一小部分的几率不为零。进一步地,文章中词可被分主题进行组织,能够看到最多见的主题所包含的几率最大的词。工具
上面说了,一篇文章的生成过程,每次生成一个词的时候,首先会以必定的几率选择一个主题。不一样主题的几率是不同的,在这里,假设这些文章-主题符合多项式分布。同理,主题-词也假定为多项式分布。所谓分布(几率),就是不一样状况发生的可能性,它们符合必定的规律。学习
若是你数学基础和我同样薄弱,可能你已经忘了什么事多项式分布,这里咱们首先回顾一下两点分布和二项分布,多项式分布是二项分布的延伸。二项分布是两点分布的延伸。atom
已知随机变量X的分布率为spa
X | 1 | 0 |
---|---|---|
p | p | 1-p |
则有
E(x)=1∗p+0∗q=p
D(x)=E(x2)−[E(x)]2=pq
抛一次硬币的时候,不是正面就是反面,符合两点分布。这里几率P为参数。
二项分布,便是重复n次两点分布。设随机变量X服从参数为n,p的二项分布。其中,n为重复的次数,p为两点分布中,事件A发生的几率。设X=k为n次实验中事件A发生了k次的几率。
能够获得X的分布率为:
例如,丢5次硬币,事件A为硬币正面朝上,则PX=k表示求抛5次硬币,有k次硬币正面朝上的几率。经过计算能够得知二项分布的指望和方差以下,这里就不计算了:
E(x)=np
D(x)=np(1−p)
多项式分布(multinomial)是二项分布在两点分布上的延伸。在两点分布中,一次实验只有两种可能性,p以及 (1-p)。例如抛一枚硬币,不是正面就是反面。在多项式分布中,这种可能的状况获得了扩展。例如抛一个骰子,一共有6种可能,而不是2种。
设某随机实验若是有k个可能状况 A一、A二、…、Ak,分别将他们的出现次数记为随机变量X一、X二、…、Xk,它们的几率分布分别是p1,p2,…,pk,那么在n次采样的总结果中,A1出现n1次、A2出现n2次、…、Ak出现nk次的这种事件的出现几率P有下面公式:
这里,p1,p2…pk都是参数
那么如今咱们回到LDA身上,前面已经说了主题和词是符合多项分布的,咱们能够用骰子形象地表达一篇文章的生成的过程。
有两类骰子,一种是文章-主题(doc-topic)骰子,骰子的每面表明一种主题。这里设一共有K个主题,则K面。骰子的各个面的几率记为ϑ⃗ =(p1,p2,p3,...,pk)。各个面的几率即为这个多项式分布的参数。
另外一种骰子为主题-词(topic-word)骰子,一共有K个,从1~K编号,分别对应着不一样的主题。骰子的一个面表明一个单词。因为有K个骰子,把不一样主题-词骰子各个面的几率分别记为φ⃗ 1,φ⃗ 2,...φ⃗ k。对于一个主题-词骰子,他的各个面的几率即为这个多项式分布的参数。
那么一篇文章的生成过程能够表示为:
上面咱们已经知道了主题分布和词分布都属于多项式分布,只是它们的参数到底是什么值,咱们还无从知晓。若是咱们能估算出它们的参数,咱们就能求得这些主题分布和词分布。LDA的主要目的就是求出主题分布和词分布,距离这个目的,咱们近在咫尺。
咱们知道,频率能够用来估计参数。例如对于两点分布,抛硬币。当咱们抛的次数足够多,能够估出p接近1/2,大数定理是有力的保证。频率学派为参数估计提供了另外一种有力的工具——极大似然估计。它的思想能够这样形象地表达:既然样本已经出来了,咱们有理由相信它们发生的几率很大,因而咱们不如就设给定参数的状况下,出现这些样本的几率是最大的,经过求导计算极值,从而计算出参数。
在这里,咱们的样本就是咱们观察到的,文章d,以及文章里的词w。要求参数,咱们能够写出以下式子:
p(wj|dm)=∑k=1Kp(wj|zk)p(zk|dm)
给定第m篇文章状况下,第i个词出现的几率正式上式。这里z主题是隐变量,咱们观测不到,但把它暴露了出来。p(wj|zk)是词分布。p(zk|dm)是主题分布,也是咱们要求的参数:φkj表示第k个主题词wj出现的几率;ϑmk表示第m篇文章主题k出现的几率。这样咱们就能够求他们了。
咱们设词和词,文章和文章之间是独立的。进一步,有了一个单词的几率,咱们就能够求一篇文章的几率:
p(w⃗ |dm)=∏j=1n∑k=1Kp(wj|zk)p(zk|dm)
进一步,有了整个语料库(训练集,多篇文章)的几率:
L=∏m=1M∏j=1n∑k=1Kp(wj|zk)p(zk|dm)
上面说过,极大似然估计就是要让这个式子达到最大值。接下来还须要把式两边取对手,求导,解似然方程,就能够获得参数。实际上,到这里为止,讲述的是其实还只是plsa模型,所以这里不写出求解过程。LDA在plsa的求参上做了一些变化,下面将会讲到。
形式化地,似然函数能够以下表示:
P(x1,x2,...xn|ϑ)
哪一个参数可以使得这个P最大,则把这个参数做为咱们选定的参数。
上一小节中咱们知道,plsa模型用频率学派来估计主题分布和词分布的参数,频率学派认为参数是一个定值。而贝叶斯学派则认为参数是变化的,也应该符合必定的分布。LDA在plsa的基础上引入了贝叶斯学派的方式。
咱们先来看看贝叶斯公式
P(ϑ|x)=P(x,ϑ)P(x)=P(x|ϑ)P(ϑ)P(x)
咱们看看每一个部分的含义:
P(θ):θ发生的几率,先验几率。
P(θ|x):在数据x的支持下,θ发生的几率,后验几率。
P(x|θ):似然函数,前面已经说起。
百度百科对先验后验有以下解释:
先验几率不是根据有关天然状态的所有资料测定的,而只是利用现有的材料(主要是历史资料)计算的;后验几率使用了有关天然状态更加全面的资料,既有先验几率资料,也有补充资料;
贝叶斯学派的思路很直观,就是若是只作了少许试验来估计参数(如均值或几率p),会因为小样本数据而形成估计不许。但利用以前已经拥有的经验(之前作过的试验数据),就可让估计更为合理。
那么在给定样本X的状况下,要如何去修正参数P(ϑ|x)呢?相似极大似然函数那样,咱们能够选择另P(θ|x)最大的θ,因为样本X是给定的,所以P(X)是不变的,由此有:
P(ϑ|x)∝P(x|ϑ)P(ϑ)
回到咱们的LDA上,经过贝叶斯学派的观点对plsa模型进行改造。参数也是服从必定的分布的。
本来绿色骰子(doc-topic分布)是P(θ)先验几率,如今成了P(θ|x)后验几率。词分布也是一样的。咱们已经知道,主题分布以及词分布式服从多项式分布的。那么他们的参数要服从什么分布呢?咱们知道,P(ϑ|x)∝P(x|ϑ)P(ϑ),而P(θ|x)服从多项式分布,所以P(θ)P(x|θ)归一化后也要服从多项式分布。
在贝叶斯几率理论中,有这么一种定义,若是后验几率P(θ|x)和先验几率p(θ)知足一样的分布律,那么先验分布和后验分布被叫作共轭分布,同时,先验分布叫作似然函数的共轭先验分布。
那么,咱们就能够选择似然函数P(x|θ)的共轭先验做为P(θ)的分布。而Dirichlet分布正是多项式分布的共轭先验几率分布。
Dirichlet分布的更多说明和数学推导能够参考篇尾参考资料里的LDA数学八卦以及LDA漫游指南。这里叙述共轭先验分布一些后面要用到的特性。
Dir(p⃗ |α⃗ )+MultCount(m⃗ )=Dir(p⃗ |α⃗ +m⃗ )
对应贝叶斯参数估计的过程:先验分布+数据的知识= 后验分布
MultCount是什么咱们还没说到,可是根据式子能够知道它们对应咱们观测到的样本数据。咱们彷佛还没讲到这些样本数据要如何组织,如何使用。举一个例子:
假设语料库中全部词的总数是N,若是咱们关注每一个词vi的发生次数ni,那么n⃗ =(n1,n2...nv)正好是一个多项分布
这就是MultCount。
对应到LDA中,文章-主题分布的MultCount是每一个主题的词的总数。主题-词对应的是词分布里每一个单词的计数。
最后,咱们经过共轭先验分布来求参数的后验分布:
有了分布,就可使用(a)式用平均值来估计参数的值,能够经过计算分布的极值或者指望来做为咱们选择的参数。
若是p⃗ ∼Dir(t⃗ |α⃗ ),有指望
因而有:
ni是词频的计数,对应到主题分布和词分布就是每一个主题的词的总数/词分布里每一个单词的计数。α成为先验分布的伪计数。能够看到它的物理意义很直观,就是先验的伪计数+数据样本的计数占总体计数的比重。
有了参数的形式,对它的求解,可使用变分EM以及吉布斯(Gibbs Sampling)的方式。在下一篇文章中,将给出吉布斯采样的原理以及代码解析。
上面对LDA进行了形象的描述以及相关的数学讨论,如今咱们来更准确地,形式化地描述一下LDA。下图为LDA的几率图模型。
符号 | 解释 |
---|---|
M | 文章的数量 |
K | 主题的个数 |
V | 词袋的长度 |
Nm | 第m篇文章中单词的总数 |
α⃗ | 是每篇文章的主题分布的先验分布Dirichlet分布的参数(也被称为超参数)一般是手动设定的 |
β⃗ | 是每一个主题的词分布的先验分布Dirichlet分布的参数(也被称为超参数)一般是手动设定的 |
ϑ⃗ m | θ是一个M*K的矩阵,ϑ⃗ m表示第m篇文章的主题分布,ϑ⃗ m∼Dir(α⃗ )是咱们要求的参数 |
φ⃗ k | φ是一个K*V的矩阵,φ⃗ k表示第k个主题的词分布,φ⃗ k∼Dir(β⃗ )是咱们要求的参数 |
zm,n | 第m篇文章第n个词被赋予的主题,隐变量 |
wm,n | 第m篇文章第n个词,这个是能够被咱们观测到的 |
LDA模型文章的生成过程以下:
根据上节的讨论,能够推导出主题分布:
词分布有相似的形式。
最后,能够写出资料库的联合几率。
这里参数转化为每一个topic的单词计数以及词分布的单词计数。几率将有这些计数除它们对应的总数所得。