赞
踩
LDA是文本分析中最常用、最受欢迎的主题模型,全称是latent Dirichlet allocation。Latent是潜在变量的意思,它在主题模型中对应的是潜在主题,即文档的主题研究者观测不到。Dirichlet中文翻译为狄利克雷,是一种数学分布的名字(Dirichlet distribution)。LDA所要解决的问题就是根据每个文档的用词规律挖掘出一堆文档背后隐藏的多个主题。更甚的是,LDA说的用词只是每个文档的词频统计,不涉及词的顺序、专有名词或句子语法等等(字袋法)。应该说,词频统计是对一篇文档最简单的概括了,这种做法抛弃了很多其他信息,但是非常有利于数学建模,人们发现最终效果还不错。
LDA的核心观点认为每篇文档其实包含了多个主题,一篇文档是这些主题的混合物;早先的主题模型并没有考虑多个主题的情况(如unigram model)。同时,LDA采取了贝叶斯统计的观点,认为决定一篇文档主题分布的参数不是固定不变的,而是随机变量;这种观点又跟频率派统计模型相对(PLSA)。关于多个主题,我们可以想象一下,如果用不同颜色的马克笔去标注一篇文档,每种颜色代表一个主题;最终我们会发现这篇文档会是多种颜色的组合。
如何不去仔细读每篇文档而获取文档主题呢?这就需要假设每个主题下人们的用词会有不同。LDA进一步认为每个主题下的词汇各有特点,就像每个专业的专有词汇一样,有体育主题的词汇、时政主题的词汇、医学主题的词汇等等。当然,因为多义词的存在(polysemy),这些多义词可以同时出现在好几个主题当中。可以想象的是如果我们找到了词汇与主题之间的对应关系,再加上文档和主题之间的关系,我们就可以通过文档中的词汇来挖掘出文档背后的主题。
纯粹从逻辑上来讲,LDA认为一篇新的文档是这样产生(数据生成过程DGP):首先假设新文档的主题组合符合某种分布,那我们可以根据这种分布随机抽取一个主题;主题确定之后,我们可以从该主题对应的词汇中抽取一个词。按照这两个步骤重复操作我们就可以生成这篇文档包含的所有N个词和多个主题。当然,我们这里关注的是词频(词的组合),而不关注词生成的顺序。这在文本分析中叫字袋法(bag of words),就像从口袋中拿出不同颜色的球一样(下图右边)。
接下来统计方法要做的就是逆推上述过程:根据每篇文档的词频统计结果及其汇总,依此去估计文档的主题分布和主题的词汇分布。更准确的说,是估计决定这两个分布背后的参数。理论上讲,文档中出现某个词是由两部分决定:一是当前文档的主题分布,二是主题的词汇分布。数学公式表达为p(d,w)= p(z|d)*p(w|z),其中d是文档,w是词,z是主题。问题是这些分布p(z|d)和p(w|z)的参数我们并不知道。不仅如此,用什么分布函数来刻画它们也需要考虑。
首先是文档的主题分布p(z|d)。一篇文档是多个主题的混合,到底是怎么混的呢?我们知道,不管怎么混,这多个主题在一篇文档中的概率之和应等于1。又因为概率是连续变量,刻画这种连续变量混合的分布就是上面所说的Dirichlet分布。Dirichlet分布其实跟多项式分布很像,只是后者刻画的是离散变量而已。在贝叶斯统计里,这两种分布刚好是共轭分布;换句话说,如果我们假设多项式分布中每种选项的先验概率服从Dirichlet分布,那么先验概率跟观测数据复合之后,后验概率也将服从Dirichlet分布。这种共轭结构给我们后面的参数估计提供了很大的便利。
用人话来说,我们一开始假设这篇文档(没看到这篇文档)每种主题的概率是A1,A2,A3…,后观测到实际上这篇文档每种主题出现了N1,N2,N3次…,那么一个合理的后验概率就是((A1+N1)/(所有的A+所有的N), (A2+N2)/(所有的A+所有的N), (A3+N3)/(所有的A+所有的N)…)。这样做的好处在于可以直接用先验分布参数和词频统计结果来估计文档主题分布的概率参数了。当然,最大的问题在于这种估计和近似是否可靠。
主题的词汇分布p(w|z)也十分相似。一个主题下不同词汇出现的频率都不一样,但是这些词汇的概率加起来也等于1。同理,这些概率同样可以用Dirichlet分布进行刻画。而我们实际观测到的词频统计可以用多项式分布来描述,最终二者复合我们可以反推出Dirichlet后验分布的参数。
LDA在参数估计时并没有选择直接去估计决定上述两个分布的参数(参数个数为K个主题+V个词汇),而是采用了一种计算上更有效率的贝叶斯统计方法——吉布斯采样(Gibbs Sampling,属MCMC方法)。在这种方法里,LDA最关心的参数是语料库(分析中所有文档的集合)中每个词对应的主题潜在变量z,取值范围为1到K,表示一共有K个主题。如果确定了每个词对应的主题,那么文档的主题分布和主题的词汇分布也随之确定(直接看文档主题交叉矩阵和主题词汇交叉矩阵即可)。
Gibbs Sampling认为当前语料库中每个词对应的主题加总在一块最终会服从一个平稳分布。平稳分布的意思就是如果再从语料库中随机抽取一个词加到文档中不会改变当前的文档主题分布或者是主题词汇分布。我们可以用这种特征进行反推:在数据生成过程中,在生成第n个新词之前,我们可以假设前面n-1个词的主题分类是正确的(n足够大,已经进入稳态)。如果第n个词加进来之后不改变当前的文档主题分布或者是主题词汇分布,我们认为吉布斯采样已经收敛,趋于稳态;反之,如果n不够大,我们则要根据第n个新词对应的主题更新文档主题分布和主题词汇分布,直到进入稳态。具体来说,我们要更新Dirichlet后验分布中的文档主题概率和主题词汇概率(根据前面说人话的版本)。
Gibbs Sampling的巧妙之处在于从任一概率起点出发(一般为平均概率),最终所有词的主题分类都会收敛到同一个平稳分布。在实际采样过程中,我们通过假设前n-1个词的主题分类是正确的,只是在第n个词对应的第k个主题维度上更新主题分类结果,而其它K-1个主题维度上保持不变,从而保证了任意两个主题分类状态之间都是可以相互转换的。这种自由转换意味着一直抽样下去,最终的主题分类将收敛到一个稳态,即我们要寻找的主题平稳分布。一旦到达了这个稳态,那么我们可以对文档主题分布和主题词汇分布进行抽样,获取足够的样本,做出文档主题交叉矩阵和主题词汇交叉矩阵,计算相应概率作为我们的参数估计。由此,我们就确定了这个语料库中所有文档的主题分类,即每一篇文档包含了哪些主题,每种主题的概率是多大。此外,我们也获取了每种主题的组成词汇及其概率。
将Gibbs Sampling的思想稍微发散一下:针对多目标决策,也可以一个目标一个目标的优化,交替进行,直到我们改不动了为止。改不动了意味着我们进入了一个稳态,一个多目标优化后的状态。
参考资料:
1. Wikipedia: https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation
2. Your Guide to Latent Dirichlet Allocation: https://medium.com/@lettier/how-does-lda-work-ill-explain-using-emoji-108abf40fa7d
3. Probabilistic Topic Models: http://173.236.226.255/tom/papers/SteyversGriffiths.pdf
4. LDA数学八卦: http://www.52nlp.cn/lda-math-%E6%B1%87%E6%80%BB-lda%E6%95%B0%E5%AD%A6%E5%85%AB%E5%8D%A6
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。