人工智能之语言领域 自然语言处理 第十四章 预训练模型

人工智能之语言领域

第十四章 预训练模型


文章目录

  • 人工智能之语言领域
  • [前言 预训练模型](#前言 预训练模型)
    • [14.1 预训练模型的发展与核心思想](#14.1 预训练模型的发展与核心思想)
      • [14.1.1 预训练-微调范式的诞生](#14.1.1 预训练-微调范式的诞生)
      • [14.1.2 自监督学习在预训练中的应用](#14.1.2 自监督学习在预训练中的应用)
    • [14.2 预训练模型的分类](#14.2 预训练模型的分类)
      • [14.2.1 自回归预训练模型(Autoregressive)](#14.2.1 自回归预训练模型(Autoregressive))
      • [14.2.2 自编码预训练模型(Autoencoding)](#14.2.2 自编码预训练模型(Autoencoding))
      • [14.2.3 混合式预训练模型(Encoder-Decoder)](#14.2.3 混合式预训练模型(Encoder-Decoder))
    • [14.3 预训练模型的训练任务](#14.3 预训练模型的训练任务)
      • [14.3.1 掩码语言模型(MLM)](#14.3.1 掩码语言模型(MLM))
      • [14.3.2 下一句预测(NSP)](#14.3.2 下一句预测(NSP))
      • [14.3.3 因果语言模型(CLM)](#14.3.3 因果语言模型(CLM))
    • [14.4 预训练模型的微调策略](#14.4 预训练模型的微调策略)
      • [14.4.1 全参数微调与部分参数微调](#14.4.1 全参数微调与部分参数微调)
        • [LoRA 微调示例(使用 PEFT 库)](#LoRA 微调示例(使用 PEFT 库))
      • [14.4.2 提示学习(Prompt Learning)与少样本微调](#14.4.2 提示学习(Prompt Learning)与少样本微调)
        • [手动提示(Manual Prompt)](#手动提示(Manual Prompt))
        • [自动提示(Prompt Tuning)](#自动提示(Prompt Tuning))
    • 补充:主流中文预训练模型推荐
    • 小结
  • 资料

前言 预训练模型

预训练模型(Pre-trained Models, PTMs)是自然语言处理(NLP)近十年来最重大的技术突破之一。它们通过在大规模无标注语料 上进行自监督学习,获得通用的语言理解与生成能力,再通过微调(Fine-tuning) 快速适配下游任务。从 ELMo、GPT 到 BERT、T5,预训练模型彻底改变了 NLP 的研发范式。本章将系统讲解预训练模型的发展脉络、核心思想、分类体系、训练任务与微调策略,并辅以代码实现帮助你深入掌握。


14.1 预训练模型的发展与核心思想

14.1.1 预训练-微调范式的诞生

传统 NLP 流程

特征工程 → 模型训练(每个任务独立训练)

→ 耗时、数据依赖强、泛化能力弱

预训练-微调范式

  1. 预训练阶段:在海量文本(如维基百科、网页)上训练通用语言模型
  2. 微调阶段:在特定任务小数据集上微调模型参数

自监督学习
海量无标注文本
通用语言模型\n(e.g., BERT, GPT)
文本分类
命名实体识别
问答系统
机器翻译

优势

  • 减少对标注数据的依赖
  • 提升模型泛化能力
  • 实现"一次预训练,多任务复用"

14.1.2 自监督学习在预训练中的应用

自监督学习(Self-Supervised Learning)

利用数据本身的结构构造监督信号,无需人工标注。

🌰 示例:

原句:"自然语言处理很有趣。"

构造任务:"自然 [MASK] 处理很有趣。" → 预测 "语言"

常见自监督任务:

  • 掩码语言建模(MLM):随机遮盖词,预测原词(BERT)
  • 因果语言建模(CLM):根据前文预测下一个词(GPT)
  • 句子排序/替换检测:判断两句话是否连续(NSP)

14.2 预训练模型的分类

14.2.1 自回归预训练模型(Autoregressive)

特点 :单向建模,只能利用左侧上下文预测当前词。

代表模型:GPT 系列(GPT-1/2/3/4)

训练目标:最大化序列似然

L = ∑ t = 1 T log ⁡ P ( x t ∣ x < t ) \mathcal{L} = \sum_{t=1}^T \log P(x_t | x_{<t}) L=t=1∑TlogP(xt∣x<t)
x1
x2
x3
x4
预测x₃时,仅能看到x₁,x₂

优势 :天然适合文本生成

劣势:无法利用右侧信息,理解能力受限


14.2.2 自编码预训练模型(Autoencoding)

特点 :双向建模,利用左右全部上下文预测被遮盖词。

代表模型:BERT、RoBERTa

训练目标:掩码语言建模(MLM)

L = ∑ i ∈ mask log ⁡ P ( x i ∣ x masked ) \mathcal{L} = \sum_{i \in \text{mask}} \log P(x_i | x_{\text{masked}}) L=i∈mask∑logP(xi∣xmasked)
x1
x2
x3
x4
预测x₂时,可看到x₁,x₃,x₄

优势 :强大的语言理解能力

劣势:预训练与生成任务不一致(不能直接用于生成)


14.2.3 混合式预训练模型(Encoder-Decoder)

特点:结合编码器(双向)与解码器(单向),统一理解与生成。

代表模型:T5、BART、UL2

架构:Transformer Encoder-Decoder

训练方式

  • T5:将所有任务转为"文本到文本"格式(如"summarize: 原文 → 摘要")
  • BART:加噪+重建(如删除、打乱词序后恢复)

输入: 原文
Encoder\n(双向)
Decoder\n(单向)
输出: 摘要/翻译/标签

优势 :统一框架支持多种任务

📊 性能:在生成与理解任务上均表现优异


14.3 预训练模型的训练任务

14.3.1 掩码语言模型(MLM)

步骤

  1. 随机选择 15% 的 token
  2. 其中:
    • 80% 替换为 [MASK]
    • 10% 替换为随机词
    • 10% 保持不变
  3. 预测原始 token
python 复制代码
# Hugging Face Transformers 中的 MLM 示例
from transformers import BertTokenizer, BertForMaskedLM

tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertForMaskedLM.from_pretrained('bert-base-chinese')

text = "自然[MASK]处理很有趣"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
predictions = outputs.logits

# 获取 [MASK] 位置的预测
mask_token_index = torch.where(inputs.input_ids == tokenizer.mask_token_id)[1]
mask_token_logits = predictions[0, mask_token_index, :]
top_tokens = torch.topk(mask_token_logits, 5, dim=1).indices[0].tolist()
print("预测结果:", [tokenizer.decode([token]) for token in top_tokens])
# 输出: ['语言', '文字', '语音', ...]

💡 为什么不用 100% [MASK]

防止微调时出现预训练未见过的 [MASK] token


14.3.2 下一句预测(NSP)

任务:判断句子 B 是否是句子 A 的下一句。

  • 正样本:A + B(真实连续)
  • 负样本:A + 随机句子

⚠️ 争议:后续研究(如 RoBERTa)发现 NSP 对多数任务无益,常被弃用


14.3.3 因果语言模型(CLM)

任务:给定前缀,预测下一个词。

python 复制代码
from transformers import GPT2Tokenizer, GPT2LMHeadModel

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')

input_text = "Today is a beautiful"
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(
    inputs.input_ids,
    max_length=20,
    do_sample=True,
    temperature=0.8
)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
# 输出: "Today is a beautiful day to go for a walk."

🔒 实现关键 :使用注意力掩码防止看到未来词


14.4 预训练模型的微调策略

14.4.1 全参数微调与部分参数微调

方法 描述 适用场景
全参数微调 更新所有模型参数 数据充足、计算资源足
部分微调 仅更新部分层(如最后几层) 小数据、防过拟合
适配器(Adapter) 在每层插入小型可训练模块 多任务共享主干
LoRA(Low-Rank Adaptation) 用低秩矩阵近似权重更新 大模型高效微调
LoRA 微调示例(使用 PEFT 库)
python 复制代码
from peft import LoraConfig, get_peft_model

lora_config = LoraConfig(
    r=8,               # 低秩维度
    lora_alpha=16,
    target_modules=["q_proj", "v_proj"],  # 作用于注意力层
    lora_dropout=0.1,
    bias="none"
)

model = AutoModelForSequenceClassification.from_pretrained("bert-base-chinese")
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 仅训练 0.1% 参数

14.4.2 提示学习(Prompt Learning)与少样本微调

问题 :标准微调在极少量样本(few-shot)下效果差。

提示学习(Prompting) :将下游任务重构为预训练任务的形式

🌰 文本分类 → 填空任务

原任务:判断"这部电影太棒了!"的情感 → 正面

提示模板:

"这部电影太棒了!总的来说,这是一部 [MASK] 的电影。"

预测 [MASK] 为 "好" → 正面
转换
情感分类
填空任务
预训练模型
预测 [MASK]
映射为标签

手动提示(Manual Prompt)
python 复制代码
template = "这句话的情感是[MASK]。{}"
input_text = template.format("服务态度很差")
# 预测 [MASK] 为 "负面"
自动提示(Prompt Tuning)
  • 可学习的 soft prompt(连续向量)
  • 不修改模型参数,仅优化 prompt embeddings

优势

  • 少样本场景性能显著提升
  • 减少任务间差异(统一为 MLM/CLM)

补充:主流中文预训练模型推荐

模型 类型 特点 Hugging Face 模型 ID
BERT-wwm-ext 自编码 全词掩码,中文优化 hfl/chinese-bert-wwm-ext
MacBERT 自编码 用相似词替代 [MASK] hfl/chinese-macbert-base
ChatGLM 自回归 支持对话、高效推理 THUDM/chatglm3-6b
Qwen 混合 阿里通义千问系列 Qwen/Qwen-7B-Chat
Baichuan 自回归 百川大模型 baichuan-inc/Baichuan2-7B-Chat

小结

预训练模型通过自监督学习 在海量文本中学习通用语言知识,形成"预训练 + 微调 "的新范式。从自回归 (GPT)到自编码 (BERT),再到混合式 (T5),模型架构不断演进。微调策略也从全参数更新发展到LoRA、提示学习等高效方法,极大降低了大模型应用门槛。掌握预训练模型的原理与使用,是现代 NLP 工程师的核心能力。


资料

咚咚王

《Python 编程:从入门到实践》

《利用 Python 进行数据分析》

《算法导论中文第三版》

《概率论与数理统计(第四版) (盛骤) 》

《程序员的数学》

《线性代数应该这样学第 3 版》

《微积分和数学分析引论》

《(西瓜书)周志华-机器学习》

《TensorFlow 机器学习实战指南》

《Sklearn 与 TensorFlow 机器学习实用指南》

《模式识别(第四版)》

《深度学习 deep learning》伊恩·古德费洛著 花书

《Python 深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》

《深入浅出神经网络与深度学习 +(迈克尔·尼尔森(Michael+Nielsen)》

《自然语言处理综论 第 2 版》

《Natural-Language-Processing-with-PyTorch》

《计算机视觉-算法与应用(中文版)》

《Learning OpenCV 4》

《AIGC:智能创作时代》杜雨 +&+ 张孜铭

《AIGC 原理与实践:零基础学大语言模型、扩散模型和多模态模型》

《从零构建大语言模型(中文版)》

《实战 AI 大模型》

《AI 3.0》

相关推荐
EasyCVR2 小时前
从流媒体转发到智能分析:EasyCVR的视频技术演进
人工智能·ffmpeg·音视频·视频监控·gb28181
hughnz2 小时前
走进贝克休斯油田技术服务世界
大数据·人工智能·能源·钻井
GlobalInfo2 小时前
汽车电感式位置传感器行业单项冠军申请趋势分析报告
大数据·人工智能·汽车
zandy10112 小时前
企业合同管理系统选型全指南:专业 CLM 系统选型核心逻辑与实操框架
大数据·人工智能
数据小玩子2 小时前
精准归因:如何量化分析光伏电站的每一分发电损失?
大数据·人工智能·数据可视化·助睿数智·光伏电站运营
EasyDSS2 小时前
EasyDSS视频流媒体WebRTC技术解析:智慧校园直播、点播与会议一体化融合实践
运维·网络·人工智能·架构·音视频·m3u8·点播技术
Swift社区2 小时前
ArkUI 的 UI 复用机制解析
人工智能·ui·arkui
罗罗攀2 小时前
PyTorch学习笔记|张量的索引分片、合并和维度调整
人工智能·pytorch·笔记·python·学习
Zzj_tju2 小时前
AI+医疗进阶:多智能体系统怎么协作做诊断、总结与质控?
大数据·人工智能