项目开原地址
想用一个主题生成一篇文章,理论上是可以的,但是对模型的要求高,可能要多生成几次,夸张点说,有点像“给大猩猩足够的时间,它完全能敲出世界上任何一本书的内容”一样,如果只靠自动生成,后期不处理就直接使用的可能性不大,全当学习。
https://github.com/Morizeyao/GPT2-Chinese
安装过程
首先安装python3.7.*,python的库兼容不好,建议还是使用制定版本
- 在任意磁盘新建一个文件夹,我这里新建的是python-worker
- 拉取代码
git clone https://github.com/Morizeyao/GPT2-Chinese.git .
- 创建虚拟环境,因为python的库兼容性不好,还是在虚拟环境中搞,当前库只在这个项目中有作用
python -m venv .
- 激活
.\scripts\activate
- 安装依赖
pip install -r requirements.txt
- torch 单独安装cpu版
pip install torch==1.5.1+cpu torchvision==0.6.1+cpu -f https://download.pytorch.org/whl/torch_stable.html
- 在使用cache/make_vocab.py生成词库的时候会用到
pip install tensorflow==2.0.1
pip install keras==2.3.1
安装完成后形成下面的文件结构:
- 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 是小词表。
- tokenizations文件夹内是可以选用的三种tokenizer,包括默认的Bert Tokenizer,分词版Bert Tokenizer以及BPE Tokenizer。
- scripts 内包含了样例训练与生成脚本
- config文件夹里面包含了模型参数,训练时改变训练的词库,模型参数里的vocab_size要改成对应的数量
- data 与 dist是自建的文件夹,用于存放原始语料及生成的文本
- model 是模型目录,下载的pytorch_model 模型与生成的均放在此目录下
注意
以下操作如果乱码请在open函数中加encoding=‘utf8’,如果报错文件不存在请在open函数中的文件打开模式改成r+或者w+;
生成词库
在生成词库之前,一定在data目录里把要训练的原始语料添加好
cd cache
python make_vocab.py
不传参数默认生成vocab_processed.txt文件,词汇表大小是50000
训练原始语料
直接修改的源文件,没有使用传递参数:
–tokenizer_path 改为 default=‘cache/vocab_processed.txt’ 刚才制作的词库;
–model_config 模型文件可以不改,但是文件中的vocab_size参数一定要和使用的词库大小一致;
其他可以看源文件里面的说明进行适当修改
python train.py --raw --segment
进行训练
生成文章
训练完毕就可使用训练的模型进行文章生成,如果模型不好,生成的就是随机字,基本没什么可读性
python ./generate.py
--length=500 文本长度
--nsamples=2 示例个数
--prefix='' 写个开头,剩下的交给GPT2了
--model_path model/** 模型路径
--tokenizer_path cache/vocab_processed.txt 模型词库
--model_config model/**/config.json 词库配置
--fast_pattern
--save_samples 保存生成的文本,否则控制台直接输出
--save_samples_path=./dist 文本生成到dist目录
涉及到路径的按自己实际路径填写即可,本着学习自己训练的生成出来的基本没有可读性,我有下载了大神分享的散文模型
https://pan.baidu.com/s/1nbrW5iw34GRhoTin8uU2tQ#list/path=%2F 【fpyu】
用这个模型生成的效果不是很理想,主要是学习下。不知道GPT3是什么效果。