
OpenAIのGPT-2テキスト生成モデル(具体的には「小」124mおよび「中」355mハイパーパラメーターバージョン)の既存のモデルの微調整および生成スクリプトをラップするシンプルなPythonパッケージ。さらに、このパッケージを使用すると、テキストの生成が容易になり、簡単にキュレーションのためにファイルに生成され、プレフィックスが特定のフレーズでテキストを強制的に開始させます。
このパッケージには、以下に最小限の低レベルの変更が組み込まれています。
Finetuningの場合、GPUを使用することを強くお勧めしますが、CPUを使用して生成できます(はるかにゆっくりですが)。クラウドでトレーニングをしている場合は、Colaboratory NotebookまたはTensorflow Deep Learningイメージを備えたGoogle Compute Engine VMを使用して強くお勧めします。 (GPT-2モデルがGCPでホストされているため)
GPT-2-SIMPLEを使用して、このコラボリトリーノートブックでGPUを無料で使用してモデルを再訓練することができます。
注:GPT-2-Simpleの開発は、より効率的なトレーニング時間とリソースの使用を備えた同様のAIテキスト生成機能を備えたAitextgenによって主に重ねられています。 Tensorflowを使用する必要がない場合は、代わりにAitextgenを使用することをお勧めします。 GPT-2-Simpleを使用してトレーニングされたチェックポイントは、Aitextgenを使用してロードできます。
GPT-2-Simpleは、Pypi経由でインストールできます。
pip3 install gpt-2-simpleまた、システムに対応するTensorflow 2.xバージョン(min 2.5.1)をインストールする必要があります( tensorflowまたはtensorflow-gpuなど)。
モデルをローカルシステムにダウンロードする例で、データセットで微調整します。テキストを生成します。
警告:前払いされた124mモデル、したがって触覚モデルは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またはボットなど)。
single_text = gpt2 . generate ( sess , return_as_list = True )[ 0 ]
print ( single_text ) checkpointフォルダーに複数のモデルを保存/ロードする場合は、 run_nameパラメーターをfinetuneおよびload_gpt2に渡すことができます。
また、FinetuningとGenerationの両方にコマンドラインインターフェイスがあり、クラウドVM w/ GPUで実行するだけの強力なデフォルトがあります。 Finetuningの場合(存在しない場合はモデルもダウンロードします):
gpt_2_simple finetune shakespeare.txtそして、 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でトレーニングするのに最適な形式に自動的に解析されます( <|startoftext|> suffixing <|endoftext|>をすべてのテキストドキュメントに送信するため、上記のtruncateトリックは出力を生成するときに役立ちます)。これは、各テキストドキュメントの引用符とニューラインの両方を正しく処理するために必要です。nsamplesに分割できるbatch_sizeを設定することにより、並行してテキストを生成でき、生成がはるかに高速になります。 GPUで非常にうまく機能します(ColaboratoryのK80でbatch_size最大20まで設定できます)!batch_size=1 、およびV100 GPUの約88%でもGPUの100%を使用しています。overwrite=Trueを設定します。これにより、複製コピーを作成せずにトレーニングを継続し、モデルの以前の反復を削除できます。これは、転送学習に特に役立ちます(1つのデータセットでGPT-2を大量にFintune GPT-2、その後、他のデータセットでFinetuneで両方のデータセットの「マージ」を取得します)。gpt2.encode_dataset(file_path)を使用してデータセットを事前エンコードして圧縮することをお勧めします。出力は圧縮された.npzファイルで、FinetuningのためにGPUにはるかに速くロードされます。gpt2.load_gpt2(sess, model_name='774M')およびgpt2.generate(sess, model_name='774M')を使用して、デフォルトの事前処理モデルから引き続き生成できます。マックスウルフ(@minimaxir)
マックスのオープンソースプロジェクトは、彼のパトレオンによってサポートされています。このプロジェクトが役立つと感じた場合、パトレオンへの金銭的貢献は高く評価されており、創造的な使用になります。
mit
このレポは、Openaiとの所属や関係はありません。