语言模型的概率基础

分类: 神经网络基础 · 难度: 中级 · 关联讲座: 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(x^{(1)}, x^{(2)}, \ldots, x^{(T)}) = P(x^{(1)}) \cdot P(x^{(2)} | x^{(1)}) \cdot P(x^{(3)} | x^{(1)}, x^{(2)}) \cdots

推导P(A,B,C)=P(A)P(BA)P(CA,B)P(A, B, C) = P(A) \cdot P(B|A) \cdot P(C|A,B)

这是概率论的基本恒等式(条件概率定义:P(BA)=P(A,B)/P(A)P(B|A) = P(A,B)/P(A)),无任何假设。

扩展到序列: P(x(1),,x(T))=t=1TP(x(t)x(t1),,x(1))P(x^{(1)}, \ldots, x^{(T)}) = \prod_{t=1}^{T} P(x^{(t)} | x^{(t-1)}, \ldots, x^{(1)})

语言模型的任务:对每个 tt,学习 P(x(t)x(t1),,x(1))P(x^{(t)} | x^{(t-1)}, \ldots, x^{(1)}),即给定历史预测下一个词。

困惑度(Perplexity):测量语言模型”有多惊讶”于给定文本: PPL=exp(1Tt=1TlogP(x(t+1)x(t)))=exp(J)\text{PPL} = \exp\left(-\frac{1}{T}\sum_{t=1}^T \log P(x^{(t+1)} | x^{(\le t)})\right) = \exp(J)

PPL=k\text{PPL} = k 意味着模型在每个位置的平均不确定性相当于在 kk 个词中均匀随机猜测。PPL 越低,模型越好。

🔢 困惑度计算示例

设定:测试文本 “the cat sat”(3 个词,加上结束符共 3 步预测),模型给出的条件概率:

时间步预测目标条件概率 P(x(t+1)x(t))P(x^{(t+1)} \mid x^{(\le t)})
t=0t=0“the”0.10(高频词)
t=1t=1“cat”0.05
t=2t=2”sat”0.20

计算:

  1. 平均对数概率 = 13[log(0.10)+log(0.05)+log(0.20)]\frac{1}{3}[\log(0.10) + \log(0.05) + \log(0.20)]
  2. =13[2.3032.9961.609]=6.9083=2.303= \frac{1}{3}[-2.303 - 2.996 - 1.609] = \frac{-6.908}{3} = -2.303
  3. PPL=exp(2.303)10.0\text{PPL} = \exp(2.303) \approx \mathbf{10.0}

解读:平均每步相当于在 10 个词里猜一个。

对比:随机猜测(词汇表 50,000 词)的 PPL = 50,000;GPT-4 在 PTB 数据集 PPL ≈ 2050;人类理解文本约 2040。

⚠️ 常见误区

  1. 误区:语言模型 = 生成式模型 → 正确:语言模型也可以是判别模型(如 masked LM,BERT)。经典语言模型是自回归的(给定前文预测下一词),但并非唯一形式。
  2. 误区: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(tn+2))P(x^{(t+1)} | x^{(t)}, \ldots, x^{(1)}) \approx P(x^{(t+1)} | x^{(t)}, \ldots, x^{(t-n+2)})

只保留最近 n1n-1 个词的历史,使得条件历史有限,可以通过计数估计。

最大似然估计(MLE): P(wwtn+2,,wt)C(wtn+2,,wt,w)C(wtn+2,,wt)P(w | w_{t-n+2}, \ldots, w_t) \approx \frac{C(w_{t-n+2}, \ldots, w_t, w)}{C(w_{t-n+2}, \ldots, w_t)}

其中 C()C(\cdot) 是语料库中的计数。

稀疏性问题:如果分子为 0(nn-gram 从未出现),概率为 0,且导致任何包含此 nn-gram 的句子概率为 0。

