浅谈LDA主题模型(原理篇)

首先声明,这里的 LDA 是指 Latent Dirichlet Allocation 隐含狄利克雷分布,而不是 Linear Discriminant Analysis 线性判别分析 (笔者有幸在 City University of HK 听过一堂机器学习课,里面讲到了线性判别,受益匪浅,有机会再做分享)

除了看原论文 Latent Dirichlet Allocation , 虽然论文一作不是安德鲁(吴恩达),但是看到他的名字就知道这篇论文的水平,我也看了很多博客,写得最好的是火光摇曳的 《LDA数学八卦》,本文部分知识来自此篇博客。

LDA 的解释

既然 LDA 是主题模型,那么它的功能应该是和 LSA、 pLSA 等差不多的。它们都可以得到文档的主题,以及主题词。LSA 一般通过 SVD 求解(可参考先前的文章 SVD的原理及LSA的求解),而 pLSA 和 LDA 是概率模型。

那么什么是LDA呢?

假设有 M 篇文章,我们假设每篇文章中隐含有 K 个主题。其中文章和文章的词是可见的,而主题是假设出来的,且主题往往是受词影响的,可以把这些主题称为 latent topics 隐主题。

假设每篇文章的长度为 N (即是每篇文章有 N 个词),每篇文章都有各自的主题分布(是软分布),主题分布是多项分布, 该多项分布的参数服从Dirichlet 分布, 该Dirichlet 分布的参数为 \(\alpha\)

每个主题都有各自的词分布,词分布也是多项分布,其多项分布的参数也同样服从Dirichlet 分布,该Dirichlet 分布的参数为 \(\beta\)

通俗地说就是对于某篇文章中的第 n 个词,首先要从这篇文章的主题分布中采样一个主题,然后再在这个主题对应的词分布中采样一个词,然后不断重复这个过程,直到 m 篇文章全部完成上述过程。

而 LDA 是基于贝叶斯模型的,是一个三层的网络,贝叶斯模型有三个主要部分:先验分布、数据似然、后验分布,它们的关系为

先验分布 + 数据似然 = 后验分布

为了让上述关系满足递推关系,LDA 一般采用的分布是满足共轭分布的,共轭分布的先验分布和后验分布满足相同的分布律,即当前的求得的后验分布可作为下一次的先验分布

上面内容先介绍了 LDA 的主要思想,下面主要介绍 LDA 的细节

背景知识

Gamma 函数

Beta 分布Dirichlet 分布 中都用到 Gamma 函数 \(\Gamma(\alpha)\) ,它的定义为:

\[\begin{align*} & \Gamma(\alpha) = \int_{0}^{+\infty } x^{\alpha-1} e^{-x} dx \\ & where\ \ x > 0 \end{align*} \tag{1}\]

\(x = t^{2}\) 带回 \((1)\) 式可得到 Gamma 函数的另一表达形式

\[\begin{align*} & \Gamma(\alpha) = 2 \int_{0}^{+ \infty} t^{2\alpha-1} e^{-t^{2}} dt \\ & where\ \ t > 0 \end{align*} \tag{2}\]

对于 \((1)\) 式,将 \(\alpha = 1\) 带入求积分易求得:

\[\Gamma(1) = 1 \tag{3}\]

对于 \((2)\) 式,将 \(\alpha = \frac{1}{2}\) 带入求积分可得:

\[\Gamma(\frac{1}{2}) = \sqrt{\pi} \tag{4}\]

接下来我们用分部积分法求解可得:

\[\begin{align*} \Gamma(\alpha + 1) & = \int _{0}^{+\infty} x^{\alpha} e^{-x} dx \\ & = -\int _{0}^{+\infty} x^{\alpha}d e^{-x} \\ & = -x^{\alpha} e^{-x} | _{0}^{+\infty} + \int _{0}^{+\infty} e^{-x}\alpha x^{\alpha-1} dx \\ & = \alpha \int _{0}^{\infty} x^{\alpha - 1} e^{-x} dx \\ & = \alpha \Gamma(\alpha) \end{align*} \tag{5}\]

因此

\[\Gamma(\alpha + 1) = \alpha \Gamma(\alpha) \tag{6}\]

