仓库简介#
GPT2-Chinese 是 中文 GPT-2 预训练与文本生成 代码仓库,基于 Hugging Face Transformers 实现,使用 BERT Tokenizer 完成中文分词,支持 字级 / 词级 / BPE 级 三种粒度,可用于中文文本生成、古诗词生成、对联生成、文言文生成、中文歌词生成、小说续写、对话系统等中文 NLP 场景。2021 年 4 月大版本使用 PyTorch Lightning + Transformers 重写训练与预测流程,在易用性与维护性上得到明显提升。
仓库包含两部分配套:
- 代码:在中文大规模语料上预训练 GPT-2 模型,支持通用中文、古诗词、对联、文言文、中文歌词等多种垂类场景;提供
train.py/train_single.py/generate.py/generate_texts.py/eval.py全流程脚本。 - 教程:配套「跟我一起学深度学习」第 10 章系列教程,从 GPT-1 原理、Transformer 自注意力机制,到 GPT-2 中文预训练与 ChatGPT 演进,配套 PyTorch 教程与可视化代码。
适用人群#
- 想深入理解 中文 GPT-2 预训练模型(基于 BERT Tokenizer、字级 / 词级 / BPE 级)的研究 / 工程人员;
- 想训练中文古诗词、对联、文言文、歌词、小说等垂类文本生成模型的 NLP 开发者;
- 想从零搭建中文语言模型预训练 pipeline 的 PyTorch Lightning 实战学习者;
- 想使用现成中文 GPT-2 模型做中文文本生成、对话、续写的应用工程师;
- 教学场景中需要"中文分词 + 预训练 + 文本生成"完整闭环的讲师与学生。
内容结构#
train.py/train_single.py— 训练入口:加载语料 → BERT WordPiece / BPE / 字级分词 → 构造训练样本 → GPT-2 中文预训练;generate.py/generate_texts.py— 推理入口:加载 checkpoint,对输入前缀(带[CLS]起始符)做自回归生成,输出中文续写文本;eval.py— 中文文本生成评测脚本;train.json— 训练语料,每行一个 JSON 对象(建议大规模中文语料);config/— 模型配置:model_config.json:标准 GPT-2 中文模型配置;model_config_small.json:轻量 GPT-2 中文模型配置;model_config_test.json:测试用配置;
tokenizations/— 中文分词实现:tokenization_bert.py:BERT WordPiece 分词器(默认使用 BERT 中文词表);tokenization_bert_word_level.py:BERT 词级分词;bpe_tokenizer.py:BPE 分词器实现;encoder.json/vocab.bpe:BPE 编码表与词表;thulac_dict/:THULAC 中文分词词典(词级模式使用);
scripts/—train.sh/generate.sh一键训练与生成脚本;cache/— 训练缓存目录;sample/— README 中的中文文本生成样例(散文、斗破苍穹、古诗词、金庸武侠小说等);requirements.txt— PyTorch Lightning、Transformers 等 Python 依赖。
配套章节#
以下 4 讲系统讲解 GPT 系列模型原理与中文 GPT-2 预训练实战,覆盖 GPT-1 生成式预训练、GPT-2/3 模型结构对比、中文 GPT-2 预训练代码实践与 InstructGPT/ChatGPT 演进,均配套 PyTorch Python 实现与可视化代码,是中文文本生成与预训练语言模型入门到实战的完整教程。
| 章节 | 重点小节 |
|---|---|
| 第 13 讲 GPT-1 原理 | GPT-1 原理:生成式预训练模型入门 |
| 第 14 讲 GPT-2 与 GPT-3 | GPT-2 与 GPT-3:模型结构、数据规模与能力差异 |
| 第 15 讲 GPT-2 中文预训练 | 基于 GPT-2 的中文预训练模型:中文生成模型实践 |
使用方式#
1. 环境准备#
git clone https://github.com/Morizeyao/GPT2-Chinese.git
cd GPT2-Chinese
pip install -r requirements.txt依赖包含 PyTorch Lightning、Hugging Face Transformers 等。中文分词使用 BERT Tokenizer,可直接加载 bert-base-chinese 中文词表。
2. 准备训练语料#
把语料放到 train.json,每行一个 JSON 对象,例如:
{"text": "青砖黛瓦马头墙,徽派建筑是江南水乡最具辨识度的传统民居形制之一。"}
{"text": "夜雨寄北,唐代诗人李商隐在巴山夜雨时写下的千古名篇。"}支持大规模中文语料训练(古诗、宋词、文言文、歌词、小说等皆可)。
3. 训练 GPT-2 中文模型#
python train.py # 完整训练(多卡 / Lightning)
# 或
python train_single.py # 单卡训练训练配置可在 config/model_config.json 中调整(层数、隐藏维度、注意力头数、词表大小等)。
4. 中文文本生成#
训练完成后用 generate.py 加载 checkpoint 做中文文本生成,输入需带 [CLS] 起始符:
python generate.py示例(古诗词生成):
[CLS]梅山如积翠,
——模型续写:日落映残红,云深锁翠峰。示例(中文歌词生成、对话生成)同样可在 scripts/generate.sh 中一键调用。
预训练模型分享#
仓库作者与社区训练并公开了多类 GPT-2 中文预训练模型,可直接下载使用:
| 模型 | Hugging Face | 适用场景 |
|---|---|---|
| 通用中文 GPT-2 预训练模型 | uer/gpt2-chinese-cluecorpussmall | 中文文本生成、对话、续写 |
| 通用中文 GPT-2 轻量模型 | uer/gpt2-distil-chinese-cluecorpussmall | 中文文本生成、低资源部署 |
| 中文歌词 GPT-2 预训练模型 | uer/gpt2-chinese-lyric | 中文歌词生成 |
| 文言文 GPT-2 预训练模型 | uer/gpt2-chinese-ancient | 文言文生成 |
| 古诗词 GPT-2 预训练模型 | uer/gpt2-chinese-poem | 古诗词生成 |
| 对联 GPT-2 预训练模型 | uer/gpt2-chinese-couplet | 对联生成(输入格式:“上联-下联”) |
使用所有模型时,需在输入文本前加 [CLS] 起始符,例如「最美的不是下雨天,是曾与你躲过雨的屋檐」应写作 [CLS]最美的不是下雨天,是曾与你躲过雨的屋檐。
生成样例#
以下是我们使用原仓库作者提供的与训练模型测试的生成样例,讲解过程可参见「基于GPT-2的中文预训练模型:中文生成模型实践」:
(gpt2) root@moon:~/GPT2-Chinese# python generate.py
Namespace(batch_size=1, device='0', fast_pattern=False, length=512, model_config='model/config.json',
model_path='model/pytorch_model.bin', n_ctx=1024, no_wordpiece=False, nsamples=10,
prefix='先帝创业未半而中道崩殂', repetition_penalty=1.0, save_samples=False, save_samples_path='.',
segment=False, temperature=1, tokenizer_path='model/vocab.txt', topk=8, topp=0)
57%|███████████████████████▍ | 293/512 [00:04<00:03, 63.98it/s]
[CLS] 先 帝 创 业 未 半 而 中 道 崩 殂 , 天 下 之 人 痛 悼 流 涕 , 故 以 其 所 居 之 宫 而 奉 之 。 及 其 即
位 , 复 奉 居 于 此 , 其 所 居 宫 , 犹 如 旧 制 。 至 其 子 孙 有 以 其 父 之 丧 而 居 于 此 者 , 则 又 如
旧 制 矣 。 然 其 居 之 者 又 皆 不 过 如 故 事 。 [SEP] 之 于 宫 , 则 不 能 不 为 之 起 居 于 此 也 ; 之 于
宫 , 则 亦 不 能 不 为 之 起 居 于 此 也 。 今 日 之 宫 , 则 又 非 所 谓 居 于 宫 者 矣 , 而 况 其 子 孙 乎 ?
[SEP] 之 于 宫 之 为 言 则 不 可 以 不 正 矣 。 故 不 可 曰 宫 , 亦 不 可 曰 宫 , 而 况 其 子 孙 乎 ? [SEP]
子 孙 以 为 子 孙 而 居 于 宫 , 则 非 其 子 孙 而 何 也 ? 是 故 其 居 也 , 则 必 使 居 于 其 宫 ; 其 居 也 ,
则 必 使 居 于 其 宫 ; 其 居 也 , 又 必 使 居 于 其 宫 。 不 然 , 则 又 何 为 其 不 正 其 居 之 宫 也 ? 不
然 , 则 不 正 其 居 之 宫 之 宫 也 ......中文文本生成典型场景:
- 文学散文生成 — 130MB 语料 + 10 层 GPT-2 + 10 轮训练,得到高质量中文散文生成模型;
- 小说续写 — 斗破苍穹、金庸武侠小说等垂类语料训练,得到风格化的小说续写;
- 古诗词生成 — 律诗、绝句、各类词牌(浣溪沙、江城子、蝶恋花、满江红)生成;
- 剧本生成 — 都市、爱情、创业等题材的中文剧本创作;
- CDial-GPT 对话 — 严格清洗的大规模放开域中文对话数据集与对话生成样例。