☰
预训练大语言模型实战:从 GPT 文本生成、困惑度到提示工程(AI-For-Beginners 课程)
2026/9/30 2:19:16 网站建设 项目流程
  • 教程
  • 人工智能
  • 机器学习
  • 深度学习

【免费下载链接】AI-For-Beginners

12 Weeks, 24 Lessons, AI for All!

项目地址:https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners
点击查看免费下载

导读

本篇文章是 AI-For-Beginners 课程 NLP 章节「20-LangModels」的完整技术讲解,核心主题是预训练大语言模型(Pre-trained Large Language Models):为什么 GPT 这类模型无需下游任务专项训练就能解决大量 NLP 任务,如何用困惑度(Perplexity)衡量生成质量,如何通过提示工程(Prompt Engineering)与采样策略(Sampling Strategies)控制文本生成效果。读完本文,你将掌握基于 Hugging Facetransformers库调用 OpenAI GPT 模型进行文本生成与提示工程的完整实操方法,并理解 GPT 家族、beam search、temperature、top-k / top-p 等核心概念在实际代码中的含义。

从「专用模型」到「通用模型」:GPT 的范式转变

在本课程此前的任务中(参见 13-TextRep、15-LanguageModeling、16-RNN、18-Transformers 等章节),我们一直在用带标签的数据集训练神经网络去完成某一特定任务。而对于 BERT 这类大型 Transformer 模型,则先以自监督(self-supervised)的语言建模方式构建语言模型,再通过领域专属训练将其特化到具体的下游任务上——这一过程被称为迁移学习(transfer learning)。BERT 预训练时通过对大规模无标注语料(WikiPedia + 书籍)执行"预测被掩码的单词"这一任务,吸收了大量的语言理解能力(见 18-Transformers/README.md)。

然而,研究已经证明:大型语言模型可以在完全没有领域专属训练的情况下解决许多任务。能够做到这一点的一族模型被称为GPT:Generative Pre-Trained Transformer(生成式预训练 Transformer)。这一思想集中体现在论文Language Models are Unsupervised Multitask Learners中,其核心论点在于:许多其他任务都可以用「文本生成」来建模——因为理解文本本质上就意味着能够生成文本;而模型在海量涵盖人类知识的文本上训练,自然也就具备了关于各个领域的广泛知识。

理解并能够产出文本,也意味着对周围世界有所了解。人类在很大程度上也是通过阅读来学习的,GPT 网络在这点上与人相似。

条件概率:GPT 的生成原理

文本生成网络的工作方式是预测下一个词的概率 $P(w_N)$。但下一个词的无条件概率只等于该词在语料库中出现的频率。GPT 能够给出的是在给定前文条件下的条件概率:

$$ P(w_N \mid w_{N-1}, \dots, w_0) $$

正是这种"根据前文预测下一个词"的机制,使模型在续写文本时展现出对世界知识的把握。

文本生成质量度量:困惑度(Perplexity)

语言生成模型的质量可以用困惑度(Perplexity)来定义。它是一个内在指标(intrinsic metric),允许我们在不借助任何任务专属数据集的情况下衡量模型质量。

  • 其基础是句子的概率这一概念:模型会给"更像真实文本"的句子分配高概率(即模型不会被它"搞糊涂");
  • 反之,对不太合理的句子(如Can it does what?)给出低概率。

当我们把真实语料中的句子喂给模型时,期望它们具有高概率、从而低困惑度。数学上,困惑度被定义为测试集概率的归一化倒数:

$$ \mathrm{Perplexity}(W) = \sqrt[N]{1\over P(W_1,\dots,W_N)} $$

直观理解:困惑度越低,模型对真实文本的"意外程度"越低,生成质量越好。

GPT 是一个家族

GPT 并非单一模型,而是由 OpenAI 开发训练的一系列模型。课程文档给出的家族概览如下:

| GPT-2 | GPT-3 | GPT-4 | | -- | -- | -- | | 语言模型,参数量最高 15 亿(1.5 billion) | 语言模型,参数量最高 1750 亿(175 billion) | 100T 参数,同时接受图像与文本输入并输出文本 |

GPT-3 和 GPT-4 模型可通过 Microsoft Azure 的认知服务(Azure OpenAI Service)以及 OpenAI API 获取。

提示工程(Prompt Engineering)

由于 GPT 在海量数据上训练以理解语言和代码,它会针对输入(即提示 / prompt)给出输出。提示是 GPT 的输入或查询,用户通过它向模型下达要完成任务的指令。要获得期望的结果,需要设计最有效的提示——这涉及选择合适的词、格式、短语甚至符号。这一方法即提示工程(Prompt Engineering)。

在本仓库的配套 Notebook GPT-PyTorch.ipynb 中,提示工程被直观地演示出来:同一个openai-gpt生成器,仅通过更换不同的提示前缀,就能承担同义词查询、情感倾向预测、翻译示例、电影推荐等多种任务。

实战一:用 Hugging Face Transformers 实例化文本生成管线

课程提供了完整的示例 Notebook GPT-PyTorch.ipynb,其核心代码如下:

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)

执行后返回 5 段以给定前缀开头的续写文本,例如:

[{'generated_text': "Hello! I am a neural network, and I want to say that i apologize for not coming to you yourself, for not helping you, ..."}, ... ]

参数说明

