
一個簡單的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培訓的格式(包括PrEDEDENDERDEND <|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沒有隸屬關係或關係。