跳转至

第十八章:概率潜在语义分析(pLSA)

18.1 引言

概率潜在语义分析(Probabilistic Latent Semantic Analysis,简称pLSA)是一种用于文本挖掘和文档分析的概率图模型方法。该模型由Thomas Hofmann于1999年提出,旨在解决传统潜在语义分析(LSA)无法很好地处理一词多义和多词同义的问题。pLSA通过引入潜在变量(latent variable)来建立文档与词汇之间的概率关系,从而在保留语义信息的同时,能够更好地捕捉文档的深层结构。

pLSA的核心思想是:每一篇文档可以看作是若干潜在主题(latent topics)的概率分布,而每一个潜在主题又可以看作是在若干词汇上的概率分布。通过这种两层概率结构,pLSA能够有效地对文档进行降维表示,提取文档的语义特征,并在文档聚类、文本分类、信息检索等领域得到广泛应用。

与后来的隐含狄利克雷分配(LDA)相比,pLSA的模型参数数量随文档数量线性增长,这在一定程度上限制了其在大规模语料库上的应用。然而,pLSA因其模型简洁、计算高效、解释性强等优点,至今仍是文本挖掘领域的重要基础方法之一。本章将详细介绍pLSA的背景、模型结构、参数学习算法,以及与LDA的对比分析。

18.2 问题背景与动机

18.2.1 传统方法的局限

在pLSA出现之前,文本处理领域主要使用向量空间模型(Vector Space Model)和潜在语义分析(Latent Semantic Analysis)。向量空间模型将每一篇文档表示为一个词频向量,文档之间的相似度通过向量之间的余弦相似度来计算。这种方法虽然简单直观,但面临着维度灾难和稀疏性问题。当词汇表规模很大时,每篇文档的向量将极其稀疏,同时计算成本也会急剧增加。

潜在语义分析通过奇异值分解(SVD)来对词-文档矩阵进行降维,提取出潜在的语义结构。LSA能够在一定程度上解决同义词问题,因为它将语义相近的词映射到低维空间中的相近位置。然而,LSA基于线性代数方法,缺乏明确的概率解释,难以进行统计推断。此外,LSA对一词多义的处理效果并不理想,因为它无法区分同一个词在不同上下文中的不同含义。

18.2.2 pLSA的提出

为了克服传统方法的局限,Hofmann受到概率语言模型(Probabilistic Language Model)的启发,提出了pLSA模型。pLSA的核心创新在于引入了潜在变量z来表示文档的潜在主题,并假设文档d和词汇w之间的条件概率可以通过潜在变量z来解释。这种方法具有明确的概率语义,能够更好地处理语言的歧义性问题。

pLSA的基本假设是:每一篇文档是由若干潜在主题混合而成的,而每一个潜在主题则由一组词汇以不同概率组成。这意味着给定一篇文档,我们可以推断出它关于各个潜在主题的分布;给定一个潜在主题,我们可以知道它生成各个词汇的概率。这种双向概率关系使得pLSA能够同时解决一词多义和多词同义的问题。

例如,词汇"bank"在金融主题的文档中通常与"account"、"loan"等词共同出现,而在地理主题的文档中则通常与"river"、"slope"等词共同出现。pLSA通过将"bank"分配到不同的潜在主题中,能够区分这两种不同的语义。

18.3 pLSA模型结构

18.3.1 生成过程

pLSA是一种基于潜在变量的生成模型。假设我们有一个文档集合,包含M篇文档,词汇表包含N个不同的词汇。模型引入K个潜在主题(K是预先设定的参数)。pLSA的生成过程如下:

对于每一篇文档d(d ∈ {d₁, d₂, ....., dₘ}):

第一步,按照概率分布P(z|d)选择一个潜在主题z(z ∈ {z₁, z₂, ....., zₖ});

第二步,按照概率分布P(w|z)从选定的主题z中生成一个词汇w(w ∈ {w₁, w₂, ....., wₙ})。

