https://github.com/abhaskumarsinha/Corpus2GPT
MinimalGPT ロゴ" width="20%" style="max-width: 100%;">
[ GPT-1 Paper
] [ 1002 short stories from project guttenberg
] [ logo.com
] [ Transformer - Paper
] [ Huggingface Transformers
] [ TensorFlow
] [ BPE Tokenizer: subword-nmt
]
MinimalGPTは、GPT モデルの構築、トレーニング、推論、微調整に必要な必須コンポーネントを網羅する、簡潔で適応性のある合理化されたコード フレームワークです。このフレームワークは Keras と TensorFlow のみを使用して実装されており、より広範な深層学習エコシステム内での互換性と一貫性が保証されています。
NEW: CPU/GPU/TPU のサポートと大きなファイル データセットのロードのサポート!
リポジトリでは、私たちが提案するフレームワークを構成する 2 つの統合ファイルを紹介します。最初のファイルGPT.py は基本的なフレームワークとして機能し、ブロックやレイヤーなどの重要なコンポーネントを含みます。これらのコンポーネントには、マルチヘッド アテンション、フィードフォワード メカニズム、スケーリングされたドット積アテンション、位置エンコーディング、ソフトマックス出力、モデル予測のための推論関数が含まれます。 2 番目のファイルMinimalGPT .pyは、簡潔なコマンドライン インターフェイスを提供することでフレームワークの利用を合理化します。このインターフェイスにより、ユーザーはモデルの作成、トレーニング、保存、ロード、微調整、推論などの重要な操作をすべて 1 つのコマンド ライン実行に凝縮して簡単に実行できます。さらに、ファイルは Python コードに簡単にインポートできるため、ユーザーは簡単な関数呼び出しを通じてファイルをプロジェクトにシームレスに組み込むことができます。
pip install -r requirements.txt
モデル アーキテクチャは、 GPT_INPUT、D_MODEL、MULTI_HEAD 、 DECODER_STACKSなどのいくつかの重要なパラメーターによって制御されます。後続の再トレーニングまたは推論プロセスのためのモデルの読み込みに関連する問題を防ぐために、これらのパラメーターの一貫性を確保することが不可欠です。不確実性が生じる状況では、前回の実行中に生成された構成ファイルを参照すると、貴重な洞察が得られる可能性があります。さらに、 VOCABULARY_STARTパラメーターとVOCABULARY_ENDパラメーターは、コーパスのウィンドウ マーカーを定義する際に重要な役割を果たします。これらのマーカーは、指定された START および END トークン数の範囲内でコーパスから語彙を抽出する Vectorizer レイヤーの生成に役立ちます。コーパス内のトークンは空白で区切られており、トークン ファイルが明示的に指定されていない場合は、 VOCABULARY_STARTとVOCABULARY_ENDを含めることが特に重要になることに注意することが重要です。
また、トークナイザー ファイルとモデルの重みの両方が一度に保存/ロードされることに注意してください。現在、コードはこれら 2 つのファイルを個別に保存/ロードすることをサポートしていません。
推論モード (-i) では、推論データを生成するためにモデル パラメーターと保存されたトークナイザーと重みファイルが必要になるだけではありません。 (-ol) スイッチと一緒に使用する必要があります。
usage: MinimalGPT .py [-h] [-d DATA_PATH] [-l LEARNING_RATE]
[-ol OUTPUT_LENGTH] [-e EPOCHS] [-b BATCH_SIZE]
[-s GPT_INPUT] [-dm D_MODEL] [-p MULTI_HEAD]
[-ds DECODER_STACKS] [-ts TOKEN_START] [-te TOKEN_END]
[-vs VOCABULARY_START] [-ve VOCABULARY_END] [-sd]
[-lt LOAD_TOKENIZER] [-lw LOAD_WEIGHTS]
[-st SAVE_TOKENIZER] [-sw SAVE_WEIGHTS] [-ot OPTIMIZER]
[-i] [-mv] [-mvo]
optional arguments:
-h, --help show this help message and exit
-d DATA_PATH, --data-path DATA_PATH
File: Corresponding to corpus or training text
[String]
-l LEARNING_RATE, --learning-rate LEARNING_RATE
Float: Learning Rate. The model will train ONLY IF the
rate is > 0, skip otherwise [Float]
-ol OUTPUT_LENGTH, --output-length OUTPUT_LENGTH
Length of the output sequence to be generated
-e EPOCHS, --epochs EPOCHS
Number of training Epochs [Int]
-b BATCH_SIZE, --batch-size BATCH_SIZE
Size of each batch [Int]
-s GPT_INPUT, --gpt-input GPT_INPUT
Number of Tokens of text the model inputs at a time
[Int]
-dm D_MODEL, --d-model D_MODEL
Embedding layer output dimensions [Int]
-p MULTI_HEAD, --multi-head MULTI_HEAD
Number of Multi-head Attention layer in parallel [Int]
-ds DECODER_STACKS, --decoder-stacks DECODER_STACKS
Number of stacked Decoder layer [Int]
-ts TOKEN_START, --token-start TOKEN_START
The token number in the corpus to mark it as the
starting point of the training [Int]
-te TOKEN_END, --token-end TOKEN_END
The token number in the corpus to mark it as the end
point of the training [Int]
-vs VOCABULARY_START, --vocabulary-start VOCABULARY_START
Token number from the corpus to mark the starting
point of vocabulary data [Int]
-ve VOCABULARY_END, --vocabulary-end VOCABULARY_END
Token number from the corpus to mark the end point of
vocabulary data [Int]
-sd, --save Save the Model and Vectorizer data to disk
[True/False]
-lt LOAD_TOKENIZER, --load-tokenizer LOAD_TOKENIZER
File: Vectorization layer [File]
-lw LOAD_WEIGHTS, --load-weights LOAD_WEIGHTS
File: Model Weights [File]
-st SAVE_TOKENIZER, --save-tokenizer SAVE_TOKENIZER
File: Saving Vectorizer File [File]
-sw SAVE_WEIGHTS, --save-weights SAVE_WEIGHTS
File: Saving Model Weights[File]
-ot OPTIMIZER, --optimizer OPTIMIZER
Optimizer consistent to TensorFlow optimizer class
[tf.keras.optimizers]
-i, --inference-only Only Print the output of the model in Inference Mode
[True/False]
-mv, --model-vectorizer
Return Model, Vectorizer Tuple [True/False]
-mvo, --model-vectorizer-output
Return Model, Vectorizer, Output Tuple [True/False]
必要なモデル仕様に GPT_INPUT = 10、D_MODEL = 128、MULTI_HEAD = 8、および DECODER_STACKS = 1 が含まれ、トレーニング用のコーパス トークン範囲が TOKEN_START = 0 から TOKEN_END = 40000 までであり、次のコーパス スパンからベクトル化層を生成すると仮定します。 VOCABULARY_START = 0 ~ VOCABULARY_END = 200000 の場合、次のコマンドが実行されてモデルのトレーニング プロセスが開始されます。結果の重みとトークナイザー データは、指定されたフォルダーに保存されます。後続の出力は、このコマンドの実行結果を示しています。
PS C:gpt> python MinimalGPT .py -d './dataset/output_dataset.txt' -l 0.001 -ol 200 -e 4 -b 512 -s 10 -dm 128 -p 8 -ds 1 -ts 0 -te 40000 -vs 0 -ve 200000 -sd -st './models/tokenizer.mgt' -sw './models/weights.mgw'
Total tokens: 40000
100%|██████████████████████████████████████████████████████████████████████████████| 200000/200000 [02:02<00:00, 1636.38it/s]
New Vectorizer created successfully...
Vocabulary Size: 14270
100%|██████████████████████████████████████████████████████████████████████████████| 39989/39989 [00:00<00:00, 302926.25it/s]
100%|█████████████████████████████████████████████████████████████████████████████| 39989/39989 [00:00<00:00, 1289942.19it/s]
(None, 10, 128)
Epoch 1/4
79/79 [==============================] - 88s 1s/step - loss: 7.8692
Epoch 2/4
79/79 [==============================] - 92s 1s/step - loss: 3.8066
Epoch 3/4
79/79 [==============================] - 93s 1s/step - loss: 1.1487
Epoch 4/4
79/79 [==============================] - 92s 1s/step - loss: 0.2900
100%|██████████████████████████████████████████████████████████████████████████████████████| 190/190 [00:05<00:00, 34.70it/s]
Vocabulary size saved: 14270
and her eyes in the library. She was the rather large woman, although not fat, and when she wore high heels--which sh
e was not prone to do, because although Cutter would not have cared, she kept trying to project into other people's minds and
trying, as she said, "Not to do anything to them, that I wouldn't want them to do you me."--she rose a good inch above Cutter.
She was pleasant humored, and cooperative, and the one great irritant about her that annoyed Cutter, was the fact that she wa
s not capable of meeting life wholeheartedly and with strength. She steadily worried about other people's feelings and thought
s, so that Cutter wondered if she were capable of the slightest personal conviction. Yet that weakness was an advantage at the
same time, to him, because she worked constantly toward making him happy. The house was run to his minutest liking, and the s
ervants liked her, so that while she did not use a strong enough
上記のモデルを微調整する (または再トレーニングする) 場合、トークナイザーと重みを再ロードし、コーパスの指定されたウィンドウ範囲の新しいテキストで再トレーニングするコマンドを以下に示します。
PS C:gpt> python MinimalGPT .py -d './dataset/output_dataset.txt' -l 0.00005 -ol 200 -e 1 -b 512 -s 10 -dm 128 -p 8 -ds 1 -ts 80000 -te 120000 -sd -st './models/tokenizer2.mgt' -sw './models/weights2.mgw' -lt './models/tokenizer.mgt' -lw './models/weights.mgw'
Total tokens: 40000
100%|██████████████████████████████████████████████████████████████████████████████| 39989/39989 [00:00<00:00, 302923.51it/s]
100%|█████████████████████████████████████████████████████████████████████████████| 39989/39989 [00:00<00:00, 1428099.68it/s]
(None, 10, 128)
79/79 [==============================] - 81s 993ms/step - loss: 7.9725
100%|██████████████████████████████████████████████████████████████████████████████████████| 190/190 [00:06<00:00, 30.29it/s]
Vocabulary size saved: 14270
of her own the black of my own and my wife had could seen the house at the same moment her mind caught the first sugg
estion of the folded paper. “But he must have a name! Where is the paper?” She moved to the desk, and began to turn over the s
cattered documents that littered it. The first that caught her eye was an unfinished letter in her husband’s hand, with his pe
n lying across it, as though dropped there at a sudden summons. “My dear Parvis,”--who was Parvis?--“I have just received your
letter announcing Elwell’s death, and while I suppose there is now no farther risk of trouble, it might be safer--” That was
all. The “risk of trouble” was easily explained by the newspaper clipping which had apprised Mary of the suit brought against
her husband by one of his associates in the Blue Star enterprise. The only new information conveyed in the letter was the fact
of its showing Boyne,
推論モードには、事前トレーニングされた重みとベクターライザーの読み込みが含まれます。次に、これらのコンポーネントを利用してモデルを実行し、指定された長さの出力を指定どおりに生成します。
PS C:gpt> python MinimalGPT .py -i -ol 500 -e 6 -b 512 -s 10 -dm 128 -p 8 -ds 1 -lt './models/tokenizer2.mgt' -lw './models/weights2.mgw'
(None, 10, 128)
100%|██████████████████████████████████████████████████████████████████████████████████████| 490/490 [00:13<00:00, 35.93it/s]
of her own “on the other from the inel’--a little sensational, of course. But I guess you’d better look it over.” He
held out a newspaper to Mary, who unfolded it slowly, remembering, as she did so, the evening when, in that same room, the per
usal of a clipping from the “Sentinel” had first shaken the depths of her security. As she opened the paper, her eyes, shrinki
ng from the glaring head-lines, “Widow of Boyne’s Victim Forced to Appeal for Aid,” ran down the column of text to two portrai
ts inserted in it. The first was her husband’s, taken from a photograph made the year they had come to England. It was the pic
ture of him that she liked best, the one that stood on the writing-table up-stairs in her bedroom. As the eyes in the photogra
ph met hers, she felt it would be impossible to read what was said of him, and closed her lids with the sharpness of the pain.
“I thought if you felt disposed to put your name down--” she heard Parvis continue. She opened her eyes with an effort, and t
hey fell on the other portrait. It was that of a youngish man, slightly built, in rough clothes, with features somewhat blurre
d by the shadow of a projecting hat-brim. Where had she seen that outline before? She stared at it confusedly, her heart hamme
ring in her throat and ears. Then she gave a cry. “This is the man--the man who came for my husband!” She heard Parvis start t
o his feet, and was dimly aware that she had slipped backward into the corner of the sofa, and that he was bending above her i
n alarm. With an intense effort she straightened herself, and reached out for the paper, which she had dropped. “It’s the man!
I should know him anywhere!” she cried in a voice that sounded in her own ears like a scream. Parvis’s voice seemed to come t
o her from far off, down endless, fog-muffled windings. “Mrs. Boyne, you’re not very well. Shall I call somebody? Shall I get
a glass of water?” “No, no, no!” She threw herself toward him, her hand frantically clenching the newspaper. “I tell you, it’s
the man! I KNOW him! He spoke to me in the garden!” Parvis took the journal from her, directing his glasses to the portrait.
“It can’t be, Mrs. Boyne. It’s Robert Elwell.” “Robert Elwell?” Her white
MinimalGPT .py の利用を通じて生成されたトレーニング済みモデルをプロジェクトに組み込むことは、 MinimalGPT関数をインポートし、必要な仕様に従って構成することによって容易になる簡単なプロセスです。これは、inference_only = True (推論モード) フレームワーク内でパラメーター return_model_and_vectorizer = True または return_model_and_vectorizer_and_output = True を設定することで実現できます。さらに、モデルのトレーニング、作成、エクスポートは、コマンドライン モードと並行して、同様のアプローチを使用して実行できます。これらの手順を包括的に説明するために、付属の Jupyter Notebook にサンプル デモンストレーションが用意されています。
from MinimalGPT import MinimalGPT model = MinimalGPT (output_length = 200, gpt_input = 10, d_model = 128, h = 8, decoder_stacks = 1, load_tokenizer = './models/tokenizer3.mgt', load_weights = './models/weights3.mgw', inference_only = True, return_model_and_vectorizer_and_output = True) model[0].summary()
Model: "model"
Layer (type) Output Shape Param
================================================================= input_1 (InputLayer) [(None, 10)] 0
embedding (Embedding) (None, 10, 128) 1826816
positional_embedding (Posit (None, 10, 128) 0
ionalEmbedding)
decoder (Decoder) (None, 10, 128) 37160
flatten (Flatten) (None, 1280) 0
dense (Dense) (None, 14273) 18283713
tf.nn.softmax (TFOpLambda) (None, 14273) 0
================================================================= Total params: 20,147,689 Trainable params: 20,147,689 Non-trainable params: 0
ここで実装されたモデルは、元の紙の実装と比較すると少し異なります。スケーリングされたドット積出力の先頭を連結した後に形成された行列に、サイズ キー次元 x d_model の行列パラメーターが乗算されます。実際の目的では、パラメータの数を減らすためのこの小さな調整は、トレーニング可能なパラメータの最適化により、パフォーマンスのわずかな向上につながります。