# LDA-math-LDA 文本建模

#### 作者rickjin

2 月 3, 2013

5. LDA 文本建模

5.1 游戏规则

LDA模型

\begin{align*}
\overrightarrow{\mathbf{w}} & = (\overrightarrow{w}_1, \cdots, \overrightarrow{w}_M) \\
\overrightarrow{\mathbf{z}} & = (\overrightarrow{z}_1, \cdots, \overrightarrow{z}_M)
\end{align*}

5.2 物理过程分解

LDA概率图模型表示

•  $\overrightarrow{\alpha}\rightarrow \overrightarrow{\theta}_m \rightarrow z_{m,n}$, 这个过程表示在生成第$m$ 篇文档的时候，先从第一个坛子中抽了一个doc-topic 骰子 $\overrightarrow{\theta}_m$, 然后投掷这个骰子生成了文档中第 $n$ 个词的topic编号$z_{m,n}$；
•  $\overrightarrow{\beta} \rightarrow \overrightarrow{\varphi}_k \rightarrow w_{m,n} | k=z_{m,n}$, 这个过程表示用如下动作生成语料中第$m$篇文档的第 $n$个词：在上帝手头的$K$ 个topic-word 骰子 $\overrightarrow{\varphi}_k$ 中，挑选编号为 $k=z_{m,n}$的那个骰子进行投掷，然后生成 word $w_{m,n}$；





\begin{align}
\label{corpus-topic-prob}
p(\overrightarrow{\mathbf{z}} |\overrightarrow{\alpha}) & = \prod_{m=1}^M p(\overrightarrow{z}_m |\overrightarrow{\alpha}) \notag \\
\end{align}

\begin{align*}
\overrightarrow{\mathbf{w}}' &= (\overrightarrow{w}_{(1)}, \cdots, \overrightarrow{w}_{(K)}) \\
\overrightarrow{\mathbf{z}}' &= (\overrightarrow{z}_{(1)}, \cdots, \overrightarrow{z}_{(K)})
\end{align*}





\begin{align}
\label{corpus-word-prob}
p(\overrightarrow{\mathbf{w}} |\overrightarrow{\mathbf{z}},\overrightarrow{\beta}) &= p(\overrightarrow{\mathbf{w}}' |\overrightarrow{\mathbf{z}}',\overrightarrow{\beta}) \notag \\
&= \prod_{k=1}^K p(\overrightarrow{w}_{(k)} | \overrightarrow{z}_{(k)}, \overrightarrow{\beta}) \notag \\
\end{align}

\begin{align}
\label{lda-corpus-likelihood}
p(\overrightarrow{\mathbf{w}},\overrightarrow{\mathbf{z}} |\overrightarrow{\alpha}, \overrightarrow{\beta}) &=
p(\overrightarrow{\mathbf{w}} |\overrightarrow{\mathbf{z}}, \overrightarrow{\beta}) p(\overrightarrow{\mathbf{z}} |\overrightarrow{\alpha}) \notag \\
&= \prod_{k=1}^K \frac{\Delta(\overrightarrow{n}_k+\overrightarrow{\beta})}{\Delta(\overrightarrow{\beta})}
\end{align}

5.3 Gibbs Sampling

\begin{align*}
p(z_i = k|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}) \propto
p(z_i = k, w_i = t |\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i}) \\
\end{align*}

1.  $\overrightarrow{\alpha} \rightarrow \overrightarrow{\theta}_m \rightarrow \overrightarrow{z}_{m}$
2. $\overrightarrow{\beta} \rightarrow \overrightarrow{\varphi}_k \rightarrow \overrightarrow{w}_{(k)}$

\begin{align*}
p(\overrightarrow{\theta}_m|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i})
&= Dir(\overrightarrow{\theta}_m| \overrightarrow{n}_{m,\neg i} + \overrightarrow{\alpha}) \\
p(\overrightarrow{\varphi}_k|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i})
&= Dir( \overrightarrow{\varphi}_k| \overrightarrow{n}_{k，\neg i} + \overrightarrow{\beta})
\end{align*}

