NLP 语言模型入门:定义、N-Gram 与技术迭代全解析

25 阅读4分钟

=# NLP 语言模型入门:定义、N-Gram 与技术迭代全解析

📖 一句话说清全文:语言模型就是判断一句话「像不像人话」的数学模型。从 N-Gram 统计到 BERT 预训练再到 GPT 大模型,核心逻辑没变——只是算力翻了十万倍。


📋 本文目录

#章节难度预计阅读
语言模型基础定义🟢3 min
N-Gram 统计语言模型🟡8 min
马尔可夫假设🟡5 min
语言模型四代技术迭代🟢4 min
工业落地应用场景🟢3 min
📖 关键概念速查表公式 & 术语合集
🧠 全文思维导图知识框架总览

⏱ 全文约 23 分钟,面试重点在二、三章


一、语言模型基础定义 🟢

🎯 面试官会问:用一句话解释什么是语言模型?

语言模型在干什么?

给你一句话,语言模型判断它像不像人话

"我今天吃了苹果"    → 高概率
❌ "苹果我今天吃了"    → 低概率(语序不对)
❌ "吃今了我苹果天"    → 极低概率(纯乱码)

数学本质:求解字词按固定顺序组合出现的联合概率。

P(w_1, w_2, \ldots, w_n) \tag{1}

展开就是一连串条件概率的乘积(这个展开后面会讲)。

💡 直觉:通顺语句概率高,乱码组合概率低——机器靠概率大小判断「人话」与否。

核心价值

语言模型能自动挖掘自然语言的组合规律,它是所有 NLP 任务的底层底座

文本生成     ← 靠语言模型选最可能的词
语音识别     ← 靠语言模型纠正同音字
机器翻译     ← 靠语言模型输出通顺译句
智能输入法   ← 靠语言模型猜你想打什么

没有语言模型,NLP 就像没有地基的房子。


二、N-Gram 统计语言模型 🟡 ⏱ 8 min

🎯 面试官会问:N-Gram 的概率怎么算?2-Gram 和 3-Gram 哪个效果更好?为什么概率会为 0?

2.1 核心思想

N-Gram 把整句概率拆成多个连续条件概率相乘——就像搭积木,一块一块拼起来。

N-Gram 通用公式

P(w_1, w_2, \ldots, w_n) = \prod_{i=1}^{n} P(w_i \mid w_{i-N+1}, \ldots, w_{i-1}) \tag{2}

以 2-Gram(二元模型)为例,公式 (2) 退化为:

P(w_1, w_2, \ldots, w_n) = \prod_{i=1}^{n} P(w_i \mid w_{i-1}) \tag{3}

展开成具体句子就是:

P(我今天吃了苹果)=P()×P(今天)×P(吃了今天)×P(苹果吃了)P(\text{我今天吃了苹果}) = P(\text{我}) \times P(\text{今天}|\text{我}) \times P(\text{吃了}|\text{今天}) \times P(\text{苹果}|\text{吃了})

各阶 N-Gram 对比

阶数名称依赖前文例子
1-GramUni-Gram0 个词(只看自己)P(苹果)
2-GramBi-Gram1 个词P(苹果|吃了)
3-GramTri-Gram2 个词P(苹果|今天,吃了)

2.2 概率怎么算?(最大似然估计 MLE)

条件概率计算公式

P(w_i \mid w_{i-1}) = \frac{\text{count}(w_{i-1}, w_i)}{\text{count}(w_{i-1})} \tag{4}

手算一笔账 📊

语料:「我吃了苹果」「我吃了香蕉」「他吃了苹果」「我吃了饭」

P(苹果 | 吃了) = count("吃了苹果") / count("吃了") = 2 / 4 = 0.5P(香蕉 | 吃了) = count("吃了香蕉") / count("吃了") = 1 / 4 = 0.25P(飞机 | 吃了) = count("吃了飞机") / count("吃了") = 0 / 4 = 0.0   🚫

🕳 踩坑实录:概率为 0 是 N-Gram 最大痛点。某输入法语料里没「火锅」,用户打「吃了火锅」不出候选——用户以为输入法坏了,实际上是 N-Gram 判了「火锅」死刑。

2.3 N-Gram 的致命短板

问题说明
📈 组合爆炸N 每 +1,组合数乘以词表大小 ×V\times V
🕳 数据稀疏绝大多数组合在语料中出现次数为 0
💾 存储爆炸3-Gram 组合数千万级,4-Gram 直接亿级
🔒 上下文有限窗口固定,长距离依赖抓不住

组合爆炸有多夸张

词表 V = 10 万
1-Gram:  10¹ 种       ✅ 小意思
2-Gram:  10¹⁰ 种      ⚠️ 百亿级
3-Gram:  10¹⁵ 种      ❌ 存不下

这就是为什么工程中没法直接用高阶 N-Gram——N 每大一级,存储量乘以 10 万 🚀


