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

人工智能之语言领域

第十六章 生成式预训练模型


文章目录

  • 人工智能之语言领域
  • [前言 生成式预训练模型](#前言 生成式预训练模型)
    • [16.1 生成式预训练模型概述](#16.1 生成式预训练模型概述)
      • [16.1.1 生成式与判别式模型的区别](#16.1.1 生成式与判别式模型的区别)
      • [16.1.2 核心应用](#16.1.2 核心应用)
    • [16.2 经典生成式模型](#16.2 经典生成式模型)
      • [16.2.1 GPT系列模型:架构与迭代历程](#16.2.1 GPT系列模型:架构与迭代历程)
      • [16.2.2 T5模型:统一文本到文本范式](#16.2.2 T5模型:统一文本到文本范式)
      • [16.2.3 BART模型:降噪自编码生成模型](#16.2.3 BART模型:降噪自编码生成模型)
    • [16.3 生成式模型的解码策略](#16.3 生成式模型的解码策略)
      • [16.3.1 贪心搜索与束搜索(Beam Search)](#16.3.1 贪心搜索与束搜索(Beam Search))
      • [16.3.2 采样策略:引入随机性提升多样性](#16.3.2 采样策略:引入随机性提升多样性)
        • [(1)随机采样(Random Sampling)](#(1)随机采样(Random Sampling))
        • [(2)Top-K 采样](#(2)Top-K 采样)
        • [(3)Nucleus 采样(Top-p)](#(3)Nucleus 采样(Top-p))
    • [16.4 生成式模型的评估](#16.4 生成式模型的评估)
      • [16.4.1 自动评估指标](#16.4.1 自动评估指标)
      • [16.4.2 人工评估维度与方法](#16.4.2 人工评估维度与方法)
    • [16.5 实战:基于GPT的中文对话生成模型微调](#16.5 实战:基于GPT的中文对话生成模型微调)
    • 补充:生成式模型安全与对齐
    • 小结
  • 资料

前言 生成式预训练模型

生成式预训练模型(Generative Pre-trained Models)是自然语言处理(NLP)迈向通用人工智能 的关键一步。与仅能"理解"语言的判别式模型(如 BERT)不同,生成式模型能够主动创造连贯、合理、多样化的文本,广泛应用于对话系统、内容创作、代码生成等领域。本章将系统讲解生成式模型的核心思想、主流架构(GPT、T5、BART)、解码策略、评估方法,并通过中文对话生成实战演示其微调与部署。


16.1 生成式预训练模型概述

16.1.1 生成式与判别式模型的区别

特性 判别式模型(Discriminative) 生成式模型(Generative)
目标 学习 P(y|x) :给定输入,预测标签 学习 P(x) P(x,y) :建模数据分布
代表模型 BERT、RoBERTa GPT、T5、BART
典型任务 分类、NER、问答(抽取式) 文本生成、对话、摘要(生成式)
训练方式 MLM(掩码预测) CLM(自回归)或 Seq2Seq(降噪)
输出形式 固定标签或 span 可变长度序列

💡 通俗比喻

  • 判别式模型像"阅卷老师":判断句子是否正确
  • 生成式模型像"作家":从零开始创作新句子
    生成式
    输入: '写一首关于春天的诗'
    GPT
    输出: '春风拂面花自开...'

(全新生成)
判别式
输入: '这部电影很___'
BERT
输出: '好' (填空)


16.1.2 核心应用

  • 文本生成:新闻、诗歌、故事创作
  • 代码生成:GitHub Copilot(基于 Codex)
  • 对话系统:ChatGPT、通义千问、文心一言
  • 机器翻译/摘要:T5 将所有任务转为文本生成

16.2 经典生成式模型

16.2.1 GPT系列模型:架构与迭代历程

GPT(Generative Pre-trained Transformer)采用纯解码器(Decoder-only) 架构,通过自回归(Autoregressive) 方式生成文本。

架构演进
模型 参数量 关键创新 训练语料
GPT-1 117M 首次验证 Transformer 解码器生成能力 BooksCorpus
GPT-2 1.5B "Zero-shot" 能力,无需微调 WebText (40GB)
GPT-3 175B 上下文学习(In-context Learning) Common Crawl + 多源
GPT-3.5/4 >1T 多模态、强化学习对齐(RLHF) 私有超大规模
GPT 核心机制
  • 因果注意力掩码(Causal Mask):确保预测第 t 个词时只能看到 x_{\\leq t}
  • 位置编码:使用可学习的位置嵌入(非正弦)

Causal Mask
注意力矩阵上三角置 -∞

防止信息泄露
Token Sequence:

x₁, x₂, ..., xₜ
Embedding + Position
Transformer Decoder × N
Language Model Head

(Linear + Softmax)
P(xₜ₊₁ | x₁...xₜ)


16.2.2 T5模型:统一文本到文本范式

T5(Text-to-Text Transfer Transformer)由 Google 提出,将所有 NLP 任务转化为"文本到文本"格式

🌰 任务转换示例:

  • 分类:"cola sentence: This is wrong." → "unacceptable"
  • 翻译:"translate English to German: Hello!" → "Hallo!"
  • 摘要:"summarize: [长文本] → [摘要]"
架构特点
  • Encoder-Decoder 结构(类似 Transformer 原始架构)
  • Span Corruption 预训练任务:随机掩盖连续片段,用 sentinel token 替代
python 复制代码
# 输入: "The <X> brown <Y> jumps."
# 目标: "<X> quick <Y> fox"

优势:统一框架简化多任务训练与推理


16.2.3 BART模型:降噪自编码生成模型

BART(Bidirectional and Auto-Regressive Transformers)结合 BERT 的双向编码与 GPT 的自回归解码。

预训练任务:文本降噪(Denoising)
  1. 对输入加噪声(删除、打乱、掩码等)
  2. 用 Encoder 编码加噪文本
  3. 用 Decoder 重建原始文本

原始文本:

I love NLP.
加噪:

I [MASK] [MASK].
Encoder

(双向)
Decoder

(自回归)
重建:

I love NLP.

📊 适用场景:文本摘要、对话生成、翻译(尤其适合需要理解全文的任务)


16.3 生成式模型的解码策略

解码策略决定如何从概率分布中选择下一个词,直接影响生成质量。

16.3.1 贪心搜索与束搜索(Beam Search)

方法 描述 优缺点
贪心搜索 每步选概率最高的词 快但易重复、局部最优
束搜索 保留 top-k 个候选序列(k=beam size) 更优但计算量大
python 复制代码
# Hugging Face 中使用 beam search
generated = model.generate(
    input_ids,
    max_length=50,
    num_beams=5,          # 束宽
    early_stopping=True   # 找到 EOS 即停
)

⚠️ 问题 :束搜索易产生重复、保守的文本(因追求高概率)


16.3.2 采样策略:引入随机性提升多样性

(1)随机采样(Random Sampling)
  • 从完整词汇表概率分布中采样
  • 问题:可能采到低质量词
(2)Top-K 采样
  • 仅从概率最高的 K 个词中采样
  • 例:K=50,忽略低概率尾部词
(3)Nucleus 采样(Top-p)
  • 动态选择最小词集,使其累积概率 ≥ p
  • 例:p=0.9,可能选 10 个或 100 个词(取决于分布)
python 复制代码
# Hugging Face 采样示例
generated = model.generate(
    input_ids,
    do_sample=True,
    top_k=50,       # Top-K
    top_p=0.95,     # Nucleus
    temperature=0.7 # 控制分布平滑度(<1更确定,>1更多样)
)

🔥 Temperature 调节

  • T \\to 0 :趋近贪心搜索
  • T = 1 :原始分布
  • T \> 1 :分布更均匀,增加随机性

16.4 生成式模型的评估

16.4.1 自动评估指标

指标 适用任务 原理 局限
Perplexity (PPL) 语言模型 衡量预测不确定性(越低越好) 不反映语义质量
BLEU 翻译、摘要 n-gram 重叠度 忽略同义词、语序
ROUGE 摘要 召回率导向的 n-gram 匹配 同 BLEU
METEOR 翻译 引入同义词匹配 计算复杂

📌 注意:自动指标与人工评价相关性有限,需谨慎解读


16.4.2 人工评估维度与方法

人工评估仍是黄金标准,常用维度:

维度 说明
流畅性(Fluency) 语法是否正确、是否自然
相关性(Relevance) 是否回应输入主题
信息量(Informativeness) 是否提供新信息(非套话)
一致性(Coherence) 逻辑是否连贯
多样性(Diversity) 多次生成是否重复

📊 方法:A/B 测试、Likert 量表(1-5分)、成对比较


16.5 实战:基于GPT的中文对话生成模型微调

任务目标

微调开源中文 GPT 模型(如 ChatGLM、Qwen),实现领域对话生成。

方案选择

  • 模型THUDM/chatglm3-6b(高效、支持中文、开源)
  • 框架:Hugging Face Transformers + PEFT(参数高效微调)

完整代码实现

python 复制代码
# Step 1: 安装依赖
# pip install transformers accelerate peft bitsandbytes

from transformers import (
    AutoTokenizer, AutoModelForCausalLM,
    TrainingArguments, Trainer
)
from peft import LoraConfig, get_peft_model
import torch

# Step 2: 加载模型与分词器(4-bit 量化节省显存)
model_name = "THUDM/chatglm3-6b"

tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    trust_remote_code=True,
    load_in_4bit=True,  # 4-bit 量化
    device_map="auto"
)

# Step 3: 配置 LoRA(仅训练少量参数)
lora_config = LoraConfig(
    r=8,
    lora_alpha=16,
    lora_dropout=0.1,
    target_modules=["query_key_value"],  # ChatGLM 的注意力层名
    bias="none",
    task_type="CAUSAL_LM"
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()  # 通常 <1% 参数

# Step 4: 准备对话数据(格式:[{"role": "user", "content": "..."}, ...])
def format_conversation(conversations):
    """将对话历史转为模型输入格式"""
    prompt = tokenizer.build_prompt(
        query=conversations[-1]["content"],
        history=[(conv["content"], "") for conv in conversations[:-1] if conv["role"]=="user"]
    )
    response = conversations[-1]["content"] if conversations[-1]["role"]=="assistant" else ""
    return prompt + response

# 示例数据
train_data = [
    [{"role": "user", "content": "你好!"}, {"role": "assistant", "content": "你好呀!有什么我可以帮你的吗?"}],
    [{"role": "user", "content": "今天天气怎么样?"}, {"role": "assistant", "content": "我无法获取实时天气,建议查看天气预报哦!"}]
]

# Tokenize
def tokenize_function(examples):
    texts = [format_conversation(conv) for conv in examples]
    return tokenizer(texts, truncation=True, padding="max_length", max_length=512)

# 假设已构建 Dataset 对象 train_dataset
train_tokenized = train_dataset.map(tokenize_function, batched=True)

# Step 5: 设置训练参数
training_args = TrainingArguments(
    output_dir="./chatglm-finetune",
    per_device_train_batch_size=1,  # 大模型 batch_size 通常=1
    gradient_accumulation_steps=8,  # 梯度累积等效 batch_size=8
    learning_rate=2e-4,
    num_train_epochs=3,
    logging_steps=10,
    save_strategy="epoch",
    fp16=True
)

# Step 6: 创建 Trainer 并训练
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_tokenized,
    data_collator=lambda data: {'input_ids': torch.stack([f["input_ids"] for f in data])}
)

trainer.train()

# Step 7: 推理(对话生成)
def chat(query, history=[]):
    inputs = tokenizer.build_chat_input(query, history=history, role="user")
    outputs = model.generate(
        **inputs,
        max_new_tokens=128,
        do_sample=True,
        top_p=0.9,
        temperature=0.7
    )
    response = tokenizer.decode(outputs[0][len(inputs["input_ids"][0]):], skip_special_tokens=True)
    return response

# 测试
print(chat("你好!"))  # 输出: "你好呀!有什么我可以帮你的吗?"

关键技巧

技巧 说明
4-bit 量化 使用 bitsandbytes 加载大模型(6B 模型仅需 ~6GB 显存)
LoRA 微调 避免全参数微调,节省资源
梯度累积 小 batch 下模拟大 batch 效果
对话模板 严格遵循模型训练时的 prompt 格式

补充:生成式模型安全与对齐

  • 有害内容过滤:训练后添加分类器或 RLHF 对齐人类偏好
  • 事实性约束:检索增强生成(RAG)引入外部知识
  • 可控生成:通过 prompt engineering 或 control codes 控制风格/主题

小结

生成式预训练模型通过自回归或 Seq2Seq 架构,实现了强大的文本创造能力。GPT 系列引领了纯解码器范式,T5 和 BART 则通过 Encoder-Decoder 结构统一多任务。合理的解码策略(如 nucleus 采样)可平衡质量与多样性,而人工评估仍是衡量生成效果的金标准。通过参数高效微调(如 LoRA),我们能在消费级 GPU 上定制领域对话模型。掌握生成式模型,是构建下一代 AI 应用的核心能力。


资料

咚咚王

《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》

相关推荐
Westward-sun.1 小时前
OpenCV 实战:身份证号码识别系统(基于模板匹配)
人工智能·opencv·计算机视觉
万里沧海寄云帆1 小时前
pytorch+cpu版本对Intel Ultra 9 275HX性能的影响
人工智能·pytorch·python
阿里云大数据AI技术2 小时前
阿里云荣获 2025–2026 年度 Elastic中国最佳合作伙伴奖
人工智能·elasticsearch
yrwang_xd2 小时前
人工智能基础-常用Nvidia Tesla及RTX显卡算力大全-2026版
人工智能
用户4815930195912 小时前
MCP 终极指南(进阶篇):手写一个 MCP Server,再用抓包拆解协议底层
人工智能
用户4815930195912 小时前
我抓包了 Cline 与模型的通信,发现了一件有趣的事
人工智能
1941s2 小时前
Google Agent Development Kit (ADK) 指南 第二章:环境搭建与快速开始
人工智能·python·adk·google agent
抓个马尾女孩2 小时前
位置编码:绝对位置编码、相对位置编码、旋转位置编码
人工智能·深度学习·算法·transformer
风酥糖2 小时前
AI时代的技术焦虑与自我救赎
人工智能