| 参数 | 作用 | | -- | -- | |model_name| 使用的预训练模型标识符,示例为openai-gpt(即 OpenAI GPT 原始模型);也可换为gpt2等 | |pipeline('text-generation', ...)| Hugging Face 提供的文本生成任务管线,自动完成分词、模型加载与解码 | |max_length| 生成文本的最大长度(含提示部分),示例为 100 | |num_return_sequences| 一次返回的候选续写条数,示例为 5 |

首次运行会从 Hugging Face Hub 下载模型权重、词表(vocab.json)与合并规则(merges.txt)等文件。从 Notebook 中的输出可见,加载openai-gpt时会出现类似"Some weights of OpenAIGPTLMHeadModel were not initialized ... ['position_ids']"的提示,这是该模型在库中新增的参数,不影响直接做推理与生成。

运行环境准备

课程 NLP 章节建议在本地安装依赖后运行 Notebook,PyTorch 与 TensorFlow 分别对应:

pip install -r lessons/5-NLP/requirements-pytorch.txt pip install -r lessons/5-NLP/requirements-tf.txt

其中 PyTorch 依赖清单(见 lessons/5-NLP/requirements-pytorch.txt)包含transformers、torch、nltk、gensim、scikit-learn等 NLP 常用库。由于训练大模型耗时较长,NLP 章节首页 特别提醒:优先使用带 GPU 的机器运行 Notebook;若遇到 GPU 显存不足,可考虑减小 minibatch 大小;老版本 TensorFlow 在一个 Python kernel 中训练多个模型时可能不释放显存,可通过tf.config.experimental.set_memory_growth(physical_devices[0], True)配置按需增长式分配显存。

实战二:提示工程五连击

在 Notebook 中,同一个生成器通过设计不同提示即可"零训练"完成多种任务:

1. 同义词查询

generator("Synonyms of a word cat:", max_length=20, num_return_sequences=5)

2. 情感倾向(zero-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 / in-context learning用法。

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)

5. 开放式故事续写

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)

以上示例均运行于 GPT-PyTorch.ipynb。值得注意的是,早期openai-gpt模型的 zero-shot 翻译/情感能力相对有限,输出会混入噪声;新一代 GPT-3/GPT-4 在这些任务上的表现显著更强。提示格式的选择(分隔符、示例数量、措辞)会直接决定输出质量,这正是提示工程的核心价值。

实战三:文本采样策略(Sampling Strategies)

Notebook 进一步演示了三种主流的解码/采样策略,它们决定"下一个词如何被选中":

1. 贪心策略(Greedy)

这是最朴素的策略:每一步都选择概率最高的词。优点是确定性,缺点是一旦选错后续难以纠正,容易产生重复、平庸的文本。前面大部分示例默认采用该策略。

2. 束搜索(Beam Search)

束搜索允许生成器同时探索多个方向(束 / beams),并最终挑选整体得分最高的候选,得到更连贯、更合理的输出:

generator(prompt, max_length=100, num_return_sequences=5, num_beams=10, no_repeat_ngram_size=2)

| 参数 | 作用 | | -- | -- | |num_beams| 同时探索的束的数量,越大搜索越充分、开销越高 | |no_repeat_ngram_size| 惩罚模型重复指定大小的 n-gram。设为 2 表示避免连续出现相同的二元组,显著降低文本重复 |

3. 随机采样(Sampling)

采样根据模型返回的概率分布非确定性地选取下一个词:

generator(prompt, max_length=100, do_sample=True, temperature=0.8)
  • do_sample=True:开启随机采样;
  • temperature:控制随机性/确定性。temperature 越低模型越接近贪心、输出越保守;越高则越发散、更具创造性。

采样还可以配合两个剪枝参数使用:

| 参数 | 作用 | | -- | -- | |top_k| 只考虑概率最高的前 K 个候选词,最小化选到"奇怪的低概率词"的概率 | |top_p| 选择概率之和刚好大于 p的最小候选子集(核采样 nucleus sampling),与 top-k 思路类似但更动态 |

Notebook 明确鼓励读者自行实验top_k与top_p与上述参数组合,观察对生成效果的影响。

进阶:Fine-Tuning 微调模型

如果你希望调整生成文本的风格,同时保留语言模型绝大部分能力,可以对模型在你的数据集上进行微调(fine-tuning)。这是从"通用语言模型"走向"领域/风格适配"的常规路径,也是课程所介绍的 GPT 使用方式的延伸——预训练提供语言与知识底座,微调与提示工程则负责把能力引导到具体用途上。

结语

新的通用预训练语言模型不仅建模了语言结构,还蕴含了海量的自然语言知识。因此,它们可以在zero-shot(零样本)或few-shot(少样本)的设置下高效解决不少 NLP 任务——这正是一条与"每个任务都要单独标注、单独训练"完全不同的技术路线。本仓库配套的 GPT-PyTorch.ipynb 是理解这一范式的第一手实践材料,建议在安装好 NLP 依赖 后动手运行,逐一尝试提示工程与采样策略参数。

  • 教程
  • 人工智能
  • 机器学习
  • 深度学习

【免费下载链接】AI-For-Beginners

12 Weeks, 24 Lessons, AI for All!

项目地址:https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners
点击查看免费下载

相关推荐

上一篇:Kubernetes Python Client 文档本地构建指南:基于 Sphinx 从源码生成 API 文档
下一篇:医疗影像开发的终极利器:DCMTK完整指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询