三、马尔可夫假设 🟡 ⏱ 5 min

🎯 面试官会问:马尔可夫假设和 N-Gram 是什么关系?一阶和二阶谁更准?

3.1 核心定义

马尔可夫假设:当前词只和前面有限少量的词相关,更远的词直接忽略。

数学表达

P(w_n \mid w_1, w_2, \ldots, w_{n-1}) \approx P(w_n \mid w_{n-k}, \ldots, w_{n-1}) \tag{5}

其中 kk马尔可夫阶数

直观理解

三阶(k=2)假设下预测「苹果」:
  完整上文:我今天吃了___     → 只看「吃了」
  丢掉「我今天」              → 信息有损,但计算量从指数降到常数

3.2 马尔可夫假设 vs N-Gram

一句话说清关系

N-Gram 就是马尔可夫假设的具体实现。N-Gram 的 NN = 马尔可夫阶数 k+1k + 1

概念角色等价关系
马尔可夫假设理论框架(为什么要简化)只看前 kk 个词
N-Gram具体算法(怎么简化)只看前 N1N-1 个词
2-Gram= 一阶马尔可夫只看前 1 个词
3-Gram= 二阶马尔可夫只看前 2 个词

3.3 平滑技术(解决「概率为零」)

公式 (4) 的最大问题:语料里没出现过的组合直接概率为 0。

拉普拉斯平滑(Add-1 Smoothing)

P(w_i \mid w_{i-1}) = \frac{\text{count}(w_{i-1}, w_i) + 1}{\text{count}(w_{i-1}) + V} \tag{6}

其中 VV = 词表大小。

加了平滑之后

之前:P(飞机 | 吃了) = 0/4 = 0         ❌ 直接判死
之后:P(飞机 | 吃了) = (0+1)/(4+10万) ≈ 0.00001 ✅ 至少有机会

🤔 思考题:拉普拉斯平滑有什么副作用? A. 概率被稀释 B. 没问题 C. 计算变慢 答案见文末


四、语言模型四代技术迭代 🟢 ⏱ 4 min

🎯 面试官会问:N-Gram → NNLM → BERT → GPT,每一代解决了上一代的什么问题?

技术迭代路线图

╔═══════════════════════════════════════════════════════════════════╗
                   语言模型 25 年技术演进路线                       
╚═══════════════════════════════════════════════════════════════════╝

    1990s             2003              2018             2020+
      ●────────────────●────────────────●────────────────●────────▶
                                                      
 ┌────┴─────┐    ┌────┴─────┐    ┌────┴─────┐    ┌────┴─────┐
  第一代        第二代        第三代        第四代   
   SLM           NNLM          PLM           LLM     
 ├──────────┤    ├──────────┤    ├──────────┤    ├──────────┤
  N-Gram        Bengio        BERT          GPT-4    
  频次统计      词向量        预训练        千亿参数 
  加平滑        神经网络      下游微调      自回归   
 ├──────────┤    ├──────────┤    ├──────────┤    ├──────────┤
  痛点:         痛点:         痛点:         现状:    
  组合爆炸      窗口有限      模型太大      还在进化 
 └──────────┘    └──────────┘    └──────────┘    └──────────┘

        统计概率        分布式表示       动态上下文       通用推理

每一代解决的核心问题

┌─ 第一代 SLM ─────────────────────────────────────────────┐
│  问题:出现 0 次就判死刑 ──── 方案:加平滑 (式 6)         │
│  局限:组合爆炸,N 大了存不下                              │
└──────────────────────────────────────────────────────────┘
                         ↓
┌─ 第二代 NNLM ────────────────────────────────────────────┐
│  解决:词向量共享分布式表示 → 没见过的组合也能推断          │
│  局限:静态词向量,一词多义无解                            │
└──────────────────────────────────────────────────────────┘
                         ↓
┌─ 第三代 PLM (BERT) ──────────────────────────────────────┐
│  解决:双向上下文 → 动态词向量,「苹果」在不同语境不同      │
│  局限:生成任务弱,每换任务要微调                          │
└──────────────────────────────────────────────────────────┘
                         ↓
┌─ 第四代 LLM (GPT) ───────────────────────────────────────┐
│  解决:自回归生成 + 指令微调 → 一个模型干所有任务           │
│  现状:还没完全解决的问题多着呢 😅                         │
└──────────────────────────────────────────────────────────┘

💡 技术演进规律:每一代都在解决上一代的痛点——解决老问题,制造新问题,循环迭代 🔄


五、工业落地应用场景 🟢 ⏱ 3 min

场景语言模型的作用一句话
🎤 语音识别 ASR声学模型输出拼音 → 语言模型选最优汉字"wo xiang chi fan" → 是「想吃饭」不是「像吃烦」
✍️ 手写/OCR 识别区分形近字,靠上下文选最高概率结果"我明(白/曰)" → 上下文判「明白」✅
⌨️ 智能输入法拼音 → 候选排序 + 联想 + 纠错"nlp" → 优先出「NLP」不是「那老婆」😅
🧠 底层底座理解、分类、生成、检索的根基没它就没今天的 NLP