\begin{align*}
p(z_i = k|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}) & \propto
p(z_i = k, w_i = t |\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i}) \\
&= \int p(z_i = k, w_i = t, \overrightarrow{\theta}_m,\overrightarrow{\varphi}_k |
\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i}) d \overrightarrow{\theta}_m d \overrightarrow{\varphi}_k \\
&= \int p(z_i = k, \overrightarrow{\theta}_m|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i})
\cdot p(w_i = t, \overrightarrow{\varphi}_k | \overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i})
d \overrightarrow{\theta}_m d \overrightarrow{\varphi}_k \\
&= \int p(z_i = k |\overrightarrow{\theta}_m) p(\overrightarrow{\theta}_m|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i})
\cdot p(w_i = t |\overrightarrow{\varphi}_k) p(\overrightarrow{\varphi}_k|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}_{\neg i})
d \overrightarrow{\theta}_m d \overrightarrow{\varphi}_k \\
&= \int p(z_i = k |\overrightarrow{\theta}_m) Dir(\overrightarrow{\theta}_m| \overrightarrow{n}_{m,\neg i} + \overrightarrow{\alpha}) d \overrightarrow{\theta}_m \\
& \hspace{0.2cm} \cdot \int p(w_i = t |\overrightarrow{\varphi}_k) Dir( \overrightarrow{\varphi}_k| \overrightarrow{n}_{k,\neg i} + \overrightarrow{\beta}) d \overrightarrow{\varphi}_k \\
&= \int \theta_{mk} Dir(\overrightarrow{\theta}_m| \overrightarrow{n}_{m,\neg i} + \overrightarrow{\alpha}) d \overrightarrow{\theta}_m
\cdot \int \varphi_{kt} Dir( \overrightarrow{\varphi}_k| \overrightarrow{n}_{k,\neg i} + \overrightarrow{\beta}) d \overrightarrow{\varphi}_k \\
&= E(\theta_{mk}) \cdot E(\varphi_{kt}) \\
&= \hat{\theta}_{mk} \cdot \hat{\varphi}_{kt} \\
\label{gibbs-sampling-deduction}
\end{align*}

\begin{align*}
\hat{\theta}_{mk} &= \frac{n_{m,\neg i}^{(k)} + \alpha_k}{\sum_{k=1}^K (n_{m,\neg i}^{(k)} + \alpha_k)} \\
\hat{\varphi}_{kt} &= \frac{n_{k,\neg i}^{(t)} + \beta_t}{\sum_{t=1}^V (n_{k,\neg i}^{(t)} + \beta_t)}
\end{align*}

\label{gibbs-sampling}
p(z_i = k|\overrightarrow{\mathbf{z}}_{\neg i}, \overrightarrow{\mathbf{w}}) \propto
\frac{n_{m,\neg i}^{(k)} + \alpha_k}{\sum_{k=1}^K (n_{m,\neg i}^{(k)} + \alpha_k)}
\cdot \frac{n_{k,\neg i}^{(t)} + \beta_t}{\sum_{t=1}^V (n_{k,\neg i}^{(t)} + \beta_t)}

doc-topic-word 路径概率

5.4 Training and Inference

• 估计模型中的参数 $\overrightarrow{\varphi}_1, \cdots, \overrightarrow{\varphi}_K$ 和 $\overrightarrow{\theta}_1, \cdots, \overrightarrow{\theta}_M$；
• 对于新来的一篇文档$doc_{new}$，我们能够计算这篇文档的 topic 分布$\overrightarrow{\theta}_{new}$。

6. 后记

LDA 对于专业做机器学习的兄弟而言，只能算是一个简单的Topic Model。但是对于互联网中做数据挖掘、语义分析的工程师，LDA 的门槛并不低。 LDA 典型的属于这样一种机器学习模型：要想理解它，需要比较多的数学背景，要在工程上进行实现，却相对简单。 Gregor Heinrich 的LDA 模型科普文章 Parameter estimation for text analysis 写得非常的出色，这是学习 LDA 的必看文章。不过即便是这篇文章，对于工程师也是有门槛的。我写的这个科普最好对照 Gregor Heinrich 的这篇文章来看， 我用的数学符号也是尽可能和这篇文章保持一致。

