前言:LDA模型最开始是从周志华老师的机器学习的第14章最后一小节了解到的,但是书上写的很简略,看完不是很懂,而且课后题还建议自己编程实现LDA,所以上网查了下资料,以下是综合各种网上的资料之后的个人理解,欢迎批评指正。最后一篇参考文献是pLSA的,写的很详细。
是LDA是一种无监督的贝叶斯模型。也是一种主题模型,它可以将文档集中的每篇文档按照概率分布的形式给出。还是一种无监督学习,在训练时不需要手工标注的训练集,需要的是文档集和指定主题的个数。它是一种典型的词袋模型,它认为一篇文档是由一组词组成的集合,词与词之间没有顺序和先后关系。
lda建模常用包:gensim
分词常用包:jieba,bltk
pLSA与LDA比较:
pLSA:样本随机,主题分布的参数虽然是未知的,但是是固定值,属于频率派,可用EM算法求出θ和φ。
LDA:样本是固定的,分布参数是未知的且随机的服从某个分布,属于贝叶斯派,θ和φ服从Dirichlet分布,可用变分-EM算法或Gibbs采样来求解θ和φ。
LDA是在plsa的基础上增加了贝叶斯框架,参数θ和φ服从Dirichlet分布。由于主题分布和词分布都是多项分布,所以选择与多项分布共轭的Dirichlet分布作为其先验分布,以便于计算。贝叶斯派认为
LDA原理
核心公式:P(词 | 文档)=P(词 | 主题)P(主题 | 文档)
P(w|d)=P(w|z)∗P(z|d) 其实就是以主题为中间层,通过两个向量(θm,φk),分别给出 P(w|z),P(z|d)。
LDA模型
α 和β 是Dirichlet参数,超参,在工程上, α 一般取50/K, β 一般取0.01;K也是超参;
θm服从Dir(α ),φk服从Dir( β ),一个Zmn对应一个Wmn,这三个都是隐变量;
Wmn是已观测到的变量,共有mxn个word;
M篇文档(Doc),假设每篇文档都有N个词(word),M篇文档共包含K个主题(Topic),M篇文档中共有V个不同的词 (Term),即词典(语料库)中有V个term。
LDA模型概率分布
模型对应的概率分布为:
LDA单个文档生成过程
1.对某个文档Dm,从参数为 α 的Dirichlet分布中随机采样出一个主题分布θm;
2.根据主题分布θm,抽取主题Zmn=k;
3.从参数为 β 的Dirichlet分布中随机采样出主题Zmn=k对应的词分布φk;
4.从词分布φk中抽取词Wmn为文档m的第n个词word;
5.重复2-4步,生成N个词。
LDA模型训练过程
输入:文档集合D;
输出:θmxk,φkxv;
0.预处理文档,删除空格、标点、回车、无用词如时间和地址等、停用词、等,然后建立词袋(语料库Vocabulary);
1.选择合适的主题数K,以及超参 α 和 β ;
2.对M个文档中的每一个Wmn,随机赋予一个主题号Zmn;
3.重新扫描M个文档中的每一个word,利用Gibbs采样公式计算当前词属于每个topic的概率,并重新采样,更新它的主题号Zmn;
4.重复第3步,直至Gibbs采样收敛或达到设定的循环次数为止;
5.根据每个word的主题号,计算得到θ和φ。
Gibbs采样:
计算p(w|z, β)和p(z|α)
由LDA模型概率分布,得:
p(w|z, β)是词采样,p(z|α)是主题采样,两者间相互独立,可得:
其中:
n_kt为所有mxn个word中,在第k个主题下,term t出现的次数;φ_kt为第k个主题下,term t出现的概率,t取值为1~V。n_mk为第m篇文档中出现主题k的次数,θ_(m,k)为第m篇文档下出现主题k的概率。
分别带入p(w|z, β)和p(z|α),得:
nk=[nk1,nk2,…,nkv]为第k个主题下,每个term出现的次数;nm=[nm1,nm2,…,nmk]为第m篇文档出现每个topic的次数。
Gibbs采样原理
吉布斯抽样也是沿着doc->topic->word这样的方向进行的。
有了联合分布p(w,z),便可计算在给定可观测变量Wi=t对应的隐变量Zi的条件分布(后验分布)来进行贝叶斯分析:
其中Zi=k表示第i个词对应的主题为k,i的取值范围为1~mxn表示第m篇文档下的第n个词,¬i表示去掉下标为i的词对主题分布的影响后的主题分布。该条件分布式的含义为,根据其他所有词的主题分类,来估计当前词Wi=t分配到各个主题 Z1,Z2,…,Zk 的概率(即Gibbs算法中的计算每个坐标轴对应的条件分布,并固定当前计算的轴以外的其他所有轴)。
得到当前词属于所有主题z1,z2,…,zk 的概率分布后,即可进行Gibbs采样,重新为当前词采样一个新的主题 z。用同样的方法不断更新的下一个词的主题,直到Gibbs采样收敛,得到第每个词对应的主题。便可计算主题分布θm 和词分布 ϕk 。
计算条件分布
由于wi与w¬i间相互独立,所以wi与z¬i间也相互独立,所以:
Gibbs采样只需要为wi采一个样,因此不用得到上式准确的值,只需得到zi取值的比值即可,将上式简化为:
计算p(w|z, β)和p(z|α)一节中已得出各项的表达式,所以:
由于zi=k,wi=t只涉及到第m篇文档和第k个主题,所以仅对nk和nm有影响,上式进一步简化为:
nkt表示主题k下term t出现的次数,nmk表示文档m中主题k出现的次数(注意是次数,不是频数)。由伽马函数的性质Γ(a+1)=aΓ(a),有:
即主题k的后验分布,也就是Gibbs Sampling公式。该式的物理意义就是在K条doc->topic->word路径中进行采样。
对主题1到K分别计算后验分布概率,然后为wi按后验概率随机抽取主题。
计算θ和φ
当Gibbs采样收敛后,即可根据每个word对应的topic统计θ和φ的值:
参考文献
概率语言模型及其变形系列(2)-LDA及Gibbs Sampling
机器学习主题模型之LDA参数求解——Gibbs采样
文本主题模型之LDA(二) LDA求解之Gibbs采样算法
通俗理解LDA主题模型
LDA的python实现之模型参数训练
主题模型 LDA 入门(附 Python 代码)
plsa(Probabilistic Latent Semantic Analysis) 概率隐语义分析