ASR 完整流程 🎤

用户: "wǒ xiǎng chī píng guǒ"

声学模型候选:
  wǒ → {我, 握, 窝}
  xiǎng → {想, 响, 像}
  chī → {吃, 痴, 迟}
  píng guǒ → {苹果, 平果}

语言模型排序(按式 3 算概率):
  ✅ P(我 想 吃 苹果) = 高   → 选中
  ❌ P(窝 响 痴 平果) = 极低 → 排除
  ❌ P(我 像 吃 苹果) = 低   → 排除

📖 关键概念速查表

面试突击用——背下这张表,面试够用了

概念公式 / 定义一句话章节
语言模型P(w1,,wn)P(w_1, \ldots, w_n) 式 (1)判断一句话像不像人话
N-GramP(wiwiN+1,)\prod P(w_i \mid w_{i-N+1}, \ldots) 式 (2)用前 N-1 个词预测当前词
MLE 估计count(A,B)/count(A)\text{count}(A,B) / \text{count}(A) 式 (4)数数,除一下
马尔可夫假设P(wnwnk,)P(w_n \mid w_{n-k}, \ldots) 式 (5)只看前面 k 个词
拉普拉斯平滑(count+1)/(total+V)(\text{count}+1) / (\text{total}+V) 式 (6)所有组合 +1,防概率为 0
词向量Embedding RV×d\in \mathbb{R}^{V \times d}词的分布式数值表示
预训练海量语料先训一遍通用知识打底,下游微调适配

🧠 全文思维导图

╔══════════════════════ NLP 语言模型 ══════════════════════╗
║                                                         ║
║                         ┌─ 数学本质: P(w₁...wₙ) 式 (1)   ║
║            ┌─ 基础定义 ─┼─ 核心价值: 所有 NLP 的底座      ║
║            │           └─ 面试: 一句话解释语言模型        ║
║            │                                              ║
║            │           ┌─ 公式: Π P(wᵢ|wᵢ₋₁) 式 (2)(3)  ║
║            ├─ N-Gram ──┼─ MLE 估计: count÷count 式 (4)   ║
║            │           └─ 致命短板: 组合爆炸+稀疏          ║
║            │                                              ║
║            │           ┌─ 核心: 只看前 k 个词 式 (5)      ║
║  NLP 语言 ─┼─ 马尔可夫 ┼─ N-Gram = 马氏的具体实现         ║
║   模型     │           └─ 平滑: Add-1 防概率 0 式 (6)     ║
║            │                                              ║
║            │           ┌─ SLM(N-Gram) → NNLM(词向量)      ║
║            ├─ 技术迭代 ┼─ PLM(BERT) → LLM(GPT)           ║
║            │           └─ 规律: 解决老痛点, 制造新痛点     ║
║            │                                              ║
║            │           ┌─ ASR / OCR / 输入法              ║
║            └─ 工业落地 ┼─ 理解 / 分类 / 生成 / 检索       ║
║                        └─ 没有 LM 就没有今天的 NLP        ║
║                                                         ║
╚═════════════════════════════════════════════════════════╝

公式速查

编号公式含义
(1)P(w1,,wn)P(w_1, \ldots, w_n)语言模型基本定义
(2)P(wiwiN+1,)\prod P(w_i \mid w_{i-N+1}, \ldots)N-Gram 通用公式
(3)P(wiwi1)\prod P(w_i \mid w_{i-1})2-Gram 展开
(4)count(wi1,wi)count(wi1)\frac{\text{count}(w_{i-1}, w_i)}{\text{count}(w_{i-1})}最大似然估计 MLE
(5)P(wnwnk,)P(w_n \mid w_{n-k}, \ldots)马尔可夫假设
(6)count+1total+V\frac{\text{count} + 1}{\text{total} + V}拉普拉斯平滑

💎 全文总结

语言模型 = 判断「像不像人话」的数学模型

演进路径(共 25 年):
N-Gram (1990s) → NNLM (2003) → BERT (2018) → GPT (2020+)
   │               │            │            │
  统计概率         词向量       双向         千亿参数
  频次计算         稀疏解决     上下文       通用推理
  式(2)(4)         式(1)       式(5)        式(6)

一句话记住语言模型:从「统计谁和谁一起出现」到「理解谁和谁应该一起出现」——算力涨了十万倍,核心思想没变:让机器学会说人话 😎


🤔 互动答案:拉普拉斯平滑的副作用 → A。词表 V=10V=10 万,每个组合 +1,低频词的相对概率会被高频词淹没。实际工程中常用更高级的 Good-Turing 平滑Kneser-Ney 平滑


文中案例均为真实改编,如有雷同——说明你也踩过这个坑 🕳