文本主题模型之LDA(一) LDA基础

    文本主题模型之LDA(一) LDA基础html

    文本主题模型之LDA(二) LDA求解之Gibbs采样算法算法

    文本主题模型之LDA(三) LDA求解之变分推断EM算法机器学习

 

    在前面咱们讲到了基于矩阵分解的LSI和NMF主题模型,这里咱们开始讨论被普遍使用的主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,如下简称LDA)。注意机器学习还有一个LDA,即线性判别分析,主要是用于降维和分类的,若是你们须要了解这个LDA的信息,参看以前写的线性判别分析LDA原理总结。文本关注于隐含狄利克雷分布对应的LDA。函数

1. LDA贝叶斯模型

    LDA是基于贝叶斯模型的,涉及到贝叶斯模型离不开“先验分布”,“数据(似然)”和"后验分布"三块。在朴素贝叶斯算法原理小结中咱们也已经讲到了这套贝叶斯理论。在贝叶斯学派这里:post

先验分布 + 数据(似然)= 后验分布学习

    这点其实很好理解,由于这符合咱们人的思惟方式,好比你对好人和坏人的认知,先验分布为:100个好人和100个的坏人,即你认为好人坏人各占一半,如今你被2个好人(数据)帮助了和1个坏人骗了,因而你获得了新的后验分布为:102个好人和101个的坏人。如今你的后验分布里面认为好人比坏人多了。这个后验分布接着又变成你的新的先验分布,当你被1个好人(数据)帮助了和3个坏人(数据)骗了后,你又更新了你的后验分布为:103个好人和104个的坏人。依次继续更新下去。url

2. 二项分布与Beta分布

    对于上一节的贝叶斯模型和认知过程,假如用数学和几率的方式该如何表达呢?3d

    对于咱们的数据(似然),这个好办,用一个二项分布就能够搞定,即对于二项分布:$$Binom(k|n,p) = {n \choose k}p^k(1-p)^{n-k}$$htm

    其中p咱们能够理解为好人的几率,k为好人的个数,n为好人坏人的总数。blog

    虽然数据(似然)很好理解,可是对于先验分布,咱们就要费一番脑筋了,为何呢?由于咱们但愿这个先验分布和数据(似然)对应的二项分布集合后,获得的后验分布在后面还能够做为先验分布!就像上面例子里的“102个好人和101个的坏人”,它是前面一次贝叶斯推荐的后验分布,又是后一次贝叶斯推荐的先验分布。也便是说,咱们但愿先验分布和后验分布的形式应该是同样的,这样的分布咱们通常叫共轭分布。在咱们的例子里,咱们但愿找到和二项分布共轭的分布。

    和二项分布共轭的分布其实就是Beta分布。Beta分布的表达式为:$$Beta(p|\alpha,\beta) = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}p^{\alpha-1}(1-p)^{{\beta-1}}$$

    其中$\Gamma$是Gamma函数,知足$\Gamma(x) = (x-1)!$

    仔细观察Beta分布和二项分布,能够发现二者的密度函数很类似,区别仅仅在前面的归一化的阶乘项。那么它如何作到先验分布和后验分布的形式同样呢?后验分布$P(p|n,k,\alpha,\beta)$推导以下:

