本文不想写特别复杂的数学原理,只是写一下自己的感性认识,不一定对。
首先是LDA生成文章的方法如下:
- 确定主题和词汇的Dirichlet分布,参数为alpha(向量)
- 确定文章和主题的Dirichlet分布,参数为beta(向量)
- 随机确定该文章的词汇个数N
- 如果当前生成的词汇个数小于N,执行第6步
- 否则执行第7步
- 由文档和主题分布随机生成一个主题,通过该主题由主题和词汇分布随机生成一个词,继续执行第4步
- 文章生成结束
LDA是一种generative model,所以训练的目的是算出alpha和beta参数,所以正好可以用EM算法来完成这件事。简化一下算法的核心如下:
- E-step:计算后验概率P(z=topic_i|y,alpha,beta)也就是某篇文章y(输入为这篇文章中的term)在参数alpha,beta已知的情况下属于某个topic_i的概率,而这可以看做是对隐藏变量(hidden variable或者说latent factor)的期望。
*什么是隐含变量?抽取得到的每个样本都不知道是从哪个分布抽取的…… - M-step:通过Jensen不等式来计算maximum likelihood以此求出对应的alpha和beta
重复以上步骤直到收敛
训练好模型以后,使用E-step可以对于新的文章来进行分类。
其他估算alpha和beta的方法还有Gibbs采样和在线贝叶斯(sklearn默认使用此方法)等。