查看全课大纲(第 32 / 69 节)
  1. 1.NLP 的研究领域、应用与学习路径
  2. 2.自然语言的基本术语
  3. 3.信息论基础:信息熵与交叉熵
  4. 4.语言的进化与语义变迁
  5. 5.主观概率、客观概率与条件概率
  6. 6.贝叶斯原理与推理
  7. 7.随机变量:二项式、期望方差与联合概率
  8. 8.常见概率分布
  9. 9.辛普森悖论与贝叶斯解题实例
  10. 10.语言模型:语言概率与词袋模型
  11. 11.n-gram 语言模型(二元 / 三元 / N-Gram)
  12. 12.语言模型评价:交叉熵、困惑度与插值
  13. 13.朴素贝叶斯文本分类:垃圾邮件
  14. 14.拼写检查
  15. 15.中文分词:构词法、最大匹配、最优路径与 Jieba
  16. 16.词表示问题与语义相似度
  17. 17.TF-IDF 权重处理
  18. 18.One-Hot 表达与词表示的局限
  19. 19.Word2Vec 核心思想
  20. 20.Word2Vec 训练过程
  21. 21.Skip-gram 模型详解
  22. 22.词性标注任务与标注方法(规则 + N-Gram)
  23. 23.EM 算法与混合模型
  24. 24.高斯混合模型 GMM
  25. 25.从混合模型到隐马尔可夫模型
  26. 26.隐马尔可夫模型(HMM)推导与维特比解码
  27. 27.线性链条件随机场 CRF
  28. 28.贝叶斯网络与图模型
  29. 29.隐马尔可夫链与 HMM 推导
  30. 30.PLSA 主题模型
  31. 31.LSI 与 SVD 向量表达
  32. 32.LDA 与狄利克雷分布
  33. 33.主题模型实验复现(困惑度 / 分类 / 相似度 / 延展)
  34. 34.上下文无关文法(CFG)与句法分析
  35. 35.概率上下文无关文法 PCFG
  36. 36.统计机器翻译:词对齐与翻译模型
  37. 37.统计机器翻译中的对齐模型与参数估计
  38. 38.从统计机器翻译到神经机器翻译
  39. 39.神经元与反向传播速览(指向深度学习课)
  40. 40.CNN 原理及其在 NLP 中的应用
  41. 41.循环神经网络的基本原理与 Elman / Jordan 网络
  42. 42.LSTM:长短期记忆网络的核心思想与分步实现
  43. 43.Encoder-Decoder 框架
  44. 44.Seq2Seq 与早期注意力机制
  45. 45.注意力机制的背景与动机
  46. 46.注意力模型实现原理与匹配函数
  47. 47.记忆网络:组成与计算
  48. 48.注意力机制的应用与历史延展
  49. 49.Transformer 结构:Encoder-Decoder 栈与 Self-Attention
  50. 50.Multi-Head Attention、FFNN 与位置编码
  51. 51.层归一化、损失函数与 Universal Transformer 延展
  52. 52.预训练范式:从 ELMo 到 BERT
  53. 53.BERT 与掩码语言模型
  54. 54.BERT 下游任务微调与 GLUE 口径
  55. 55.GPT 与自回归语言建模
  56. 56.GPT-1 到 GPT-4 的演进
  57. 57.指令微调与 RLHF
  58. 58.分词器:BPE、WordPiece 与中文词表
  59. 59.上下文窗口与长文本处理
  60. 60.能力边界、成本与适用场景
  61. 61.文本分类实战:从朴素贝叶斯到逻辑回归
  62. 62.命名实体识别实战
  63. 63.文本生成与摘要实战
  64. 64.语义检索与向量库实战
  65. 65.RAG 知识库问答
  66. 66.NLP 评估指标:BLEU / ROUGE / BERTScore 与人工评估
  67. 67.幻觉与事实性问题
  68. 68.文本与知识结合(知识图谱压缩)
  69. 69.跨媒体信息检索与未来展望

LDA 与狄利克雷分布

小象实战讲义 · 自然语言处理

在前面的学习中,我们接触了 PLSA 等概率主题模型,它们为理解文本的潜在结构提供了框架。然而,PLSA 存在过拟合风险,且模型参数随文档数量线性增长,难以处理新文档。本节我们将引入一个更强大的工具——潜在狄利克雷分配(Latent Dirichlet Allocation, LDA)。LDA 通过引入狄利克雷分布(Dirichlet Distribution)作为先验,将 PLSA 扩展为一个完整的层次贝叶斯模型,从而解决了上述问题。理解 LDA 的关键在于掌握狄利克雷分布,这个被称为“分布的分布”的数学对象。本节我们将深入探讨狄利克雷分布的特性,并以此为基础,构建 LDA 的生成模型,理解其如何优雅地描述文档、主题与词之间的关系。

