OpenAIのGPT3.5-turboを使ってファインチューニングをやってみました。方法は簡単なのですが、いくつか上手くいかない場所がありました。
今回、参考にしたのはこのサイト。
ファインチューニングとは?
ファインチューニングとは、すでに訓練されたモデル(事前訓練モデル)を特定のタスクやデータセットに適応させるための追加の訓練のことを指します。大規模なデータセットで事前に訓練されたモデルを、小さなデータセットで微調整することで、高い性能を迅速に達成することができます。
要はすでにあるGPTってやつに新しいデータを加えて、より専門的なbotを作ってしまおうってことです。
ハマったところ
データセット
リンク先のページを基本的にコピペしていけばいいのですが、データセットを見つけることができなかったので、GitHubからダウンロードしました。そして、今回のファインチューニングで使う0〜300までを抽出しました。
ファインチューニングの待機時間
以下のコードを実行すると、WebページではStatus: createdと書いてあるのですが、私の画面ではStatus: validating_filesと表示されていました。
それでも、進めていくと途中でエラーが出ました。何度もコードを見直したけど間違いが見つけられない。そこで、一旦、諦めてG-mailを見ていたらOpenAIからファインチューニング完成のメールが届いてました。
それを確認してから、進めていくと前回エラーが出たところも上手くいきました。
response = openai.FineTuningJob.create(
training_file=training_file_id,
validation_file=validation_file_id,
model="gpt-3.5-turbo",
suffix="recipe-ner",
)
job_id = response["id"]
print("Job ID:", response["id"])
print("Status:", response["status"])
あとは、特に問題もなく順調にファインチューニングが終了しました。本当に簡単です。
上記の躓きポイントだけ気をつければ大丈夫です。
実際にファインチューニングしたモデルを使ってみる。
実際にモデルを使ってみると上手くいきました。コードは以下です。
secret keyだけ入れ替えてくださいね。
import openai
openai.api_key = "secret key"
def get_completion_from_messages(messages,
id="ここに入力",
model="ここに入力",
temperature=0,
max_tokens=100):
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=temperature, # this is the degree of randomness of the model's output
max_tokens=max_tokens, # the maximum number of tokens the model can ouptut
)
return response.choices[0].message["content"]
messages = [
{'role':'system',
'content': "You are a helpful recipe assistant. You are to extract the generic ingredients from each of the recipes provided."},
{'role':'user',
'content': "1 c. flour, 1 tsp. soda, 1 tsp. salt, 1 Tbsp. sugar, 1 egg, 3 Tbsp. margarine, melted, 1 c.buttermilk"
}
]
response = get_completion_from_messages(messages, temperature=1)
print(response)
OpenAIからメールが届くので、そのメールに記載されている。
id
model
を入力したら完成です。
まとめ
ファインチューニングは初めての挑戦でしたけど、意外と簡単にできました。次は違ったデータセットを使って試してみようと思います。
次回もGPT関連かChatGPTについての記事を書こうと思っています。