What I cannot create, I do not understand.
--- Richard Feynman

#### 作者 rickjin

##### 《LDA-math-LDA 文本建模》有29条评论
1. 开头是不是应该：doc-topic 骰子 θ 和 topic-word 骰子φ

[回复]

rickjin 回复:

嗯，笔误，修复了 🙂
谢谢一路捧场!

[回复]

2. 看完了，写的太好了这一系列。也看过WangYi之前写的一个推导的文档。大赞。What I cannot create, I do not understand.

[回复]

cttet 回复:

从你的博客跟过来的，真实一系列的好文啊。。

[回复]

3. franciscolv说道：

你好，看了你的文章。收益颇深。这一阵我在研究topic model和LDA，对于LDA，模型评价perplexity是怎么计算的？大致物理意义你能简要解释下吗？

[回复]

rickjin 回复:

有了模型， 每个词的概率如下计算 $P(w) = \sum_z P(z, w) = \sum_z P(z) P(w|z)$ ，由于是 bag-of-words 模型， 语料的Likelihood就是所有词相乘， 这样就可以计算 perplexity 了。

[回复]

eacl 回复:

p(z)?? p(z|d) over d ??

[回复]

rickjin 回复:

你说得对， 应该用 p(z|d), 我写得有问题

youthon 回复:

您说的“每个词的概率如下”有点不理解，意思是说把一篇文档中的n个词，分别计算p(w)么？为什么不是算p(d)？而是算一篇文档中多个p(w)的乘积

[回复]

回复:

而且在传统的lda中，计算p(wd)需要遍历整个p(z|d)空间，也就是所有的p(z|d)分布的可能性。但通过估计的话，p(z|d)分布是一定的。这两个地方矛盾呢。请指教啊~

[回复]

4. ppmmlong说道：

谢谢rickjin的一路讲解。对于最后一句话，不是很理解其中的含义，What I cannot create, I do not understand.。望能给以点拨。

[回复]

rickjin 回复:

这句话的字面意思是：我无法创造的东西，我就没有理解它的本质。这句话我用在这里想表达的意思是：如果我们无法从细节上把LDA 模型从无到有的推导出来，那我们并没有真正的理解 LDA。当然学习其它理论也一样 🙂

[回复]

5. 麥子说道：

先謝謝rickjin精闢的解釋LDA的理論與處理步驟, 實在是惠我良多

但就是對於Daichi Mochihashi在matlab版本中處理好的alpha與beta部分仍然不太清楚

他將最後近似θ與φ的alpha與beta輸出後, 以我的認知為此語料庫中之doc→topic與topic→word向量矩陣

若將用於與PLSA、LSA等輸出矩陣評比時, 該怎麼操作才是對的?

因為LDA的輸出不同於PLSA為PWD矩陣, 深感困惑..

[回复]

麥子 回复:

先谢谢rickjin精辟的解释LDA的理论与处理步骤, 实在是惠我良多

但就是对于Daichi Mochihashi在matlab版本中处理好的alpha与beta部分仍然不太清楚

他将最后近似θ与φ的alpha与beta输出后, 以我的认知为此语料库中之doc→topic与topic→word向量矩阵

若将用于与PLSA、LSA等输出矩阵评比时, 该怎么操作才是对的?

因为LDA的输出不同于PLSA为PWD矩阵, 深感困惑..

ps. 抱歉, 忘记将语言转为简体字了

[回复]

rickjin 回复:

一般的 LDA model 训练过程中， 往往使用人工指定 $\alpah, \beta$ 超参数， 但是这些超参数其实是一个用最大似然估计去估计一个好的参数的， 这个可以参阅 Hanna Wallach 的 rethinking LDA 这篇 paper, 和 他的 PhD paper, 尤其是他的 PhD thesis, 给出了优化超参数的很多数学细节

