博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Sparse LDA实现 (By 羽果)

Posted on 2013-10-13 20:45  虾米服务器开发团队  阅读(745)  评论(0)    收藏  举报

  LDA是主题模型(Topic Model)中较简单的一种,由David Blei在2003年提出[1]。作为一种生成模型(Generative Model),它将文档视为多个Topic的混合,每个Topic可由语料库中词的分布来表示。与另一种类似模型pLSA,最大的不同是LDA假设Topic的分布存在有一个Dirichlet先验分布。作者在论文中提出LDA也遵从Bag-of-Words的假设,但也是可能推广至n-grams。关于LDA更多的细节可以参见作者的原文[1].

  在实现LDA模型时,通常选用的是Gibbs sampling和Variational inference。我们在使用时选择的是前者,因为其在理解和实现时花费的代价较低。现假定有一文档集合W,每个文档是T个主题的mixture,而每个主题则是大小为V的词汇表上的多项式分布。θd 表示文档d关于Topic的多项式分布,φw|t 表示词w在主题t里的概率,大小为V*T的矩阵Φ保存的是topic-word的概率,Dirichlet的先验分布的参数为α和β。

  为了估计θd以及Φ,在collapsed Gibbs sampling中,为文档中的每个词采样得到主题z,需要计算如下概率:

  为了从该分布中进行采样,首先从U(0, sum(p(z)))中随机采样得到u,则采样得到的t满足以下公式,但是过程中需要计算每个可能的t值:

 

  将上式稍作处理,可得到:

  则计算sum(p(z))时,可以将整个采样的概率空间分为三个部分

  根据全概率公式,将整个概率空间划分为三个部分,u ∼ U(0, s + r + q) :s只与topic有关系,r与doc-topic有关,只有q的值与word有关。在初始化过程完成后,可分别计算出当前s,r和q的值。如u < s,则从s对应的概率空间内采样,仅需改变对应t的值,遍历所有的t值,直至找到满足条件的t值;如s < u < s+r,则从r中采样,只需遍历nt|d>0的t值,而通常只占很小的一部分;如u > s+r,只需遍历nw|t>0的t值,同样也只占很小的一部分。改变w对应的z值时,更新s只需重新计算新老z值对应的n.|t分量;由于r只对应到文档,只需要缓存下每个doc的值,仅在新老z值上重新计算对应的分量值,在常数时间内可以完成;而更新q的值时相对复杂,可以将求和的分量分为两部分,nw|t对应每个word在主题t内的总数,而乘积的另一半与word无关,利用doc缓存下对应的值,只需在nw|t>0的对应t值上有一次乘法计算。

  从以上过程可以看出,gibbs更新的时候,r和q仅在少量t值上有非零值,因此仅需保存非零值对应的分量,以上过程也称为SparseLDA[2]。它带来的好处有两点:一是训练样本的速度会变快;更大的好处是可以节约大量内存,这为训练大样本数据提供了可能性,从下图可以看出随着主题数增大的同时,内存占用和采样时间均无显著变化。

  

 

参考文献:

[1].Blei, David M.; Ng, Andrew Y.; Jordan, Michael I. Latent Dirichlet allocation. Journal of Machine Learning Research 3 (4–5): pp. 993–1022.

[2].Limin Yao, David Mimno, and Andrew McCallum. Efficient Methods for Topic Model Inference on Streaming Document Collections.KDD’09.