GPT2-Chinese 是中文的GPT2训练代码,闲来无事拿来玩玩,别说还真挺有趣 在此记录下安装和使用过程,以便以后遗忘时来此翻阅
首先安装 python3.7
3.5-3.8版本应该都可以,但为尽量减少错误,还是使用了3.7 + pycharm
创建项目目录+git clone
-
F盘下创建 gpt2chinese文件夹
-
从 github.com/Morizeyao/G… 拉取源码
进入 F:\gpt2chinese,shift+右键,打开 powser shell
拉取代码
git clone https://github.com/Morizeyao/GPT2-Chinese.git .
创建虚拟环境
python -m venv .
激活
.\scripts\activate
安装依赖
pip install -r requirements.txt
torch 单独安装cpu版,如果安装提示 cloud not found ,请确认使用的是 python3.5 - 3.8
pip install torch==1.5.1+cpu torchvision==0.6.1+cpu -f https://download.pytorch.org/whl/torch_stable.html
复制代码
pip install 遇到的问题
在这一步遇到了几处错误,以及安装成功后运行中遇到的 get_config 无法使用的错误,均与此处有关。 transformers tensorflow keras 版本必须固定,且 keras和tensorflow版本必须匹配,否则会出现 兼容错误 from tensorflow.python.eager.context import get_config 报错
如果单独安装
pip install transformers==2.1.1
pip install tensorflow==2.0.1
pip install keras==2.3.1
复制代码
安装完成后,项目结构如下,data和dist目录为自行创建
各目录用途
-
cache 文件夹内包含若干BERT词表, vocab.txt 是原始BERT词表, vocab_all.txt 额外添加了古文词, vocab_small.txt 是小词表。 make_vocab.py 是一个协助在一个train.json语料文件上建立词表的脚本。
-
config 存放参数配置文件
-
scripts 内包含了样例训练与生成脚本
-
dist 为自行创建,用于存放生成的文本
-
data 为自行创建,用于存放原始语料
-
model 是模型目录,下载的pytorch_model 模型均放在此目录下
-
generate.py 与 train.py 分别是生成与训练的脚本。
-
train_single.py 是 train.py的延伸,可以用于一个很大的单独元素列表(如训练一本斗破苍穹书)。
-
eval.py 用于评估生成模型的ppl分值。
-
generate_texts.py 是 generate.py 的延伸,可以以一个列表的起始关键词分别生成若干个句子并输出到文件中。
-
train.json 是训练样本的格式范例,可供参考。
-
tokenizations 文件夹内是可以选用的三种tokenizer,包括默认的Bert Tokenizer,分词版Bert Tokenizer以及BPE Tokenizer。
下载模型
我使用了3个模型
-
通用中文模型: pan.baidu.com/s/16x0hfBCe…
下载后解压到 项目目录的 model/tongyong 文件夹下,包含3个文件
pytorch_model.bin
vocab.txt
config.json
-
散文模型 pan.baidu.com/s/1nbrW5iw3…
下载后解压到 项目目录的 model/sanwen 文件夹下,包含3个文件
pytorch_model.bin
vocab.txt
config.json
,如果不存在后2个文件,直接从 models/tongyong 中复制
模型放置如图
需要注意的问题
- 上方提过的版本对应
- 所有 txt 文件和config.json 文件保存为 utf-8 编码,否则可能遇到各种编码报错
- 如果生成和训练时仍提示 gbk decoder等报错,打开 对应py文件,给 open 方法添加参数
encoding="utf-8"
使用下载的模型生成文章
- 先使用散文模型试试,个人比较喜欢这个
在项目根目录下,激活虚拟环境后
python ./generate.py
--length=500 文本长度
--nsamples=2 示例个数
--prefix='难道我就这样过我的一生' 写个开头,剩下的交给GPT2了
--model_path model/sanwen 模型路径
--tokenizer_path model/sanwen/vocab.txt 模型词库
--model_config model/sanwen/config.json 词库配置
--fast_pattern
--save_samples 保存生成的文本,否则控制台直接输出
--save_samples_path=./dist 文本生成到dist目录
复制代码
python ./generate.py --length=500 --nsamples=1 --prefix='难道我就这样孤独一生' --tokenizer_path model/sanwen/vocab.txt --model_path model/sanwen --model_config model/sanwen/config.json --fast_pattern --save_samples --save_samples_path=./dist
复制代码
生成的效果
散文模型生成效果
通用中文模型效果