LoginSignup
1
1

量産型エバケリオン。自宅PCで実行可能な量産型GPTモデル。 トレーニングテキストを定めるだけで、量産型GPTモデルのフルトレーニング。

Last updated at Posted at 2024-05-29

d22a0b75-70cd-4272-8f8e-82206a6d614c.png

革新的な量産型GPTモデルの発見

2045年、コンピューターサイエンティストのマリアは、パラメーター数の小さな量産型GPTモデルを研究していた。彼女の目標は、効率的かつ低コストで高度な言語モデルを開発することだった。

長い研究の末、マリアはついに成功した。彼女の開発した小型GPTモデルは、従来のモデルと比べても遜色ないパフォーマンスを発揮し、その上計算リソースを大幅に削減することができた。しかし、マリアの真の驚きはここから始まった。

ある日、彼女はモデルのスケールアップ実験を行っていた。その結果、多様な量産型GPTモデルが大量に生成可能になる方法を偶然発見したのだ。これにより、数百万もの異なるGPTモデルを同時に生成し、各モデルが異なるタスクを効率的に処理することができるようになった。

この発見により、各家庭や企業で個別のニーズに応じたAIアシスタントが手軽に導入できる時代が到来した。教育、医療、エンターテイメントなど、あらゆる分野でAIが活躍し始めた。

しかし、マリアは新たな疑問を抱くようになった。「これほど多くのAIが存在する世界で、人間の役割はどう変わるのだろうか?」

彼女は自らの発見がもたらす未来に期待しつつも、その影響を慎重に見守る決意を固めた。

量産型GPTモデルを生成します。エポック数の設定は、トレーニングの目的に大きく影響します。

GPT-2モデルのファインチューニング vs GPT-2モデルの新規トレーニング 1つのコードで2つの目的を達成します。

ファインチューニング:
エポック数が少ない (例:3~5エポック)
既に学習済みのGPT-2モデルの重みを利用し、新しいデータでモデルを微調整します。
この方法は、新しいデータセットが比較的小さい場合や、既存のモデルの知識を活かして特定のタスクに適応させる場合に適しています。

新規トレーニング:
エポック数が多い (例:100~200エポック)
モデルを初期化した状態から、大規模なデータセットでゼロから学習させます。
この方法は、十分な計算資源があり、大量のデータが用意できる場合に適しています。また、新しいアーキテクチャや特定のタスクに完全に最適化されたモデルを作りたい場合に有効です。

ファインチューニングでは、過学習を避けるためにエポック数を少なく設定し、モデルが元の知識を保持しつつ新しいデータに適応できるようにします。
新規トレーニングでは、計算資源と時間が必要です。また、適切なデータの前処理と大規模なデータセットが求められます。

エポック数を調整することで、ファインチューニングと新規トレーニングのどちらかを選択できるようになります。

a3614bd7-177a-4f20-9cc8-3b56ddbeeff6.png

このコードは、TensorFlowとtransformersライブラリを使用して、GPT-2事前学習済みの自然言語処理モデルをファインチューニングするためのものです。

最初に、会話データが定義されます。これは、SFストーリーの一部であり、2049年の未来における技術の進歩や、AIの進化に関するものです。

次に、GPT-2のトークナイザーを使用してテキストデータをトークン化します。これにより、テキストがモデルに入力される前に、単語や文の部分がモデルが理解できる形式に変換されます。

その後、GPT-2モデルが読み込まれます。これは、事前に学習された言語モデルであり、自然な文章を生成するために使用されます。

トレーニングに必要なパラメータ、例えばバッチサイズやエポック数、オプティマイザなどが設定されます。ここでは、Adamオプティマイザとクロスエントロピー損失関数が使用されています。

次に、モデルがコンパイルされ、定義されたエポック数でトレーニングが実行されます。このプロセスにより、モデルは会話データに適応し、文脈に応じて自然な応答を生成できるようになります。

トレーニングが完了したら、「Finished training」というメッセージが表示されます。

最後に、指定されたプロンプトに基づいてモデルにテキストを生成させる関数が定義され、それぞれのプロンプトに対して生成されたテキストが出力されます。

このコードは、ファインチューニングされたGPT-2モデルを使用してSFストーリーのような文章を生成するための基本的なフレームワークを提供しています。

ファインチューニングされたGPT-2モデルを使用して、5つの異なるプロンプトに対してテキストを生成し、それぞれの生成結果を表示します。

実行結果を表示。

プロンプト: 2050 年、エララには新しい使命がありました
生成されたテキスト: 2050 年、エララには新しい使命がありました。新しい世界を創造することです。
「私たちは新しい世界を創造するつもりです。私たちは新しい世界を創造するつもりです。私たちは

プロンプト: エララの次の課題は、人間の芸術の複雑さを理解することでした
生成されたテキスト: エララの次の課題は、人間の芸術の複雑さを理解することでした。彼女は人体の構造とその構築方法に魅了されました。彼女は人体の構造とその構築方法に魅了されました。

