LDA主题模型
最近看了一下LDA的文章, 写个小结, 理解正确与否有待验证.
Latent Dirichlet Allocation(LDA)是三层的层次概率贝叶斯模型(生成模型), 用于处理离散数据, 比如文本数据.
1. 概念
- 单词(word): 形成数据的基本单元
- 文档(document): 单词形成的有限序列
- 语料库(corpus): 所有文档的集合
2. 记号
假设一共有 \(V\) 个单词, 则第 \(j\) 个单词表示为:
\]
假设一共有 \(K\) 个主题, 则第 \(i\) 个主题表示为:
\]
3. 流程
生成一个文档的过程如下:
- 从参数为 \(\xi\) 的Poisson分布中选取文档单词数 \(N\);
- 从参数为 \(\alpha\) 的Dirichlet分布中选择一个参数 \(\theta\);
- 依次生成每个单词 \(w_n\)(\(n=1,\cdots,N\)):
- 从参数为 \(\theta\) 的多项分布中选择一个主题 \(z_n\);
- 从以 \(\beta\) 为参数的条件多项分布 \(p(w_n|z_n, \beta)\) 中选取出单词 \(w_n\).
其中假设Dirichlet分布的维数固定为 \(K\)(即主题数固定为 \(K\)).
各参数分析如下:
-
参数 \(\xi\) 是一个数;
-
参数 \(\theta = (\theta^1, \cdots, \theta^K)\) 是一个 \(K\)维向量, 表示 \(K\) 个主题的概率分布;
-
参数 \(\alpha=(\alpha^1, \cdots, \alpha^K)\) 是一个 \(K\) 维向量, \(\alpha^i\) 表示 \(\theta^i\) 对应的Dirichlet分布参数;
-
参数 \(\beta\) 是一个 \(K\times V\) 的矩阵, \(\beta_{ij} = p(w^j=1|z^i=1)\), 即第 \(i\) 个主题中第 \(j\) 个单词的概率.
从上面的参数分析可以看见, 之所以使用Dirichlet先验分布, 是因为它恰到好处地, 给了我们想要的主题分布的每个参数 \(\theta^i\) 一个对应的参数 \(\alpha^i\), 并且对后面的变分推断和参数估计有益.
给定参数 \(\alpha\) 和 \(\beta\), 可以得到 \(\theta = (\theta^1, \cdots,\theta^K)\), \(z=(z_1, \cdots, z_N)\), \(w = (w_1, \cdots, w_N)\)的联合分布
\]
对 \(\theta\) 和 \(z\) 分别积分求和, 可以得到关于文档的边际分布
\]
4. 推断
LDA的推断问题是, 给定文档后, 隐变量的后验分布
\]
上式分母不可计算, 近似的方法包括Laplace逼近, 变分逼近, Markov链蒙特卡罗法等.
用上面后验分布的解耦样式
\]
逼近, 其中 \(\gamma=(\gamma^1, \cdots, \gamma^K)\) 为Dirichlet参数(近似 \(\alpha\)), \(\phi = (\phi_1, \cdots, \phi_N)\) 每个分量都是多项分布参数(近似 \(\beta\)). 极大似然问题变为极小化KL散度的优化问题:
\]
可以得到
\phi_{ni} &\propto \beta_{iw_n} e^{E_q[\log(\theta_i)|\gamma]} \\
\gamma_i &= \alpha_i + \sum_{n=1}^{N} \phi_{ni}.
\end{aligned}
\]
计算伪码为
5. 参数估计
参数应极大化对数似然
\]
但是对数似然却难以计算. 我们可以利用变分推断得到的下界近似对数似然, 可以在EM算法的M步, 极大化证据下界以更新变分参数 \(\gamma\) 和 \(\phi\), 而对于固定的变分参数, 又可以通过极大化证据下界更新参数 \(\alpha\) 和 \(\beta\).
EM算法:
- (E步)对每个文档, 寻找最优变分参数 \(\{\gamma_d^{*}, \phi_d^{*}: d\in D\}\), 这一步由变分推断得到;
- (M步)通过极大化证据下界更新参数 \(\alpha\) 和 \(\beta\).
其中第二步中, 参数 \(\beta\) 可以解析表示
\]
但参数 \(\alpha\) 则需要用Newton-Raphson方法计算.
接下来希望能够弄清楚具体的代码实现.