💡 核心导读

  • 狄利克雷分布:一种定义在单纯形(Simplex)上的连续概率分布,其采样结果是一个和为 1 的非负向量,天然适合表示概率分布。
  • 分布的分布:狄利克雷分布本身是一个高维分布,其采样出的每一个点(向量)本身又可以作为一个概率分布,因此得名。
  • 参数 α 的意义:狄利克雷分布的参数向量 α 控制着采样点在单纯形上的集中程度。α 值越大,采样点越集中;α 值相等时,分布对称;α 值小于 1 时,采样点倾向于分布在单纯形的边界。
  • LDA 的生成过程:LDA 是一个三层的层次贝叶斯模型。首先从狄利克雷分布中采样得到文档的主题分布,然后根据该分布采样生成每个词的主题,最后根据主题对应的词分布采样生成具体的词。
  • 模型参数:LDA 主要学习两个核心参数矩阵:文档-主题分布矩阵和主题-词分布矩阵,它们共同构成了文本的潜在语义结构。

从 PLSA 到 LDA:引入先验

在 PLSA 模型中,我们为每个文档 d 引入了一个隐含的主题变量 z,并建模了联合概率 P(w, z|d)。然而,PLSA 将每个文档的主题分布 P(z|d) 视为待估计的固定参数。这意味着:

  1. 参数数量随文档数线性增长,容易过拟合。
  2. 模型缺乏对未知文档的泛化能力。

LDA 的核心改进在于,它不再将文档的主题分布 θ_d(即 P(z|d))视为固定参数,而是将其本身看作一个随机变量。这个随机变量服从一个先验分布——狄利克雷分布。同样地,每个主题 z 对应的词分布 φ_z(即 P(w|z))也被视为服从另一个狄利克雷分布的随机变量。

通过引入狄利克雷先验,LDA 将 PLSA 转变为一个完整的贝叶斯模型。模型参数(θ 和 φ)现在有了先验分布,我们可以通过贝叶斯推断来估计它们的后验分布。这带来了正则化效果,防止过拟合,并且模型可以自然地处理新文档。

理解狄利克雷分布

要理解 LDA,必须先理解其核心数学工具:狄利克雷分布。

什么是分布与采样?

首先回顾一下概率分布的概念。当我们说随机变量 X 服从一个正态分布 N(μ, σ^2),意味着 X 的取值概率由该分布的密度函数决定。我们可以从这个分布中“采样”出具体的数值 x1, x2, x3, ...,这些值出现的频率符合该分布的形态。在高维情况下,例如 X 是一个 n 维向量,它可能服从一个多元高斯分布,其采样结果就是一个向量。

狄利克雷分布的定义

狄利克雷分布是定义在 K 维单纯形上的一个连续概率分布。K 维单纯形是所有 K 维向量 (x_1, x_2, ..., x_K) 的集合,满足:

  • x_i ≥ 0,对于所有 i = 1, ..., K
  • ∑_{i=1}^{K} x_i = 1

显然,这样的一个向量 x 可以完美地表示一个 K 类别的离散概率分布(例如,K 个主题的分布,或 K 个词的分布)。

一个 K 维的狄利克雷分布由 K 个正实数参数 α = (α_1, α_2, ..., α_K) 控制。其概率密度函数为:

Dir(x∣α)=Γ(∑i=1Kαi)∏i=1KΓ(αi)∏i=1Kxiαi−1\text{Dir}(x|\alpha) = \frac{\Gamma(\sum_{i=1}^{K} \alpha_i)}{\prod_{i=1}^{K} \Gamma(\alpha_i)} \prod_{i=1}^{K} x_i^{\alpha_i - 1}

其中,Γ(·) 是伽马函数(Gamma function),它是阶乘函数在实数域上的推广。对于正整数 n,有 Γ(n) = (n-1)!。固定超参数 α 后,伽马因子只是归一化常数;狄利克雷分布之所以是连续型分布,依据是它在单纯形上定义了连续的概率密度,而不是由伽马函数的连续性推出。

伽马函数:连续的阶乘

伽马函数 Γ(z) 是定义在复数域(除 0 和所有负整数外)上的函数,对于实数 x > 0,有 Γ(x) = ∫_0^∞ t^{x-1} e^{-t} dt。它的一个关键性质是:Γ(x+1) = x Γ(x)。当 x 为正整数 n 时,Γ(n+1) = n!。因此,伽马函数可以看作是阶乘的连续化插值。这使得我们可以计算像 Γ(1.5) 这样的“非整数阶乘”,从而定义了连续的狄利克雷分布。

