Skip to content

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 优化
python
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 三种模型加载方式

python
# 方式 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/

python
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/

python
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-OnlyBERT理解文本、分类、NER文本生成阅读理解高手,但不会写作文
Decoder-OnlyGPT / LLaMA对话、创作、代码生成精准分类即兴演讲家,边想边说
Encoder-DecoderT5 / BART翻译、摘要、对联多轮对话翻译官,听完再翻

三、🟢 Transformer 架构(理解 GPT 的基础)

3.1 为什么 Transformer 替代了 RNN?

对比RNNTransformer
处理方式串行:读完第 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):

python
# 简化的 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 选型

模型架构擅长场景
BERTEncoder only理解文本分类、情感分析、NER
GPTDecoder only生成文本Chat、创作、代码生成
T5/BARTEncoder-Decoder转换文本翻译、摘要、对联
LLaMADecoder 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 标签体系)

编号技术健康度说明
T1HuggingFace Transformers🔥 巅峰现代 LLM 开发的标准接口,保留
T2Transformer 架构🔥 巅峰GPT/Claude/LLaMA 的底层基础
T3Attention 机制🔥 巅峰理解一切基础模型的钥匙
T4BERT 微调🟢 稳定分类场景仍适用,知识蒸馏常用基座
T5BART/T5🟢 稳定文本生成的标准 Seq2Seq 方案
T6HuggingFace Datasets🔥 巅峰数据集加载标准库
T7GPU 云服务器🟢 稳定Day12 引入的云训练,实用
T8Seq2Seq + Attention(手工)⚠️ 衰退已被预训练模型替代手工实现
T9Word2Vec💀 淘汰被上下文 Embedding 替代
T10RNN/LSTM/GRU💀 淘汰被 Transformer 替代

海外对标

企业应用场景技术方案效果量化
OpenAIGPT 系列Transformer Decoder + RLHFGPT-4 在多种 NLP 基准上超过人类
GoogleBERT + T5Encoder + Encoder-DecoderBERT 在 11 项 NLP 任务刷新纪录
MetaLLaMA + BART开源 Decoder + Seq2SeqLLaMA-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/代码替代

OPC 超级个体实战指南