推荐一个 GitHub 项目: Morizeyao / GPT2-Chinese
Chinese version of GPT2 training code, using BERT tokenizer.
作者是 AINLP 交流群里的杜则尧同学, 提供了一份 中文的 GPT2 训练代码, 使用 BERT 的 Tokenizer. 可以写诗, 新闻, 小说, 或是训练通用语言模型. 支持字为单位或是分词模式. 支持大语料训练. 推荐 Star, 项目链接, 点击阅读原文可以直达:
https://github.com/Morizeyao/GPT2-Chinese
以下来在该项目主页描述.
- GPT2-Chinese
- Description
Chinese version of GPT2 training code, using BERT tokenizer. It is based on the extremely awesome repository from HuggingFace team Pytorch-Transformers. Can write poems, news, novels, or train general language models. Support char level and Word level. Support large training corpus.
中文的 GPT2 训练代码, 使用 BERT 的 Tokenizer. 可以写诗, 新闻, 小说, 或是训练通用语言模型. 支持字为单位或是分词模式. 支持大语料训练.
项目状态
目前项目主要架构已经稳定. 如发现任何 bug 或是有功能意见与改进欢迎提交 Issue,PR 或是联系作者.
使用方法
在项目根目录建立 data 文件夹. 将训练语料以 train.JSON 为名放入 data 目录中. train.JSON 里是一个 JSON 列表, 列表的每个元素都分别是一篇要训练的文章.
运行 train.py 文件, 勾选 --raw , 会自动预处理数据.
预处理完成之后, 直接运行 train.py 文件, 即可开始训练.
文件结构
generate.py 与 train.py 分别是生成与训练的脚本.
train_single.py 是 train.py 的延伸, 可以用于一个很大的单独元素列表 (如训练一本书).
eval.py 用于评估生成模型的 ppl 分值.
generate_texts.py 是 generate.py 的延伸, 可以以一个列表的起始关键词分别生成若干个句子并输出到文件中.
train.JSON 是训练样本的格式范例, 可供参考.
cache 文件夹内包含若干 BERT 词表, make_vocab.py 是一个协助在一个 train.JSON 语料文件上建立词表的脚本. vocab.txt 是原始 BERT 词表, vocab_all.txt 额外添加了古文词, vocab_small.txt 是小词表, no_word_piece 的是没有 Word piece 的词表.
tokenizations 文件夹内是可以选用的三种 tokenizer, 包括默认的 Bert Tokenizer, 分词版 Bert Tokenizer 以及没有 Word piece 的 Bert Tokenizer.
注意
本项目使用 Bert 的 tokenizer 处理中文字符.
如果使用分词版的 tokenizer, 不需要自己事先分词, tokenizer 会帮你分.
如果使用分词版的 tokenizer, 最好先使用 cache 文件夹内的 make_vocab.py 文件建立针对你的语料的词表.
模型需自行运算. 各位如果完成了预训练的话欢迎进行交流.
如果你的内存非常大或者语料较小的话, 可以改掉 train.py 内 build files 内的对应代码, 不做拆分直接预处理语料.
语料
可以从这里与这里下载.
斗破苍穹语料可以从这里下载.
FP16 与 Gradient Accumulation 支持
我在 train.py 文件中加入了 fp16 与 gradient accumulation 支持, 如果你安装了 apex 并且知道 fp16 是什么的话, 可以修改变量 fp16=True 来启用. 但是目前 fp16 不收敛, 原因不明.
联系作者
- QQ: 330501241
- Mail: ned1991@gmail.com
- Citing
- @misc{GPT2-Chinese,
- author = {Zeyao Du},
- title = {GPT2-Chinese: Tools for training GPT2 model in Chinese language},
- year = {2019},
- publisher = {GitHub},
- journal = {GitHub repository},
- howpublished = {\url{https://github.com/Morizeyao/GPT2-Chinese}},
- }
生成样例可以在 GitHub 页面查看, 点击阅读原文直达.
来源: http://www.tuicool.com/articles/qARz6by