易知 \(\Gamma(\alpha)\) 函数是阶乘在实数集上的扩展,具有如下性质:

\[\Gamma(n) = (n-1)! \tag{7}\]

\((1)\) \((3)\) \((6)\) 很容易求得 \(\gt 0\) 自然数上的Gamma函数值,由 \((2)\) \((4)\) \((6)\) 易求得小数的Gamma函数值

Gamma 分布

对于 Gamma 函数有

\[\int_{0}^{+\infty} \frac{x^{\alpha-1} e^{-x}}{\Gamma{\alpha}} dx = 1 \tag{8}\]

因此可得 Gamma 分布的密度函数为

\[Gamma(x|\alpha) = \frac{x^{\alpha-1}e^{-x}}{\Gamma(\alpha)} \tag{9}\]

更一般的令 \(x = \beta t\) 可得

\[Gamma(t|\alpha, \beta) = \frac{\beta^{\alpha}t^{\alpha-1}e^{-\beta t}}{\Gamma(\alpha)} \tag{10}\]

\(\alpha\) 决定了 Gamma 分布的曲线形状, \(\beta\) 决定了 Gamma 分布曲线的陡峭程度

【拓】Gamma 分布与 Poisson 分布

参数为 \(\lambda\) 的泊松分布概率为:

\[Poisson(X=k|\lambda) = \frac{\lambda ^{k} e-{\lambda}}{k!} \tag{11}\]

在 Gamma 分布的密度函数中取 \(\alpha = k+1\) 可得

\[Gamma(x|\alpha = k+1) = \frac{x^{k}e{-x}}{\Gamma(k+1)} = \frac{x^{k}e^{-x}}{k!} \tag{12}\]

可见 \((11)\)\((12)\) 在分布表达式上是一致的,区别在于 Poisson 分布是离散的,而 Gamma 分布是连续的

共轭先验分布

对于贝叶斯定理有

\[p(\theta | x) = \frac{p(x|\theta ) p(\theta)}{p(x)} \propto p(x|\theta)p(\theta) \tag{13}\]

其中 \(\theta\) 是参数, \(p(\theta | x)\) 是后验概率,\(p(\theta)\) 是先验概率,\(p(x|\theta)\) 称为给定参数 \(\theta\) 下样本的似然概率

若后验概率 \(p(\theta|x)\) 和先验概率 \(p(\theta)\) 满足同样的分布律,那么先验分布和后验分布叫做共轭分布,同时先验分布叫作似然函数的共轭先验分布

二项分布和 Beta 分布

对于二项分布有

\[Binomial(k|n, p) = \binom{n}{k} p^{k}(1-p)^{n-k} \tag{14}\]

Beta 分布的概率密度函数为:

\[f(x) = \begin{cases} \frac{1}{B(\alpha, \beta)} x^{\alpha-1}(1-x)^{\beta-1} & \text{ , } x\in [0, 1] \\ 0 & \text{ , } others \end{cases} \tag{15}\]

其中系数 B 为

\[B(\alpha, \beta) = \int_{0}^{1} x^{\alpha -1}(1-x)^{\beta -1} dx = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha + \beta)} \tag{16}\]

因此对于 Beta 分布有

\[Beta(p|\alpha, \beta) = \frac{\Gamma(\alpha + \beta)}{\Gamma(\alpha) \Gamma(\beta)}p^{\alpha -1}(1-p)^{\beta - 1} \tag{17}\]

观察 \((14)\)\((17)\) 可知两者的密度函数非常相似,尝试将两个分布联合有

\[\begin{align*} P(p|n, k, \alpha, \beta) & \propto P(k|n, p) P(p|\alpha, \beta) \\ & = Binomial(k|n, p) Beta(p|\alpha, \beta) \\ & = \binom{n}{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*} \tag{18}\]

归一化后可得后验概率

\[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} \tag{19}\]

可以发现二项分布的共轭分布就是 Beta 分布,而且有

\[Beta(p|\alpha, \beta) + BinomialCount(k, n-k) = Beta(p|\alpha + k, \beta+n-k) \tag{20}\]

