11 NLP — 自然语言处理从词向量到预训练模型
学习理念:NLP 是 AI 最重要的应用领域之一(GPT 本质就是 NLP 模型)。但本模块的内容跨越了 NLP 几十年的技术演进,大量内容已经被 Transformer 和预训练模型替代。你的策略应该是:跳过被淘汰的(RNN/Word2Vec),理解仍活着的(Attention/Transformer),重点学未来要用的(HuggingFace 生态)。
一句话路线图:NLP 的历史 = 从"把词变成数字"到"让模型理解上下文"——Word2Vec → RNN → Attention → Transformer → BERT/GPT。
本节 AI 替代率:~80% | 人工干预率:~20%
| 角色 | 能力范围 |
|---|---|
| 🤖 AI 擅长 | 用 HuggingFace 加载模型、写微调代码、调用分词器、实现 Transformer 模块 |
| 👤 人类需理解 | Attention 的 Q/K/V 直觉、预训练-微调范式、什么场景用 BERT vs GPT vs T5 |
技术栈健康度速览(参照 OPC 7.4 标签体系)
颜色标签说明:
- 🟢🟡🟠🔴 = 学习优先级 / AI 替代率等级
- 🔥🟢⏳⚠️💀 = 技术栈健康度(参照 OPC 7.4 标准)
| 技术 | 健康度 | 建议 |
|---|---|---|
| HuggingFace Transformers | 🔥 巅峰 | 保留,现代 LLM 开发的事实标准 |
| Transformer 架构 | 🔥 巅峰 | 保留,GPT/LLaMA/Claude 的底层基础 |
| Attention 机制 | 🔥 巅峰 | 保留,Transformer 的核心组件 |
| BERT 微调 | 🟢 稳定 | 小模型场景仍然实用,知识蒸馏的常用基座 |
| BART/T5 Seq2Seq | 🟢 稳定 | 文本生成任务的标准架构 |
| Seq2Seq + Attention | ⚠️ 衰退 | 已被预训练模型(T5/BART)替代手工实现 |
| Word2Vec | 💀 淘汰 | 被 BERT 等上下文 Embedding 替代 |
| RNN/LSTM/GRU | 💀 淘汰 | 被 Transformer 替代 |
一、NLP 技术演进路线图
🧑🏫 一句话理解 NLP 的进化:
- 阶段 1:把词变成数字(OneHot → Word2Vec → 💀淘汰)
- 阶段 2:按顺序理解句子(RNN → LSTM → 💀淘汰)
- 阶段 3:关注重点内容(Attention → 🟢概念沿用)
- 阶段 4:并行处理整个序列(Transformer → 🔥巅峰)
- 阶段 5:预训练 + 微调(BERT/GPT → 🔥巅峰)
学习路径
| 颜色 | 章节 | AI 替代率 | 人工干预 | 说明 |
|---|---|---|---|---|
| 🔥 | HuggingFace 生态(Day10-12) | ~75% | ~25% | 最高价值:现代 LLM 开发的标准工具箱 |
| 🟢 | Transformer 架构(Day8-9) | ~80% | ~20% | 理解 GPT/LLaMA/Claude 的底层架构 |
| 🟢 | Attention 机制(Day7) | ~85% | ~15% | Q/K/V 是一切的基础,必须理解 |
| 🟡 | 预训练模型概念(Day10) | ~85% | ~15% | BERT/GPT/T5 各自的定位和选型 |
| 🟠 | Seq2Seq 模型(Day6) | ~90% | ~10% | ⚠️ 已被 T5/BART 替代,了解概念即可 |
| 🔴 | 文本表示/Word2Vec(Day1) | ~95% | ~5% | 已被 BERT Embedding 替代 |
| 💀 | RNN/LSTM/GRU(Day2-5) | ~98% | ~2% | 已被 Transformer 替代,略过 |
二、🔥 HuggingFace 生态(最高价值,重点学)
2.1 三个核心组件
HuggingFace(简称 HF)是当前 AI 开发者的标准工具箱。三个组件必须掌握:
| 组件 | 作用 | 类比 |
|---|---|---|
| AutoModel | 加载预训练模型 | 像 pip install 一样安装模型 |
| AutoTokenizer | 文本 → 数字(分词+编码) | 像 JSON 的序列化/反序列化 |
| Datasets | 加载和处理数据集 | 像 Pandas 但专门为 ML 优化 |
from transformers import AutoModel, AutoTokenizer
import torch
# 1. 加载模型和分词器(一行代码)
model_name = "google-bert/bert-base-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name)
# 2. 分词 + 编码(文本 → 数字)
text = "这个商品质量非常好"
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
# inputs = {"input_ids": tensor, "attention_mask": tensor}
# 3. 模型推理
with torch.no_grad():
outputs = model(**inputs)
# outputs.last_hidden_state 形状: (1, seq_len, 768)2.2 三种模型加载方式
# 方式 1:基座模型(输出 raw hidden states)
model = AutoModel.from_pretrained("bert-base-chinese")
# 方式 2:带任务头的模型(直接出分类结果)
classifier = AutoModelForSequenceClassification.from_pretrained(
"bert-base-chinese", num_labels=5
)
# 方式 3:生成式模型
generator = AutoModelForSeq2SeqLM.from_pretrained("facebook/bart-base-chinese")给程序员的比喻:AutoModel = Python 的 import——你不需要自己写 BERT 的代码,
from_pretrained就像pip install一样把别人训练好的模型拿下来直接用。
2.3 完整微调项目:BERT 中文情感分析
实际代码来自
ch07_pretrained_models/review_analysis_bert/
from transformers import AutoModel
import torch.nn as nn
class ReviewAnalysisModel(nn.Module):
def __init__(self):
super().__init__()
# BERT 基座
self.bert = AutoModel.from_pretrained("google-bert/bert-base-chinese")
# 分类头
self.fc = nn.Linear(self.bert.config.hidden_size, 1) # 二分类
def forward(self, input_ids, attention_mask, token_type_ids):
output = self.bert(
input_ids=input_ids,
attention_mask=attention_mask,
token_type_ids=token_type_ids
)
cls_hidden = output.pooler_output # 取 [CLS] 标记的输出
result = self.fc(cls_hidden).squeeze(-1)
return result微调的关键差异(相比第 10 章从零训练):
- 学习率要小得多:
1e-5(而不是1e-3) - 训练轮次要少:2-5 epoch(而不是 20-30)
- 因为模型已经预训练好了,只需要"微调"
2.4 第二个项目:BART 对联生成
实际代码来自
ch07_pretrained_models/couplet_bart/
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
model_name = "OpenMOSS-Team/bart-base-chinese"
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 输入上联 → 生成下联
input_text = "春风又绿江南岸"
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs, max_length=50)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)
# "明月何时照我还" ← 可能生成的对联项目文件结构(和第 10 章同样的 config-driven 模式):
couplet_bart/
├── config.py # 模型名、超参数
├── preprocess.py # 数据预处理
├── dataset.py # Dataset + DataLoader
├── train.py # 训练循环
└── predict.py # 推理预测模型选型决策树(补 §18 标准)
三种模型架构对比(补 §18 标准)
| 架构 | 代表 | 适合 | 不适合 | 比喻 |
|---|---|---|---|---|
| Encoder-Only | BERT | 理解文本、分类、NER | 文本生成 | 阅读理解高手,但不会写作文 |
| Decoder-Only | GPT / LLaMA | 对话、创作、代码生成 | 精准分类 | 即兴演讲家,边想边说 |
| Encoder-Decoder | T5 / BART | 翻译、摘要、对联 | 多轮对话 | 翻译官,听完再翻 |
三、🟢 Transformer 架构(理解 GPT 的基础)
3.1 为什么 Transformer 替代了 RNN?
| 对比 | RNN | Transformer |
|---|---|---|
| 处理方式 | 串行:读完第 1 个词才能读第 2 个 | 并行:所有词同时处理 |
| 长距离依赖 | 弱(读到第 100 个词忘了第 1 个) | 强(每个词直接看到所有词) |
| 训练速度 | 慢(不能 GPU 并行) | 快(GPU 大规模并行) |
| 2026 年还在用吗? | ❌ 基本淘汰 | ✅ GPT/Claude/LLaMA 的核心 |
🧑🏫 比喻:RNN = 逐字阅读,读完"我"才能读"爱",读完"爱"才能读"你"。Transformer = 看一眼整个句子,所有字同时进入脑子。
3.2 Transformer 的核心组件
输入: "我 爱 自然 语言 处理"
↓
[Embedding] 把每个词映射成向量
↓
[Positional Encoding] 告诉模型词的顺序("我爱你"≠"你爱我")
↓
[Multi-Head Self-Attention] ← 核心
每个词"关注"句子中所有其他词
我 → [我, 爱, 自然, 语言, 处理]
爱 → [我, 爱, 自然, 语言, 处理]
↓
[Feed-Forward] 对每个词独立做非线性变换
↓
[LayerNorm + Residual] 稳定训练,防止梯度消失
↓
重复 N 层(BERT=12层, GPT-3=96层)从代码理解 Attention(实际来自 ch06_transformer/1_attention_test.ipynb):
# 简化的 Attention 计算
import torch
import torch.nn.functional as F
def scaled_dot_product_attention(Q, K, V):
# Q: 查询向量 — "我想找什么信息"
# K: 键向量 — "我有什么信息"
# V: 值向量 — "找到后把什么内容给我"
scores = torch.matmul(Q, K.transpose(-2, -1)) # 算相似度
scores = scores / (K.size(-1) ** 0.5) # 缩放(防止太大)
weights = F.softmax(scores, dim=-1) # 变成概率
output = torch.matmul(weights, V) # 加权求和
return output给程序员的比喻:Attention 的 Q/K/V = 搜索引擎——
- Q(Query)= 你在搜索框输入的关键词
- K(Key)= 网页的标题/标签
- V(Value)= 网页的实际内容
- 搜索引擎算 Q 和 K 的匹配度,把最匹配的 V 返回给你
3.3 BERT vs GPT vs T5 选型
| 模型 | 架构 | 擅长 | 场景 |
|---|---|---|---|
| BERT | Encoder only | 理解文本 | 分类、情感分析、NER |
| GPT | Decoder only | 生成文本 | Chat、创作、代码生成 |
| T5/BART | Encoder-Decoder | 转换文本 | 翻译、摘要、对联 |
| LLaMA | Decoder only | 同 GPT | 开源替代 |
四、🟠 Seq2Seq + Attention(了解概念即可)
⚠️ 过时率 ~80%:手工实现的 Seq2Seq + Attention 已被 T5/BART 等预训练模型完全替代。
4.1 思路
编码器:读完整句中文 → 压缩成一个"语义向量"
↓
解码器:从"语义向量"开始 → 逐词生成英文
↓
Attention:生成每个英文词时,"回头看"中文句子的不同位置🧑🏫 比喻:没有 Attention 的 Seq2Seq = 你看完一本书后凭记忆复述——细节容易忘。有 Attention 的 Seq2Seq = 复述时随时翻书对照——关键信息不会丢。
4.2 技术评估
| 评估维度 | 结论 |
|---|---|
| 🔴 过时率 | ~80% — 生产环境已不用手工实现 |
| 🟢 替代技术 | T5 / BART / mT5(预训练的 Seq2Seq 模型) |
| ⚡ 为什么被替代 | 预训练模型在海量数据上训练过,微调就能用,比自己从零训练好得多 |
| 🤔 还学它干嘛 | 理解 Encoder-Decoder + Attention 的组合,是理解 T5/BART 的前提 |
五、🔴 RNN/LSTM/GRU(了解即可,已被替代)
💀 过时率 ~95%:RNN 系列已被 Transformer 完全替代。以下只花 2 分钟看结论。
5.1 为什么淘汰
RNN 的问题:串行 + 长距离遗忘
"我昨天去银行,排队等了两个小时,然后……[100 字后]……那个柜员态度很差"
RNN 读到"柜员"时,已经忘了前面说的是"银行"
Transformer:每个词都能直接看到"银行"
效率差距:
RNN:必须等第 1 个词算完 → 才能算第 2 个 → 才能算第 3 个
Transformer:1000 个词同时算,GPU 并行
→ 训练速度快 100-1000 倍5.2 技术评估
| 评估维度 | 结论 |
|---|---|
| 🔴 过时率 | ~95% — 2026 年生产环境几乎不用 |
| 🟢 替代技术 | Transformer(2017 年提出) |
| ⚡ 为什么被替代 | 串行处理 = GPU 利用率低;长距离依赖处理差 |
| 🤔 还学它干嘛 | 几乎不需要——知道"曾经有个叫 RNN 的东西,被 Transformer 干掉了"就够了 |
六、🔴 文本表示(从 OneHot 到 Word2Vec)
🔴 过时率 ~80%:Word2Vec 已被 BERT 等上下文 Embedding 替代。
6.1 三个时代的词向量
| 时代 | 方法 | 问题 |
|---|---|---|
| OneHot 编码 | "猫"=[0,0,1,0,0...] "狗"=[0,0,0,1,0...] | 所有词之间距离一样,看不出"猫"和"狗"更相似 |
| Word2Vec | "猫"→0.3 "狗"→0.4 "苹果"→0.9(语义相近的词向量也相近) | 一个词只有一个向量,无法处理"苹果"(水果)vs"苹果"(手机) |
| BERT Embedding | "苹果很好吃"中的"苹果" → 向量A "苹果发布了新手机"中的"苹果" → 向量B | ✅ 根据上下文动态生成向量 |
🧑🏫 比喻:Word2Vec = 一本静态词典——"苹果"只有一个解释。BERT = AI 阅读理解——看到"很好吃"知道是水果,看到"发布会"知道是品牌。
技术栈深度评估(参照 OPC 7.4 标签体系)
| 编号 | 技术 | 健康度 | 说明 |
|---|---|---|---|
| T1 | HuggingFace Transformers | 🔥 巅峰 | 现代 LLM 开发的标准接口,保留 |
| T2 | Transformer 架构 | 🔥 巅峰 | GPT/Claude/LLaMA 的底层基础 |
| T3 | Attention 机制 | 🔥 巅峰 | 理解一切基础模型的钥匙 |
| T4 | BERT 微调 | 🟢 稳定 | 分类场景仍适用,知识蒸馏常用基座 |
| T5 | BART/T5 | 🟢 稳定 | 文本生成的标准 Seq2Seq 方案 |
| T6 | HuggingFace Datasets | 🔥 巅峰 | 数据集加载标准库 |
| T7 | GPU 云服务器 | 🟢 稳定 | Day12 引入的云训练,实用 |
| T8 | Seq2Seq + Attention(手工) | ⚠️ 衰退 | 已被预训练模型替代手工实现 |
| T9 | Word2Vec | 💀 淘汰 | 被上下文 Embedding 替代 |
| T10 | RNN/LSTM/GRU | 💀 淘汰 | 被 Transformer 替代 |
海外对标
| 企业 | 应用场景 | 技术方案 | 效果量化 |
|---|---|---|---|
| OpenAI | GPT 系列 | Transformer Decoder + RLHF | GPT-4 在多种 NLP 基准上超过人类 |
| BERT + T5 | Encoder + Encoder-Decoder | BERT 在 11 项 NLP 任务刷新纪录 | |
| Meta | LLaMA + BART | 开源 Decoder + Seq2Seq | LLaMA-3 开源模型逼近 GPT-4 水平 |
| HuggingFace | 模型 Hub + Transformers 库 | 统一 API + 社区生态 | 20 万+ 模型,月下载量数亿次 |
企业痛点映射
| 痛点 | 传统方案 | AI 方案 | 效率提升 |
|---|---|---|---|
| 电商评论人工分类成本高 | 人工阅读打标,每人每天 500 条 | BERT 自动情感分析 | 分类速度 1000x |
| 客服对话需要自动生成回复 | 预设模板(僵硬不自然) | BART/GPT 生成式回复 | 回复覆盖率 +60% |
| 多语言翻译需要人力 | 专业翻译,0.5 元/字 | T5/mT5 机器翻译 + 人工校对 | 成本降低 90% |
| 海量文档需要自动摘要 | 人工阅读提炼 | BART/T5 自动摘要 | 处理速度 1000x |
AI 协作指南
AI 能做的:
- 用 HuggingFace 加载任意预训练模型
- 写 BERT/GPT/T5 的微调代码
- 实现 Transformer 的各个组件(Attention/FFN/Positional Encoding)
- 调用 Datasets 库处理数据
人类需理解的(AI 做不好的):
- Attention 的 Q/K/V 直觉 —— 每个组件"为什么存在"
- 模型选型:这个任务用 BERT 还是 GPT 还是 T5?
- 理解"预训练-微调"范式和"从零训练"的本质区别
- 诊断训练不收敛是学习率问题还是模型架构问题
最高效的学习方式:
- RNN/LSTM 的公式不要看,已被淘汰
- Word2Vec 的原理不要深究,已被替换
- Attention 的 Q/K/V 必须理解 —— 这是所有现代模型的基础
- HuggingFace 的 API 直接上手用,不需要看文档
- 第 10 章学到的 config-driven 训练模式,这里完全复用附录:原始资料处理说明
| 原始文件 | 处理方式 |
|---|---|
NLP1.0.3.docx(196 张图,5613 段) | 内容已 75% 精简整合到本文档 |
Hugging Face生态.docx | 关键 API 已整合到 §2 |
3.code/(Day1~Day12 完整代码) | 核心代码片段已提取展示 |
| RNN/LSTM/Word2Vec 架构图(~100 张) | 根据 §14 规则:💀淘汰 → 跳过 |
| Attention / Transformer 架构图 | 根据 §14 规则:🟢稳定 → Mermaid + 代码替代 |
| 视频(Day1~Day12) | 跳过 |
bert-base-chinese 预训练模型 | 路径保留,可直接用于微调练习 |
| 各类数据集(评论/对联/翻译) | 路径保留 |
修复情况:
- ✅ 技术栈健康度标签(OPC 7.4:🔥🟢⏳⚠️💀)
- ✅ 🟢🟡🟠🔴 优先级 + 💀 淘汰等级
- ✅ 两套颜色体系说明
- ✅ 中英文对照表
- ✅ 学习路径标准化表格
- ✅ 每项技术标注"过时率"和"替代方案"
- ✅ 程序员比喻(搜索引擎、pip install、逐字阅读等)
- ✅ 海外对标 + 企业痛点映射
- ✅ 与 LLM 时代的直接关联说明
- ✅ AI 替代率 / 人工干预率标注
- ✅ §14 架构图自主处理:跳过 100+ 张,保留核心 3 张用 Mermaid/代码替代