狄利克雷分布的可视化与性质

为了直观理解,我们考虑 K=3 的情况,即三维狄利克雷分布。此时,采样点 x = (x_1, x_2, x_3) 位于一个二维单纯形上——这是一个等边三角形,其三个顶点分别对应 (1,0,0), (0,1,0), (0,0,1)。三角形内任意一点到三条边的垂直距离,需分别除以三角形的高 h 归一化后,才是重心坐标 (x_1, x_2, x_3);原始距离本身并不满足和为 1,归一化后才有 x_1+x_2+x_3=1。

参数 α 控制着概率质量在这个三角形上的分布形态:

  • 当 α = (1, 1, 1):这是均匀先验。在单纯形(三角形)上的采样是均匀分布的。
    import numpy as np
    # 注意:实际采样通常使用 numpy.random.dirichlet,此处为原理说明
    # 参数 alpha 为 (1,1,1) 时,分布是均匀的。
  • 当 α_i 均相等且大于 1:例如 α = (2, 2, 2) 或 (5, 5, 5)。概率质量向三角形的中心集中。α 值越大,分布越尖峰,越集中在中心点 (1/3, 1/3, 1/3) 附近。可以想象成在三角形上扣了一个尖顶的“女巫帽”。
  • 当 α_i 均相等但小于 1:例如 α = (0.8, 0.8, 0.8)。概率质量向三角形的边界和角落集中。中心区域的概率密度反而较低。就像把“女巫帽”翻过来,边缘高,中间凹。
  • 当 α_i 不相等时:分布不再对称。概率质量会偏向 α_i 值较大的那个分量对应的角落。例如 α = (5, 1, 1),采样点会大量集中在第一个分量(即第一个顶点)附近。
三维单纯形(三角形)上的狄利克雷分布示意图:
顶点 A(1,0,0), B(0,1,0), C(0,0,1)

α = (1,1,1): 均匀分布
    /\
   /  \
  /____\

α = (5,5,5): 集中于中心
    /\
   /##\
  /####\

α = (0.8,0.8,0.8): 集中于边界
   #/\
  ##/\
 ###/__\

α = (5,1,1): 集中于顶点A
   A/\
   |\
   | \
   |__\
  B    C

“分布的分布”

狄利克雷分布最精妙的性质在于:从狄利克雷分布 Dir(α) 中采样得到的一个样本 x,本身就是一个合法的概率分布向量(各分量非负且和为1)。因此,我们常说狄利克雷分布是 “分布的分布”(Distribution over Distributions)。

在 LDA 的语境下:

  • 我们从以 α 为参数的狄利克雷分布中,为一篇文档采样出一个主题分布 θ_d。
  • 我们从以 β 为参数的狄利克雷分布中,为一个主题采样出一个词分布 φ_z。 θ_d 和 φ_z 本身都是概率分布,但它们又是从一个更高层的分布中采样产生的随机变量。

LDA 主题模型

理解了狄利克雷分布,我们现在可以完整描述 LDA 的生成过程,这是一个典型的三层层次贝叶斯模型。

生成过程

假设我们有 M 篇文档,一个包含 V 个词的词典,并且我们想要发现 K 个潜在主题。

LDA 为每一篇文档 d 生成词的过程如下:

  1. 生成文档的主题分布 θ_d:
    • 从以超参数 α 为参数的 K 维狄利克雷分布中,采样得到一个 K 维向量 θ_d。
    • θ_d 表示文档 d 中各个主题出现的概率分布,满足 ∑_{k=1}^{K} θ_{d,k} = 1。
  2. 生成文档中每个词的主题 z_{d,n}:
    • 对于文档 d 中的第 n 个词的位置:
      • 从以 θ_d 为参数的多项式分布中,采样一个主题编号 z_{d,n} ∈ {1, 2, …, K}。
      • 这个主题 z_{d,n} 就是产生当前词的“原因”。
  3. 生成具体的观测词 w_{d,n}:
    • 对于上一步得到的主题 z_{d,n}:
      • 该主题对应一个词分布 φ_{z_{d,n}}。φ_k 是一个 V 维向量,表示在主题 k 下各个词出现的概率。
      • φ_k 本身也是从一个以超参数 β 为参数的 V 维狄利克雷分布中采样得到的(在模型开始时采样一次,所有文档共享)。
    • 从以 φ_{z_{d,n}} 为参数的多项式分布中,采样生成具体的词 w_{d,n}。