重复上述过程N次(或者按照文档长度),生成整篇文档的词汇序列。值得注意的是,在实际模型中,我们通常将文档表示为词频向量,而不是生成长度为N的序列。生成过程可以表示为以下联合概率形式:

\[P(d, w) = P(d) \sum_{z} P(w|z) P(z|d)\]

或者等价地:

\[P(d, w) = \sum_{z} P(z) P(d|z) P(w|z)\]

上述公式中,P(z|d)表示给定文档d时选择主题z的条件概率,P(w|z)表示给定主题z时生成词汇w的条件概率。这两个概率分布是pLSA模型的核心参数。

18.3.2 概率模型定义

pLSA模型的概率图模型结构如图18-1所示。图中包含三个节点:文档节点d、潜在主题节点z和词汇节点w。箭头从d指向z,表示文档决定了主题的分布;箭头从z指向w,表示主题决定了词汇的分布。实线方框表示重复过程,N次重复表示文档长度为N个词。

模型参数包括两个条件概率矩阵。设\(P(z|d)\)为一个K×M的矩阵,其中元素\(P(z_j|d_i)\)表示文档\(d_i\)属于主题\(z_j\)的概率。设\(P(w|z)\)为一个N×K的矩阵,其中元素\(P(w_i|z_j)\)表示在主题\(z_j\)下词汇\(w_i\)出现的概率。

对于每一篇文档d,其词汇分布可以通过以下公式计算:

\[P(w|d) = \sum_{z} P(w|z) P(z|d)\]

这表明,给定文档d生成词汇w的概率是所有潜在主题的加权平均,权重为该文档属于各主题的概率。

18.3.3 模型参数说明

为便于理解,我们将pLSA模型的参数整理成如下表格形式:

参数符号 维度 含义说明
M 标量 文档集合中的文档数量
N 标量 词汇表中的词汇数量
K 标量 潜在主题的数量(人工设定)
$P(z d)$ K × M矩阵
$P(w z)$ N × K矩阵
\(P(d)\) M纬向量 每篇文档的先验概率(通常设为均匀分布)
\(P(z)\) K纬向量 每个主题的先验概率(通常设为均匀分布)

模型需要学习的参数主要是\(P(z|d)\)\(P(w|z)\),这两个矩阵满足概率分布的归一化约束,即对于每一个固定的d,有\(\sum_{z} P(z|d) = 1\);对于每一个固定的z,有\(\sum_{w} P(w|z) = 1\)

18.4 EM算法参数估计

18.4.1似然函数

给定观测数据(文档-词汇对),pLSA模型的参数学习采用最大似然估计方法。设观测数据集为\(\{(d_i, w_j)\}\),其中\(d_i\)表示第i篇文档,\(w_j\)表示第j个词汇。似然函数定义为:

\[\mathcal{L} = \prod_{i,j} P(d_i, w_j)^{n(d_i, w_j)}\]

其中\(n(d_i, w_j)\)表示词汇\(w_j\)在文档\(d_i\)中出现的次数(词频)。对数似然函数为:

\[\log \mathcal{L} = \sum_{i,j} n(d_i, w_j) \log P(d_i, w_j)\]

\(P(d_i, w_j) = \sum_{k} P(w_j|z_k) P(z_k|d_i) P(d_i)\)代入上式,可以得到:

\[\log \mathcal{L} = \sum_{i,j} n(d_i, w_j) \log \sum_{k} P(w_j|z_k) P(z_k|d_i)\]

直接对上述似然函数进行最大化是困难的,因为对数内部存在求和项,导致参数之间相互耦合。这正是潜在变量模型中常见的难题。EM算法提供了一种有效的解决方案。

18.4.2 EM算法推导

EM算法通过引入潜在变量z,定义完全数据的似然函数,然后交替执行E步(期望步)和M步(最大化步)来迭代优化参数。

E步(期望步): 在E步中,我们计算给定观测数据\((d, w)\)时,潜在变量z的后验概率:

