基于狄利克雷过程的层次模型(Hierarchical Dirichlet Process, HDP)的非参数主题建模与贝叶斯推断过程
题目描述
本题目旨在详细讲解层次狄利克雷过程(HDP) 的原理与计算过程。HDP是一种非参数贝叶斯模型,广泛应用于文档主题建模、图像特征建模等场景,其中数据(如文档)被组织成多个组(如文档集),每个组内共享一个潜在的、无限维的混合模型(如主题)。HDP的核心目标是在不预先指定主题数量的前提下,自动从数据中推断出各个组内共享的全局主题集合以及每个组内主题的分布。我们将循序渐进地讲解其动机、生成过程、数学模型以及推断(吉布斯采样)的详细步骤。
解题过程
第一步:理解动机与模型概览
- 问题背景:在主题建模中,我们有多个文档(组),每个文档由多个单词组成。传统模型如LDA(潜在狄利克雷分布)需要预先指定主题数量K,这通常难以确定。HDP旨在解决此问题,让模型自动从数据中学习一个全局的、潜在无限的主题集合。
- 核心思想:HDP构建一个两层结构:
- 第一层(全局层):从一个基分布(如对称狄利克雷分布)中采样,生成一个全局的、无限的“主题”分布(每个主题是一个在词汇表上的多项式分布)。这通过一个狄利克雷过程(DP) 实现,记为 \(G_0 \sim DP(\gamma, H)\),其中H是基分布(如Dirichlet(η)),γ是浓度参数。
- 第二层(组特定层):对于每个文档j,从其自身的一个DP中采样,生成该文档的主题分布 \(G_j \sim DP(\alpha, G_0)\)。关键点在于,所有 \(G_j\) 共享同一个基分布 \(G_0\),这保证了不同文档可以共享相同的主题,但各自的主题比例可以不同。
- 模型输出:通过推断,我们可以得到:
- 一个全局的主题集合(每个主题是词汇表上的一个分布)。
- 每个文档中各个主题的混合比例。
- 每个单词被分配到的主题。
第二步:狄利克雷过程(DP)与“中国餐馆过程”(CRP)表示
- DP的定义:一个分布 \(G \sim DP(\alpha, H)\) 表示从DP中采样的分布G本身是一个随机分布。它由浓度参数α和基分布H定义。G将以概率1是离散的,并且可以表示为: \(G = \sum_{k=1}^{\infty} \pi_k \delta_{\phi_k}\),其中 \(\phi_k \sim H\) 是从基分布H中独立同分布采样的原子(例如,一个主题参数),\(\pi_k\) 是权重,满足 \(\sum_{k=1}^{\infty} \pi_k = 1\)。
- 构造性表示 - 中国餐馆过程(CRP):在实际采样中,我们通常不直接处理无限和,而是使用CRP这种边际表示。CRP描述了从G中采样N个观测值 \(\theta_1, ..., \theta_N\) 的过程:
- 第一个顾客坐在第一张桌子,从H中采样一个主题 \(\phi_1\) 作为该桌子的“菜”。
- 对于第i个顾客(i > 1):
- 以概率 \(\frac{\alpha}{\alpha + i - 1}\) 选择一张新桌子,从H中采样一个新主题 \(\phi_{k_{new}}\) 作为该桌的菜。
- 以概率 \(\frac{n_k}{\alpha + i - 1}\) 选择已有的第k张桌子,其中 \(n_k\) 是已经坐在第k张桌子上的顾客数,并共享该桌的主题 \(\phi_k\)。
- 这样,我们得到一系列桌子(即主题),以及每个顾客(即单词)被分配到的桌子(主题)。主题的数量是随数据增长的。
第三步:HDP的生成过程(以文档建模为例)
假设我们有J个文档,文档j有 \(N_j\) 个单词。词汇表大小为V。
- 全局层(生成全局主题):
- 从一个DP生成全局分布: \(G_0 \sim DP(\gamma, H)\), 其中H是基分布,例如 \(H = Dirichlet(\eta, ..., \eta)\) 是一个V维对称狄利克雷分布,η是参数。 \(G_0\) 代表一个全局的、无限的主题混合。
- 使用CRP表示,我们可以认为有一个全局的“中国餐馆”,从中我们为所有文档的单词采样主题。但更高效的方式是使用“分层CRP”或“直接赋值表示”。
- 组特定层(为每个文档生成主题分布):
- 对于每个文档j,从以 \(G_0\) 为基分布的DP中采样其主题分布: \(G_j \sim DP(\alpha, G_0)\)。
- 由于 \(G_0\) 是离散的(由一组全局主题原子 \(\phi_k\) 和权重组成), \(G_j\) 将只在这些全局主题上放置质量。即,所有文档共享同一个全局主题集合 \(\{ \phi_k \}\),但每个文档j对各个主题有不同的权重。
- 生成单词:
- 对于文档j中的第i个单词:
- 首先,从 \(G_j\) 中采样一个主题参数(即主题索引): \(\theta_{ji} \sim G_j\)。
- 然后,从以 \(\theta_{ji}\) 为参数的多项式分布中采样单词: \(w_{ji} \sim Multinomial(\theta_{ji})\)。 由于 \(\theta_{ji}\) 实际上是某个全局主题 \(\phi_k\) 的索引,所以等价于 \(w_{ji} \sim Multinomial(\phi_{z_{ji}})\),其中 \(z_{ji}\) 是该单词被分配到的全局主题索引, \(\phi_k\) 是第k个主题的词汇分布。
- 对于文档j中的第i个单词:
第四步:直接赋值表示与吉布斯采样推断
为了进行推断,我们通常使用一种“直接赋值”表示,并采用吉布斯采样(一种MCMC方法)来近似后验分布。我们直接为每个单词分配一个全局主题索引 \(z_{ji} = k\),并维护计数。
-
模型参数与变量:
- \(z_{ji}\):文档j中第i个单词的主题分配(取值为1, 2, ..., K+, 其中K+是目前出现的主题数)。
- \(\phi_k\):第k个主题的词汇分布, \(\phi_k \sim Dirichlet(\eta)\)。
- \(n_{jk}\):文档j中被分配到主题k的单词数量。
- \(m_{jk}\):在文档j中,由全局主题k“拥有”的表格数(在HDP的CRP表示中,每个文档有自己的CRP,每个桌子对应一个全局主题)。在简化版本中,我们有时忽略 \(m_{jk}\),直接用 \(n_{jk}\) 和全局计数。
- \(n_{kv}\):在所有文档中,主题k生成词汇v的次数。
- \(n_{k} = \sum_v n_{kv}\):主题k下观测到的总词数。
-
吉布斯采样更新公式(核心):
采样的目标是计算单词 \(w_{ji}\) 被分配到主题k的条件概率 \(P(z_{ji} = k | \mathbf{z}^{-ji}, \mathbf{w}, \alpha, \gamma, \eta)\),其中 \(\mathbf{z}^{-ji}\) 表示除当前单词外所有其他单词的主题分配。
这个概率可以分解为两部分:- 文档-主题部分:在文档j中,选择主题k的概率。这由HDP的结构决定,近似为:
\(P(\text{在文档j中选主题k}) \propto n_{jk}^{-ji} + \alpha \beta_k\)。
其中, \(n_{jk}^{-ji}\) 是除去当前单词后,文档j中分配给主题k的单词数。 \(\beta_k\) 是全局层主题k的混合权重(需要通过另一个CRP从全局计数中推断出来)。 - 主题-单词部分:给定主题k,生成单词 \(w_{ji}\) 的概率。这是一个多项式似然,结合狄利克雷先验,其预测分布为:
\(P(w_{ji} = v | z_{ji}=k, \mathbf{z}^{-ji}, \mathbf{w}^{-ji}, \eta) = \frac{n_{kv}^{-ji} + \eta}{n_{k}^{-ji} + V\eta}\)。
其中, \(n_{kv}^{-ji}\) 是除去当前单词后,主题k生成词汇v的次数, \(n_{k}^{-ji} = \sum_v n_{kv}^{-ji}\),V是词汇表大小。
然而,全局权重 \(\beta_k\) 的处理是HDP的关键。在Teh等人提出的直接吉布斯采样算法中,他们引入了辅助变量,但一个更常用的简化采样器(有时称为“后验采样”)通过整合掉全局分布 \(G_0\),得到一个更简洁的公式。最终,单词 \(w_{ji}\) 被分配到现有主题k的条件概率为:
- 文档-主题部分:在文档j中,选择主题k的概率。这由HDP的结构决定,近似为:
\[ P(z_{ji} = k | ...) \propto (n_{jk}^{-ji} + \alpha \beta_k) \cdot \frac{n_{kv}^{-ji} + \eta}{n_{k}^{-ji} + V\eta} \]
而分配到**新主题**(记为 $ k = \text{new} $)的概率为:
\[ P(z_{ji} = \text{new} | ...) \propto \alpha \beta_{\text{new}} \cdot \frac{1}{V} \quad \text{(或一个类似的与η相关的表达式)} \]
其中, $ \beta_{\text{new}} $ 是分配给新主题的全局权重,它与γ有关。在实际采样中,我们常常通过维护另一个全局的CRP来处理 $ \beta_k $,或者使用一个近似: $ \beta_k \propto m_{\cdot k} $,即所有文档中由全局主题k拥有的表格总数,而 $ \beta_{\text{new}} \propto \gamma $。 采样新主题时,需要从基分布H(即Dirichlet(η))中为该新主题采样一个新的词汇分布 $ \phi_{\text{new}} $。
- 采样步骤:
a. 初始化:随机为所有单词分配主题,并计算初始计数 \(n_{jk}, n_{kv}\)。
b. 迭代采样:对于语料库中的每一个单词 \(w_{ji}\)(通常随机遍历):
* 从当前主题分配中减去该单词的计数: \(n_{jz_{ji}} \gets n_{jz_{ji}} - 1\), \(n_{z_{ji}w_{ji}} \gets n_{z_{ji}w_{ji}} - 1\)。
* 对于每一个现有主题k=1,...,K+,计算条件概率 \(p_k\) 如上式。
* 计算新主题的概率 \(p_{\text{new}}\)。
* 对概率向量 \([p_1, ..., p_{K+}, p_{\text{new}}]\) 进行归一化,形成一个多项分布。
* 从这个多项分布中采样一个新的主题 \(z_{ji}^{new}\)。
* 如果采样到新主题(K+增加1),则为其初始化一个主题向量 \(\phi_{K+} \sim Dirichlet(\eta)\),并更新全局主题计数。
* 更新计数: \(n_{jz_{ji}^{new}} \gets n_{jz_{ji}^{new}} + 1\), \(n_{z_{ji}^{new}w_{ji}} \gets n_{z_{ji}^{new}w_{ji}} + 1\)。
c. 更新全局权重(可选):在迭代之间,可以根据当前的主题分配,采样辅助变量以更新全局表格计数 \(m_{jk}\),从而隐式地定义了 \(\beta_k\)。
d. 收敛:重复迭代足够多次(如数百到数千次,取决于数据规模),直到主题分配稳定。
e. 后验推断:采样收敛后,我们可以从最后几次迭代中收集样本,计算:
* 每个主题的词汇分布: \(\hat{\phi}_k = \frac{n_{kv} + \eta}{\sum_{v}(n_{kv} + \eta)}\)。
* 每个文档的主题分布: \(\hat{\theta}_{jk} = \frac{n_{jk} + \alpha \beta_k}{\sum_{k}(n_{jk} + \alpha \beta_k)}\) (或近似为 \(\frac{n_{jk} + \alpha \beta_k}{N_j + \alpha}\))。
第五步:总结与关键点
- 非参数性:HDP不需要预先指定主题数K,模型复杂度(主题数量)可以随着数据的丰富而自动增长。
- 层次共享:通过共享全局基分布 \(G_0\),确保了不同文档可以共享主题,同时允许每个文档有自己的主题混合比例。
- 推断挑战:精确后验推断是难解的,因此采用近似方法,如吉布斯采样、变分推断等。吉布斯采样是其中一种常用且相对直接的方法,它通过迭代地对每个隐变量(主题分配)进行采样来逼近后验分布。
- 应用:HDP不仅用于文本主题建模,也广泛应用于任何需要从多个组的数据中发现共享潜在结构的场景,如基因表达分析、图像特征建模等。
通过以上步骤,我们完成了对层次狄利克雷过程(HDP)从动机、生成模型到具体吉布斯采样推断的完整讲解。