这个过程可以用下面的概率图模型表示:

        α              β
        |              |
        v              v
       θ_d            φ_k        (θ_d 每篇文档一个;φ_k 每个主题一个,所有文档共享)
        |              |
        v              |
       z_{d,n} --------+--- >  w_{d,n}

其中:
- 方框表示"板块重复",M 篇文档,每篇文档有 N_d 个词。
- θ_d ~ Dir(α)   (每篇文档一个)
- φ_k ~ Dir(β)   (每个主题一个,所有文档共享)
- z_{d,n} ~ Multinomial(θ_d)
- w_{d,n} ~ Multinomial(φ_{z_{d,n}})

这张图里有两处必须看清:θdθ_d 与 φkφ_k 之间没有边——它们分别由 α、β 生成,彼此不互为条件,一篇文档的主题比例不会”决定”某个主题的词分布;w 有两个父节点——它同时依赖被选中的主题 z_{d,n} 和该主题的词分布 φ_{z_{d,n}}。把 θdθ_d 画成 φkφ_k 的父节点,就等于说”文档的主题比例决定主题的词分布”,这与生成过程正好相反,也是 LDA 里最常见的画错(Blei、Ng、Jordan 2003 的图 1 就是这么连的:θ 只通向 z)。

模型参数与推断

LDA 模型包含以下参数:

  • 超参数:α 和 β,通常由我们事先设定。
  • 隐含变量:每篇文档的主题分布 θ_d,每个词的主题指派 z_{d,n}。
  • 隐含参数:每个主题的词分布 φ_k。

给定观测到的文档集合 W,LDA 的推断(学习)任务就是估计这些隐含变量和参数的后验分布:P(θ, z, φ | W, α, β)。这是一个复杂的计算问题,通常采用吉布斯采样(Gibbs Sampling)或变分推断(Variational Inference)等近似方法来解决。

学习完成后,我们得到:

  1. 文档-主题矩阵:每行 θ_d 表示一篇文档在各个主题上的分布。这可以用于文档分类、聚类或摘要。
  2. 主题-词矩阵:每行 φ_k 表示一个主题在各个词上的分布。通过查看每个主题下概率最高的词,我们可以人工解读该主题的语义(例如,{gene, dna, genetic, cell} 可能对应“生物学”主题)。
  3. 词的主题指派:每个词 w_{d,n} 被分配的主题 z_{d,n},可以用于词义消歧或文档的细粒度分析。

LDA 的意义与影响

LDA 论文 Latent Dirichlet Allocation(Blei, Ng, Jordan, 2003,JMLR)是机器学习领域的经典之作,引用率极高。它的重要性在于:

  • 开创性:它清晰地展示了一个优雅、可扩展的层次贝叶斯模型如何应用于复杂的文本数据,开启了概率主题模型研究的新浪潮。
  • 中层特征:LDA 在原始的“词”和整体的“文档”之间,发现了一个“主题”层。这可以看作是一种中层语义特征,任何文档都可以表示为少数几个主题的混合,就像用基向量的线性组合来表示一个向量。
  • 灵活性:LDA 的框架不限于文本,已被成功应用于图像、音乐、生物信息学等多个领域,只要数据可以表示为“包”的形式(如 Bag-of-Words, Bag-of-Visual-Words)。

中文与 LDA:基于字还是基于词?

将 LDA 应用于中文时,面临一个基础问题:基本的语义单元是什么?是词还是字?

英文天然以空格分隔单词,因此通常以“词”作为基本单元。但中文是连续书写的,需要先进行分词。然而,中文的“字”本身携带很强的语义信息。

  • 中文的构词法特点:许多中文词由具有独立含义的字复合而成。例如,“病人”由“病”和“人”组成,“计算机”由“计算”和“机”组成。即使不认识“锦标赛”,通过“赛”字也能猜到它与“比赛”相关。
  • 英文的对比:英文单词 “patient” 与 “illness”、”person” 在词形上毫无关联。不认识 “patient” 就很难从其拼写猜出含义。

这种差异源于形态学(Morphology)的不同。有语言学家认为,中文最小的语义单元是“字”而非“词”。这启发我们思考:对于中文 LDA,是否可以将“字”作为基本单元,构建 Character-Based LDA?

基于字的 LDA 的优势:

  • 避免分词错误对模型造成的传播影响。
  • 可能捕捉到字级别的语义组合规律(如“机”在“计算机”、“飞机”、“手机”中的共性)。
  • 词汇表大小稳定(约几千个常用字),不会因新词而爆炸。

