一堆数学公式,又是一堆数学公式,爬着看完了。可这玩意干嘛的啊?%>_<%
我就想了这么一个帮助理解LDA的低智商方法,暂时写了五问。留着备忘。
如果我的理解不妥当,欢迎拍砖。或者大家有好问题,欢迎贴出来探讨。
一问:LDA是啥?
Latent Dirichlet allocation(狄利克雷分配)的缩写,由Blei, NG, Jordan提出,发表在2003年1月的JMLR上。
LDA是机器学习中一个生成模型。
生成模型就是一个条件概率。先从数据中学习联合分布P(X, Y),然后求出条件分布P(Y|X),作为预测的模型。
对应到LDA,Y就是主题,X就是文章。来了一篇新文章,放到条件概率里一算就知道里边有多少主题。
因为这个模型不是直接从数据中学来的,要通过条件概率公式计算得来,所以叫生成模型(?)
Naive Bayes,HMM啥的,都是生成模型。
与生成模型对应的是判别模型。判别模型直接从数据中学习判别函数f(X)或者条件分布P(Y|X)作为预测模型。
kNN,C4.5,LR,ME,SVM,boost,CRF都是判别模型。
二问:LDA是干嘛的?
LDA是文本语料库的隐语义分析(LSA)的工具。可用于文本分类,聚类,主题挖掘,信息检索、情感分析等。
LDA要发现文本语料中的“主题”结构。主题就是文章讨论的对象,或者对象的类别。
主题表示为词项的多项分布,就是说这个主题里边都有哪些词,这些词的概率都是多少。
三问:LDA是怎么做的?
由一问中生成模型的解释,我们知道LDA的目标就是要获得给定文档下主题的条件分布P(Z|D)。
由于D是由词袋模型表示的,而且开放测试中的文档很少已经出现过,所以我们考虑得到P(Z|W)。
首先我们要获得主题与词项联合分布P(Z,W),然后计算 P(Z|W)/P(W)。
四问:LDA用到了哪些知识,它们都是用来干嘛的?
Dirichlet分布可以看做是“分布之上的分布”,从Dirichlet分布上抽取的每个样本就是多项分布的参数向量。
参数精确推断很困难,所以用Gibbs抽样来解决参数和
的近似推断问题。
就是为每个主题k找到一个词项分布,再为篇文章m找到一个主题分布
。
Gibbs抽样是MCMC抽样的一个特殊情况。我们知道(不知道也没关系,看LDA数学八卦)马尔科夫链有个稳态定理,就是说如果一个马氏链任意两个状态之间相互连通,那么经过若干步转移以后,马氏链的状态会稳定在某个向量上。MCMC抽样就是先让马氏链进入稳态(burn-in 阶段),这就得到一个稳定的分布,然后每次转移都能获得这个稳定分布的一个样本。
五问:介绍一下LDA用到概率知识
我们知道:后验=先验+似然。如果先验可以使计算得来的后验与先验具有相同的形式,就说先验与似然共轭。
Beta分布与二项分布共轭,说的就是Beta分布做先验,加上二项分布似然(就是二项分布的统计数据),得到的后验分布形式和Beta分布仍然一样。写成公式就是:
Dirichlet分布与多项分布共轭,说的是Dirichlet分布做先验,加上多项分布似然(多项分布的数据),得到的后验分布形式与Dirichlet分布一样。
写成公式:
较详细的数学推导可以看 Rickjin的《LDA数学八卦》
好了,看完了这些,你就可以去看这篇文章:LDA及Gibbs Sampling
作者yangliuy在Heinrich的Parameter estimation for text analysis一文中加入了自己的理解和易懂的例子。
也可以直接去看原文,我自己也翻译了原文的第5、第6部分:LDA翻译
弄懂了概念和算法和公式,就可以对照着看实现了,最基本的实现是Heinrich写的 LdaGibbsSampler