LDA 主题模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenshulong/article/details/79049661

背景

我们生活中总是产生大量的文本,分析这些观察到的语料库是如何生成的就需要对文本进行建模。常见的文本建模方法包括:Unigram、PLSA、LDA 、词向量模型(CBOW、Skip-gram)等。LDA模型是一种主题模型(topic model),属于词袋(不关心词与词之间的次序)模型。

模型描述

人类所产生的所有语料文本我们都可以看成是上帝抛骰子生成的。我们观察到的只是上帝玩这个游戏的结果——词序列构成的语料,而上帝玩这个游戏的过程对我们来说是个黑盒子。所以在统计文本建模中,我们希望猜测出上帝是如何玩这个游戏的。具体一点,最核心的问题是:

  1. 上帝都有什么样的骰子?
  2. 上帝是如何抛这些骰子的?

第一个问题就对应着模型包含哪些参数,第二个问题就对应着游戏的规则,上帝可以按照一定的规则抛骰子从而产生词序列。

LDA算法:

这里写图片描述

LDA过程图示:
这里写图片描述

LDA 概率图模型:

这里写图片描述

整个语料库共包含 M 篇 文档。其中第 m(m[1,M]) 篇文档中的第 n(nNm) 个词记为 wm,n 。这个概率图模型可以分解成两个主要的过程:

  1. α⃗ θ⃗ mzm,n,这个过程表示在生成第 m 篇文档的时候,先从第一个坛子中抽取一个 doc-topic 骰子 θ⃗ m ,然后抛这个骰子生成了第 m 篇文档中的第 n 个词的 topic 编号 zm,n;
  2. β⃗ φ⃗ kwm,n|k=zm,n,目前上帝从第二个坛子中独立抽取了 K 个 top-word 骰子,这个过程表示采用如下过程生成语料中第 m 篇文档的第 n 个词。在上帝手中的 K 个topic-word 骰子 φ⃗ k(k[1,K]) 中,挑选编号为 k=zm,n (第1步得到的结果)的那个骰子进行投掷,然后生成 word wm,n

LDA 模型求解

LDA模型求解的目标主要包括以下两个方面

  1. 估计模型中的隐含变量 φ⃗ 1,,φ⃗ Kθ⃗ 1,,θ⃗ M
  2. 对于新来的一篇文档 docnew,计算这篇文档的topic分布 θ⃗ new

总体思路

隐含变量 ΘΦ 后验概率分布难以精确求解,可以通过采样的方法来近似求解。从LDA概率图模型可以发现:

  1. zm,n 服从 参数为 θ⃗ m 的 multinomial 分布,若能获得 zm,n 的观测值就很容易得到 θ⃗ m 的后验概率分布。
  2. zm,n 可以被观测到,假定 zm,n=k ,则第 m 篇文档的第 n 个词 wm,n 服从参数为 φ⃗ k 的multinomial分布,就能很容易的估计 φ⃗ k 的后验概率分布。

但遗憾的是 z⃗  也是隐含变量,不能被直接观测到。一种可行的方法是:我们首先计算 z⃗  的后验概率分布 p(z⃗ |w⃗ ),然后对该后验概率分布进行采样。将得到的样本作为隐含变量 z⃗  的观察值,这样就可以对 ΘΦ 的后验概率分布进行估计。

计算 z⃗  的后验概率分布 p(z⃗ |w⃗ )

(1) 这里首先介绍一个定理
若随机变量 θ⃗ =(θ1,,θK) 服从参数为 α⃗ =(α1,,αK) 的Dirichlet分布。随机变量 x 服从参数为 θ⃗  的 multinomial 分布(共 K 个类),重复进行 N 次试验,得到 x⃗ 。如下图所示:

α⃗ Dirichletθ⃗ Multinomialx⃗ 

