概念主题模型(PTM, probabilitytopical model)在自然语言处理(NLP,natural language processing)中有着重要的应用。主要包括以下几个模型:LSA(latentsemantic
analysis)、 PLSA(probability latent semantic analysis)、LDA(latentdirichlet allocation)和HDP(hirerachical
dirichlet processing),这里用一张图给出它们的发展历程。此记主要记录PLSA和LDA模型.
PLSA:
PLSA是在LSA的基础上发展起来的,因为LSA有以下缺点:(1)svd奇异值分解对数据的变化较为敏感,同时缺乏先验信息的植入等而显得过分机械。(2)缺乏稳固的数理统计基础(奇异值分解物理意义,如何从数学上推导得出高维降到的低维语义结构空间),此外svd分解比较耗时。基于以上两个原因,提出了PLSA(概率潜在语义结构分析),这样我们就从概率的角度对LSA进行新的诠释,使得LSA有了稳固的统计学基础。
PLSA不关注词和词之间的出现顺序,所以pLSA是一种词袋方法(BOW: 一个文档用一个向量表示,向量中元素就是一个词出现与否或者是出现次数或者TF-IDF,各个词是否出现相互独立),具体说来,该模型假设一组共现(co-occurrence)词项关联着一个隐含的主题类别。同时定义:
- P(di)表示海量文档中某篇文档被选中的概率。
- P(wj|di)表示词wj在给定文档di中出现的概率。
- 怎么计算得到呢?针对海量文档,对所有文档进行分词后,得到一个词汇列表,这样每篇文档就是一个词语的集合。对于每个词语,用它在文档中出现的次数除以文档中词语总的数目便是它在文档中出现的概率P(wj|di)。
- P(zk|di)表示具体某个主题zk在给定文档di下出现的概率。
- P(wj|zk)表示具体某个词wj在给定主题下出现的概率zk,与主题关系越密切的词,其条件概率P(wj|zk)越大。
利用上述的第1、3、4个概率,我们便可以按照如下的步骤得到“文档-词项”的生成模型:
- 按照概率P(di)选择一篇文档di
- 选定文档di后,从主题分布中按照概率P(zk|di)选择一个隐含的主题类别zk
- 选定zk后,从词分布中按照概率P(wj|zk)选择一个词wj
这样可以根据大量已知的文档-词项信息P(wj|di),训练出文档-主题P(zk|di)和主题-词项P(wj|zk),如下公式所示:
故得到文档中每个词的生成概率为:
由于P(di)可事先计算求出,而P(wj|zk)和P(zk|di)未知,所以就是我们要估计的参数(值).由于含有隐含的主题变量z,所有我们考虑使用EM算法。
我们使用最大似然估计得到:
这里:n(di,wj)表示词项wj在文档di中词频,n(di)表示文档di中词的总数。M表示文档数量,N表示单词数量
其对数似然估计为:
下面用EM算法进行求解:
E-step:
M-step:
由前面的对数似然函数知:
我们去除不必要的常数项得到:
约束条件为:
这里通过largange乘数法求:
最终我们便求得参数即为每个文档中主题发生的概率及在该主题下词发生的概率,然后就
可以用得到得参数对文档或者文档中的词进行分类等。
LDA
LDA:隐含的狄利克雷分布,要了解LDA,需要一些数学基础,包括二项分布,多项式分布,beta分布,dirichlet分布.这几个分布可以参看这篇blog:http://blog.csdn.net/v_july_v/article/details/41209515,此外这篇blog:http://blog.csdn.net/lu597203933/article/details/45933719讲解MLE(最大似然估计)、MAP(最大后验概率估计)及贝叶斯估计的区别。
这里我们会得出:
参数p的先验概率为beta(或者dirichlet)分布,那么以p为参数的二项分布(或者多项式分布)通过贝叶斯估计得到的后验概率分布仍然是beta分布(或者dirichlet分布)。我们说beta分布式是二项式分布的共轭先验概率分布,而dirichlet分布为多项式分布的共轭先验概率分布。如何理解这句话呢?
我们举一个简单的例子:比如投硬币,我们将p记为正面发生的概率,这样我们投了20次,出现正面12次,反面8次。这就是所谓的样本空间X,
P(X|p) = p^12*(1-p)^8是以p为参数的二项式分布。假设p有个先验分布beta(a,b)(a和b为beta分布的参数,为什么选择beta,后面讲)。现在我们用贝叶斯估计,即最大化P(p|X),通过公式推导我们会发现P(p|X)服从的也是beta分布,为beta(a+12,b+8)。如果看不懂可以再看看这篇blog:http://blog.csdn.net/lu597203933/article/details/45933719
那么现在有以下几个问题:
1:为什么选用beta分布或者dirichlet分布?
<1>beta分布+二项分布得到的仍然是beta分布,这样就给计算带来了方便,可以直接利用beta分布的均值方差公式得到结果
<2>beta分布可以通过变换不同参数得到不同形状分布的概率密度函数,通过选择参数(称为超参数)一定能满足我们的需求(形状千奇百怪,高低胖瘦)。
dirichlet分布和多项式分布分别是beta分布和二项分布在多维情况的推广!
2:为什么选择贝叶斯估计?
贝叶斯估计参数的表示方式更为精确,得到的参数也更为精确,越来越能反应基于样本的真实参数情况。没有将参数作为固定未知值,而是将其作为随机变量,先验为一个概率分布(人们已经知道或普遍接受的规律),这样就会对后续参数估计产生一定的影响。
这里给出频率学派和贝叶斯学派的区别:
频率学派:参数是未知的,但是固定,样本空间X是随机变量,最大似然估计(MLE,maximumlikehood estimation)
贝叶斯学派:参数具有一个先验概率分布(人们已经知道或者普遍接受的规律),参数可以看做是一个随机变量,不再固定,有最大后验估计(MAP,maximum
a posterior)和贝叶斯估计两种方法。
LDA的过程为:
lda实质上就是plsa加了一个贝叶斯框架,过程可以描述为:由先验dirichlet分布得到主题的概率分布(P(p)),然后通过已有样本得到的主题样本空间(潜在的)服从的是以dirichlet分布概率作为参数的多项式分布(P(X|p)),这样通过贝叶斯估计得到每个主题的后验概率分布仍为dirichlet分布(P(p|X));;一个主题下的每个词先验分布也是dirichlet分布,词样本空间服从的是以dirichlet分布概率作为参数的多项式分布,这样通过贝叶斯估计得到的后验概率分布仍然为dirichlet分布。
之所以选择dirichlet分布作为先验概率分布,因为主题和词的分布都是多项式分布,所以dirichlet先验概率分布+多项式分布得出的结果仍然是dirichlet分布,这样就可以使用dirichlet分布的性质了。
总结:plsa和lda最终需要求得的参数都是每个文档中主题发生的概率及在该主题下词发生的概率,参数即为两个矩阵,然后就可以用得到得参数对文档或者文档中的词进行分类等。只不过lda是plsa的贝叶斯化,先验概率服从dirichlet分布,贝叶斯化的好处一方面使得到的参数更加精确,另一方面贝叶斯学派的观点可以降低过拟合等优点!
此外:对lda的参数估计方法gibbs sampling算法,我还没有看,后续再补充!。欢迎有任何问题的进行交流!
这里给出一般的共轭分布表:
参考文献:
1:http://blog.csdn.net/v_july_v/article/details/41209515 通俗理解LDA主题模型
2:http://blog.csdn.net/yangliuy/article/details/8296481文本语言模型的参数估计-最大似然估计、MAP及贝叶斯估计
3:http://blog.csdn.net/yangliuy/article/details/8330640
4:http://maider.blog.sohu.com/306392863.html如何理解beta分布和dirichlet分布
5:http://vdisk.weibo.com/s/zrFL6OXKgKMAf沈博ppt