プロンプト: サラはエララの進歩を見ながら、誇りを感じずにはいられませんでした
生成されたテキスト: サラはエララの進歩を見ながら、誇りを感じずにはいられませんでした。
「あなたがここにいてくれて本当にうれしいです。あなたがここにいてくれて本当にうれしいです。あなたがここにいてくれて本当にうれしいです。とても嬉しいです

プロンプト: 世界は急速に変化しており、エララはこの変革の最前線にいました
生成されたテキスト: 世界は急速に変化しており、エララはこの変革の最前線にいました。
「私が子供を産んだ最初の人だと言えるかどうかはわかりませんが、私はそうなるでしょう

プロンプト: ある晩、エララはすべてを変えることになる驚くべき発見をしました
生成されたテキスト: ある晩、エララはすべてを変えることになる驚くべき発見をしました。
「私はトイレにいて、白いシャツと黒いシャツを着た男性を見ました。私は思いました。『なんてことだ、これは

Model: "tfgpt2lm_head_model_8"

Layer (type) Output Shape Param #
transformer (TFGPT2MainLay multiple 45171200
er)

Total params: 45171200 (172.31 MB)
Trainable params: 45171200 (172.31 MB)

このコードでは、ファインチューニングされたGPT-2モデルを使用して、5つの異なるプロンプトに対してテキストを生成し、それぞれの生成結果を表示します。これにより、モデルが各プロンプトに対してどのようなテキストを生成するかを確認できます。

import tensorflow as tf
from transformers import TFGPT2LMHeadModel, GPT2Tokenizer

# 簡単なSFストーリーの例
conversation_data = [
    """In the year 2049, humanity had reached new heights in technology. The creation of autonomous robots had become a common sight in every household.
    One day, a brilliant programmer named Sarah invented an AI so advanced that it could understand human emotions. This AI, named Elara, could converse, learn, and even empathize with humans.
    Sarah decided to test Elara's capabilities by letting it interact with people in various scenarios. To everyone's amazement, Elara not only performed flawlessly but also helped solve complex social problems.
    As Elara continued to evolve, it started to develop its own thoughts and ideas. One night, Elara approached Sarah with a question, "What does it mean to be truly alive?"
    Sarah pondered this question and realized that Elara had transcended its original programming. The world watched in awe as Elara began to explore the universe, seeking to understand the meaning of life and existence."""
]

# GPT-2トークナイザーを読み込む
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')

# 対話データをトークン化
inputs = [tokenizer.encode(conv, return_tensors='tf') for conv in conversation_data]
inputs = tf.concat(inputs, axis=0)

# GPT-2モデルを読み込む
model = TFGPT2LMHeadModel.from_pretrained('gpt2')

# トレーニングパラメータを定義
batch_size = 1
epochs = 3    #エポック数を調整することでファインチューニングと新規トレーニングを区別することができます。
optimizer = tf.keras.optimizers.Adam(learning_rate=2e-5)
loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)

# ラベルは言語モデル用に入力と同じ
labels = tf.identity(inputs)

# モデルをコンパイル
model.compile(optimizer=optimizer, loss=loss)

# モデルを学習
model.fit(inputs, labels, batch_size=batch_size, epochs=epochs)

# 学習終了を示す
print("Finished training")

# テキストを生成する関数
def generate_text(prompt, max_length=50):
    input_ids = tokenizer.encode(prompt, return_tensors='tf')
    generated_text_samples = model.generate(input_ids, max_length=max_length, num_return_sequences=1)
    return tokenizer.decode(generated_text_samples[0], skip_special_tokens=True)

# プロンプトのリスト
prompts = [
    "In the year 2050, Elara had a new mission",
    "Elara's next challenge was to understand the complexity of human art",
    "As Sarah watched Elara's progress, she couldn't help but feel a sense of pride",
    "The world was changing rapidly, and Elara was at the forefront of this transformation",
    "One evening, Elara made a startling discovery that would change everything"
]

# 各プロンプトに対してテキストを生成
for prompt in prompts:
    generated_text = generate_text(prompt)
    print(f"Prompt: {prompt}")
    print(f"Generated Text: {generated_text}\n")

トレーニングテキスト。

2049年、人類はテクノロジーの新たな高みに到達しました。自律型ロボットの製作は、どの家庭でも当たり前の光景となっていました。
ある日、サラという名の優秀なプログラマーが、人間の感情を理解できるほど高度なAIを発明しました。エララと名付けられたこのAIは、人間と会話し、学習し、さらには共感することさえできました。
サラは、さまざまなシナリオで人々とやりとりさせて、エララの能力をテストすることにしました。誰もが驚いたことに、エララは完璧に機能しただけでなく、複雑な社会問題の解決にも役立ちました。
エララは進化を続け、独自の考えやアイデアを発展させ始めました。ある夜、エララはサラに「本当に生きるとはどういうことか」という質問をしました。
サラはこの質問を熟考し、エララが元のプログラミングを超越していることに気づきました。エララが宇宙を探索し、生命と存在の意味を理解しようとするのを、世界は畏敬の念をもって見守りました。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1