[回复]

6. Earthson Lu说道：

这几天一直对Training的部分有些疑惑，现在有些想明白了。这个Gibbs Sampling的Training其实用的应该是一种不动点收敛？请问各位大大，这个东西哪里有比较系统的介绍么？

[回复]

7. Eugene Deng说道：

真是受益良多啊，但有些地方还是不太懂，比如=∫p(zi=k,wi=t,θ→m,φ→k|z→¬i,w→¬i)dθ→mdφ→k
=∫p(zi=k,θ→m|z→¬i,w→¬i)⋅p(wi=t,φ→k|z→¬i,w→¬i)dθ→mdφ→k
=∫p(zi=k|θ→m)p(θ→m|z→¬i,w→¬i)⋅p(wi=t|φ→k)p(φ→k|z→¬i,w→¬i)dθ→mdφ→k
感觉中间有点突然，是假设给定z→¬i,w→¬i的情况下，zi=k,wi=t条件独立么？

[回复]

8. Elanafu说道：

你好！看了你的文章感觉十分有用。现在想问问在输入新文章测试时的具体步骤，我现在在测试时遇到一些问题，求指教！

[回复]

9. war说道：

perplexity 具体怎么计算还是不太明白啊

“你说得对， 应该用 p(z|d), 我写得有问题”

[回复]

10. lovewr说道：

你好，请问perplexity计算公式中的p(z|d)中的d应该是测试文本，那它的 p(z|d)应该是未知的啊，怎么计算？

[回复]

牛牛110 回复:

p(z|d)不就是主题在文本上的分布吗?不都已经求出来了？

[回复]

lovewr 回复:

根据一些文献上说：模型估计在训练集上做，计算困惑度在测试集上进行，评价模型的泛化能力。

[回复]

Joe Fok 回复:

对啊，那个p(z|d)对于测试集来说是未知的啊，应该怎么求？

11. 请问楼主有无中文的训练语料作LDA训练使用

[回复]

12. moshangcheng说道：

文章在推导(2)式的时候有一个小错误，K个topic总共的概率应该是先相乘再积分，作者分别对每个topic的概率先积分再将所有topic的概率相乘。

[回复]

13. HappyFun说道：

你好！看了你的文章感觉十分有用。以前只是比较懵懂地使用了LDA模型，现在终于对内部的数学概率知识有了深入的了解！非常感谢！

[回复]

14. 言午说道：

你好，我是LDA的初学者，有几个疑问想请教一下：主题模型得到的最终结果不应该是主题吗？由两个参数最后怎么求文章主题？

[回复]

15. 卢同学说道：

靳老师你好，看了好多遍《Lda数学八卦》，一直有个疑惑的点，在Game5下面，也就是讲解K个Dirichlet-Multinomial 共轭结构那段，一直很疑惑那对改变了的向量组w',z'的长成什么样的。

"其中，w→(k) 表示这些词都是由第 k 个 topic 生成的， z→(k) 对应于这些词的 topic 编号，所以z→(k)中的分量都是k。"

这里把语料中的词进行交换，把具有相同 topic 的词放在一起，z→(k)中的分量不是m？？是长成z→(k)=(z(k)_m1,z(k)_m2,...)这样的吗？

希望能得到老师的解答，谢谢！

[回复]

16. 孙承岳说道：

吉布斯采样那部分没看懂，吉布斯采样是用来对已知概率密度进行采样，但是这个地方 隐含主题的后验概率 虽然形式已知（两个Dirichlet 参数估计的乘积），但是因为没有准确的隐含主题的准确标注所以 隐含主题的后验概率函数 还是未知的。怎么证明在概率密度函数未知的情况下，吉布斯采样最终收敛的一定就是正确的？而且只有在采样的变量同时也是概率密度函数的参数的时候才可以进行这样的吉布斯采样来预估参数吧？这个操作在什么情况时是通用的？

[回复]