解决方法 1 — Laplace 平滑(加一平滑)Psmooth(wh)=C(h,w)+δw[C(h,w)+δ]=C(h,w)+δC(h)+δVP_{smooth}(w | h) = \frac{C(h, w) + \delta}{\sum_{w'} [C(h, w') + \delta]} = \frac{C(h, w) + \delta}{C(h) + \delta |V|}

通过给每个词加小量 δ=1\delta = 1,保证所有概率 > 0。

解决方法 2 — Kneser-Ney 回退(Backoff): 当 nn-gram 未出现时,回退到 (n1)(n-1)-gram(递归直到 unigram): PKN(wh)={max(C(h,w)d,0)/C(h)+λ(h)PKN(wh1)if C(h,w)>0PKN(wh1)otherwiseP_{KN}(w | h) = \begin{cases} \max(C(h,w) - d, 0) / C(h) + \lambda(h) \cdot P_{KN}(w | h_{-1}) & \text{if } C(h,w) > 0 \\ P_{KN}(w | h_{-1}) & \text{otherwise} \end{cases}

🔢 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(dogslike)P(\text{dogs} | \text{like})P(dogslike)=C(like, dogs)C(like)=230.67P(\text{dogs} | \text{like}) = \frac{C(\text{like, dogs})}{C(\text{like})} = \frac{2}{3} \approx 0.67

计算 P(fishlike)P(\text{fish} | \text{like})P(fishlike)=C(like, fish)C(like)=03=0P(\text{fish} | \text{like}) = \frac{C(\text{like, fish})}{C(\text{like})} = \frac{0}{3} = 0

加 Laplace 平滑(词汇表 V=5|V|=5δ=1\delta=1): Psmooth(fishlike)=0+13+5=18=0.125P_{smooth}(\text{fish} | \text{like}) = \frac{0 + 1}{3 + 5} = \frac{1}{8} = 0.125

⚠️ 常见误区

  1. 误区nn 越大越好 → 正确nn 越大,数据稀疏性越严重(多数 5-gram 从未在语料中出现)。实践中 n=5n=5 已经是上限,且需要大量平滑。
  2. 误区:N-gram 已经过时 → 正确:N-gram 在工业界的特定场景(输入法、拼写检查)中依然使用,因为极其高效且可解释。理解 N-gram 有助于理解神经语言模型为什么更好。

3. 条件语言模型的训练目标

📐 条件语言模型的训练目标

目标:最大化给定源句 xx 时,目标句 yy 的对数似然: L=(x,y)datalogP(yx;θ)=(x,y)t=1ylogP(yty<t,x;θ)\mathcal{L} = \sum_{(x,y) \in \text{data}} \log P(y|x; \theta) = \sum_{(x,y)} \sum_{t=1}^{|y|} \log P(y_t | y_{<t}, x; \theta)

Encoder-Decoder 分解

  • Encoderhenc=RNN(x1,,xm)h_{\text{enc}} = \text{RNN}(x_1, \ldots, x_m),最终状态 henc(m)h_{\text{enc}}^{(m)} 作为初始 decoder 状态
  • Decoderhdec(t)=RNN(yt1,hdec(t1))h_{\text{dec}}^{(t)} = \text{RNN}(y_{t-1}, h_{\text{dec}}^{(t-1)})P(yt)=softmax(Whdec(t))P(y_t | \ldots) = \text{softmax}(W h_{\text{dec}}^{(t)})

瓶颈问题的数学表现

  • 整个源句 x1,,xmx_1, \ldots, x_m 被压缩为一个向量 henc(m)Rnh_{\text{enc}}^{(m)} \in \mathbb{R}^n(固定维度)
  • 无论源句多长(m=5m = 5 还是 m=100m = 100),都要压缩到同样大小的向量
  • 信息论:固定容量的”瓶颈”对长句信息损失严重

解决方案(引出注意力):让 decoder 在每一步直接访问所有 encoder 隐状态 {henc(1),,henc(m)}\{h_{\text{enc}}^{(1)}, \ldots, h_{\text{enc}}^{(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)在概率模型知识库中有更详细的讨论