查看全课大纲(第 32 / 69 节)
- 1.NLP 的研究领域、应用与学习路径
- 2.自然语言的基本术语
- 3.信息论基础:信息熵与交叉熵
- 4.语言的进化与语义变迁
- 5.主观概率、客观概率与条件概率
- 6.贝叶斯原理与推理
- 7.随机变量:二项式、期望方差与联合概率
- 8.常见概率分布
- 9.辛普森悖论与贝叶斯解题实例
- 10.语言模型:语言概率与词袋模型
- 11.n-gram 语言模型(二元 / 三元 / N-Gram)
- 12.语言模型评价:交叉熵、困惑度与插值
- 13.朴素贝叶斯文本分类:垃圾邮件
- 14.拼写检查
- 15.中文分词:构词法、最大匹配、最优路径与 Jieba
- 16.词表示问题与语义相似度
- 17.TF-IDF 权重处理
- 18.One-Hot 表达与词表示的局限
- 19.Word2Vec 核心思想
- 20.Word2Vec 训练过程
- 21.Skip-gram 模型详解
- 22.词性标注任务与标注方法(规则 + N-Gram)
- 23.EM 算法与混合模型
- 24.高斯混合模型 GMM
- 25.从混合模型到隐马尔可夫模型
- 26.隐马尔可夫模型(HMM)推导与维特比解码
- 27.线性链条件随机场 CRF
- 28.贝叶斯网络与图模型
- 29.隐马尔可夫链与 HMM 推导
- 30.PLSA 主题模型
- 31.LSI 与 SVD 向量表达
- 32.LDA 与狄利克雷分布
- 33.主题模型实验复现(困惑度 / 分类 / 相似度 / 延展)
- 34.上下文无关文法(CFG)与句法分析
- 35.概率上下文无关文法 PCFG
- 36.统计机器翻译:词对齐与翻译模型
- 37.统计机器翻译中的对齐模型与参数估计
- 38.从统计机器翻译到神经机器翻译
- 39.神经元与反向传播速览(指向深度学习课)
- 40.CNN 原理及其在 NLP 中的应用
- 41.循环神经网络的基本原理与 Elman / Jordan 网络
- 42.LSTM:长短期记忆网络的核心思想与分步实现
- 43.Encoder-Decoder 框架
- 44.Seq2Seq 与早期注意力机制
- 45.注意力机制的背景与动机
- 46.注意力模型实现原理与匹配函数
- 47.记忆网络:组成与计算
- 48.注意力机制的应用与历史延展
- 49.Transformer 结构:Encoder-Decoder 栈与 Self-Attention
- 50.Multi-Head Attention、FFNN 与位置编码
- 51.层归一化、损失函数与 Universal Transformer 延展
- 52.预训练范式:从 ELMo 到 BERT
- 53.BERT 与掩码语言模型
- 54.BERT 下游任务微调与 GLUE 口径
- 55.GPT 与自回归语言建模
- 56.GPT-1 到 GPT-4 的演进
- 57.指令微调与 RLHF
- 58.分词器:BPE、WordPiece 与中文词表
- 59.上下文窗口与长文本处理
- 60.能力边界、成本与适用场景
- 61.文本分类实战:从朴素贝叶斯到逻辑回归
- 62.命名实体识别实战
- 63.文本生成与摘要实战
- 64.语义检索与向量库实战
- 65.RAG 知识库问答
- 66.NLP 评估指标:BLEU / ROUGE / BERTScore 与人工评估
- 67.幻觉与事实性问题
- 68.文本与知识结合(知识图谱压缩)
- 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) 视为待估计的固定参数。这意味着:
- 参数数量随文档数线性增长,容易过拟合。
- 模型缺乏对未知文档的泛化能力。
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) 控制。其概率密度函数为:
其中,Γ(·) 是伽马函数(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 生成词的过程如下:
- 生成文档的主题分布
θ_d:- 从以超参数
α为参数的K维狄利克雷分布中,采样得到一个K维向量θ_d。 θ_d表示文档d中各个主题出现的概率分布,满足∑_{k=1}^{K} θ_{d,k} = 1。
- 从以超参数
- 生成文档中每个词的主题
z_{d,n}:- 对于文档
d中的第n个词的位置:- 从以
θ_d为参数的多项式分布中,采样一个主题编号z_{d,n}∈ {1, 2, …, K}。 - 这个主题
z_{d,n}就是产生当前词的“原因”。
- 从以
- 对于文档
- 生成具体的观测词
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}})这张图里有两处必须看清: 与 之间没有边——它们分别由 α、β 生成,彼此不互为条件,一篇文档的主题比例不会”决定”某个主题的词分布;w 有两个父节点——它同时依赖被选中的主题 z_{d,n} 和该主题的词分布 φ_{z_{d,n}}。把 画成 的父节点,就等于说”文档的主题比例决定主题的词分布”,这与生成过程正好相反,也是 LDA 里最常见的画错(Blei、Ng、Jordan 2003 的图 1 就是这么连的:θ 只通向 z)。
模型参数与推断
LDA 模型包含以下参数:
- 超参数:
α和β,通常由我们事先设定。 - 隐含变量:每篇文档的主题分布
θ_d,每个词的主题指派z_{d,n}。 - 隐含参数:每个主题的词分布
φ_k。
给定观测到的文档集合 W,LDA 的推断(学习)任务就是估计这些隐含变量和参数的后验分布:P(θ, z, φ | W, α, β)。这是一个复杂的计算问题,通常采用吉布斯采样(Gibbs Sampling)或变分推断(Variational Inference)等近似方法来解决。
学习完成后,我们得到:
- 文档-主题矩阵:每行
θ_d表示一篇文档在各个主题上的分布。这可以用于文档分类、聚类或摘要。 - 主题-词矩阵:每行
φ_k表示一个主题在各个词上的分布。通过查看每个主题下概率最高的词,我们可以人工解读该主题的语义(例如,{gene, dna, genetic, cell}可能对应“生物学”主题)。 - 词的主题指派:每个词
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)等子词单元,这在现代预训练模型中已成为标准。
📝 动手练一练
概念辨析:狄利克雷分布为什么被称为“分布的分布”?请用 LDA 模型中的具体例子说明。
👉 点击查看参考答案
狄利克雷分布被称为“分布的分布”,是因为它本身是一个定义在单纯形上的高维概率分布,而从这个分布中采样得到的任何一个样本点,都是一个各分量非负且和为1的向量,这个向量天然地可以解释为一个离散概率分布。
在 LDA 模型中:
- 文档的主题分布
θ_d是从Dir(α)中采样得到的。θ_d是一个K维向量,表示该文档属于K个主题的概率。因此,Dir(α)是“主题分布”的分布。 - 主题的词分布
φ_k是从Dir(β)中采样得到的。φ_k是一个V维向量,表示在主题k下词典中V个词出现的概率。因此,Dir(β)是“词分布”的分布。 所以,狄利克雷分布在 LDA 中作为先验,生成了作为概率分布的参数(θ_d和φ_k),完美诠释了“分布的分布”这一概念。
- 文档的主题分布
参数影响分析:假设我们有一个三维狄利克雷分布
Dir(α1, α2, α3)。请定性地描述当: a)α1 = α2 = α3 = 0.5b)α1 = α2 = α3 = 5c)α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 模型推断出的“主题”可能是什么?这些“主题”在现实世界中一定对应有明确标签的类别吗?(提示:主题是词的分布,其语义需要人工解读。)
—— 小象教研组