一、引言:从关键词到语义
在搜索引擎刚出现的时候,搜索”car”可能无法返回包含”automobile”的文档——虽然意思几乎一样。这种词汇鸿沟(lexical gap)是传统关键词匹配的根本缺陷:它只看到表面词汇,不理会背后的语义。
潜在语义分析(Latent Semantic Analysis, LSA)是最早尝试弥合这一鸿沟的方法之一。它通过矩阵分解来发现隐藏在词-文档共现中的”潜在语义结构”。随后,概率潜在语义分析(probabilistic LSA, pLSA)为 LSA 提供了概率基础。这两个模型一起,构成了主题模型发展史的前两个里程碑,为后续的 LDA 铺平了道路。
本文将系统介绍 LSA 和 pLSA 的数学原理、算法实现以及两者之间的关系。
二、向量空间模型与 TF-IDF
2.1 向量空间模型(VSM)
在进入 LSA 之前,先回顾最基础的文本表示:向量空间模型(Vector Space Model, VSM)。
在 VSM 中,每个文档被表示为一个 $V$ 维向量($V$ 为词汇表大小),每个维度对应一个词的权重:
$$ d = (w_1, w_2, \dots, w_V)^T $$
整个语料库构成一个词-文档矩阵 $X \in \mathbb{R}^{V \times M}$,其中 $X_{ij}$ 是词 $i$ 在文档 $j$ 中的权重。
2.2 TF-IDF 权重
最常用的权重方案是 TF-IDF:
词频(TF):词在文档中出现的频率
$$ \text{tf}(t, d) = \frac{\text{词 } t \text{ 在文档 } d \text{ 中出现的次数}}{\text{文档 } d \text{ 的总词数}} $$
逆文档频率(IDF):衡量词的信息量
$$ \text{idf}(t) = \log \frac{M}{1 + |\{d: t \in d\}|} $$
TF-IDF:
$$ \text{tf-idf}(t, d) = \text{tf}(t, d) \times \text{idf}(t) $$
TF-IDF 的直觉:一个词在文档中出现越频繁(TF 高)且在语料库中越稀有(IDF 高),它对该文档就越重要。
2.3 VSM 的问题
VSM 的核心问题是各维度独立——它假定所有词是互相独立的。这导致了:
- 同义词问题:”car”和”automobile”被当作完全不相关的维度
- 多义词问题:”bank”(银行 vs 河岸)在 VSM 中只有一个维度
- 稀疏性:词-文档矩阵极其稀疏(大多数词不出现在大多数文档中)
- 噪音:高维稀疏矩阵中包含大量噪声
LSA 正是为了解决这些问题而诞生的。
三、LSA:潜在语义分析
3.1 核心思想
LSA(Deerwester et al., 1990)的核心假设是:词和文档之间存在一个低维的潜在语义空间,词和文档都可以被投影到这个空间中表示。在这个空间中,语义相近的词(即使字面不同)会聚集在一起。
LSA 使用截断 SVD(truncated SVD)来实现这个投影。
3.2 数学过程
给定词-文档矩阵 $X \in \mathbb{R}^{V \times M}$(通常为 TF-IDF 加权),LSA 执行以下步骤:
步骤 1:对 $X$ 做 SVD
$$ X = U \Sigma V^T $$
其中 $U \in \mathbb{R}^{V \times V}$,$\Sigma \in \mathbb{R}^{V \times M}$,$V \in \mathbb{R}^{M \times M}$
步骤 2:保留前 $k$ 个最大的奇异值
$$ X_k = U_k \Sigma_k V_k^T $$
其中 $U_k \in \mathbb{R}^{V \times k}$,$\Sigma_k \in \mathbb{R}^{k \times k}$,$V_k \in \mathbb{R}^{M \times k}$
步骤 3:获得低维表示
- 词的语义向量:$U_k \Sigma_k$(或仅 $U_k$)的第 $i$ 行表示词 $i$ 在语义空间中的坐标
- 文档的语义向量:$\Sigma_k V_k^T$(或仅 $V_k \Sigma_k$)的第 $j$ 列表示文档 $j$ 在语义空间中的坐标
3.3 为什么截断 SVD 能捕获语义?
截断 SVD 将原始矩阵 $X$ 近似为 $k$ 个秩-1 矩阵的和:
$$ X_k = \sum_{i=1}^{k} \sigma_i u_i v_i^T $$
根据 Eckart-Young 定理,这是秩-k 矩阵中对 $X$ 的 Frobenius 范数最优近似。它保留了数据中方差最大的 $k$ 个方向,去掉了噪声方向。
而这些大奇异值对应的方向,恰恰对应了语料中的”潜在主题”。例如,如果很多文档同时出现”car”和”automobile”,那么 SVD 的某个分量会自动将这两个词关联起来——它们会有相似的 $U_k$ 向量。
3.4 LSA 的计算示例
假设有以下 3 篇文档:
- d1: “cat dog mouse”
- d2: “dog mouse pet”
- d3: “car truck engine”
词-文档矩阵(词频):
d1 d2 d3 |
对 $X$ 做 SVD,取 $k=2$。得到的语义空间会自然地将 d1 和 d2(宠物相关)聚在一起,d3(汽车相关)单独成组。”cat”和”dog”会获得相似的语义向量——即使它们从未在同一文档中共现(通过”mouse”这个桥梁建立关联)。这就是 LSA 处理二阶共现的能力。
3.5 文档相似度计算
在 LSA 空间中,文档相似度可以用余弦相似度高效计算:
# Compute document similarity in LSA space |
3.6 LSA 的优缺点
| 优点 | 缺点 |
|---|---|
| 实现简单(只需 SVD) | 非概率模型,缺乏统计基础 |
| 能捕获同义词/近义词 | SVD 计算量大 |
| 降维后相似度计算高效 | 难以处理多义词 |
| 建立了词-词、文档-文档、词-文档的关联 | 缺乏生成式解释 |
| 数学上是最优低秩近似 | 负值难以解释 |
3.7 LSA 的折叠式查询(Folding-in)
LSA 的一个实际问题是:当有新文档或查询到达时,是否需要重新对整个词-文档矩阵做 SVD?答案是否定的——可以使用折叠式查询(folding-in)技术将新文档投影到已有的语义空间中。
对于新文档 $d_{\text{new}} \in \mathbb{R}^{V}$(TF-IDF 向量),其在 LSA 空间中的表示为:
$$ \hat{d}_{\text{new}} = \Sigma_k^{-1} U_k^T d_{\text{new}} $$
推导过程:在原始 SVD $X = U \Sigma V^T$ 中,文档 $j$ 的低维表示由 $\Sigma_k V_k^T$ 的第 $j$ 列给出(或 $V_k^T$ 的第 $j$ 列,取决于约定)。对于新文档 $d_{\text{new}}$,我们希望找到其低维表示 $v_{\text{new}}$ 使得 $d_{\text{new}} \approx U_k \Sigma_k v_{\text{new}}$:
$$ v_{\text{new}} = \Sigma_k^{-1} U_k^T d_{\text{new}} $$
类似地,对于新查询词 $q \in \mathbb{R}^{V}$,其在语义空间中的表示为:
$$ \hat{q} = \Sigma_k^{-1} U_k^T q $$
然后可以使用余弦相似度在语义空间中计算查询与文档的相关度:
$$ \text{sim}(q, d) = \cos(\hat{q}, \hat{d}) $$
这一技术的优点是增量式、无需重新训练;缺点是”折叠”进来的新信息不会反馈到语义空间的更新中。如果语料随时间变化显著,建议定期重新做 SVD。
3.8 LSA 与现代词嵌入(Word Embeddings)的关系
LSA 可以视为现代词嵌入(如 word2vec, GloVe)的”精神先驱”。它们都基于分布假说(Distributional Hypothesis)——语义相近的词出现在相似的上下文中。
然而两者的实现路径截然不同:
| 方面 | LSA | word2vec / GloVe |
|---|---|---|
| 核心机制 | 全局矩阵分解(SVD) | 局部上下文窗口预测 |
| 矩阵 | 词-文档共现矩阵 | 词-词共现矩阵(或滑动窗口采样) |
| 优化目标 | Frobenius 范数最小化 | 分类(Skip-gram)或回归(GloVe) |
| 训练方式 | 一次性(batch SVD) | 迭代(SGD) |
| 词向量维度 | 通常 100-300 | 通常 100-300 |
| 性能 | 在词相似度任务上不如 word2vec | 在词类比和相似度上显著领先 |
为什么 word2vec 比 LSA 效果更好?
- 加权方案:LSA 使用 TF-IDF 作为权重,而 word2vec 通过负采样(negative sampling)隐式地做了更巧妙的加权
- 优化灵活性:SGD 可以在梯度下降中跳出局部最优,而 SVD 是”一刀切”的全局优化
- 上下文粒度:word2vec 用固定大小的滑动窗口捕获局部上下文,LSA 以整篇文档为上下文粒度,可能在短文档中稀释了词的局部语义
实际上,GloVe(Pennington et al., 2014)可以被视为 LSA 思路在现代的复兴——它通过加权最小二乘回归来分解词-词共现矩阵,融合了 LSA 的全局矩阵分解和 word2vec 的局部上下文优势。
LSA 仍有价值的地方:文档级别的语义表示。word2vec 给你词向量,但你还需要额外操作来得到文档向量(如平均词向量、SIF 嵌入等)。LSA 天然提供了文档向量($V_k$),在文档聚类、文档相似度等任务中仍然是一种有效且易解释的 baseline。
四、pLSA:概率潜在语义分析
4.1 动机
LSA 是一个纯粹的线性代数方法,没有概率解释。pLSA(Hofmann, 1999)为 LSA 提供了概率基础,将文档生成形式化为一个概率模型。
4.2 pLSA 的生成模型
pLSA 假设文档是按以下过程生成的:
- 以概率 $P(d)$ 选一篇文档
- 以概率 $P(z|d)$ 选一个隐主题(latent topic)$z$
- 以概率 $P(w|z)$ 生成一个词
因此,词和文档的联合概率为:
$$ P(d, w) = P(d) \sum_{z=1}^{K} P(w|z) P(z|d) $$
这个模型也叫对称参数化。另一种写法(非对称参数化)为:
$$ P(d, w) = \sum_{z=1}^{K} P(z) P(d|z) P(w|z) $$
两种写法等价。
4.3 参数估计:EM 算法
pLSA 的参数可以通过 EM 算法进行 MLE 估计。我们需要估计的参数是 $P(w|z)$ 和 $P(z|d)$(假设 $P(d)$ 已由数据给出)。
完全数据对数似然:
$$ \mathcal{L} = \sum_{d} \sum_{w} n(d, w) \log P(d, w) $$
其中 $n(d, w)$ 是词 $w$ 在文档 $d$ 中出现的次数。
E 步:计算隐变量 $z$ 的后验概率
$$ P(z|d, w) = \frac{P(w|z) P(z|d)}{\sum_{z'} P(w|z') P(z'|d)} $$
M 步:最大化 Q 函数
$$ P(w|z) = \frac{\sum_d n(d, w) P(z|d, w)}{\sum_{d, w'} n(d, w') P(z|d, w')} $$
$$ P(z|d) = \frac{\sum_w n(d, w) P(z|d, w)}{n(d)} $$
其中 $n(d) = \sum_w n(d, w)$。
算法流程:
Algorithm: EM for pLSA |
4.4 pLSA 与 LSA 的关系
Hofmann 证明了 pLSA 与 LSA 之间的内在联系:pLSA 的目标函数本质上等价于以下加权奇异值分解:
$$ \hat{X} = U \tilde{\Sigma} V^T $$
其中 $\hat{X}_{ij} = \frac{n(d_i, w_j)}{\sqrt{n(d_i) \cdot \sum_d n(d, w_j)}}$。
这从概率角度解释了为什么 LSA 的 SVD+截断能工作——它隐式地对应了一个概率生成模型的最大似然解。
4.5 pLSA 的优缺点
| 优点 | 缺点 |
|---|---|
| 有了明确的概率解释 | 参数数量随文档数增长:$O(MK + KV)$ |
| EM 算法保证似然单调不减 | 对新文档无法直接推断(需重新训练) |
| 每个词在多个主题上的混合可解释多义词 | 容易过拟合(尤其是文档层面的参数) |
| 生成式模型,可以采样生成文本 | 没有对 $P(z |
4.6 pLSA EM 的数值示例
为了更好地理解 pLSA 的 EM 算法,我们用一个极小的语料库手动演示一轮迭代。
假设语料库只有一个文档 $d_1$,包含两个词:”apple”($w_1$)出现 2 次,”banana”($w_2$)出现 1 次。假设有 $K=2$ 个隐主题。
初始化(随机):
$$ P(z_1|d_1) = 0.6, \quad P(z_2|d_1) = 0.4 $$
$$
P(w_1|z_1) = 0.7, \quad P(w_2|z_1) = 0.3
$$
$$
P(w_1|z_2) = 0.3, \quad P(w_2|z_2) = 0.7
$$
E 步(计算 $P(z|d,w)$):
对 $(d_1, w_1)$:
$$
\begin{aligned}
P(z_1|d_1, w_1) &= \frac{0.7 \times 0.6}{0.7 \times 0.6 + 0.3 \times 0.4} = \frac{0.42}{0.54} \approx 0.778 \\
P(z_2|d_1, w_1) &= \frac{0.3 \times 0.4}{0.54} \approx 0.222
\end{aligned}
$$
对 $(d_1, w_2)$:
$$
\begin{aligned}
P(z_1|d_1, w_2) &= \frac{0.3 \times 0.6}{0.3 \times 0.6 + 0.7 \times 0.4} = \frac{0.18}{0.46} \approx 0.391 \\
P(z_2|d_1, w_2) &= \frac{0.7 \times 0.4}{0.46} \approx 0.609
\end{aligned}
$$
M 步(更新参数):
$$ \begin{aligned} P(w_1|z_1) &= \frac{2 \times 0.778 + 1 \times 0}{2 \times 0.778 + 1 \times 0 + 0 + 0} = \frac{1.556}{1.947} \approx 0.799 \\ P(w_2|z_1) &= \frac{2 \times 0 + 1 \times 0.391}{1.947} \approx 0.201 \\ P(w_1|z_2) &= \frac{2 \times 0.222 + 0}{2 \times 0.222 + 1 \times 0.609} \approx 0.422 \\ P(w_2|z_2) &= \frac{1 \times 0.609}{1.053} \approx 0.578 \\ \\ P(z_1|d_1) &= \frac{2 \times 0.778 + 1 \times 0.391}{3} \approx 0.649 \\ P(z_2|d_1) &= \frac{2 \times 0.222 + 1 \times 0.609}{3} \approx 0.351 \end{aligned} $$
经过一轮迭代后,参数发生了明显变化:
- $z_1$ 对 $w_1$(apple)的倾向更强了(0.7 -> 0.799)
- $z_2$ 对 $w_1$ 的概率下降了(0.3 -> 0.422),对 $w_2$ 下降了(0.7 -> 0.578)
继续迭代下去,$z_1$ 将逐渐集中在 $w_1$(apple)上,$z_2$ 逐渐集中在 $w_2$(banana)上,两个主题将”分离”。这展示了 EM 算法如何通过隐变量的”软分配”逐步发现词的聚合模式。
4.7 pLSA 与非负矩阵分解(NMF)的关系
pLSA 的 EM 算法与非负矩阵分解(NMF)有深刻的联系。在 NMF 中,我们寻找:
$$ X \approx W H, \quad W \in \mathbb{R}^{V \times K}_{\geq 0}, H \in \mathbb{R}^{K \times M}_{\geq 0} $$
其中 $W$ 的每行对应一个词在 $K$ 个主题上的分布(即 $P(w|z)$),$H$ 的每列对应一个文档在 $K$ 个主题上的分布(即 $P(z|d)$)。
两者的关键区别:
- pLSA 通过极大似然优化(等效于最小化 KL 散度 $D_{KL}(X | WH)$)
- 标准 NMF 通过最小化 Frobenius 范数 $|X - WH|_F^2$ 或 KL 散度
- pLSA 有概率约束($\sum_w P(w|z) = 1, \sum_z P(z|d) = 1$),这在 NMF 中不一定强制
实际上,当 NMF 使用 KL 散度作为损失函数并加入适当的列归一化约束时,它与 pLSA 是等价的。这也从另一个角度解释了为什么非负矩阵分解在主题建模中有效——非负约束自然地产生了可解释为”概率”的分量。
五、LSA vs pLSA vs LDA 完整对比
这三个模型构成了主题模型的三级进化:
5.1 对比表
| 维度 | LSA | pLSA | LDA |
|---|---|---|---|
| 年份 | 1990 | 1999 | 2003 |
| 数学基础 | 线性代数(SVD) | 概率 + EM | 贝叶斯推断 |
| 可解释性 | 低(奇异值/向量无法赋予直觉含义) | 中(概率但无极约束) | 高(Dirichlet 先验鼓励稀疏) |
| 参数数量 | $k(V+M)$ | $M \cdot K + K \cdot V$ | $K \cdot V$(固定) |
| 新文档处理 | 需重新 SVD(或 folding-in) | 不可直接处理 | 直接推断 $\theta_{new}$ |
| 模型选择 | k(主题数) | K(主题数) | K + $\alpha$ + $\beta$ |
| 过拟合 | 低 | 高 | 低(贝叶斯正则化) |
| 理论基础 | Eckart-Young 定理 | MLE | 贝叶斯定理 + 共轭先验 |
5.2 主题质量直观对比
以 10000 篇科技新闻为例:
- LSA 会找出一些正交维度,但这些维度可能混合了正负值(难以解释为”概率”)
- pLSA 会找出概率分布,但如果只有 50 篇文档讨论某个小众主题,该主题可能只在这 50 篇里出现——其他文档的 $P(z|d)$ 趋向于零(过拟合)
- LDA 通过 Dirichlet 先验将信息”共享”——每个主题的词分布从所有文档中受益,每个文档的主题分布由先验约束不至于过拟合
5.3 何时用哪个?
| 场景 | 推荐 | 原因 |
|---|---|---|
| 快速原型、探索性分析 | LSA | 简单、快 |
| 需要概率输出 | pLSA 或 LDA | 概率解释 |
| 中等规模数据 | pLSA | EM 收敛快 |
| 大规模、需建模新文档 | LDA | 固定参数、生成式 |
| 学术研究 | LDA | 理论完备,社区支持好 |
六、面试高频问题
Q1:LSA 为什么能处理同义词问题?
LSA 通过 SVD 降维,将原始的高维稀疏词-文档矩阵投影到一个低维潜在语义空间。在这个空间中,即使两个词(如”car”和”automobile”)从未在同一文档中共现,只要它们与相同的其他词共现(二阶共现),SVD 就会给它们相似的语义向量。这是 LSA 捕获”潜在语义”的关键机制。
数学上,这是因为截断 SVD 强制词和文档共享同一个低维空间,压缩过程中相似的上下文模式被”压缩”到一起。
Q2:pLSA 使用 EM 算法训练,E 步和 M 步各自在做什么?
E 步:给定当前参数估计 $P(w|z)$ 和 $P(z|d)$,计算每个词-文档对 $(d,w)$ 中隐主题 $z$ 的后验概率 $P(z|d,w)$。这一步”猜测”每个词是由哪个主题生成的。
M 步:利用 E 步的后验概率,重新估计参数 $P(w|z)$ 和 $P(z|d)$。本质上是用加权频率来更新——后验概率 $P(z|d,w)$ 作为权重,将每个词的出现”分配”给不同主题。
Q3:pLSA 的”过拟合”问题具体是什么?
pLSA 中 $P(z|d)$ 是模型参数(共 $M \times K$ 个),直接由训练集估计。如果训练集中某文档 $d$ 只涉及主题 A 的词,那么 $P(z = A|d)$ 会趋近于 1,其余为零。当这个文档只有一个词时,$P(z|d)$ 就是单点分布——极端过拟合。
此外,对于训练集中未出现的文档,pLSA 无法直接给出 $P(z|d_{new})$。相比之下,LDA 将 $\theta_d$ 视为随机变量并加 Dirichlet 先验,既防止了过拟合,也允许对新文档进行推断。
Q4:LSA 的截断秩 k 如何选择?
- 用奇异值衰减曲线(类似 PCA 的 scree plot),找”肘部”
- 在下游任务(如文档分类、检索精度)上做交叉验证
- 经验范围:通常 $k$ 取 100-300(对于数万词汇的语料)
- 如果只是做二维/三维可视化,$k=2$ 或 $k=3$
注意 $k$ 不一定要等于”真实”的主题数——LSA 的维度只是近似的”语义轴”,不应过度解释为离散的”主题”。
Q5:LSA 中的奇异向量值可能出现负数,这如何解释?
在 LSA 中,$U_k$ 和 $V_k$ 的元素确实可正可负。这是 LSA 被视为非概率方法的根本原因之一——无法像 pLSA/LDA 那样将分量解释为”概率”。
一种实用的解读方式是:将 LSA 维度理解为语义轴,正方向代表某个语义极(如”科技”),负方向代表相反极(如”人文”),零值表示不相关。但严格来说,LSA 不应该过度解释为清晰的”主题”,而应理解为一种低维语义嵌入。
这也是 pLSA 和 LDA 被发展出来的重要动机——给语义分析加上概率的非负约束,使结果更易解释。
Q6:LSA/pLSA 在工业界还有应用吗?还是已经被 LDA 和 BERT 取代了?
这是一个很好的问题。诚然,在语义相似度、文档分类等监督任务上,BERT 等预训练模型显著优于 LSA/pLSA。但在以下场景中,LSA/pLSA 仍然是实用甚至首选的工具:
无监督探索性数据分析:当你拿到一批新文档,完全不了解其内容结构时,跑一个 LSA 然后用前两个维度的散点图观察文档聚类——这比直接上 BERT 快得多,也更容易解释。
轻量级文本检索基线:LSA 的 cosine similarity 检索是搜索引擎的经典 baseline,实现简单、不需要 GPU,适合在资源受限的环境中部署。
数字人文和历史文献分析:人文学者需要透明的、可解释的方法。LSA 的线性性质(每个维度是词的线性组合)使学者可以理解”为什么这两篇文档被认为相似”。
可解释性要求高的场景:金融合规、法律文档分析等领域中,模型的每一个决策可能需要向监管者解释。线性模型(LSA)比深度学习模型(BERT)更容易解释其输出依据。
小样本领域:BERT 的预训练优势在处理新闻、百科等通用文本时明显,但在高度专业领域(如法律合同、医学文献等),语料规模往往不足以微调 BERT。此时 LSA/pLSA 作为一种无参数模型的 baseline 可能更鲁棒。
所以答案并非”有 vs 没有”的二元选择,而是在正确的场景选择正确的工具。理解 LSA/pLSA 的价值在于:它们为”文本的语义相似度”建立了最基本的数学直觉,这个直觉在你使用更高级的工具时依然有用。
七、总结
LSA 和 pLSA 是主题模型发展史上不可或缺的两块基石。LSA 用 SVD 的数学优雅性证明了”潜在语义”的可行性;pLSA 为其披上了概率的外衣,使之有了统计推断的基础;LDA 则完成了贝叶斯正规化,使主题模型真正成为实用工具。
理解这三个模型的递进关系,是理解 NLP 中”模型进化”的绝佳范例。它们向我们展示了:一个好的模型不是凭空产生的——它是在前人模型的问题和不足上逐步完善的。
在现代 NLP 中,虽然 BERT 等预训练模型在很大程度上取代了 LSA/pLSA 在语义相似度任务中的位置,但主题模型的可解释性和无监督属性使其在探索性数据分析、数字人文等场景中仍然不可替代。
参考文献:
- Deerwester, S., Dumais, S. T., Furnas, G. W., Landauer, T. K., & Harshman, R. (1990). Indexing by latent semantic analysis. Journal of the American Society for Information Science, 41(6), 391-407.
- Hofmann, T. (1999). Probabilistic latent semantic indexing. SIGIR ‘99.
- Blei, D. M., Ng, A. Y., & Jordan, M. I. (2003). Latent Dirichlet Allocation. JMLR, 3, 993-1022.
- 李航. (2019). 《统计学习方法》(第2版). 第16章.
- Manning, C. D., Raghavan, P., & Schutze, H. (2008). Introduction to Information Retrieval. Chapter 18.