$$ \begin{align} P(p|n,k,\alpha,\beta) & \propto P(k|n,p)P(p|\alpha,\beta) \\ & = P(k|n,p)P(p|\alpha,\beta) \\& = Binom(k|n,p) Beta(p|\alpha,\beta) \\ &= {n \choose k}p^k(1-p)^{n-k} \times  \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}p^{\alpha-1}(1-p)^{{\beta-1}} \\& \propto p^{k+\alpha-1}(1-p)^{n-k + \beta -1}  \end{align}$$

    将上面最后的式子归一化之后,获得咱们的后验几率为:$$P(p|n,k,\alpha,\beta) = \frac{\Gamma(\alpha + \beta + n)}{\Gamma(\alpha + k)\Gamma(\beta + n - k)}p^{k+\alpha-1}(1-p)^{n-k + \beta -1} $$

    可见咱们的后验分布的确是Beta分布,并且咱们发现:$$ Beta(p|\alpha,\beta) + BinomCount(k,n-k) = Beta(p|\alpha + k,\beta +n-k)$$

    这个式子彻底符合咱们在上一节好人坏人例子里的状况,咱们的认知会把数据里的好人坏人数分别加到咱们的先验分布上,获得后验分布。 

    咱们在来看看Beta分布$Beta(p|\alpha,\beta)$的指望:$$ \begin{align} E(Beta(p|\alpha,\beta)) & = \int_{0}^{1}tBeta(p|\alpha,\beta)dt \\& =  \int_{0}^{1}t \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}t^{\alpha-1}(1-t)^{{\beta-1}}dt \\& = \int_{0}^{1}\frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}t^{\alpha}(1-t)^{{\beta-1}}dt \end{align}$$

    因为上式最右边的乘积对应Beta分布$Beta(p|\alpha+1,\beta)$,所以有:$$ \int_{0}^{1}\frac{\Gamma(\alpha + \beta+1)}{\Gamma(\alpha+1)\Gamma(\beta)}p^{\alpha}(1-p)^{{\beta-1}} dp=1$$

    这样咱们的指望能够表达为:$$E(Beta(p|\alpha,\beta)) = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha)\Gamma(\beta)}\frac{\Gamma(\alpha+1)\Gamma(\beta)}{\Gamma(\alpha + \beta+1)} =  \frac{\alpha}{\alpha + \beta} $$

    这个结果也很符合咱们的思惟方式。

3. 多项分布与Dirichlet 分布

    如今咱们回到上面好人坏人的问题,假如咱们发现有第三类人,很差不坏的人,这时候咱们如何用贝叶斯来表达这个模型分布呢?以前咱们是二维分布,如今是三维分布。因为二维咱们使用了Beta分布和二项分布来表达这个模型,则在三维时,以此类推,咱们能够用三维的Beta分布来表达先验后验分布,三项的多项分布来表达数据(似然)。

    三项的多项分布好表达,咱们假设数据中的第一类有$m_1$个好人,第二类有$m_2$个坏人,第三类为$m_3 = n-m_1-m_2$个很差不坏的人,对应的几率分别为$p_1,p_2,p_3 = 1-p_1-p_2$,则对应的多项分布为:$$multi(m_1,m_2,m_3|n,p_1,p_2,p_3) = \frac{n!}{m_1! m_2!m_3!}p_1^{m_1}p_2^{m_2}p_3^{m_3}$$

    那三维的Beta分布呢?超过二维的Beta分布咱们通常称之为狄利克雷(如下称为Dirichlet )分布。也能够说Beta分布是Dirichlet 分布在二维时的特殊形式。从二维的Beta分布表达式,咱们很容易写出三维的Dirichlet分布以下:$$Dirichlet(p_1,p_2,p_3|\alpha_1,\alpha_2, \alpha_3) = \frac{\Gamma(\alpha_1+ \alpha_2 + \alpha_3)}{\Gamma(\alpha_1)\Gamma(\alpha_2)\Gamma(\alpha_3)}p_1^{\alpha_1-1}(p_2)^{\alpha_2-1}(p_3)^{\alpha_3-1}$$

    一样的方法,咱们能够写出4维,5维,。。。以及更高维的Dirichlet 分布的几率密度函数。为了简化表达式,咱们用向量来表示几率和计数,这样多项分布能够表示为:$Dirichlet(\vec p| \vec \alpha) $,而多项分布能够表示为:$multi(\vec m| n, \vec p)$。

    通常意义上的K维Dirichlet 分布表达式为:$$Dirichlet(\vec p| \vec \alpha) = \frac{\Gamma(\sum\limits_{k=1}^K\alpha_k)}{\prod_{k=1}^K\Gamma(\alpha_k)}\prod_{k=1}^Kp_k^{\alpha_k-1}$$

    而多项分布和Dirichlet 分布也知足共轭关系,这样咱们能够获得和上一节相似的结论:$$ Dirichlet(\vec p|\vec \alpha) + MultiCount(\vec m) = Dirichlet(\vec p|\vec \alpha + \vec m)$$

    对于Dirichlet 分布的指望,也有和Beta分布相似的性质:$$E(Dirichlet(\vec p|\vec \alpha)) = (\frac{\alpha_1}{\sum\limits_{k=1}^K\alpha_k}, \frac{\alpha_2}{\sum\limits_{k=1}^K\alpha_k},...,\frac{\alpha_K}{\sum\limits_{k=1}^K\alpha_k})$$

