N-gram 语言模型与平滑技术

分类: 概率模型 · 难度: 中级 · 关联讲座: L01

N-gram 语言模型是最早的实用语言模型之一,通过统计词序列的共现频率来估计自然语言的概率分布。尽管其假设简单(仅依赖前 n1n-1 个词),但配合精心设计的平滑技术(特别是 Kneser-Ney 平滑),N-gram 模型在统计 NLP 时代长期作为语言建模的标准方法,其核心思想——用局部上下文预测下一个词——至今仍是现代语言模型的基础范式。

📐 N-gram 语言模型与平滑技术

MLE 估计(最大似然): PMLE(wtwtn+1,,wt1)=C(wtn+1,,wt)C(wtn+1,,wt1)P_\text{MLE}(w_t | w_{t-n+1}, \ldots, w_{t-1}) = \frac{C(w_{t-n+1}, \ldots, w_t)}{C(w_{t-n+1}, \ldots, w_{t-1})}

零概率问题:语料中未见过的 n-gram 组合,MLE 给出概率 0——这意味着任何含未见 n-gram 的句子概率为 0。

Add-kk 平滑(Laplace 平滑的推广): Padd-k(wh)=C(h,w)+kC(h)+kVP_{\text{add-}k}(w | h) = \frac{C(h, w) + k}{C(h) + k|V|}

  • k=1k=1:Laplace 平滑(过度平滑,性能差)
  • k<1k<1:Lidstone 平滑(如 k=0.01k=0.01

Kneser-Ney 平滑(实践中最优): PKN(wwi1)=max(C(wi1,w)d,0)C(wi1)+λ(wi1)Pcontinuation(w)P_\text{KN}(w | w_{i-1}) = \frac{\max(C(w_{i-1}, w) - d, 0)}{C(w_{i-1})} + \lambda(w_{i-1}) \cdot P_\text{continuation}(w)

  • d0.75d \approx 0.75:折扣参数(从高频 n-gram 借概率给低频)
  • Pcontinuation(w)={v:C(v,w)>0}{(v,w):C(v,w)>0}P_\text{continuation}(w) = \frac{|\{v : C(v, w) > 0\}|}{|\{(v', w') : C(v', w') > 0\}|}

直觉:Kneser-Ney 的关键洞察是,一个词的”平滑概率”不应该只看它出现多少次,而是看它在多少种不同上下文中出现过。“Francisco” 出现频率高,但几乎只跟在 “San” 后面——作为新上下文的续词,它不应获得高概率。

🔢 数值/具体示例

TF-IDF 用于信息检索的词重要性打分:

TF-IDF(t,d,D)=ft,dtft,d词频 TF×logD{dD:td}逆文档频率 IDF\text{TF-IDF}(t, d, D) = \underbrace{\frac{f_{t,d}}{\sum_{t'} f_{t',d}}}_{\text{词频 TF}} \times \underbrace{\log\frac{|D|}{|\{d \in D : t \in d\}|}}_{\text{逆文档频率 IDF}}

例:文档集 D=1000|D|=1000,词”the”出现在 999 篇文档中,IDF≈0(无区分力);词”transformer”出现在 10 篇中,IDF≈4.6(高区分力)。

N-gram 平滑效果对比(Penn Treebank,trigram,perplexity↓更好):

方法Perplexity
无平滑 MLE∞(遇到未见 trigram 直接崩溃)
Add-1 (Laplace)~1800(过度平滑)
Add-0.01~350
Kneser-Ney~130(实践标准)

⚠️ 常见误区

误区:N-gram 模型只要语料够大就不需要平滑 → 正确:Zipf 定律保证永远有未见过的 n-gram——即使用整个互联网的文本训练 5-gram,仍有大量合理组合从未出现。平滑不是权宜之计,而是数学必需品

🔗 知识关联

  • N-gram → Transformer 语言模型(L04 RNN/L05 Transformer):N-gram 的上下文窗口固定为 n1n-1 个词;RNN 理论上无限但实际受梯度消失限制;Transformer 通过注意力机制实现真正的全局上下文。