您的位置:首页 > 其它

LDA模型学习笔记

2016-06-03 21:50 281 查看
 1 LDA简述     
 LDA是由Blei,Ng, Jordan 2002年发表于JMLR的概率语言模型,应用到文本建模范畴,就是对文本进行“隐性语义分析”(LSA),目的是要以无指导学习的方法从文本中发现隐含的语义维度-即“Topic”或者“Concept”。隐性语义分析的实质是要利用文本中词项(term)的共现特征来发现文本的Topic结构,这种方法不需要任何关于文本的背景知识。文本的隐性语义表示可以对“一词多义”和“一义多词”的语言现象进行建模,这使得搜索引擎系统得到的搜索结果与用户的query在语义层次上match,而不是仅仅只是在词汇层次上出现交集。
2Dirichlet分布
想要弄清楚LDA就必需先清楚Dirichlet分布。LDA全称为Latent
Dirichlet Allocation,是一种基于Dirichlet分布的主题模型。先举一个简单的例子说明Dirichlet分布,假设我们有一个骰子,其有六面,分别为{1,2,3,4,5,6}。现在我们做了10000次投掷的实验,得到的实验结果是六面分别出现了{2000,2000,2000,2000,1000,1000}次,如果用每一面出现的次数与试验总数的比值估计这个面出现的概率,则我们得到六面出现的概率,分别为{0.2,0.2,0.2,0.2,0.1,0.1}。现在,我们还不满足,我们想要做10000次试验,每次试验中我们都投掷骰子10000次。我们想知道,出现这样的情况使得我们认为,骰子六面出现概率为{0.2,0.2,0.2,0.2,0.1,0.1}的概率是多少(说不定下次试验统计得到的概率为{0.1,
0.1, 0.2, 0.2, 0.2, 0.2}这样了)。这样我们就在思考骰子六面出现概率分布这样的分布之上的分布。而这样一个分布就是Dirichlet分布,它是一种分布之上的分布。Dirichlet分布是多项分布的共轭先验分布。Dirichlet分布函数形式如下:
                



其中μ为多维向量,公有K个取值,a也为多维向量,称作Dirichlet分布的参数,然后我们可以把
该式进行归一化,即:



前面的那个系数是一个归一化的系数,类似Beta分布扩展到多维的情况。其中,a0=a1+...+ak。
3LDA
给一个比较通俗的解释:我们现在要写m篇文章,一共涉及了K个Topic,每个Topic下的词分布为一个从参数为的
Dirichlet先验分布中sample出来的Multinomial分布(注意词典由term构成,每篇文章由word构成,前者不能重复,
后者可以重复)。对于每篇文章,他首先会从一个泊松分布中sample一个值作为文章长度,再从一个参数为的
Dirichlet先验分布中sample出一个Multinomial分布作为该文章里面出现每个Topic下词的概率;当我们写某篇
文章中的第n个词的时候,首先从该文章中出现每个Topic的Multinomial分布中sample一个Topic,然后再在这个Topic
对应的词的Multinomial分布中sample一个词作为我们要写的词。不断重复这个随机生成过程,直到把m篇文章全部写
完。这就是LDA的一个形象通俗的解释。
             
          


如图所示是LDA的概率图模型。图中K为主题个数,M为文档数,N为第m个文档的单词数。α和β分别为每个文档下Topic的
多项分布的Dirichlet先验参数和每个Topic下词的多项分布的Dirichlet先验参数。θ是第m个文档下的Topic分布,φ是第k个主题下词的
分布。前者是k维(k为Topic总数)向量,后者是v维向量(v为词典中term总数)。
从图中我们可以知道,w是可以观察到的已知变量,θ、φ、z都是未知的隐含变量,也是我们需要根据观察到的变量来学习估计的。
这就是概率图模型的Inference问题。主要的算法分为exact
inference和approximate inference两类。尽管LDA是最简单的Topic Model, 
但是其用exact
inference还是很困难的,一般我们采用approximate inference算法来学习LDA中的隐含变量。比如LDA原始论文Blei02
中使用的mean-field
variational expectation maximisation 算法和Griffiths02中使用的Gibbs Sampling,其中Gibbs Sampling 更为简单易懂。
Gibbs Sampling
是Markov-Chain Monte Carlo算法的一个特例。这个算法的运行方式是每次选取概率向量的一个维度,给定其他维度的
变量值Sample当前维度的值。不断迭代,直到收敛输出待估计的参数。
初始时随机给文本中的每个单词分配主题z,,然后统计每个主题z下出现term
t的数量以及每个文档m下出现主题z中的词的数量,每一轮重新计算词的主题,即排除当前词的主题分配,根据其他所有词的主题分配估计当前词分配各个主题的概率。当得到当前词属于所有主题z的概率分布后,根据这个概率分布为该词sample一个新的主题z。然后用同样的方法不断更新下一个词的主题,直到发现每个文档下Topic分布θ和每个Topic下词的分布φ收敛,算法停止,输出待估计的参数θφ,最终每个单词的主题

也同时得出。实际应用中会设置最大迭代次数。
如何重新计算词的主题呢?公式如下:



同时需要注意到

这一项与当前词的主题分配无关,因为无论分配那个主题,对所有k求和的结果都是一样的,区别只在于拿掉的是哪个主题下的一个词。因此可以当成常量,最后我们只需要得到一个成正比的计算公式即可。
当Gibbs
sampling 收敛后,我们需要根据最后文档集中所有单词的主题分配来计算和,作为我们估计出来的概率图模型中的隐含变量。每个文档上
Topic的后验分布和每个Topic下的term后验分布如下



可以看出这两个后验分布和对应的先验分布一样,仍然为Dirichlet分布,这也是共轭分布的性质决定的。
使用Dirichlet分布的期望计算公式



我们可以得到两个Multinomial分布的参数和的计算公式如下



综上所述,为Gibbs
Sampling 学习LDA参数的流程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nlp