環境構築
Google Colaboratory の導入
今回は、Pythonの実行環境として、Google Colaboratoryを使います。
Colab とは
Colab(正式名称「Colaboratory」)では、ブラウザ上で Python を記述、実行できます。以下の機能を使用できます。
・環境構築が不要
・GPU に料金なしでアクセス
・簡単に共有
Colab は、学生からデータ サイエンティスト、AI リサーチャーまで、皆さんの作業を効率化します。詳しくは、Colab の紹介動画をご覧ください。下のリンクからすぐに使ってみることもできます。
ノートブックを新規作成
ファイル名をわかりやすい名前に変更する
作成したファイルは、マイドライブ > Colab Notebooks に格納されます
ChatGPTに学習させる
学習データを用意する
学習データは、JSONL形式にする必要があります。
学習させるには、最低でも10個必要らしい。
今回は、以下のデータを作成し、ファイル名は「training_data.jsonl」としました。
{"prompt": "クレジットカードは使えますか?", "completion": "各種クレジットカード(Visa、MasterCard、JCB、American Express、DINERS 等)をご利用いただけます。\nVisa、MasterCardでは分割払い(3 / 5 / 6 / 12 / 15 / 18 / 20 / 24 回払いまで)をご利用可能です。"}
{"prompt": "希望日時の予約が取れません。", "completion": "一日にご案内できるお席に限りがあり、ご予約が取りづらい状況でご迷惑をおかけしております。"}
{"prompt": "予約は必要ですか?", "completion": "予約制となっております。"}
{"prompt": "確認メールが届きません", "completion": "詳しくは<a href='https://google.com' target='_blank'>こちらのページ</a>をご確認ください。"}
{"prompt": "商品Aの値段はいくらですか?", "completion": "1000円(税別)です。"}
{"prompt": "商品Bの値段はいくらですか?", "completion": "2000円(税別)です。"}
{"prompt": "商品Cの値段はいくらですか?", "completion": "3000円(税別)です。"}
{"prompt": "商品Dの値段はいくらですか?", "completion": "4000円(税別)です。"}
{"prompt": "商品Eの値段はいくらですか?", "completion": "5000円(税別)です。"}
{"prompt": "商品Fの値段はいくらですか?", "completion": "6000円(税別)です。"}
用意したJSONLデータをアップロードする
今回は ChatGPT-FineTune.ipynb と同階層にアップします。
Google Drive をマウントさせる
Google Drive 上のファイルを読み込めるようにマウントさせます。
OpenAI のインストール
# openai のインストール
!pip install openai
学習データファイルのアップロード
import os
from openai import OpenAI
# APIキーとモデル名を設定
API_KEY = "your-api-key"
MODEL = "gpt-4o-mini"
os.environ["OPENAI_API_KEY"] = API_KEY
client = OpenAI()
# 学習データファイルのアップロード
training_file = client.files.create(
file=open("/content/drive/MyDrive/Colab Notebooks/training_data.jsonl", "rb"),
purpose="fine-tune"
)
# 確認
print(training_file)
id=’file-xxxxx’
という id が返ってくるので控えておく。
ファインチューニング実行
# ファインチューニングの開始
from openai import OpenAI
client = OpenAI()
fine_tune_job = client.fine_tuning.jobs.create(
training_file="file-xxxxx",
model=MODEL
)
実行結果
BadRequestError: Error code: 400 –
{‘error’: {
‘message’: ‘Model gpt-4o-mini is not available for fine-tuning or does not exist.’,
‘type’: ‘invalid_request_error’,
‘param’: None,
‘code’: ‘model_not_available’
}}
え、、、
gpt-4o-mini はファインチューニングに対応していない??
公式のドキュメントを見てみる。
Fine-tuning is currently available for the following models:
- gpt-4o-2024-08-06
- gpt-4o-mini-2024-07-18
- gpt-4-0613
- gpt-3.5-turbo-0125
- gpt-3.5-turbo-1106
- gpt-3.5-turbo-0613
- babbage-002
- davinci-002
確かに gpt-4o-mini は記載されていない。
gpt-4o-mini-2024-07-18 に変更してみたところ、実行時のエラーは出なくなった。
ファインチューニングの実行ステータスの確認
from openai import OpenAI
client = OpenAI()
# 直近10件のファインチューニングの結果を表示
client.fine_tuning.jobs.list(limit=10)
実行結果
error=Error(code=’invalid_training_file’,
message=’The job failed due to an invalid training file. Invalid file format. Input file file-xxxxx is in the prompt-completion format, but the specified model gpt-4o-mini-2024-07-18 is a chat model and requires chat-formatted data. See https://platform.openai.com/docs/guides/fine-tuning/preparing-your-dataset for details.’, param=’training_file’)
うーん、、データの形式に問題があるとのこと、、、
jsonl ファイルをチャット形式の形に整形してみる。
{"messages":[{"role":"user","content":"クレジットカードは使えますか?"},{"role":"assistant","content":"各種クレジットカード(Visa、MasterCard、JCB、American Express、DINERS 等)をご利用いただけます。\nVisa、MasterCardでは分割払い(3 / 5 / 6 / 12 / 15 / 18 / 20 / 24 回払いまで)をご利用可能です。"}]}
{"messages":[{"role":"user","content":"希望日時の予約が取れません。"},{"role":"assistant","content":"一日にご案内できるお席に限りがあり、ご予約が取りづらい状況でご迷惑をおかけしております。"}]}
{"messages":[{"role":"user","content":"予約は必要ですか?"},{"role":"assistant","content":"予約制となっております。"}]}
{"messages":[{"role":"user","content":"確認メールが届きません"},{"role":"assistant","content":"詳しくは<a href=\"https://google.com\" target=\"_blank\">こちらのページ</a>をご確認ください。"}]}
{"messages":[{"role":"user","content":"商品Aの値段はいくらですか?"},{"role":"assistant","content":"1000円(税別)です。"}]}
{"messages":[{"role":"user","content":"商品Bの値段はいくらですか?"},{"role":"assistant","content":"2000円(税別)です。"}]}
{"messages":[{"role":"user","content":"商品Cの値段はいくらですか?"},{"role":"assistant","content":"3000円(税別)です。"}]}
{"messages":[{"role":"user","content":"商品Dの値段はいくらですか?"},{"role":"assistant","content":"4000円(税別)です。"}]}
{"messages":[{"role":"user","content":"商品Eの値段はいくらですか?"},{"role":"assistant","content":"5000円(税別)です。"}]}
{"messages":[{"role":"user","content":"商品Fの値段はいくらですか?"},{"role":"assistant","content":"6000円(税別)です。"}]}
再度実行
client.fine_tuning.jobs.list(limit=10)
FineTuningJob(
id=’ftjob-xxxxx’,
created_at=1724984458,
error=Error(code=None, message=None, param=None),
fine_tuned_model=None,
finished_at=None,
hyperparameters=Hyperparameters(n_epochs=10, batch_size=1, learning_rate_multiplier=1.8),
model=’gpt-4o-mini-2024-07-18′,
object=’fine_tuning.job’,
status=’running’,
trained_tokens=None,
training_file=’file-xxxxx’,
estimated_finish=1724984869,
)
10分後
FineTuningJob(
id=’ftjob-xxxxx’,
created_at=1724984458,
error=Error(code=None, message=None, param=None),
fine_tuned_model=’ft:gpt-4o-mini-2024-07-18:personal::xxxxx’, ← これが作成された
finished_at=1724984873,
hyperparameters=Hyperparameters(n_epochs=10, batch_size=1,
model=’gpt-4o-mini-2024-07-18′,
object=’fine_tuning.job’,
status=’succeeded’, ← 成功!
trained_tokens=3690,
training_file=’file-xxxxx’,
estimated_finish=None,
)
学習したモデルを使ってみる
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="ft:gpt-4o-mini-2024-07-18:personal::xxxxx",
messages=[
{"role": "system", "content": "あなたは優秀なカスタマーサポートです。"},
{"role": "user", "content": "予約しなくても行けますか?"}
]
)
print(completion.choices[0].message)
実行結果
予約制となっております。
動いた!!!
けどjsonlの形式の問題は引っかかるなぁ、、
コメント