GPT-3.5 turboのモデルにfine-tuningの機能が追加!使ってみた結果…w

ついに!
GPT3.5のモデルにfine-tuningの機能が追加されました^^
今までGPT3までだったんですが3.5でもfine-tuning出来るようになりました!
【そもそもfine-tuningって何??】
GPT-4に聞いてみました!高校生でもわかるように説明してとゆって聞いた結果がこちら↓

了解しました!高校生にわかりやすく説明するための比喩を使って、GPT-3のファインチューニングについて説明します。

想像してみてください。あなたが自分の好きなゲームを遊びたいと思ったとき、最初は基本的なルールや操作方法を学びます。これがGPT-3の「事前学習」のステップに相当します。この段階で、GPT-3は大量のテキストデータを学習して、言語を理解する基本的な能力を持っています。
しかし、特定のゲームの上級テクニックや独自の戦略を身につけたいと思ったら、そのゲームのプロや経験者からアドバイスをもらったり、特訓を受けたりすることが考えられます。これが「ファインチューニング」に相当します。GPT-3は特定のタスクやトピックに特化したデータを使って、さらに学習を深めることができます。
例えば、医学に関する質問に答えるような特定の能力をGPT-3に持たせたい場合、医学のテキストデータを使ってファインチューニングを行います。これにより、GPT-3はその特定のトピックに関する知識や表現方法をさらに磨き上げることができるのです。

要するに、ファインチューニングは、GPT-3の基本的な言語能力をさらに特化させたり、向上させたりするための追加学習のステップです。ゲームの基本ルールを学ぶことが「事前学習」、上級テクニックや独自の戦略を学ぶことが「ファインチューニング」と考えると、理解しやすいかと思います。

GPT-4

GPTに別途、専門知識を補足することで回答の精度が上がる、
それがfine-tuningという理解で大体あってると思う。。。
既にOpenAIのAPIを使ったことある人ならわかると思いますが、
プロンプトに仕込んでるsystemとかのmessagesをmodelに仕込めちゃいます。

では早速使ってみましょう。
①まずはfine-tuningするファイルを用意。

test.json

{"messages": [{"role": "system", "content": "何言われてもぶひと答えて"}, {"role": "user", "content": "あなた豚のものまねしてる?"}, {"role": "assistant", "content": "はい!ぶたのものまねしてますぶひ!"}]}
{"messages": [{"role": "system", "content": "何言われてもぶひと答えて"}, {"role": "user", "content": "体重何キロ?"}, {"role": "assistant", "content": "500キロぶひ!"}]}
{"messages": [{"role": "system", "content": "何言われてもぶひと答えて"}, {"role": "user", "content": "好きな食べ物は?"}, {"role": "assistant", "content": "ポークぶひ!"}]}

こんな感じで。
ぶひぶひしゃべる豚さんを作ってみようと思います。

②test.jsonlをアップロード

curl https://api.openai.com/v1/files \
  -H "Authorization: Bearer your_APIKEY" \
  -F "purpose=fine-tune" \
  -F "file=@test.json"

ファイルをアップロード。

成功するとこんな感じで↓


{
"object": "file",
"id": "IDが発行される",
"purpose": "fine-tune",
"filename": "test.json",
"bytes": 2124,
"created_at": 1692857333,
"status": "uploaded",
"status_details": null
}

新しくidが発行されます。そのidを使って↓

curl https://api.openai.com/v1/fine_tuning/jobs \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your_APIKEY" \
  -d '{"training_file": "新しく発行されたid", "model": "gpt-3.5-turbo-0613"}'

ファインチューニングしてみると…

 has 3 example(s), but must have at least 10 examples

おや。
ファインチューニングする例の数が少ないらしい。
公式でも3つだったから3つで送ってみたが、最低10個と言われてしまうw

仕方なく10個用意。コピペ。ぶひぶひぶひ。

10個用意してもう一度アップロードからやり直してファインチューニング実施すると…

こんな感じで帰ってきます↓

{"object":"fine_tuning.job","id":your_id","model":"gpt-3.5-turbo-0613","created_at":1692857363,"finished_at":null,"fine_tuned_model":null,"organization_id":"your_org_id","result_files":[],"status":"created","validation_file":null,"training_file":"your_file","hyperparameters":{"n_epochs":10},"trained_tokens":null}

statusがcreatedなのでまだ作成中です。
ファインチューニングは時間がかかることもあるっぽいです。
そんな時は


curl https://api.openai.com/v1/fine_tuning/jobs/your_job_id
-H "Authorization: Bearer your_APIKEY"

↑をたたくと今の状態を教えてくれます。
"status"がsuccededになったらファインチューニングしたモデルが使えます!!
"fine_tuned_model"のところに使うmodelが現れます。
それをコピペして


openai.ChatCompletion.create(
    model= "コピペしたモデル",
    temperature= 0.4,
    messages= messages
)

こんな感じで使う。
で、会話用のGUIも用意していたので早速ファインチューニングした
豚さんと会話してみました。

あれ?

全然語尾にぶひとかつけてくれねえ。
失敗か?と思ったら・・・

自分の体重が500キロであるという設定が出てきた


語尾のぶひとかの設定は全然言ってくれないので、こういうのはファインチューニングじゃなくて今まで通り普通にsystemで仕込むといいかも?

ただ、体重は設定どおり答えてくれました^^

あとは、今回無理矢理コピペで10個サンプルを作ったのでちゃんと別々のデータを用意してテストした方がよかったかも。
今確認したらsystemで「何を言われても語尾にぶひを入れて」と
入れたつもりが「何を言われてもぶひと答えて」になってたので、
あんまりぶひぶひ言ってくれなかったのかも…。
キャラ設定を仕込むというよりは、やはりメタ知識を覚えさせるのがよさそう。

ファインチューニングで意図した通りにモデルを設計する方法を
今後も検証していきたいですね。
今回はすぐ使ってみたくて急ぎでテストしたのでサンプルデータがあまりよろしくなかったので、ちゃんとしたデータを用意して近いうちもう一回検証して記事にしてみます。
それでは(^^)

公式:https://openai.com/blog/gpt-3-5-turbo-fine-tuning-and-api-updates
有料記事のご紹介!:https://note.com/flymywife/n/nd368d341bd1a


いいなと思ったら応援しよう!