语言模型的概率基础
分类: 神经网络基础 · 难度: 中级 · 关联讲座: L04
语言模型的概率基础
本文整理语言模型从概率论基础到实际训练目标的完整推导链。内容覆盖联合概率的链式分解、N-gram 的马尔可夫假设与平滑技术、困惑度的定义与计算,以及条件语言模型(Seq2Seq)的训练目标。
1. 语言模型概率的链式分解
📐 语言模型概率的链式分解
联合概率 → 条件概率的乘积(链式法则 Chain Rule of Probability):
P(x(1),x(2),…,x(T))=P(x(1))⋅P(x(2)∣x(1))⋅P(x(3)∣x(1),x(2))⋯
推导:
P(A,B,C)=P(A)⋅P(B∣A)⋅P(C∣A,B)
这是概率论的基本恒等式(条件概率定义:P(B∣A)=P(A,B)/P(A)),无任何假设。
扩展到序列:
P(x(1),…,x(T))=∏t=1TP(x(t)∣x(t−1),…,x(1))
语言模型的任务:对每个 t,学习 P(x(t)∣x(t−1),…,x(1)),即给定历史预测下一个词。
困惑度(Perplexity):测量语言模型”有多惊讶”于给定文本:
PPL=exp(−T1∑t=1TlogP(x(t+1)∣x(≤t)))=exp(J)
PPL=k 意味着模型在每个位置的平均不确定性相当于在 k 个词中均匀随机猜测。PPL 越低,模型越好。
🔢 困惑度计算示例
设定:测试文本 “the cat sat”(3 个词,加上结束符共 3 步预测),模型给出的条件概率:
| 时间步 | 预测目标 | 条件概率 P(x(t+1)∣x(≤t)) |
|---|
| t=0 | “the” | 0.10(高频词) |
| t=1 | “cat” | 0.05 |
| t=2 | ”sat” | 0.20 |
计算:
- 平均对数概率 = 31[log(0.10)+log(0.05)+log(0.20)]
- =31[−2.303−2.996−1.609]=3−6.908=−2.303
- PPL=exp(2.303)≈10.0
解读:平均每步相当于在 10 个词里猜一个。
对比:随机猜测(词汇表 50,000 词)的 PPL = 50,000;GPT-4 在 PTB 数据集 PPL ≈ 2050;人类理解文本约 2040。
⚠️ 常见误区
- 误区:语言模型 = 生成式模型 → 正确:语言模型也可以是判别模型(如 masked LM,BERT)。经典语言模型是自回归的(给定前文预测下一词),但并非唯一形式。
- 误区:PPL 越低一定越好 → 正确:PPL 依赖测试集。在训练集上极低 PPL = 过拟合。此外,PPL 低不代表生成文本的质量好(可能重复、语义空洞)。
2. N-gram 概率估计与平滑
📐 N-gram 概率估计与平滑
马尔可夫假设(N-gram 的核心):
P(x(t+1)∣x(t),…,x(1))≈P(x(t+1)∣x(t),…,x(t−n+2))
只保留最近 n−1 个词的历史,使得条件历史有限,可以通过计数估计。
最大似然估计(MLE):
P(w∣wt−n+2,…,wt)≈C(wt−n+2,…,wt)C(wt−n+2,…,wt,w)
其中 C(⋅) 是语料库中的计数。
稀疏性问题:如果分子为 0(n-gram 从未出现),概率为 0,且导致任何包含此 n-gram 的句子概率为 0。
解决方法 1 — Laplace 平滑(加一平滑):
Psmooth(w∣h)=∑w′[C(h,w′)+δ]C(h,w)+δ=C(h)+δ∣V∣C(h,w)+δ
通过给每个词加小量 δ=1,保证所有概率 > 0。
解决方法 2 — Kneser-Ney 回退(Backoff):
当 n-gram 未出现时,回退到 (n−1)-gram(递归直到 unigram):
PKN(w∣h)={max(C(h,w)−d,0)/C(h)+λ(h)⋅PKN(w∣h−1)PKN(w∣h−1)if C(h,w)>0otherwise
🔢 Bigram 概率计算示例
语料(玩具语料):
- “I like cats” (1 次)
- “I like dogs” (2 次)
- “cats like fish” (1 次)
Bigram 计数:(I, like)=3, (like, cats)=1, (like, dogs)=2, (cats, like)=1
计算 P(dogs∣like):
P(dogs∣like)=C(like)C(like, dogs)=32≈0.67
计算 P(fish∣like):
P(fish∣like)=C(like)C(like, fish)=30=0
加 Laplace 平滑(词汇表 ∣V∣=5,δ=1):
Psmooth(fish∣like)=3+50+1=81=0.125
⚠️ 常见误区
- 误区:n 越大越好 → 正确:n 越大,数据稀疏性越严重(多数 5-gram 从未在语料中出现)。实践中 n=5 已经是上限,且需要大量平滑。
- 误区:N-gram 已经过时 → 正确:N-gram 在工业界的特定场景(输入法、拼写检查)中依然使用,因为极其高效且可解释。理解 N-gram 有助于理解神经语言模型为什么更好。
3. 条件语言模型的训练目标
📐 条件语言模型的训练目标
目标:最大化给定源句 x 时,目标句 y 的对数似然:
L=∑(x,y)∈datalogP(y∣x;θ)=∑(x,y)∑t=1∣y∣logP(yt∣y<t,x;θ)
Encoder-Decoder 分解:
- Encoder:henc=RNN(x1,…,xm),最终状态 henc(m) 作为初始 decoder 状态
- Decoder:hdec(t)=RNN(yt−1,hdec(t−1)),P(yt∣…)=softmax(Whdec(t))
瓶颈问题的数学表现:
- 整个源句 x1,…,xm 被压缩为一个向量 henc(m)∈Rn(固定维度)
- 无论源句多长(m=5 还是 m=100),都要压缩到同样大小的向量
- 信息论:固定容量的”瓶颈”对长句信息损失严重
解决方案(引出注意力):让 decoder 在每一步直接访问所有 encoder 隐状态 {henc(1),…,henc(m)},而非只用最后一个状态。
🔗 知识关联
- → L05 注意力机制:本节的瓶颈问题直接引发了注意力机制的发明(Bahdanau et al., 2015)
- → L05 Transformer:完全放弃 RNN,改用自注意力解决长距离依赖问题
- ← L03 反向传播:BPTT 是 L03 中讲的计算图反向传播在序列上的应用
- ← L02 Word2Vec:RNN-LM 的输入是词嵌入,与 L02 中的词向量直接对接
- ↔ 概率模型/N-gram 与平滑技术:N-gram 的完整平滑方法(Good-Turing、Kneser-Ney)在概率模型知识库中有更详细的讨论