n⃗ =(n1,,nK) 表示 x⃗  中各个类别出现的次数,即 n⃗ Multi(θ⃗ ,N),有下式成立:
p(x⃗ |α⃗ )=Δ(α⃗ +n⃗ )Δ(α⃗ )     ()
证明如下:
p(x⃗ |α⃗ )=p(θ⃗ |α⃗ )p(x⃗ |θ⃗ ) dθ⃗ =Dir(θ⃗ |α⃗ )Multi(θ⃗ ,N) dθ⃗ =1Δ(α)k=1Kθαk1kk=1Kθnkk dθ⃗ =1Δ(α⃗ )k=1Kθαk+nk1k dθ⃗ =Δ(α⃗ +n⃗ )Δ(α⃗ )

(2)在LDA概率图模型的第一个物理过程中,α⃗ θ⃗ mz⃗ m 表示生成第 m 篇文档中所有词对应的 topic。显然 α⃗ θ⃗ m 对应于Dirichlet分布,θ⃗ mz⃗ m 对应于 Multinomial 分布,所以整个过程是一个 Dirichlet-Multinomial 共轭结构。

α⃗ Dirichletθ⃗ mMultinomialz⃗ m
根据定理 () 有:
p(z⃗ m|α⃗ )=Δ(α⃗ +n⃗ m)Δ(α⃗ )
其中 n⃗ m=(n(1)m,,n(K)m)n(k)m 表示在第 m 篇文档中第 k 个topic 产生的词的个数。

由于语料中 M 篇文档的 topic 生成过程是相互独立的,所以我们得到 M 个相互独立的 Dirichlet-Multinomial 共轭结构。从而整个语料中 topic 生成的概率为:

p(z⃗ |α⃗ )=m=1Mp(z⃗ m|α⃗ )=m=1MΔ(α⃗ +n⃗ m)Δ(α⃗ )

(3)在LDA概率图模型的第二个物理过程中,β⃗ φ⃗ kw⃗ k 表示语料中由 topic k 生成词的过程。其中 w⃗ k 表示语料中由 topic k 生成的所有词。显然 β⃗ φ⃗ k 对应于 Dirichlet 分布,而 φ⃗ kw⃗ k 对应于 Multinomial 分布,所以整个过程是一个 Dirichlet-Multinomial 共轭结构。

β⃗ Dirichletφ⃗ kMultinomialw⃗ k
根据定理 () 有:
p(w⃗ k|z⃗ ,β⃗ )=Δ(β⃗ +n⃗ k)Δ(β⃗ )
其中 n⃗ k=(n(1)k,,n(V)k)V 表示词典中不重复的词的数目,n(t)k 表示在语料中由第 k 个topic 产生的第 t 个词的数目。

因为语料中 K 个topic 生成词的过程是相互独立的,所以我们得到了 K 个相互独立的 Dirichlet-Multinomial 共轭结构,从而整个语料中词生成的概率为:

p(w⃗ |z⃗ ,β⃗ )=k=1Kp(w⃗ k|z⃗ ,β⃗ )=k=1KΔ(β⃗ +n⃗ k)Δ(β⃗ )

(4)综合步骤(2)和(3)可以得到联合分布函数:

p(z⃗ ,w⃗ |α⃗ ,β⃗ )=p(z⃗ |α⃗ )p(w⃗ |z⃗ ,β⃗ )=m=1MΔ(α⃗ +n⃗ m)Δ(α⃗ )k=1KΔ(β⃗ +n⃗ k)Δ(β⃗ )
这里向量 n⃗ mn⃗ k 都用 n 表示,通过下标进行区分:k 下标为 topic 编号,m 下标为文档编号。

(5)下面采用Gibbs采样算法对 z⃗  的后验概率分布 p(z⃗ |w⃗ |α⃗ ,β⃗ ) (不引起歧义的情况下,简记为 p(z⃗ |w⃗ )) 进行采样。Gibbs 采样算法关键在于条件概率分布的求解。

假定我们要求解第 m 篇文档中 第 n 个词 i=(m,n) 所对应主题 zi=k(k[1,K]) 的条件概率分布。假定 wi=t(t[1,V])。记 w⃗ ={wi=t,w⃗ ¬i}z⃗ ={zi=k,z⃗ ¬i}i=(m,n) 有下式成立:

