本文内容为Parameter estimation for text analysis阅读笔记第五篇,如有错误或疏漏之处,恳请各位批评指正!
简介:
Latent Dirichlet Allocation(LDA)是一种概率生成模型,它通过unsupervised learning的方式,去估计multinomial observations的properties。在文本建模中,LDA的方法被用于进行latent semantic analysis (LSA,用于寻找文本中的“主题”信息,而这样的主题信息被文本中一个个单词选择的noise给obsure了) task。第一次提出LSA的是Deerwester et al.,他们指出,文本中词汇共现的结构可以被用于挖掘隐含的主题结构(实际上,我们人类在只需要看到文本中出现了哪些词语(单纯就是看一个个离散的词语),就可以判断这篇文章的主题大概是什么)。反过来,这些隐含的主题表示可以被用于建模一些linguistic phenomena(例如,同义词或是一词多义)。这在信息检索领域有所应用:我们可以通过将用户查询的关键词与文本在meaning level上进行匹配(而不是机械地去匹配文本中是否有与查询关键词中的词汇一致的情况)。
LDA的方法与PLSA(probabilistic LSA)方法关系密切,可以说LDA是PLSA的extension。PLSA只能算是一种ML或MAP的estimator,而LDA定义了完整的一套generative process,并且Girolami and Kaban的研究显示了以Dir(1)为prior的LDA是一个fully Bayesian estimator。
1. 混合模型(Mixture model)
LDA是一个混合模型。那么什么是混合模型?首先我们有多个分布,我们的data就是从这多个分布中sample出来的,这就是混合模型。可能还需要解释:什么是“从多个分布中sample出来的”?其实,混合模型sample出data的方法是这样的:第一步:我们从多个分布中(依某一个概率)挑选一个分布出来;第二步:根据我们挑选出来的这个分布公式本身所表达的概率,从这个分布中sample一个data出来。因此我们可以把混合模型表示成多个分布的“加权”形式,其中的“权重”就是这里“第一步”中用于挑选某个分布的概率。在LDA中,一个单词可以从某一个特定的“topic”中生成,而每一个topic拥有一个特有的单词分布,这里每一个topic的单词分布都是我们要进行加权的对象。因此LDA中生成某一个单词的概率可以表示为:
其中,是一个在特定topic k上,关于单词的multinomial distribution。我们可以把其中一个拿出来,那么这单独一个就是一个unigram model。而
则表示单词w=t从topic k中生成的概率。
然而LDA并没有为corpus全局设定统一的topic的分布,而是为每一个document都设定了不同的topic的分布。因此,LDA inference就需要得到两方面的内容:
1.1. 每一个特定topic k下单词t的分布:
1.2. 每一个特定document m下topic的分布:
所以需要估计的参数有 和
.。并且这两组参数代表着words和documents的latent-semantic representation。
2. 生成模型 (Generative model):
我们将LDA看作是一个生成的过程,以便之后引出LDA inference所需要的策略。LDA的BN表示如下图:
由上图可以进一步认识LDA所描述的生成过程:LDA生成了一个stream of observable words。这个stream被一个个document划分开来。
对每一个document而言,它首先sample出一个, 作为该document的topic proportion。然后通过此topic proportion,sample出每一个单词所对应的topic, 最后再通过topic-specific的单词分布
sample出一个单词。其中topic-specific的单词分布
是global的,即它只会被sample一次,然后整个corpus将共用这一系列的topic-specific的单词分布。
有没有发现什么特别之处?这里一共有2个mixture models!并且这两个mixture models是套在一起的:
2.1. 对于每一个topic,它是由一个mixture model生成的:其中component是document-specific的topic proportion,是一个multinomial distribution;weight是topic proportion,服从的Dirichlet分布。
2.2. 对于每一个word,它是由一个mixture model生成的:其中component是topic-specific的单词分布(就是上文提到的那个只sample一次,整个corpus共用同一个的topic-word分布),服从multinomial distribution;weight是2.1中所提到的document-specific的topic proportion,服从multinomial distribution。
因此,这整个model不单纯是一个mixture model,它实际上是一个admixture model。
LDA的整个生成过程如下:
3. 似然 (Likelihoods)
通过LDA的BN,我们可以得到在given hyperparameters下,这些observed和hidden variables的联合概率公式:
这个公式实际上是在given hyperparameter的情况下,所有variables(hidden和observed)的likelihood。基于这个公式,我们可以导出其他的公式。因此,对于一个term t,它instantiate出来的某一个特定word 在given LDA parameters下的概率,可以通过marginalize
实现:
此式是关于word的mixture model。
由于无论是一个document或是是整个corpus
,它们的likelihood实际上都是各个i.i.d.的
的joint likelihood形式:
此时我们暂停一下,先别急着往下看(虽然原文中是直接叙述下文部分的)。但,我们为什么要求得word的likelihood?在回答这个问题前,我们必须清楚的一件事是:我们的目的是什么?进行文本的latent semantic analysis。那么我们怎么得到这些隐含的文本语义?通过我们模型中的参数: (得到每一个document包含主题的情况,即document-level的meaning)和
(每一个主题的单词分布,即这个特定主题中,哪些单词出现的概率高,哪些出现的概率低)。
于是我们知道了我们的目的:即估计参数。那么我们就自然而言想通过Bayesian inference的方法,得到这些参数的后验分布(在given observations的时候)。那么,在LDA模型中,observations是什么?observations是我们的words,因此这些参数的后验分布实际上就是given 这些单词时的条件概率分布。
而在likelihood函数中,这些关系是反过来的:这些待估计的parameters是given出来的,而这些observations是likelihood中的自变量。所以,这也是为什么,我们需要在这里一步步,先构建构建单个单词的概率分布,再构建一堆单词的联合概率分布--likelihood。
4. 通过Gibbs sampling进行推断(Inference via Gibbs sampling)
虽然LDA的模型较为简单,但对于它的精确推断确是intractable的。解决这一问题的主要方法有3种:平均场变分EM、期望传播和Gibbs sampling。其中Gibbs sampling是一种简单的、用于高维模型(例如LDA)下的近似推断的方法,它是马尔科夫链蒙特卡洛(Markov-chain Monte Carlo, MCMC)模拟的一种特例。
MCMC方法通过Markov chain的平稳行为来模拟高维空间下随机变量的概率分布。Markov chain首先会经历一个称为“burn-in period”的阶段(用以消除初始化参数的影响),而后进入平稳态。在平稳态上,chain的每一次transition都会生成一个样本,这个样本将服从概率分布
。作为MCMC方法的一个special case,Gibbs sampling方法在随机变量的每一个维度进行alternatively sampling(given其他所有的随机变量)。也就是说,每次在采样前,Gibbs sampling算法先会选出随机变量的一个维度,我们设为
, 然后以除了
之外,其余所有的随机变量(记为
)为condition,从而构造相应的distribution
,称为“full conditional”,然后依照这个distribution对
进行sample。
Gibbs sampling方法的叙述如下:
4.1. 选择随机变量的一个维度i
4.2. 从概率分布中sample出一个
出来
由以上算法我们可以看出,要想执行Gibbs sampling,我们首先要找到概率分布的表达式。
首先我们引入如下公式:
上式仅仅是一个基本公式,我们在下面会用到,但其中的符号与LDA model中的符号没有任何关系。
此时联想到一般情况下,我们采用inference的目的是什么?目的是,希望通过已知得到未知。已知就是evidence,这里记作, 未知是hidden variables,这里记作
。因此,对于处理含有latent variables的model时,Gibbs sampling中full conditionals的一般表达式为(同样需要注意的是,下面这个公式中的符号与LDA model中的符号没有任何对应关系,请勿混淆):
当其中的latent variables 是discrete的时候,分母中的积分号将被换为求和号。当对latent variables
进行过充分sample之后,我们得到一系列sample后的结果:
, 其中
, R为采样的总样本数。于是我们可以对在inference中,latent variables的posterior做如下估计:
其中 为Kronecker delta,并有:
5. The collapsed LDA Gibbs sampler
我个人还是比较习惯用英文直接叙述某一个专有名词,这样比较一致(因为中文的翻译往往有不止一种版本,可能会有些杂乱)。
在LDA模型中,无法被observed到的部分有、
和z, 而在Gibbs sampling中,由于我们只需要得到单词w和其相应的topic z即可,
和
则完全可以由w和z的共现对统计推算得到,因此我们等于是将
和
给“collapsed”掉了。这也就是本节的Gibbs sampling中添加了一个“collapsed”的原因。因此呢,我们的后验分布就直接只针对topic进行估计:
实际上,只要我们能计算出这个式子,该问题就解决了。但是我们实际上难以计算该式中的分母(因为分母的加和项共有项)。此时我们就可以采用Gibbs sampling的方法来解决这个问题。为了去估计上式
, Gibbs sampling的方法要求首先计算full conditional:
。而又由4.2中第2个公式可以得知,如果我们想要计算这个full conditional, 那么就需要首先推导出该公式中分子上的joint distribution。
Joint distribution:
在LDA中,我们首先可以对这个Joint distribution进行分解:
上式中,第1行到第2行是联合概率密度公式推导的常规操作;第2行中的部分条件之所以能在第3行中省略,是由于:1. 和
在given
的前提下是相互独立的;2.
和
之间本身就是互相独立的。
其中,分解之后的第一个因子可以看作是给定每一个单词所属于的topic之后,生成每一个单词的概率。其中每一个单词生成的概率均服从multinomial distribution:
也就是说,每一个单词都可以看作,在given相应topic下的multinomial distribution(其中的parameters在given multinomial distribution的时候就已经确定好了)。而这种乘积的方式,其无非是先遍历了每一个单词,该单词所对应的topic,然后再在topic-word matrix去寻找相应的概率值。然而,这种表达方式中的乘积因子数毕竟是不定的,不方便处理,因此我们采用另一种表达方式:首先遍历topic-word矩阵中的每一个元素,然后统计与该元素相关的word-topic共现对的数量,作为这个乘积项的指数值,最终的表达式如下:
但是,不要忘了我们的最终目标还是要求:。此时我们需要在上式的基础上对
进行marginalizing:
由上式的推导结果,可以看出,这个distribution可以被当作K个Dirichlet-multinomial models的乘积。这K个models就分别表示着K个topics。
类比于的计算,我们可以首先计算得出
:
然后我们继续仿照上面的步骤,对 进行integrate out的操作:
根据求得的两个结果,我们能明显看出共轭的好处。现在我们把这两个因子整合在一起:
当得到这个joint distribution之后, 我们就可以计算full conditional了。
Full conditional:
由于是full conditional的distribution,所以我们首先要选出一个z(这个z是特定于某一个单词的,也就是说,这个z是生成某一个特定单词w的那个z)。于是我们假设我们选择的单词的编号是, 此时需要注意的是,之后我们的公式中将用“i”来代替这个坐标(m,n)上的单词或是其对应的topic。并且我们将从i位置上进行topic的sampling:(
,
)
其中,在第一行公式中,由于 和
之间是相互独立的,所以可以把
单独提出来。同时我们也需要注意到,当
的取值发生改变时,
不会发生任何的变化。因此我们可以把
当作是constant的,从而在接下来的分析中omit掉。可能有人会问:
不是由
生成的吗,
的改变怎么可能会对
没有任何影响?我们需要注意的是,这里的
实际上已经不包含
这个condition了,也就是说,它是在
的基础上,对z进行过marginalize后,所推出的公式 (即
),所以z的取值不会对这个式子产生影响(因为这个式子已经考虑到了z取任何值时的情况)。
此时我们根据剩余的4个式子,利用之前推导得出的Dirichlet-multinomial models, 就可以推出第2行公式中的正比关系。第2行到第4行的推导则完全是Dirichlet distribution中normalize项的性质和函数的性质。
第4行到第5行的推导实际上是omit掉了第二个因子中的分母,同样的,因为当z的取值发生改变时,这个分母的值是不变的,所以我们可以忽略掉这一项,由此导出了最终的正比关系。
Multinomial parameters:
上文中对于z的估计已经做完了,然而我们曾经提到过,对w和z(z实际上是我们在Markov chain中的state)的共现对进行估计之后,就可以对multinomial distribution的参数 和
进行估计。由于我们在之前已经得出了在给定参数
和
下w和z的likelihood,所以我们可以直接分别将这两个公式与
和
的先验相结合,来进行
和
的后验的估计,然后再利用笔记(三)中所述的
的推导结论, 来进行最终后验分布结果的求解:
大家或许注意到,这里的两个后验分布的condition并不统一,但其实它们都是一样的,都是我们已知的三组量:word,与word相对应的topic和hyperparameters。然而对于
的后验分布估计,我们其实是不需要知道word具体有哪些,而只用知道这些word对应的topic以及hyperparameters就行。
这里的 表示第m篇文档中出现各个topic的数量(也即该文档中topic-word共现对的统计);
表示第k个topic中各个单词出现的频数。
此时,我们已经分别得到了2个参数的posterior distribution。然后我们可以利用Dirichlet distribution期望公式,对两组参数进行估计:
大家可能有一个疑问:为什么我们这里要采用参数后验分布的期望?在回答这个问题前,我们需要明确的是,根据我们得到的后验分布,实际上我们已经可以用MAP estimator了--即只用求使这个后验概率分布最大的那个参数的取值就行,这实质上是用该参数的“众数”来作为该参数取值的代表。但是众数实际上是有问题的:比如我们有5个人考试,其中两个人考了100分,其他几个人的成绩分别是60,50,40。那么此时我们的众数就是100,但我们可以说这个100代表了这5名考生的一般情况吗?显然,采用期望是一个更好的方法,因为平均值相比于众数更能反映数据的一般性。
Gibbs sampling algorithm:
当我们得到如上full conditional的公式和两组参数 和
的估计公式之后,我们就可以根据这三个式子执行Gibbs sampling的整个过程:
这张图是在《Parameter estimation for text analysis》中的,其中Eq.78, 81, 82分别代表full conditional的公式和两组参数 和
的估计公式。
我们在开始前,首先需要给出文本, 两组参数
和
的先验分布参数
,以及topic数量K。
在Global data中,表示第m个document下第k个topic出现的次数,将所有的topic出现的数量合起来就是
, 也就是第m个document中单词的数量;
表示第k个topic下单词t出现的次数,将所有的单词在topic k下出现的次数加起来即得到该topic下单词的数量
。同时也需要给计算full conditional的结果留出空间保存。
output中,我们需要得到的有,每一个单词所对应的topic:;多项式分布的参数
和
;以及对于hyperparameters
的估计(在原文第6部分中有讲,如有时间,我会更新第6部分的内容)。
Gibbs sampling分为3个periods:
initialization: 对每一个word(该word的位置为(m,n))所对应的topic(假设sample出来的topic是k)进行随机初始化。
Gibbs sampling: 顺序遍历每一篇文章中的每一个单词,先去掉分给该单词的topic,然后再通过full conditional distribution重新进行topic的sampling。循环进行该步骤,直到收敛为止。收敛后,再对参数 和
进行估计。
MCMC方法的一个缺点在于:我们很难精确判断其收敛的时刻。原文中通过人工查看对于那些语义相近而又不在同一个corpus中的document和word的聚类效果如何来进行收敛程度的判断。