注意! \((20)\)\(+\) 并不是加法运算,可把它理解为结合\(BinomialCount\) 有数据得到的,也就是说 \((20)\) 式满足 先验 + 数据 = 后验,称为 Beta-Binomial 共轭

Beta分布的期望

\[\begin{align*} E(Beta(p|\alpha, \beta)) & = \int_{0}^{1} t Beta(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*} \tag{21}\]

又有

\[\int_{0}^{1} \frac{\Gamma(\alpha + \beta + 1)}{\Gamma(\alpha + 1)\Gamma(\beta)} p^{\alpha} (1-p)^{\beta-1} = 1 \tag{22}\]

\((21) (22)\) 可得

\[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} \tag{23}\]

多项分布和 Dirichlet 分布

多项分布是二项分布在多种( \(>2\) )状态下的推广,对于多项分布有:

\[Multinomial(\underset{m}{\rightarrow}|n, \underset{p}{\rightarrow}) = \binom{n}{\underset{m}{\rightarrow}}\prod_{k=1}^{K} p_{k}^{m_{k}} \tag{24}\]

Dirichlet 分布是 Beta 分布在多维状态下的推广,Dirichlet 分布的密度函数为

\[f(\underset{p}{\rightarrow}|\underset{\alpha}{\rightarrow}) = \begin{cases} \frac{1}{\Delta (\underset{\alpha}{\rightarrow})} \prod_{k=1}^{K} p_{k}^{\alpha_{k-1}} & \text{ , } p_{k} \in [0,1] \\ 0 & \text{ , } others \end{cases} \tag{25}\]

可知其密度函数的自由度为 \(k-1\)

对于系数有

\[\Delta(\underset{\alpha}{\rightarrow}) = \frac{\prod_{k=1}^{K} \Gamma(\alpha_{k})}{\Gamma(\sum_{k=1}^{K} \alpha_{k})} \tag{26}\]

因此 Dirichlet 分布可表示为

\[Dir(\underset{p}{\rightarrow}|\underset{\alpha}{\rightarrow}) = \frac{\Gamma(\sum_{k=1}^{K}\alpha _{k})}{\prod_{k=1}^{K}\Gamma(\alpha_{k})} \prod_{k-1}^{K} p_{k}^{\alpha _{k-1}} \tag{27}\]

Dirichlet 分布的期望和 Beta 分布差不多

\[E(p_{i}) = \frac{\alpha_{i}}{\sum_{k=1}^{K} \alpha_{k}} \tag{28}\]

可知多项分布是二项分布的推广Dirichlet 分布是 Beta 分布的推广

多项分布和 Dirichlet 分布也同样满足共轭关系,因此有

\[Dir(\underset{p}{\rightarrow} | \underset{\alpha}{\rightarrow}) + MultinomialCount(\underset{m}{\rightarrow}) = Dir(\underset{p}{\rightarrow} | \underset{\alpha}{\rightarrow} + \underset{m}{\rightarrow}) \tag{29}\]

这里的 \(+\) 也是代表结合的意思,并不是加法,因此同样满足 先验 + 数据 = 后验,称为 Dirichlet-Multinomial 共轭

对称 Dirichlet 分布

在具体实现中为了简化计算,对于参数 \(\underset{\alpha}{\rightarrow} = (\alpha _{1}, \alpha _{2}, ..., \alpha _{k})\)\(\alpha _{1} = \alpha _{2} = ... = \alpha _{k} = \alpha\) , 满足这样的参数称为对称 Dirchlet 分布,对于 \(\alpha\) 的取值有

  • \(\alpha = 1\) : 退化为均匀分布
  • \(\alpha \gt 1\) : \(p_{1} = p_{2} = ... = p_{k}\) 的概率增大
  • \(\alpha \lt 1\) : \(p_{i}=1\), \(p_{\neq i} = 0\) 的概率增大

图片来自维基百科

硬 & 软思维

举个例子,判断一个人的性别

  • 硬分类思想:这个人是男的(很果断,非0即1)
  • 软分类思想:这个人 70% 的可能是男的, 30% 的可能是女的,所以他应该是个男的

再话 LDA

