LDA为latent Dirichlet allocation的简称,是一个生成式模型,是一种主题模型,无监督度学习方法。其基本假设是一篇文档是一个词袋,由多个词组成,与词的顺序无关,它可以有多个主题(topic),并且文档中的词都和这些主题相关。这里使用sparse dirichlet的原因是,一个主题中的词的概率分布是被修剪过得,所以仅有一小部分词的概率较大,这就和实际场景更加贴近
先定义几个简写表示:
① 词袋表示为D,词袋中有V个词,里面有M篇文档,每个文档的长度为Ni(文档中含有N个词);
② α为每个文档的主题分布的先验dirichlet分布的参数;(这里简单说明一下dirichlet分布,见文章最后)
③ β为每个主题词分布的先验dirichlet分布的参数 ;
④ Θi文档i的主题分布,为多项式分布,但受到参数为α的Dirichlet先验分布控制;
⑤ φk为主题k的词分布,k∈[0,K],为多项式分布,但受到参数为β的Dirichlet先验分布控制;
⑥ ωij为具体的词,这是和①中的已知量,其他的均为变量;
⑦ zij为第i篇文档的第j个词的主题;
统计说明如下:
从dirichlet分布α中取样生成文档i的主题分布Θi(Θi~Dir(α),α<1)
从主题k的多项式分布φk中取样生成的文档i的第j个词的主题zij
从dirichlet分布β中取样生成主题词zij的词语分布φzij
从词语的多项式分布φzij中重采样最终生成词语ωij
那么,模型的联合分布(生成词w的概率)为:
最终,文档i的单词分布集对Θi、φ求积分,对zij求和,(因为有一篇文档假设由K个主题组成,每个主题k满足多项式分布,并且文档包含j个词)得到:
根据p(ωi|α,β)的最大似然估计,最终可以通过EM/吉布斯采样估计出模型中的参数。
而在实践中具体步骤如下:
对文档中的所有词遍历一遍为其随机分配一个主题(zij),即zij符合mult(1/K),将文档i中k主题出现的次数、文档i中主题数量和、k主题对应的某个词的次数、主题k的总词数,这4个变量都加1。
之后,开始重复迭代寻优。
例如,文档i的词ωij对应的主题为k,根据LDA中topic sample的概率分布sample出新的主题,更新对应的上述4个变量分布加1
迭代完成后,输出主题-词参数矩阵φ和文档-主题矩阵Θ
beta分布简介
beta分布的x∈[0,1],是实数,概率密度为x(α-1)(1-x)(β-1),其中α,β>0,这和bernoulli 分布形式上类似,但是bernoulli的x取值为0或1。
当选择不同α和β时,beta分布的pdf为:
说明:
pdf为连续型变量的概率密度函数
beta分布的pdf为:
dirichlet分布简介
beta分布是针对一个x变量,dirichlet分布是针对多个随机变量,通常标记为Dir(α),表示连续多元概率分布,参数α>0,是beta分布的扩展,通常被用于贝叶斯统计中的一种先验分布。
对于两个随机变量(k=2)的pdf分布如下图:
dirichlet分布的pd如下所示:
共轭:假定一个先验分布A,将该先验分布的参数带入另外的一个分布中,得到后验证分布,如果该后验分布和该先验分布有相同的形式,则称为共轭(conjugacy)。
beta分布是bernoulli(二项式分布)的共轭先验分布为共轭,dirichlet为multinomial(多项式分布)的共轭先验分布。
参考链接:
<u>https://en.wikipedia.org/wiki/Latent_Dirichlet_allocation</u>
https://blog.csdn.net/MeituanTech/article/details/80804170
wiki中文版