
一个简单的Python软件包,它包含OpenAI的GPT-2文本生成模型的现有模型微调和生成脚本(特别是“ Small” 1.24m和“ Medium” 35.5m超参数版本)。此外,此软件包允许更轻松地生成文本,生成文件以易于策划,从而使前缀迫使文本以给定的短语开始。
此包包含并使最小的低级更改为:
对于Finetuning,强烈建议使用GPU,尽管您可以使用CPU生成(尽管较慢)。如果您在云中进行训练,请强烈建议使用配色笔记本或Google Compute Engine VM(带张量深度学习图像)。 (由于GPT-2模型托管在GCP上)
您可以在此合同的笔记本中使用GPU免费使用GPP-2-simple对模型进行重新训练,该笔记本也可以将包装的其他功能演示。
注意:gpt-2-simple上的开发主要是由Aitextgen取代的,AITEXTGEN具有类似的AI文本生成功能,具有更有效的培训时间和资源使用时间。如果您不需要使用TensorFlow,建议您改用AitextGen。也可以使用AITEXTGEN加载使用GPT-2-simple训练的检查点。
可以通过PYPI安装GPT-2简单:
pip3 install gpt-2-simple您还需要为系统安装相应的Tensorflow 2.x版本(Min 2.5.1)(例如tensorflow或tensorflow-gpu )。
将模型下载到本地系统的示例,将其在数据集上进行列表。并生成一些文字。
警告:预处理的12400万型号,因此任何易登模型的模型为500 MB! (预估计的355m型号为1.5 GB)
import gpt_2_simple as gpt2
import os
import requests
model_name = "124M"
if not os . path . isdir ( os . path . join ( "models" , model_name )):
print ( f"Downloading { model_name } model..." )
gpt2 . download_gpt2 ( model_name = model_name ) # model is saved into current directory under /models/124M/
file_name = "shakespeare.txt"
if not os . path . isfile ( file_name ):
url = "https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt"
data = requests . get ( url )
with open ( file_name , 'w' ) as f :
f . write ( data . text )
sess = gpt2 . start_tf_sess ()
gpt2 . finetune ( sess ,
file_name ,
model_name = model_name ,
steps = 1000 ) # steps is max number of training steps
gpt2 . generate ( sess )生成的模型检查点默认为/checkpoint/run1 。如果要从该文件夹加载模型并从中生成文本:
import gpt_2_simple as gpt2
sess = gpt2 . start_tf_sess ()
gpt2 . load_gpt2 ( sess )
gpt2 . generate ( sess )与TextGenrnn一样,您可以使用return_as_list参数生成并保存文本以供以后使用(例如API或BOT)。
single_text = gpt2 . generate ( sess , return_as_list = True )[ 0 ]
print ( single_text )如果要在checkpoint文件夹中存储/加载多个模型,则可以将run_name参数传递给finetune和load_gpt2 。
还有一个命令行界面,用于FineTuning和Generation,surn of flaunting和GENTERS的生成符号仅在cloud VM w/ gpu上运行。对于登录(如果不存在的话,也将下载该模型):
gpt_2_simple finetune shakespeare.txt对于Generation,它在gen文件夹中生成了文件的文本:
gpt_2_simple generate功能中可用的大多数相同参数都可以作为CLI参数,例如:
gpt_2_simple generate --temperature 1.0 --nsamples 20 --batch_size 20 --length 50 --prefix " <|startoftext|> " --truncate " <|endoftext|> " --include_prefix False --nfiles 5请参阅下面查看一些CLI论点。
NB:如果要在另一个数据集上进行FINETUNE或加载另一个模型,请首先重新启动Python会话。
GPT-2用于生成文本的方法与像TextGenrnn这样的其他软件包(特别是,纯粹在GPU中生成全文序列并稍后将其解码)略有不同,在不侵入基础模型代码的情况下,它无法轻易修复。因此:
truncate参数传递到generate函数仅收集文本,直到指定的末端令牌为止。您可能需要适当地减少length 。)prefix ,以及针对末端令牌序列的truncate 。您还可以在生成时设置include_prefix=False以丢弃前缀令牌(例如,如果它是不需要的东西,例如<|startoftext|> )。.csv文件传递到finetune() ,则它将自动将CSV解析为使用GPT-2培训的格式(包括Preperding <|startoftext|>和后缀<|endoftext|>对每个文本文档,因此上面的truncate技巧在生成输出时很有用)。这对于正确处理每个文本文档中的引号和新线是必要的。nsamples batch_size并行生成文本,从而导致生成更快。与GPU一起工作非常好(可以在Colaboratory的K80上设置最多20个batch_size )!batch_size=1和V100 GPU的约88%的情况下,P100即使使用GPU的100%。overwrite=True设置为Finetune,该模型将继续训练并删除模型的先前迭代而不创建重复副本。这对于转移学习特别有用(例如,一个数据集上的finetune gpt-2,然后在另一个数据集上的finetune以获取两个数据集的“合并”)。gpt2.encode_dataset(file_path)预先键盘并压缩数据集。输出是一个压缩的.npz文件,它将加载到GPU中以进行填充。gpt2.load_gpt2(sess, model_name='774M')和gpt2.generate(sess, model_name='774M')从默认的预审预修模型生成。Max Woolf(@minimaxir)
Max的开源项目得到了他的Patreon的支持。如果您发现该项目有帮助,那么对Patreon的任何货币捐款都将受到赞赏,并将得到良好的创造性使用。
麻省理工学院
此存储库与Openai没有隶属关系或关系。