GPT-2(Generative Pre-trained Transformer 2)是由 OpenAI 于 2019 年发布的自然语言生成模型,是 GPT 系列的第二代模型。它的推出标志着预训练语言模型在生成任务中的巨大潜力,对自然语言处理(NLP)领域产生了深远影响。
一、GPT-2 简介
项目 | 说明 |
---|---|
发布机构 | OpenAI |
发布时间 | 2019年 |
模型结构 | Transformer Decoder-only(仅解码器结构) |
输入方式 | 左到右的自回归输入 |
预训练任务 | 语言建模(预测下一个词 token) |
主要特点 | 强大的文本生成能力,无需任务特定结构 |
GPT-2 是一种自回归语言模型,即基于前面的 token 来预测下一个 token,例如:
P(x) = P(x₁) * P(x₂|x₁) * P(x₃|x₁,x₂) * ...
二、GPT-2 的模型规模
GPT-2 共发布了多个版本,主要区别在于参数量和性能。
模型版本 | 参数量 | 层数 | 隐藏层维度 | 注意力头数 |
---|---|---|---|---|
GPT-2 Small | 117M | 12 | 768 | 12 |
GPT-2 Medium | 345M | 24 | 1024 | 16 |
GPT-2 Large | 762M | 36 | 1280 | 20 |
GPT-2 XL | 1.5B | 48 | 1600 | 25 |
三、模型架构特点
-
Decoder-only Transformer:使用标准 Transformer 解码器结构,不包含编码器。
-
位置编码:采用 绝对位置编码。
-
自回归训练:预测下一个词 token。
-
没有任务头(head):直接使用预训练输出即可迁移到各种下游任务。
-
使用 Byte-Pair Encoding (BPE):对文本分词,提高处理灵活性。
四、使用 GPT-2:Hugging Face 示例
pip install transformers
1. 文本生成(最常见用法)
from transformers import GPT2Tokenizer, GPT2LMHeadModel
import torch
# 加载预训练模型和分词器
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
# 输入提示词
input_text = "The future of AI is"
inputs = tokenizer.encode(input_text, return_tensors="pt")
# 生成文本
outputs = model.generate(inputs, max_length=50, num_return_sequences=1, do_sample=True)
print(tokenizer.decode(outputs[0]))
五、GPT-2 的优点
强大的文本生成能力,语法自然,连贯度高
无需 fine-tuning 即可零样本推理(zero-shot)
可迁移到摘要、翻译、问答、对话、故事生成等任务
Hugging Face 上直接可用,便于实践部署
六、GPT-2 的缺点
仅使用左到右建模,缺乏双向语境理解能力(相较于 BERT)
无法自然处理分类、相似度判断等判别任务
输入长度较短(512 或 1024 tokens)
不擅长编码结构化信息(如表格、代码)
七、微调 GPT-2 做特定任务
GPT-2 最常见的微调方式是 语言建模微调 或 条件文本生成。
例如:让 GPT-2 在法律文本、医学文本等特定语料上继续训练,即可用于专属领域的自动写作或回答任务。
使用 Trainer
和 TextDataset
也可以快速进行微调:
from transformers import GPT2Tokenizer, GPT2LMHeadModel, TextDataset, DataCollatorForLanguageModeling, Trainer, TrainingArguments
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")
dataset = TextDataset(
tokenizer=tokenizer,
file_path="your_data.txt",
block_size=128
)
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False)
training_args = TrainingArguments(
output_dir="./gpt2-finetuned",
per_device_train_batch_size=2,
num_train_epochs=3
)
trainer = Trainer(
model=model,
args=training_args,
data_collator=data_collator,
train_dataset=dataset
)
trainer.train()
八、典型应用场景
任务 | 是否适合 GPT-2 | 说明 |
---|---|---|
文本生成 | ✅ 非常擅长 | 如续写、写故事、聊天、剧本、邮件 |
问答 | ✅ 条件生成式可用 | 输入问题,生成答案 |
对话系统 | ✅ 与 prompt 结合 | 基于上下文生成对话 |
摘要生成 | ✅ 条件语言建模 | 输入正文,生成摘要 |
情感分类等判别任务 | ❌ 需额外设计输出层 | 不如 BERT 直接 |
九、GPT-2 vs BERT vs GPT-3
特性 | GPT-2 | BERT | GPT-3 |
---|---|---|---|
架构 | Decoder-only | Encoder-only | Decoder-only |
任务风格 | 生成(生成式) | 判别(分类/回归) | 生成(零样本多任务) |
输入方向 | 左到右 | 双向 | 左到右 |
参数规模 | 1.5B(最大) | 340M(BERT-L) | 175B(GPT-3) |
十、总结
GPT-2 是一款经典的预训练生成模型,其影响力至今仍在延续。作为 GPT 系列的重要一代,它在自然语言生成、对话、创意写作等领域广泛应用。虽然 GPT-3、GPT-4 更加先进,但 GPT-2 依然是轻量、开源、可微调的首选方案之一。