=# 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}
展开成具体句子就是:
各阶 N-Gram 对比:
| 阶数 | 名称 | 依赖前文 | 例子 |
|---|---|---|---|
| 1-Gram | Uni-Gram | 0 个词(只看自己) | P(苹果) |
| 2-Gram | Bi-Gram | 1 个词 | P(苹果|吃了) |
| 3-Gram | Tri-Gram | 2 个词 | 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.5 ✅
P(香蕉 | 吃了) = count("吃了香蕉") / count("吃了") = 1 / 4 = 0.25 ✅
P(飞机 | 吃了) = count("吃了飞机") / count("吃了") = 0 / 4 = 0.0 🚫
🕳 踩坑实录:概率为 0 是 N-Gram 最大痛点。某输入法语料里没「火锅」,用户打「吃了火锅」不出候选——用户以为输入法坏了,实际上是 N-Gram 判了「火锅」死刑。
2.3 N-Gram 的致命短板
| 问题 | 说明 |
|---|---|
| 📈 组合爆炸 | N 每 +1,组合数乘以词表大小 |
| 🕳 数据稀疏 | 绝大多数组合在语料中出现次数为 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}
其中 是马尔可夫阶数。
直观理解:
三阶(k=2)假设下预测「苹果」:
完整上文:我今天吃了___ → 只看「吃了」
丢掉「我今天」 → 信息有损,但计算量从指数降到常数
3.2 马尔可夫假设 vs N-Gram
一句话说清关系:
N-Gram 就是马尔可夫假设的具体实现。N-Gram 的 = 马尔可夫阶数 。
| 概念 | 角色 | 等价关系 |
|---|---|---|
| 马尔可夫假设 | 理论框架(为什么要简化) | 只看前 个词 |
| N-Gram | 具体算法(怎么简化) | 只看前 个词 |
| 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}
其中 = 词表大小。
加了平滑之后:
之前: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(我 像 吃 苹果) = 低 → 排除
📖 关键概念速查表
面试突击用——背下这张表,面试够用了:
| 概念 | 公式 / 定义 | 一句话 | 章节 |
|---|---|---|---|
| 语言模型 | 式 (1) | 判断一句话像不像人话 | 一 |
| N-Gram | 式 (2) | 用前 N-1 个词预测当前词 | 二 |
| MLE 估计 | 式 (4) | 数数,除一下 | 二 |
| 马尔可夫假设 | 式 (5) | 只看前面 k 个词 | 三 |
| 拉普拉斯平滑 | 式 (6) | 所有组合 +1,防概率为 0 | 三 |
| 词向量 | Embedding | 词的分布式数值表示 | 四 |
| 预训练 | 海量语料先训一遍 | 通用知识打底,下游微调适配 | 四 |
🧠 全文思维导图
╔══════════════════════ 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) | 语言模型基本定义 | |
| (2) | N-Gram 通用公式 | |
| (3) | 2-Gram 展开 | |
| (4) | 最大似然估计 MLE | |
| (5) | 马尔可夫假设 | |
| (6) | 拉普拉斯平滑 |
💎 全文总结
语言模型 = 判断「像不像人话」的数学模型
演进路径(共 25 年):
N-Gram (1990s) → NNLM (2003) → BERT (2018) → GPT (2020+)
│ │ │ │
统计概率 词向量 双向 千亿参数
频次计算 稀疏解决 上下文 通用推理
式(2)(4) 式(1) 式(5) 式(6)
一句话记住语言模型:从「统计谁和谁一起出现」到「理解谁和谁应该一起出现」——算力涨了十万倍,核心思想没变:让机器学会说人话 😎
🤔 互动答案:拉普拉斯平滑的副作用 → A。词表 万,每个组合 +1,低频词的相对概率会被高频词淹没。实际工程中常用更高级的 Good-Turing 平滑或 Kneser-Ney 平滑。
文中案例均为真实改编,如有雷同——说明你也踩过这个坑 🕳