p(zi=k|z⃗ ¬i,w⃗ )=p(w⃗ ,z⃗ )p(w⃗ ,z⃗ ¬i)=p(w⃗ |z⃗ )p(w⃗ ¬i|z⃗ ¬i)p(wi)p(z⃗ )p(z⃗ ¬i)p(w⃗ |z⃗ )p(w⃗ ¬i|z⃗ ¬i)p(z⃗ )p(z⃗ ¬i)=Kk=1Δ(β⃗ +n⃗ k)Δ(β⃗ )Kk=1Δ(β⃗ +n⃗ k,¬i)Δ(β⃗ )Mm=1Δ(α⃗ +n⃗ m)Δ(α⃗ )Mm=1Δ(α⃗ +n⃗ m,¬i)Δ(α⃗ )=Δ(β⃗ +n⃗ k)Δ(β⃗ +n⃗ k,¬i)Δ(α⃗ +n⃗ m)Δ(α⃗ +n⃗ m,¬i)=Vt=1Γ(βt+n(t)k)Γ(Vt=1(βt+n(t)k))Vt=1Γ(βt+n(t)k,¬i)Γ(Vt=1(βt+n(t)k,¬i))Kk=1Γ(αk+n(k)m)Γ(Kk=1(αk+n(k)m))Kk=1Γ(αk+n(k)m,¬i)Γ(Kk=1(αk+n(k)m,¬i))=Γ(βt+n(t)k)Γ(Vt=1(βt+n(t)k,¬i))Γ(βt+n(t)k,¬i)Γ(Vt=1(βt+n(t)k))Γ(αk+n(k)m)Γ(Kk=1(αk+n(k)m,¬i))Γ(αk+n(k)m,¬i)Γ(Kk=1(αk+n(k)m))=βt+n(t)k,¬iVt=1(βt+n(t)k,¬i)αk+n(k)m,¬iKk=1(αk+n(k)m,¬i)
其中由倒数第二步推出倒数第一步使用了 Γ 函数的性质:xΓ(x)=Γ(x+1)

在不考虑位置 i=(m,n)位置的词时,根据Dirichlet参数的估计公式,αk+n(k)m,¬iKk=1(αk+n(k)m,¬i) 刚好是对第 m 篇文档主题分布 θm 的第 k 个分量 θmk的估计。而 βt+n(t)k,¬iVt=1(βt+n(t)k,¬i) 刚好是对第 k 个主题生成第 t 个词的概率 φkt 的估计。

θ̂ mk=αk+n(k)m,¬iKk=1(αk+n(k)m,¬i)
φ̂ kt=βt+n(t)k,¬iVt=1(βt+n(t)k,¬i)

我们最终得到了LDA模型Gibbs Sampling 公式:
p(zi=k|z⃗ ¬i,w⃗ )θ̂ mkφ̂ kt

整个公式很漂亮就是 p(topic|doc)p(word|topic) ,所以这个概率其实是 doctopicword 的路径概率,由于 topic 有 K 个,所以 Gibbs Sampling 公式的物理意义就是在这 K 条路径中进行采样。

这里写图片描述

有了Gibbs Sampling 采样公式,我们就可以基于语料训练LDA模型。LDA的训练过程如下所是:

这里写图片描述

(6)根据前面介绍的总体思路,当Gibbs采样过程收敛后就可以对参数 ΘΦ 的后验概率分布进行估计。

θ̂ mk=n(k)m+αkKk=1(n(k)m+αk) m[1,M], k[1,K]
φ̂ kt=n(t)k+βtVt=1(n(t)k+βt) k[1,K], t[1,V]

(7)有了LDA模型,对于新来的文档 docnew ,我们如何做该文档的 topic 语义分布的计算呢?基本上inference和training 的过程完全类似。不同之处是:对于新的文档,我们只要认为 Gibbs Sampling 公式中 Φ 是已知的(由训练好的模型提供),所以采样过程我们只需要估计该文档的topic分布 θ⃗ new 就好了。过程如下所示:

这里写图片描述

参考文献

Gregor Heinrich, Parameter estimation for text analysis
靳志辉,LDA数学八卦,2013
邹博,主题模型LDA,2014

展开阅读全文

没有更多推荐了,返回首页