语言智能的基石:从统计语言模型到 LLM 时代
人类语言看似松散随意,背后却有强约束的统计规律:词与词之间并非独立,而是受语法、语义、语用与世界知识共同塑形。语言建模(Language Modeling)的核心目标,就是学习这种规律,使模型能够为任意文本序列分配概率,并据此完成生成、理解与推断等任务。更重要的是,语言建模不是一个“单点任务”,而是一种通用能力的训练范式:当模型能够在足够大、足够多样的数据上压缩并预测下一段文本时,它往往也学会了隐藏在文本里的结构——从拼写到逻辑,从事实到计划。
本章将建立全书共同语境:从统计语言模型如何刻画“语言概率”,到神经网络语言模型如何引入分布式表示,再到 Transformer 与规模化训练如何催生 LLM(Large Language Model)时代的能力涌现;最后给出一张可落地的 LLM 技术栈全景图,并用几个实践案例把“原理—工程—应用”串起来。
---
1. 语言建模:把“会说话”变成“可计算的概率”
给定一个由 token(词/子词/字符等)构成的序列 $x_{1:T} = (x_1,\dots,x_T)$,自回归语言模型(autoregressive LM)建模的典型形式为:
$$ p(x_{1:T})=\prod_{t=1}^{T} p(x_t \mid x_{<t}) $$
训练时最常见的目标是最大化对数似然(等价于最小化交叉熵损失):
$$ \mathcal{L} = -\sum_{t=1}^{T}\log p_\theta(x_t \mid x_{<t}) $$
为了直观衡量“预测下一个 token”的难度,常用指标是困惑度(Perplexity, PPL):
$$ \mathrm{PPL}=\exp\left(\frac{1}{T}\mathcal{L}\right) $$
> 侧边栏:困惑度不是“好用程度”的充分条件 > PPL 只反映在特定分布上的平均预测能力。对聊天、问答、代码生成等具体应用,更关键的是对齐(alignment)、指令遵循、事实性、鲁棒性与工具使用能力。PPL 往往与下游体验相关但不等价。
从应用角度,语言建模支持两条主线:
- **生成式**:写作、对话、代码补全、摘要改写、数据合成。
- **判别/理解式(可由生成式派生)**:分类、抽取、检索增强问答、信息核对、推理与规划。
---
2. 统计语言模型:从“计数”到“平滑”,从“短视”到“局限”
2.1 N-gram:最朴素的条件概率近似
统计语言模型用马尔可夫假设简化条件依赖:
$$ p(x_t \mid x_{<t}) \approx p(x_t \mid x_{t-n+1:t-1}) $$
以 trigram 为例:
$$ p(x_t \mid x_{<t}) \approx p(x_t \mid x_{t-2},x_{t-1}) $$
参数估计通常用最大似然(计数频率):
$$ \hat p(w \mid h)=\frac{c(h,w)}{c(h)} $$
其中 $h$ 是历史上下文(长度 $n-1$ 的片段)。
关键问题:真实语言的长程依赖远超过 $n$,并且存在严重的数据稀疏(“没见过”并不等于“不可能”)。因此必须引入平滑与回退(backoff),如 Laplace、Kneser–Ney、Good–Turing 等。
2.2 一个可运行的微型案例:用 bigram 做“领域写作风格”
下面示例展示 bigram 的核心训练与采样思路(教学用途,忽略大量工程细节,如分词、未知词、温度等):
```python import math import random from collections import Counter, defaultdict
def train_bigram(tokens):
统计 bigram 与 unigram
bigram = Counter(zip(tokens[:-1], tokens[1:])) unigram = Counter(tokens[:-1]) vocab = set(tokens)
加一平滑(演示用;真实系统常用更强平滑)
def prob(next_token, prev_token): return (bigram[(prev_token, next_token)] + 1) / (unigram[prev_token] + len(vocab))
return vocab, prob
def sample(prob, vocab, start_token, steps=30): out = [start_token] prev = start_token for _ in range(steps): r = random.random() acc = 0.0 for w in vocab: acc += prob(w, prev) if acc >= r: out.append(w) prev = w break return out
tokens = "在 医疗 场景 下 我们 需要 更 强 的 可解释 性 ...".split()
vocab, p = train_bigram(tokens)
print(" ".join(sample(p, vocab, "在")))
```
你会观察到:bigram 能快速学到“局部搭配”(如“可解释 性”“医疗 场景”),但极易陷入无意义循环,且无法维持长句结构。这种“短视”正是统计 LM 的天花板之一。
---
3. 神经语言模型:分布式表示与泛化能力的跃迁
3.1 从 one-hot 到 embedding:相似性变成可学习的几何结构
统计 LM 的“词”是离散符号;神经 LM 用向量表示 token(embedding),并通过神经网络学习条件概率。一个经典框架是:
- token $\rightarrow$ embedding 向量
- 上下文编码(RNN/LSTM/CNN/Transformer)
- 线性层 + softmax 输出下一个 token 分布
embedding 的价值在于:即便某个 n-gram 没出现过,模型仍可通过向量相似性实现泛化(例如“CT”“MRI”在医疗文本中可能具有相近分布)。
3.2 RNN/LSTM 到 Transformer:并行化与长程依赖
RNN/LSTM 能处理可变长序列,但存在难以并行、长距离梯度衰减等问题。Transformer 的核心是自注意力(self-attention),其基本计算为:
$$ \mathrm{Attention}(Q,K,V)=\mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V $$
- $Q,K,V$ 来自输入的线性变换
- softmax 权重体现“当前位置该关注哪些历史 token”
Transformer 带来的工程优势非常直接:
- **并行训练**:不再严格按时间步递归。
- **更强上下文建模**:注意力可直接连接任意位置(虽然计算/显存成本随序列长度增长)。
- **可扩展性**:更适合大规模预训练与分布式训练。
---
4. 规模化为什么有效:从“更大模型”到“更低损失”的规律
LLM 时代的一个关键共识是:当数据、参数、计算量共同扩大时,语言建模损失呈现可预测下降趋势,常被称为缩放定律(Scaling Laws)。典型经验形式可写为:
$$ \mathcal{L}(N, D, C)\approx A N^{-\alpha}+ B D^{-\beta}+E $$
- $N$:参数规模(参数量)
- $D$:训练 token 数(数据规模)
- $C$:计算量(通常与 $N \cdot D$ 同阶相关)
- $\alpha,\beta$:经验指数(不同研究设定略有差异)
4.1 工程含义:不是“盲目变大”,而是“算力—数据—模型的配比”
在固定计算预算下,如果只增大参数但数据不足,模型会过拟合或学不到足够的世界知识;反之数据极大但模型太小,也难以吸收复杂模式。工程团队通常需要在预算约束下做配比优化(例如“Chinchilla 风格”的 compute-optimal 思路强调相对更多的数据训练)。
4.2 能力涌现:从连续改进到阶段性跨越
所谓“涌现能力(emergent abilities)”常表现为:当规模超过某个阈值,模型在某些任务上的表现从“几乎不会”变为“可用”。这背后可能混合了多个原因:
- **表示容量阈值**:需要足够参数才能容纳复杂组合规律。
- **训练数据覆盖阈值**:需要足够多样样本才能“见到”推理模式。
- **评测度量阈值**:某些指标本身是离散/非线性(例如准确率从 49% 到 51% 观感差异极大)。
- **提示与对齐技术**:同一底座模型,经指令微调/对齐后能力显著显性化。
> 引用:把“涌现”当作工程信号 > 对团队而言,“涌现”不是玄学,而是提醒你:当模型/数据/训练策略跨过某些临界点时,产品能力形态会突然改变,因此需要持续、系统的评测与回归测试,而不是只盯一两个基准分数。
---
5. LLM 技术栈全景:从数据到对齐,从推理到应用
把 LLM 当作“一个概率模型”并不足以落地。一个可交付的系统通常包含:数据工程、训练框架、对齐、推理加速、评测与应用编排。下面用一张流程图把全局串起来。
```mermaid graph TD A[数据收集] --> B[清洗与去重] B --> C[分词/Tokenizer] C --> D[预训练(Next Token)] D --> E[指令微调(SFT)] E --> F[偏好对齐(RLHF/DPO等)] F --> G[评测与红队] G --> H[推理部署(量化/并行/缓存)] H --> I[应用层: RAG/工具调用/Agent] I --> G ```
5.1 数据:质量往往比数量更“贵”
常见数据类别(非穷尽):
- **通用文本**:网页、书籍、论坛、百科、代码等。
- **指令数据**:人类编写或模型生成的“任务—答案”对。
- **偏好数据**:同一提示下的多答案排序/对比,用于对齐。
- **领域数据**:医疗、金融、法律、企业知识库等(通常最难获得)。
关键工程点:
- **去重**:减少训练泄漏与过拟合(尤其是评测集泄漏)。
- **过滤与分层采样**:提升高质量语料占比(例如代码、教材、技术文档)。
- **版权与合规**:不仅是法律问题,也直接影响可商用性与上线风险。
5.2 Tokenizer:被低估的“性能与能力杠杆”
Tokenizer 决定“模型看到的原子单位”。常见方案包括 BPE、Unigram、WordPiece。Tokenizer 影响:
- 序列长度(影响注意力计算成本)
- 多语言与符号系统(如中文、日文、表情、代码)
- 罕见词拆分(影响事实记忆与拼写能力)
- 领域术语(如药品名、金融代码)可通过扩表或再训练 tokenizer 缓解
5.3 对齐:从“会续写”到“会帮忙且不乱来”
预训练模型擅长续写,但不一定遵循指令,也可能产生有害内容或胡编。对齐层常见组合:
- **SFT(Supervised Fine-Tuning)**:学会“像助手一样回答”。
- **偏好优化**:RLHF 或 DPO 等,让模型更符合人类偏好(安全、礼貌、拒答策略、格式等)。
- **安全策略**:分级审核、内容过滤、拒答模板、敏感工具隔离。
---
6. 典型应用版图:从聊天到检索增强,再到“可行动的 Agent”
6.1 Chat/写作类:最直观的“指令遵循”产品形态
落地要点:
- 结构化提示(system/dev/user 分层)
- 输出约束(JSON schema、Markdown、引用格式)
- 事实性控制(检索增强、引用证据、置信度表达)
6.2 RAG:让模型“查资料再回答”,降低幻觉与更新成本
RAG(Retrieval-Augmented Generation)常用架构如下:
```mermaid graph LR Q[用户问题] --> E[Embedding] E --> R[向量检索TopK] R --> C[拼接上下文] C --> L[LLM生成回答] L --> A[带引用的输出] ```
RAG 的工程细节决定成败:
- **切分策略**:按段落/标题/语义切,避免碎片化。
- **向量模型选择**:多语言、领域适配、是否需要 cross-encoder 重排。
- **上下文预算**:TopK 不是越大越好,噪声会伤害生成质量。
- **引用与可追溯**:输出中附带来源片段与链接(电子版尤其重要)。
6.3 工具调用与 Agent:从“说”到“做”
当模型能可靠地产生结构化调用(函数名、参数),就可以把 LLM 变成“调度器”:
- 调搜索 API、数据库查询、代码执行、工单系统、日程系统
- 结合状态机/规划器实现多步任务(如“订机票—比价—写报销说明”)
风险与治理要点:
- 工具权限最小化(least privilege)
- 审计日志与回放
- 关键动作二次确认(支付/删除/提交)
- 防提示注入(prompt injection):对外部文档做隔离与净化
---
7. 三个实践案例:把概念落到“能交付的系统”
案例 A:用困惑度做回归测试,监控模型/数据漂移
场景:你维护一个内部中文客服模型,每周都会增量训练或更换指令数据。上线后发现偶尔“语气变差”或“格式错乱”。 做法: 1. 固定一批代表性文本(按业务意图分桶),作为“语言风格回归集”。 2. 计算这些文本在新旧模型下的平均 loss / PPL,结合人工抽检。 3. 监控 PPL 的分桶变化:某一类意图 PPL 异常上升,往往意味着该意图数据覆盖不足或对齐分布漂移。
关键点:PPL 不是终极指标,但作为“预训练/续写能力”的健康度信号非常敏感,适合作为自动化回归的一部分。
案例 B:企业知识库问答的 RAG 落地路线
目标:让模型回答“报销政策”“出差标准”“产品手册”等内部问题,要求可追溯。 推荐路线:
- 第一步:只做检索与引用,不追求“像人一样会聊”。让系统先“找得到、引得准”。
- 第二步:引入重排(rerank)与结构化输出(回答要点 + 引用列表)。
- 第三步:对高频问题做“问答对蒸馏”形成指令数据,进行轻量 SFT,提高可读性与格式一致性。
- 第四步:加入权限系统(按部门/角色过滤可检索文档),并对提示注入做防护。
常见坑:
- 文档切分过碎导致答案拼不起来;或过大导致命中但上下文噪声高。
- “引用”只是贴链接而没有精确到段落/页码(纸书可类比为“只给书名不指页码”)。
- 未做权限过滤导致越权信息泄漏。
案例 C:代码生成助手的最小可行闭环(MVP)
目标:为团队提供“生成脚手架 + 单测 + 解释”的开发助手。 闭环设计: 1. 约束输出为:文件树 + 关键文件代码块 + 运行命令。 2. 引入工具:静态检查(lint)、单测执行、失败日志回传给模型二次修复。 3. 建立评测集:团队常见任务(例如“新增 API endpoint + 数据校验 + 单测”),用通过率与修复轮次衡量迭代。
关键洞见:代码助手的价值不只在“写”,更在“能跑起来”。工具反馈是减少幻觉与提升可靠性的最强信号源之一。
---
8. 评测与可靠性:别只看一个榜单分数
一个可用的 LLM 系统需要多维评测矩阵(建议至少覆盖):
- **能力**:问答、推理、数学、代码、多轮对话、长上下文。
- **事实性**:引用一致性、可验证性、拒答策略。
- **安全**:越狱、敏感内容、提示注入、数据泄漏。
- **稳定性**:温度变化、提示扰动、版本回归。
- **成本与延迟**:token 成本、首 token 延迟、吞吐与并发。
> 侧边栏:电子版可做“可点击评测卡片” > 在电子版中,把每项评测链接到内部仪表盘或报告(例如 `https://intra.example.com/llm-eval`),让读者形成“工程评测即产品质量”的直觉。
---
9. 本章小结:从“概率”到“系统”,从“模型”到“能力”
语言智能的第一性原理是:用可计算的概率去刻画文本序列。统计语言模型用计数与平滑迈出了第一步,却受限于稀疏与短程依赖;神经语言模型用分布式表示实现泛化,而 Transformer 让大规模并行训练成为可能。LLM 时代的关键不只是“模型更大”,而是“规模化训练 + 合理配比 + 对齐与系统工程”共同塑造了能力形态:在足够数据与计算下,模型损失按规律下降,并在某些任务上呈现阈值式的可用性跃迁。
接下来章节将进一步展开:模型架构与训练细节如何影响能力边界、对齐方法如何权衡安全与有用、以及在真实业务中如何用 RAG、工具调用与 Agent 把 LLM 变成可靠的生产力系统。