\[P(z|d, w) = \frac{P(w|z) P(z|d)}{\sum_{z'} P(w|z') P(z'|d)}\]

这个后验概率表示,在观察到文档d和词汇w的条件下,词汇w是由主题z生成的概率。

M步(最大化步): 在M步中,我们最大化Q函数(即完全数据似然函数的对数期望)来更新参数。Q函数的定义如下:

\[Q(\theta, \theta^{(old)}) = \sum_{z} P(z|d, w) \log P(d, w, z)\]

其中\(\theta\)表示待更新的参数,\(\theta^{(old)}\)表示上一次迭代的参数值。

通过对\(Q\)函数分别对\(P(z|d)\)\(P(w|z)\)求偏导并令其为零,并考虑归一化约束,可以得到参数更新公式。

18.4.3 参数更新公式

基于上述推导,pLSA模型的EM算法参数更新公式如下:

对于\(P(z|d)\)的更新:

\[P^{(new)}(z|d) = \frac{\sum_{w} n(d, w) P(z|d, w)}{\sum_{z'} \sum_{w} n(d, w) P(z'|d, w)}\]

对于\(P(w|z)\)的更新:

\[P^{(new)}(w|z) = \frac{\sum_{d} n(d, w) P(z|d, w)}{\sum_{w'} \sum_{d} n(d, w') P(z|d, w')}\]

其中\(P(z|d, w)\)由E步给出:

\[P(z|d, w) = \frac{P^{(old)}(w|z) P^{(old)}(z|d)}{\sum_{z'} P^{(old)}(w|z') P^{(old)}(z'|d)}\]

18.4.4 算法流程

完整的pLSA参数学习算法流程如下:

输入: 文档-词汇共现矩阵(或词频矩阵),潜在主题数K,最大迭代次数T,收敛阈值ε。

输出: 模型参数\(P(z|d)\)\(P(w|z)\)

步骤:

第一步,初始化。随机初始化\(P(w|z)\)矩阵(或者使用均匀分布),确保每行和为1。

第二步,迭代优化。重复以下步骤直到收敛或达到最大迭代次数:

(1)E步:对每一对\((d, w)\),计算后验概率\(P(z|d, w)\)

(2)M步:根据更新公式更新\(P(z|d)\)\(P(w|z)\)

(3)检查收敛条件:计算对数似然函数的变化量,如果变化量小于阈值ε,则停止迭代。

第三步,输出最终的模型参数。

EM算法的收敛性取决于初始化的质量。为了获得更好的结果,通常需要使用多个不同的初始值进行多次训练,选择似然函数值最大的结果作为最终模型。

18.5 pLSA的应用场景

18.5.1 文档聚类

pLSA的一个重要应用是文档聚类。通过学习得到的\(P(z|d)\),我们可以将每篇文档表示为一个K维的主题分布向量。这个向量描述了文档在各潜在主题上的权重,可以作为文档的特征表示用于聚类分析。

具体而言,我们可以将\(P(z|d)\)视为文档d在主题空间中的坐标,然后使用K-means、层次聚类等传统聚类算法对文档进行分组。由于pLSA已经将文档映射到了潜在语义空间,语义相近的文档在主题分布上也会相近,从而能够获得更好的聚类效果。

与传统的词频向量相比,基于pLSA主题分布的文档表示具有更低的维度(K通常远小于词汇表大小),并且能够捕捉文档的深层语义信息。这使得聚类结果更具解释性,也能够有效降低维度灾难的影响。

18.5.2 信息检索

在信息检索领域,pLSA可以用于改进文档与查询之间的相似度计算。传统的信息检索系统通常基于词匹配或词频统计来衡量文档与查询的相关性,这种方法容易受到词汇表达差异的影响。

使用pLSA时,文档和查询都可以被表示为主题分布向量。文档d的主题分布为\(P(z|d)\),查询q的主题分布可以通过同样的方式计算,或者简单地使用查询中包含词汇的主题分布来表示。有了主题分布后,我们可以计算文档与查询在主题空间中的相似度,例如使用KL散度或余弦相似度:

\[\text{sim}(d, q) = \cos(P(\cdot|d), P(\cdot|q)) = \frac{\sum_z P(z|d) P(z|q)}{\sqrt{\sum_z P(z|d)^2} \sqrt{\sum_z P(z|q)^2}}\]

由于pLSA能够将语义相关的文档映射到相近的主题分布,因此即使文档与查询没有直接的词汇重叠,只要它们在主题层面相关联,就能够被检索出来。这有效地解决了传统检索方法中的一词多义和多词同义问题。

18.5.3 文本分类与主题标注

pLSA的主题分布输出还可以用于文本分类任务。通过有监督地训练,我们可以建立从主题分布到类别标签的映射函数。当新的文档到来时,先用训练好的pLSA模型提取其主题分布,然后利用分类器进行类别预测。

此外,pLSA的另一个有趣应用是主题标注(topic labeling)。由于\(P(w|z)\)描述了每个主题在各词汇上的概率分布,我们可以找出每个主题下概率最高的若干词汇,用这些词汇来描述该主题的含义,从而实现主题的自动标注。

18.6 pLSA与LDA的对比分析

18.6.1 模型层面的对比

概率潜在语义分析(pLSA)和隐含狄利克雷分配(LDA)是两种最经典的文本主题模型。虽然两者都基于潜在变量的思想,但在模型结构和推断方法上存在显著差异。

潜在变量的处理方式: 在pLSA中,潜在主题z与文档d和词汇w之间的概率关系直接通过条件概率\(P(z|d)\)\(P(w|z)\)来建模。这两个概率分布是模型的参数,需要通过最大似然估计来学习。而在LDA中,潜在主题的分布被进一步赋予了先验分布,通常假设\(P(z|d)\)服从狄利克雷分布(Dirichlet distribution),\(P(w|z)\)也服从狄利克雷分布。这种贝叶斯处理方式使得LDA能够更好地处理过拟合问题。

文档-主题分布: pLSA中,每篇文档对应一个特定的\(P(z|d)\)分布,这些分布没有共享的先验约束。这意味着如果有M篇文档,就需要学习M×K个参数(假设有K个主题)。当文档数量很大时,参数数量也会急剧增加,导致过拟合风险。相比之下,LDA假设所有文档的\(P(z|d)\)都是从同一个狄利克雷先验中独立采样得到的,这使得模型参数数量与文档数量无关,有效缓解了过拟合问题。

层次结构: 从模型层次来看,LDA是一种三层层次模型(文档层-主题层-词汇层),而pLSA通常被看作两层模型(文档-主题、主题-词汇)。LDA在文档层和词汇层都引入了狄利克雷先验,形成了更完整的贝叶斯层次模型。

18.6.2 参数推断方法的对比

pLSA和LDA在参数推断方法上也有所不同。pLSA使用EM算法进行最大似然估计或最大后验估计,算法流程相对简单直观。EM算法在pLSA模型上能够保证收敛到局部最优解,但对于大规模数据而言,计算效率可能不高。

LDA的参数推断则更为复杂,常用的方法包括变分推断(Variational Inference)和吉布斯采样(Gibbs Sampling)。变分推断通过引入变分分布来近似后验分布,将贝叶斯推断问题转化为优化问题进行求解。吉布斯采样则是一种马尔可夫链蒙特卡洛(MCMC)方法,通过迭代采样来获得后验分布的样本。

由于LDA具有共轭先验结构(狄利克雷分布是多项分布的共轭先验),其变分推断和吉布斯采样算法相对高效,这也是LDA能够在大规模文本数据上得到广泛应用的重要原因之一。

18.6.3 应用层面的对比

在实际应用层面,pLSA和LDA各有优劣。

模型可扩展性: LDA在可扩展性方面优于pLSA。由于LDA引入了狄利克雷先验,其参数数量与文档数量无关,更适合处理大规模语料库。pLSA的参数数量随文档数量线性增长,当文档数量非常大时,存储和计算都可能成为瓶颈。

模型解释性: pLSA的模型参数直接对应于条件概率分布,解释相对直观。而LDA的参数是狄利克雷分布的超参数,解释起来需要更多的概率论背景。不过,LDA的贝叶斯框架使得参数估计更加稳定,结果的可重复性也更好。

生成新文档: LDA是一种完整的生成模型,可以直接用于生成新文档。我们可以从狄利克雷先验中采样文档-主题分布,再从主题-词汇分布中采样词汇,生成全新的文档文本。pLSA虽然也可以生成文本,但其生成过程缺乏对文档整体的先验建模。

平滑能力: 由于LDA使用贝叶斯方法,天然具有平滑能力,能够处理稀疏数据。pLSA在稀疏数据上可能更容易出现过拟合问题,特别是在词汇表中出现次数很少的词汇上。

计算效率: pLSA的EM算法相对简单,每次迭代只需要更新两个条件概率矩阵。LDA的变分推断或吉布斯采样通常需要更多的计算资源,特别是当主题数量较多时。不过,两者的计算复杂度都与词汇表大小和主题数量密切相关。

18.6.4 对比总结表

为了更清晰地展示pLSA与LDA的区别,我们将主要对比点整理如下:

对比维度 pLSA LDA
潜在变量处理 直接建模条件概率 引入狄利克雷先验
参数数量 O(M×K + N×K) O(N×K + K)(超参数)
过拟合风险 较高(参数随文档数增长) 较低(贝叶斯正则化)
参数推断方法 EM算法 变分推断/吉布斯采样
模型类型 生成模型(两层) 层次生成模型(三层)
新文档生成 有限支持 完全支持
计算效率 较高 相对较低
可扩展性 较差 较好
平滑能力 较弱 较强

综上所述,pLSA和LDA各有其适用场景。对于中小规模的文本数据集,pLSA因其简单性和高效性仍然是不错的选择。对于大规模文本数据,LDA因其更好的可扩展性和泛化能力而更为常用。无论选择哪种方法,理解其背后的概率原理对于正确应用和解释结果都至关重要。

18.7 本章小结

本章详细介绍了概率潜在语义分析(pLSA)模型。pLSA通过引入潜在主题变量,建立了文档与词汇之间的概率关系,有效克服了传统文本表示方法的局限性。

在模型结构方面,pLSA假设每篇文档是由若干潜在主题混合而成,每个潜在主题则由一组词汇的概率分布定义。这种两层概率结构使得pLSA能够同时捕捉文档的语义信息和词汇的语义关联。

在参数学习方面,pLSA采用EM算法进行最大似然估计。E步计算潜在变量的后验概率,M步最大化似然函数更新参数。EM算法能够保证似然函数单调递增,最终收敛到局部最优解。

在应用方面,pLSA广泛应用于文档聚类、信息检索、文本分类等任务。其主题分布输出可以作为文档的低维语义表示,用于各种下游任务。

在与LDA的对比中,我们可以看到两种模型各有特点。pLSA模型简单、计算高效,适合中小规模数据;LDA引入贝叶斯先验,具有更好的可扩展性和泛化能力,适合大规模数据。选择哪种模型需要根据具体的应用场景和数据规模来决定。

总之,pLSA作为文本挖掘领域的重要基础方法,为后续更复杂的概率主题模型(如LDA)的发展奠定了理论基础。理解pLSA的原理对于深入学习文本挖掘和机器学习具有重要意义。

18.7 公式汇总表

编号 公式名称 公式形式 说明 类型
(18.1) pLSA联合概率 $p(d, w) = p(d) \sum_z p(z d) p(w z)$
(18.2) 似然函数 $\mathcal{L} = \sum_{d,w} n(d,w) \log \sum_z p(z d) p(w z)$
(18.3) E步 $p(z d,w) = \frac{p(z d) p(w
(18.4) M步-P(z d) $p(z d) \propto \sum_w n(d,w) p(z
(18.5) M步-P(w z) $p(w z) \propto \sum_d n(d,w) p(z
(18.6) 词分布更新 $\hat{p}(w z) = \frac{\sum_d n(d,w) p(z d,w)}{\sum_{w'} \sum_d n(d,w') p(z