- 教程
- 人工智能
- 机器学习
- 深度学习
【免费下载链接】AI-For-Beginners
12 Weeks, 24 Lessons, AI for All!
在 AI-For-Beginners 课程此前所有 NLP 任务中,我们都需要用带标注的数据集训练神经网络去完成某一特定任务;而本课(第 20 课)将视角转向另一条截然不同的路线:通过自监督语言建模构建通用语言模型,使其在不做任何领域特定训练的情况下直接解决大量 NLP 任务。本文以课程文档 translations/fr/lessons/5-NLP/20-LangModels/README.md(英文版 lessons/5-NLP/20-LangModels/README.md)为主体,围绕GPT(Generative Pre-Trained Transformer)家族展开:你将掌握文本生成与困惑度(Perplexity)的数学含义、GPT-2/GPT-3/GPT-4 家族图谱、提示工程(Prompt Engineering)的设计原则,以及如何借助 Hugging Face Transformers 的text-generationpipeline 亲自跑通文本生成、Beam Search、采样与微调等完整实战流程。
从"为任务训练模型"到"为通用能力训练模型"
在本课之前,课程内的典型做法是:准备一个带标签的数据集(如情感分类、命名实体识别),训练一个神经网络去拟合该任务。以 BERT 为代表的大型 Transformer 模型则引入了另一种范式——语言建模:
- 在自我监督(self-supervised)方式下,利用海量无标注文本训练一个语言模型,例如预测文本中被掩码(mask)掉的词;
- 再通过领域特定的下游任务训练(如微调)将其专精到具体任务上。
这种思路的核心在于:未标注文本几乎取之不尽,而带标签数据始终受限于人工标注成本。课程第 15 课 lessons/5-NLP/15-LanguageModeling/README.md 系统讲解了 N-Gram、CBoW、Skip-gram 等语言建模与词向量训练方法,正是这条路线的基础。
而 GPT 家族更进一步证明:大型语言模型可以不经过任何领域特定训练,直接解决大量任务。其理论依据来自论文《Language Models are Unsupervised Multitask Learners》:许多任务都可以被建模为文本生成问题,因为"理解文本"本质上意味着"能够产出文本"。由于模型在海量涵盖人类知识的文本上训练,它同时对广泛的主题具备"见识"——这与人类主要通过阅读学习的机制高度相似。
理解并能产出文本,意味着对周围世界有所了解。人类在很大程度上也通过阅读学习,GPT 网络在这点上与人相似。
文本生成与困惑度(Perplexity)
从无条件概率到条件概率
文本生成网络的工作方式是预测下一个词的概率。但需要注意区分两种概率:
- 无条件概率$P(w_N)$:等于该词在文本语料中出现的频率,与上下文无关;
- 条件概率$P(w_N | w_{n-1}, \dots, w_0)$:给定前面所有词之后,下一个词出现的概率。GPT 提供的正是这种条件概率,从而让生成内容在语法和语义上都更贴合已给出的前文。
困惑度:无需任务数据的模型质量度量
困惑度是一种内在(intrinsic)指标,它允许我们在不依赖任何任务特定数据集的情况下度量生成模型的质量。其基础是"句子概率"的概念:
- 模型会给像是真实句子的文本赋予高概率(即模型"不感到困惑");
- 对不太通顺的句子(例如法文示例Peut-il fait quoi ?,即"它可以做什么?"这种病句)赋予低概率。
当我们把真实语料中的句子输入模型时,期望它们获得高概率、从而对应低困惑度。数学上,困惑度定义为测试集概率的归一化逆:
$$ \mathrm{Perplexity}(W) = \sqrt[N]{1\over P(W_1,\dots,W_N)} $$
直观理解:如果模型对下一个词的预测接近均匀分布(对 N 个候选词各给 $1/N$ 的概率),困惑度就接近 N;预测越集中、越确定,困惑度越低,模型质量越好。
概率相关知识可参考课程配套的数据科学入门内容;本仓库 lessons/5-NLP/15-LanguageModeling/README.md 中 N-Gram 等模型正是困惑度最直接的适用场景。
动手实验:GPT 文本补全编辑器
你可以通过 Hugging Face 提供的GPT 驱动的文本编辑器直接体验文本生成:开始输入一段文字,按下[TAB]键,编辑器会给出多个补全选项;如果候选太短或不满意,再次按下 [TAB] 会得到更多选项,包括更长的文本片段。这是理解"条件概率驱动生成"最直观的交互实验。
GPT 是一个家族
GPT 并非单一模型,而是 OpenAI 开发并训练的一系列模型的集合。课程文档给出了家族主要成员的对照表:
| GPT-2 | GPT-3 | GPT-4 | | -- | -- | -- | | 语言模型,参数规模最高 15 亿(1.5 billion) | 语言模型,参数规模最高 1750 亿(175 billion) | 100T(100 万亿)参数,同时接受图像与文本输入,输出文本 |
需要说明的是,上述参数规模为课程文档所记录的事实。从模型形态看,GPT 家族一脉相承:均以"生成式预训练 Transformer"为底座,区别主要在参数量、输入模态与训练数据规模上逐代升级,GPT-4 首次将多模态输入(图像 + 文本)纳入其中。
课程文档同时提到,GPT-3 与 GPT-4 可通过 Microsoft Azure 认知服务及 OpenAI API 等商业渠道使用;而在本仓库中,我们可以用完全开源的方式(Hugging Face Transformers +openai-gpt权重)亲身体验 GPT 家族的文本生成能力,详见下文。
提示工程(Prompt Engineering)
由于 GPT 在海量语言与代码数据上训练,它能够针对输入(即prompt,提示/提示词)给出相应输出。Prompt 就是交给 GPT 的请求或指令,用以描述希望它完成的任务。为了获得理想结果,必须设计最有效的 prompt,这包括:
- 选择合适的词语;
- 选择合适的格式(如换行、分隔符、列表结构);
- 选择合适的短语甚至符号。
这种设计方法即提示工程(Prompt Engineering)。它之所以可能,正是因为 GPT 无需针对每类任务重新训练——任务本身被"写进"了 prompt 中。更系统的设计方法论(如角色设定、示例引导、约束输出格式等)可以参考课程引用的 Microsoft 提示工程文档,其核心思想可概括为"用最少的字词,把任务约束得最清楚"。
实战:用 Hugging Face Transformers 玩转 OpenAI-GPT
课程提供了配套 notebook:lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb(法文版见 translations/fr/lessons/5-NLP/20-LangModels/GPT-PyTorch.ipynb),使用 Hugging Facetransformers库与 OpenAI-GPT 模型完成全部实验。
环境准备
先为 NLP 课程安装依赖(PyTorch 版):
pip install -r requirements-pytorch.txt该依赖清单 lessons/5-NLP/requirements-pytorch.txt 中与本节直接相关的核心包包括:
transformers==5.5.0:提供pipeline与模型/分词器加载能力;torch==2.12.1:PyTorch 深度学习框架;numpy、matplotlib、scikit-learn等通用科学计算组件。
注意:课程 5-NLP 部分涉及较多大模型训练,建议在启用 GPU 的机器上运行以缩短等待时间;如遇显存不足,优先调小 minibatch size。相关说明见 lessons/5-NLP/README.md。
第一步:实例化文本生成 pipeline
from transformers import pipeline model_name = 'openai-gpt' generator = pipeline('text-generation', model=model_name) generator("Hello! I am a neural network, and I want to say that", max_length=100, num_return_sequences=5)运行后,模型会基于前文续写出多个候选片段(num_return_sequences=5控制返回条数,max_length=100控制生成最大长度)。notebook 中保存的实际输出展示了模型围绕"我是神经网络,我想说……"这一开场白生成的多种风格迥异的续写,足见其条件概率建模能力。
首次加载时,transformers会自动下载模型权重(约 479 MB)、vocab.json与merges.txt(BPE 分词器文件),并把openai-gpt检查点中未初始化的position_ids等权重作为新初始化处理。
第二步:提示工程实战——同一个模型,多个任务
notebook 展示了用同一个 GPT 模型、仅通过设计 prompt 即可完成多类任务:
1. 同义词生成
generator("Synonyms of a word cat:", max_length=20, num_return_sequences=5)2. 情感分类(few-shot 示例引导)
generator("I love when you say this -> Positive\nI have myself -> Negative\nThis is awful for you to say this ->", max_length=40, num_return_sequences=5)这里利用-> Positive、-> Negative的先例(示例)引导模型续写出分类标签,是 few-shot 提示的典型手法。
3. 英法翻译
generator("Translate English to French: cat => chat, dog => chien, student => ", top_k=50, max_length=30, num_return_sequences=3)4. 推荐系统模拟
generator("People who liked the movie The Matrix also liked ", max_length=40, num_return_sequences=5)注意翻译与推荐场景下均未做任何微调,任务完全由 prompt 语义驱动——这正是"无领域训练完成任务"的直观演示。
文本采样策略:从贪心到多样化生成
notebook 后半部分深入剖析了生成时的采样(sampling)策略,这是决定生成质量与多样性的关键一环。
贪心解码(Greedy Decoding,默认)
最简单的策略:每一步都选择概率最高的下一个词。它的优点是确定性强,缺点是容易陷入重复或平庸的输出。此前所有示例默认即为此策略。
prompt = "It was early evening when I can back from work. I usually work late, but this time it was an exception. When I entered a room, I saw" generator(prompt, max_length=100, num_return_sequences=5)Beam Search(束搜索)
Beam Search 允许生成器同时探索多条"光束"(beams)方向,最终挑选整体得分更高的序列,从而缓解贪心解码的局部最优问题:
num_beams:设置光束数量;no_repeat_ngram_size:惩罚模型重复指定大小的 n-gram,降低文本循环。
generator(prompt, max_length=100, num_return_sequences=5, num_beams=10, no_repeat_ngram_size=2)采样(Sampling)
采样策略非确定性地选择下一个词,依据模型返回的概率分布:
do_sample=True:开启采样;temperature:调节确定性与随机性的平衡——温度越低输出越保守、越接近贪心;温度越高越发散、越有创造性。
generator(prompt, max_length=100, do_sample=True, temperature=0.8)采样进阶:top-k 与 top-p
在采样基础上还可以追加两个常用参数来抑制"跑偏":
top_k:限制候选词数量,仅从概率最高的 k 个词中采样,最小化低概率怪词出现的可能;top_p(核采样):选取"累计概率超过 p 的最小候选词子集"进行采样,是 top-k 的概率化变体。
例如翻译示例中即使用了top_k=50。你可以自由组合do_sample=True、temperature、top_k、top_p观察生成效果的差异。
微调:在保留语言能力的同时调整风格
如果默认生成的风格不符合需求,还可以在**自有数据集上微调(fine-tune)**模型:这样能够调整文本的风格与领域倾向,同时保留语言模型的大部分通用能力。微调路径适用于课程中所有 Transformer 类模型——对本课而言,微调后模型可在领域文本上获得更低困惑度,也就意味着更贴合该领域的"地道"生成。
总结
新一代通用预训练语言模型不再仅仅建模语言结构,其参数中还内化了海量自然语言知识。因此,它们能够在zero-shot(零样本)或few-shot(少样本)设定下有效解决许多 NLP 任务——前者完全不提供示例,后者仅靠 prompt 中少量示例引导。
对本课内容的完整实践路径总结如下:
- 阅读课程文档 lessons/5-NLP/20-LangModels/README.md 掌握概念(文本生成、困惑度、GPT 家族、提示工程);
- 安装依赖(
pip install -r requirements-pytorch.txt); - 运行 GPT-PyTorch.ipynb,依次体验 pipeline 生成、四类提示工程任务、三种采样策略与微调思路;
- 回到整个 NLP 课程体系 lessons/5-NLP/README.md 中,将 GPT 的生成能力与 文本表示、词向量、语言建模、RNN、Transformer 等前序课程串联理解,形成对现代 NLP 技术栈的完整认知。
- 教程
- 人工智能
- 机器学习
- 深度学习
【免费下载链接】AI-For-Beginners
12 Weeks, 24 Lessons, AI for All!
相关推荐
预训练大语言模型实战:从 GPT 文本生成、困惑度到提示工程(AI-For-Beginners 课程)
预训练大语言模型实战:从 GPT 文本生成、困惑度到提示工程(AI For Beginners 课程) 导读 本篇文章是 AI For Beginners ht
教程人工智能机器学习深度学习AI-For-Beginners 第 20 课实战:预训练大语言模型 GPT——从文本生成与困惑度评估到提示工程
AI For Beginners 第 20 课实战:预训练大语言模型 GPT——从文本生成与困惑度评估到提示工程 本指南基于 AI For Beginners
教程人工智能机器学习深度学习AI for Beginners 第 20 课:预训练大语言模型(GPT)——从文本生成、困惑度到提示工程与采样策略
AI for Beginners 第 20 课:预训练大语言模型(GPT)——从文本生成、困惑度到提示工程与采样策略 本课是 AI For Beginners
教程人工智能机器学习深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考