4. LDA主题模型

    前面作了这么多的铺垫,咱们终于能够开始LDA主题模型了。

    咱们的问题是这样的,咱们有$M$篇文档,对应第d个文档中有有$N_d$个词。即输入为以下图:

    咱们的目标是找到每一篇文档的主题分布和每个主题中词的分布。在LDA模型中,咱们须要先假定一个主题数目$K$,这样全部的分布就都基于$K$个主题展开。那么具体LDA模型是怎么样的呢?具体以下图:

    LDA假设文档主题的先验分布是Dirichlet分布,即对于任一文档$d$, 其主题分布$\theta_d$为:$$\theta_d = Dirichlet(\vec \alpha)$$

    其中,$\alpha$为分布的超参数,是一个$K$维向量。

    LDA假设主题中词的先验分布是Dirichlet分布,即对于任一主题$k$, 其词分布$\beta_k$为:$$\beta_k= Dirichlet(\vec \eta)$$

    其中,$\eta$为分布的超参数,是一个$V$维向量。$V$表明词汇表里全部词的个数。

    对于数据中任一一篇文档$d$中的第$n$个词,咱们能够从主题分布$\theta_d$中获得它的主题编号$z_{dn}$的分布为:$$z_{dn} = multi(\theta_d)$$

    而对于该主题编号,获得咱们看到的词$w_{dn}$的几率分布为: $$w_{dn} = multi(\beta_{z_{dn}})$$

    理解LDA主题模型的主要任务就是理解上面的这个模型。这个模型里,咱们有$M$个文档主题的Dirichlet分布,而对应的数据有$M$个主题编号的多项分布,这样($\alpha \to \theta_d \to \vec z_{d}$)就组成了Dirichlet-multi共轭,可使用前面提到的贝叶斯推断的方法获得基于Dirichlet分布的文档主题后验分布。

    若是在第d个文档中,第k个主题的词的个数为:$n_d^{(k)}$, 则对应的多项分布的计数能够表示为 $$\vec n_d = (n_d^{(1)}, n_d^{(2)},...n_d^{(K)})$$

    利用Dirichlet-multi共轭,获得$\theta_d$的后验分布为:$$Dirichlet(\theta_d | \vec \alpha + \vec n_d)$$

    一样的道理,对于主题与词的分布,咱们有$K$个主题与词的Dirichlet分布,而对应的数据有$K$个主题编号的多项分布,这样($\eta \to \beta_k \to \vec w_{(k)}$)就组成了Dirichlet-multi共轭,可使用前面提到的贝叶斯推断的方法获得基于Dirichlet分布的主题词的后验分布。

    若是在第k个主题中,第v个词的个数为:$n_k^{(v)}$, 则对应的多项分布的计数能够表示为 $$\vec n_k = (n_k^{(1)}, n_k^{(2)},...n_k^{(V)})$$

    利用Dirichlet-multi共轭,获得$\beta_k$的后验分布为:$$Dirichlet(\beta_k | \vec \eta+ \vec n_k)$$

    因为主题产生词不依赖具体某一个文档,所以文档主题分布和主题词分布是独立的。理解了上面这$M+K$组Dirichlet-multi共轭,就理解了LDA的基本原理了。

    如今的问题是,基于这个LDA模型如何求解咱们想要的每一篇文档的主题分布和每个主题中词的分布呢?

    通常有两种方法,第一种是基于Gibbs采样算法求解,第二种是基于变分推断EM算法求解。

    若是你只是想理解基本的LDA模型,到这里就能够了,若是想理解LDA模型的求解,能够继续关注系列里的另外两篇文章。

 

(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com) 

相关文章
相关标签/搜索