1. 介绍
Latent Dirichlet Allocation(LDA)。是在文本建模中很著名的模型,可以用于浅层语义分析,在文本语义分析中是一个很有用的模型。这个模型涉及数学知识包括Gamma函数,Dirichlet分布,Dirichlet-Multinomial共轭,Gibbs Sampling,Variantional Inference(变分推理)
2. Gamma 函数
具有递归性质:
并且可以当做阶乘在实数集上的延伸:
Gamma函数是Convex Function,并且$\log \Gamma(x)$也是Convex Function。
2.1 Beta 函数
2.2 Digamma 函数
具有性质:
2.3 二项分布到 Gamma 分布
Gamma 函数变换得到 Gamma 分布。
取积分中的函数作为概率密度函数。
并且再做变换$x = \beta t$,就得到分布的更一般形式。注意替换的时候$dx$这边会多个$t$。
$\alpha$称为shape parameter,决定分布曲线的形状;而$\beta$称为rate parameter,决定曲线有多陡。
指数分布和$\chi^2$都是特殊的 Gamma 分布。并且再贝叶斯统计分析中广泛使用作为其他分布的先验分布。
泊松分布是由二项式分布求极限所得,Gamma分布是泊松分布在正实数集上的连续化版本。
取 Gamma 分布,$\alpha = k + 1$
形式一致,但是 Poisson 离散,Gamma 分布连续。
3. Beta/Dirichlet 分布
3.1 Beta 分布
Beta函数可由Gamma函数推理得到的。
3.2 Beta-Binomial 共轭(conjugate)
贝叶斯参数估计基本过程就是:先验分布 +数据知识=后验分布
此处共轭的意思就是,数据符合二项分布的时候,参数的先验分布和后验分布都能保持 Beta 分布的形式。
假设一个不均匀硬币,抛出正面概率为p,抛出m次后出现正面反面次数分别为$m_1,m_2$。从贝叶斯学派而言,首先假设$p \sim Uniform(0, 1)$。按照贝叶斯公式计算后验概率:
正好是$Beta(p \vert m_1 + 1, m_2 + 1)$。
3.3 Dirichlet 分布
Dirichlet 分布是 Beta 分布在高维度的推广。
也可以采用贝叶斯过程:
以上就是Dirichlet-Multinomial共轭。
一般形式的 Dirichlet 分布:
其中$\triangle\vec \alpha$ 称之为 Dirichlet 分布的归一化系数,并且根据 Dirichlet 分布积分为1,可以得到。
对于给定的$\vec p$和N,多项分布为:
这两个分布是共轭关系。Dirichlet-Multinomial共轭,即数据符合多项式分布时,参数的先验分布和后验分布都能保持狄利克雷分布的形式。
3.4 一点性质
如果$p \sim Beta(t \vert \alpha, \beta)$
说明对于 Beta 分布的随机变量,均值可以使用$\frac{\alpha}{\alpha + \beta}$来估计。
同样对于Dirichlet 分布。
4. MCMC 和 Gibbs Sampling
常见的概率分布,无论是连续还是离散分布,都可以基于$Uniform(0, 1)$样本得到。
当然在如下情况我们无法生成样本:
- $p(x) = \frac{\tilde{p}(x)}{\int \tilde{p}(x) dx }$。我们无法计算底下积分形式。
- $p(x,y)$是个二维分布函数,本身很难计算,但是条件分布相对简单。
4.1 马尔科夫链
定义很简单,状态转移指依赖前一个状态。
马氏链具有状态转移矩阵P,保证它的任何两个状态是联通的,那一定会收敛。这是MCMC方法理论基础。
4.2 Markov Chain Monte Carlo
这个算法就是常用的 Metropolis-Hastings 算法。Metropolis-Hastings算法利用马尔可夫链的细致平衡条件,取得联合分布的采样,有了联合分布的采样就可以得到边缘分布,进而可以推断出贝叶斯中的后验分布。
细致平稳条件:非周期马氏链转移矩阵P和分布$\pi(x)$满足,$\pi(x)$是马氏链的平稳分布。
因为通常情况下会导致等号两边不等,所以引入接受率$\alpha(i,j)$
其中Q为马氏链转移矩阵,p(x)为当前分布。
4.3 Gibbs Sampling
Gibbs Sampling是针对Metropolis-Hastings算法在高维空间效率不高的情况(接受率$\alpha$通常小于1),将其在二维空间的应用。即在Gibbs采样中马氏链的转移只是轮换的沿着坐标轴x轴和y轴做转移,最终可以得到P(x,y)的样本。也可以把Gibbs采样扩展到n维。
一般就是轮换坐标轴,然后按照条件概率做转移。马氏链也是一样可以收敛的。
以下是n维Gibbs Sampling算法:
5. 文本建模
5.1 Unigram Model
假设文档是由从一个装有无穷多骰子的坛子里,取出来,每个骰子有V个面,V表示各个词。每次从坛子里去一个骰子,然后用这个骰子不断的抛,最后产生语料中所有词。一般是把整个文档都看到一起来算的。
语料W的产生概率$p(W)$,以及骰子各个面概率$\vec p = (p_1, p_2, \cdots, p_V)$。因为我们不知道具体选了哪个骰子,所以需要进行积分求解:
此处先验分布$p(\vec p)$就有很多选择了。
此时,语料的概率是:
实际上是一个多项分布的概率,可以改成 Dirchlet 分布。这样就可以得到后验分布的 Dirichlet 分布。
推出后验分布:
使用上一节的$E(\vec p)$可以得到
至此,计算文本语料的产生概率
6. LDA 文本建模
现在多了两个变量,一个是 Topic,一个是原本的词模型。这里语料库的文档是相互独立的。
假设语料库有 M 篇文档,所有的 word 和对应 topic 如下:
其中$\vec w_m$表示对应第 m 篇文章的词,$\vec z_m$表示对应的 topic 编号。
这样可得到M个因为文档而项目独立的 Dirichlet-Multinomial 共轭结构。
原本是先抛一个doc-topic的骰子得到topic,然后抛topic-word骰子得到word。因为所有动作都是独立的,可以交换顺序,先抛N次把所有词的topic确定,然后再抛生成所有词。
这样重新安排顺序,让所有在一个topic的词在一起,这样把第二个过程变成K个相互独立 Dirichlet-Multinomial 共轭结构。最终得到:
6.1 Gibbs Sampling in LDA
有了联合概率分布$p(\vec w, \vec z)$,就可以使用 MCMC 算法了。所以使用Gibbs 对分布进行采样。因为$\vec w$是观测数据,只有$\vec z$是隐含变量,所以我们需要采样分布$p(\vec z \vert \vec w)$。
参考
[1] lda学习一丢丢:http://www.jianshu.com/p/f4140f987fab
[2] LDA 数学八卦:http://www.52nlp.cn/lda-math-%E6%B1%87%E6%80%BB-lda%E6%95%B0%E5%AD%A6%E5%85%AB%E5%8D%A6
[3] 通俗理解LDA主题模型:http://blog.csdn.net/v_july_v/article/details/41209515
[4] [python] LDA处理文档主题分布代码入门笔记:http://blog.csdn.net/eastmount/article/details/50824215
[5] Latent Dirichlet Allocation (LDA) with Python:https://rstudio-pubs-static.s3.amazonaws.com/79360_850b2a69980c4488b1db95987a24867a.html
[6] Gensim and LDA: a quick tour:http://nbviewer.jupyter.org/gist/boskaiolo/cc3e1341f59bfbd02726
[7] VARIATIONAL INFERENCE: FOUNDATIONS AND INNOVATIONS:http://www.cs.columbia.edu/~blei/talks/Blei_VI_tutorial.pdf
[8] Probabilistic Topic Models and User Behavior:http://www.cs.columbia.edu/~blei/talks/Blei_User_Behavior.pdf
因为我们是朋友,所以你可以使用我的文字,但请注明出处:http://alwa.info