LDA 的解释 部分已经解释了 LDA 的基本思想,这里结合背景知识再深入的讲解

假设有 M 篇文档,对应第 d 个文档种有 \(N_{d}\)

我们的目标是找到每一篇文档的主题分布和每一个主题中词的分布。

我们假设隐变量K代表主题数,则 LDA 的概率图模型为

图中只有 Observed Word 是可见的,其他都是的,Observed word \(W _{d, n}\) 代表第 d 个文档的第 n 个词

LDA 假设文档的主题的先验分布是 Dirichlet 分布,即对于任一文档 d ,其主题分布 \(\theta _{d}\)

\[\theta _{d} = Dir(\underset{\alpha}{\rightarrow})\]

其中 \(\alpha \in \mathbb{R}^{K}\) 是分布的超参数,是一个 \(K\) 维向量(它对应了文档分别属于 \(K\) 个主题的软概率)

LDA 假设主题中词的先验分布是 Dirichlet 分布,即对于任一主题 \(k\),其词分布 \(\beta _{k}\)

\[\beta_{k} = Dir(\underset{\eta }{\rightarrow})\]

其中 \(\eta \in \mathbb{R}^{V}\) 为分布的超参数,\(V\) 代表词典的大小, 是一个 \(V\) 维的向量(它对应了词典中各个词对主题影响的软概率)

对于数据中任意一篇文档 \(d\) 中的第 n 个词,可以从主题分布 \(\theta_{d}\) 中得到它的主题编号 \(z_{d,n}\) 的分布为

\[z_{d,n} = Multinomial(\theta_{d})\]

而对于该主题编号,可以得到我们看到词 \(w_{d, n}\) 的概率分布为

\[w_{d, n} = Multinomial(\beta_{z_{d, n}})\]

对于 M 篇文档就有 M 个文档主题的 Dirichlet 分布,而对应的数据就有 M 个主题编号的多项分布,因此 \(\alpha \rightarrow \theta_{d} \rightarrow \underset{z_{d}}{\rightarrow}\) 满足 Dirichlet-Multinomial 共轭

那么数据似然部分,如何求解呢?

假设在第 k 个主题中,第 v 个词的个数为 \(n_{k}^{(v)}\),则该主题编号对应的词多项分布计数可表示为

\[\underset{n_{k}}{\rightarrow} = (n_{k}^{(1)}, n_{k}^{(2)}, ..., n_{k}^{(V)})\]

利用 Dirichlet-Multinomial 共轭,可得 \(\beta_{k}\) 的后验分布为

\[Dir(\beta_{k}|\underset{\eta}{\rightarrow}+\underset{n_{k}}{\rightarrow})\]

由于主题产生词不依赖具体的某一个文档,因此文档主题分布和词分布是独立的

可能上面的解释还是难以理解,下面尝试以更通俗的语言解释

这里的超参数一般是我们根据经验设定一个具体的数,这样也就是得到了我们的最原始的先验分布 初始化:利用先验分布,为每一个文档 m 中的每一个词 n 赋予一个主题 z 根据这个初始化 我们可以统计文档m的各个主题数目,也可以统计某个主题z对应的不同词的数目 这些数目我们看做第一步的数据似然 -> 然后再结合先验 -> 得到第一步的后验 把第一步的后验看做第二步的先验概率再去为每一个文档 m 中的每一个词 n 赋予一个主题 z,因为是共轭先验分布因此进行和第一步一样的迭代,直到收敛 —— 上述解释来自 kylin0228

本文只介绍原理部分,实现部分后期发布

Refrence

  • [1] https://en.wikipedia.org/wiki/Dirichlet_distribution
  • [2] http://www.flickering.cn/%E6%95%B0%E5%AD%A6%E4%B9%8B%E7%BE%8E/2014/06/lda%E6%95%B0%E5%AD%A6%E5%85%AB%E5%8D%A6%E6%96%87%E6%9C%AC%E5%BB%BA%E6%A8%A1/
  • [3] https://www.cnblogs.com/pinard/p/6831308.html
  • [4] http://www.jmlr.org/papers/volume3/blei03a/blei03a.pdf
sean lee wechat
欢迎关注我的公众号!
感谢支持!