基于词的 LDA 的优势:

  • 更直接地对应语义概念。
  • 与主流 NLP 工具链兼容性好。

在实践中,两种方法都有应用。基于词的方法更常见,但基于字的方法在某些任务(如处理古汉语、社交媒体文本)上可能表现出独特优势。一个更先进的思路是结合两者,或使用 BPE(Byte Pair Encoding)等子词单元,这在现代预训练模型中已成为标准。

📝 动手练一练

  1. 概念辨析:狄利克雷分布为什么被称为“分布的分布”?请用 LDA 模型中的具体例子说明。

    👉 点击查看参考答案

    狄利克雷分布被称为“分布的分布”,是因为它本身是一个定义在单纯形上的高维概率分布,而从这个分布中采样得到的任何一个样本点,都是一个各分量非负且和为1的向量,这个向量天然地可以解释为一个离散概率分布。

    在 LDA 模型中:

    • 文档的主题分布 θ_d 是从 Dir(α) 中采样得到的。θ_d 是一个 K 维向量,表示该文档属于 K 个主题的概率。因此,Dir(α) 是“主题分布”的分布。
    • 主题的词分布 φ_k 是从 Dir(β) 中采样得到的。φ_k 是一个 V 维向量,表示在主题 k 下词典中 V 个词出现的概率。因此,Dir(β) 是“词分布”的分布。 所以,狄利克雷分布在 LDA 中作为先验,生成了作为概率分布的参数(θ_d 和 φ_k),完美诠释了“分布的分布”这一概念。
  2. 参数影响分析:假设我们有一个三维狄利克雷分布 Dir(α1, α2, α3)。请定性地描述当: a) α1 = α2 = α3 = 0.5 b) α1 = α2 = α3 = 5 c) α1 = 10, α2 = 1, α3 = 1 这三种情况下,采样点 (x1, x2, x3) 在三维单纯形(三角形)上最可能出现的区域。

    👉 点击查看参考答案

    在三维单纯形(一个等边三角形,顶点为(1,0,0), (0,1,0), (0,0,1))上: a) α = (0.5, 0.5, 0.5):所有参数小于1。此时概率密度在三角形的三个顶点和三条边附近最高,而在中心区域最低。采样点倾向于落在靠近角落或边界的地方,意味着分布更“稀疏”或“尖锐”,某个分量接近1而其他接近0的概率较大。 b) α = (5, 5, 5):所有参数相等且远大于1。此时概率密度在三角形的中心区域(靠近点(1/3, 1/3, 1/3))最高。采样点高度集中在中心,意味着分布更“均匀”于各分量之间,采出的向量三个分量值相近的概率很大。 c) α = (10, 1, 1):参数不相等,且 α1 远大于其他。此时概率密度在第一个顶点(1,0,0)附近最高。采样点强烈倾向于第一个分量 x1 很大,而 x2 和 x3 很小的区域。这意味着分布是高度不对称的,偏向于第一个类别。

本章小结

本节我们深入探讨了自然语言处理中一个里程碑式的模型——潜在狄利克雷分配(LDA)。我们从 PLSA 的局限性出发,引入了狄利克雷分布作为先验,从而构建了更健壮的层次贝叶斯模型。

  • 狄利克雷分布 是关键数学基础,它定义在单纯形上,其采样结果天然是概率分布,因此被誉为“分布的分布”。参数 α 控制着分布的集中性、对称性。
  • LDA 生成过程 清晰地描述了三层结构:先由狄利克雷分布生成文档的主题分布和主题的词分布,再通过多项式分布依次生成每个词的主题和具体的词。
  • 模型意义:LDA 自动从文本语料中发掘出潜在的“主题”结构,得到文档-主题和主题-词两个分布矩阵,为文档分类、聚类、摘要和语义理解提供了强大的工具。
  • 中文应用思考:针对中文特点,讨论了基于字和基于词两种构建 LDA 基本单元的思路,指出了各自的优缺点,并联系到现代子词方法。

LDA 不仅是一个实用的主题挖掘工具,其蕴含的“层次贝叶斯”和“潜在变量”思想,对理解更复杂的生成模型(包括某些深度生成模型)有深远影响。

📋 行动清单

  • 理解狄利克雷分布的概率密度函数形式及其参数 α 的直观意义。
  • 能在纸上画出 LDA 的概率图模型,并口头复述其生成过程。
  • 思考:如果给你一篇新闻稿,LDA 模型推断出的“主题”可能是什么?这些“主题”在现实世界中一定对应有明确标签的类别吗?(提示:主题是词的分布,其语义需要人工解读。)

—— 小象教研组