環境準備
% pip3 install --upgrade openai
% export OPENAI_API_KEY="sk-xxxxxxx"
// missing `pandas` のエラーが出たため
% pip3 install openai"[datalib]"
学習データの準備
CSV形式で理想の質問と答えのペアを作る。
sakai01.csv
prompt,completion
境町の自動運転バスARMAについて教えて。,境町では、ソフトバンク株式会社の子会社であるBOLDLY株式会社及び株式会社マクニカの協力のもと、自動運転バスを3台導入し、生活路線バスとして定時・定路線での運行を令和2年11月26日(木)から開始しました。なお、自治体が自動運転バスを公道で定常運行するのは、国内で初めてです。
運行時間は?,午前7時40分〜午後4時まで。土日祝日も運行。
乗車料金は?,無料です。
乗車定員は?,8名です。
openaiのコマンドツールで、csvからJSONLファイルに変換するツールが用意されていた。
% openai tools fine_tunes.prepare_data -f sakai01.csv
sakai01_prepared.jsonl
{"prompt":"境町の自動運転バスarmaについて教えて。 ->","completion":" 境町では、ソフトバンク株式会社の子会社であるBOLDLY株式会社及び株式会社マクニカの協力のもと、自動運転バスを3台導入し、生活路線バスとして定時・定路線での運行を令和2年11月26日(木)から開始しました。なお、自治体が自動運転バスを公道で定常運行するのは、国内で初めてです。 END"}
{"prompt":"運行時間は? ->","completion":" 午前7時40分〜午後4時まで。土日祝日も運行。 END"}
{"prompt":"乗車料金は? ->","completion":" 無料です。 END"}
{"prompt":"乗車定員は? ->","completion":" 8名です。 END"}
Fine-tuningの実行
% openai api fine_tunes.create -t sakai01_prepared.jsonl -m text-davinci-003
Error: Invalid base model: text-davinci-003 (model must be one of ada, babbage, curie, davinci) or a fine-tuned model created by your organization: org-xxxxx (HTTP status code: 400)
モデル指定が「GPT3.5」だとだめっぽい。davinciを指定してみる。
https://platform.openai.com/docs/models/overview
% openai api fine_tunes.create -t sakai01_prepared.jsonl -m davinci
Upload progress: 100%|███████████████████████████████████████████████████████████| 5.14k/5.14k [00:00<00:00, 2.55Mit/s]
Uploaded file from sakai01_prepared.jsonl: file-xxxxxxxxxxxx
Created fine-tune: ft-xxxxxxxxxxxx
Streaming events until fine-tuning is complete...
(Ctrl-C will interrupt the stream, but not cancel the fine-tune)
[2023-08-04 22:19:24] Created fine-tune: ft-xxxxxxxxxxxx
Stream interrupted (client disconnected).
To resume the stream, run:
openai api fine_tunes.follow -i ft-xxxxxxxxxxxx
中断したりするので、再開させる。
% openai api fine_tunes.follow -i ft-xxxxxxxxxxxx
[2023-08-04 22:19:24] Created fine-tune: ft-xxxxxxxxxxxx
[2023-08-05 00:29:34] Fine-tune costs $0.26
[2023-08-05 00:29:34] Fine-tune enqueued. Queue number: 1
[2023-08-05 00:40:42] Fine-tune started
[2023-08-05 00:43:52] Completed epoch 1/4
[2023-08-05 00:43:59] Completed epoch 2/4
[2023-08-05 00:44:07] Completed epoch 3/4
[2023-08-05 00:44:15] Completed epoch 4/4
[2023-08-05 00:44:48] Uploaded model: davinci:ft-boldly-2023-08-04-15-44-48
[2023-08-05 00:44:49] Uploaded result file: file-xxxxxxxxxxxx
[2023-08-05 00:44:50] Fine-tune succeeded
Job complete! Status: succeeded 🎉
Try out your fine-tuned model:
openai api completions.create -m davinci:ft-boldly-2023-08-04-15-44-48 -p <YOUR_PROMPT>
完了!
結果の確認
% openai api completions.create -m davinci:ft-boldly-2023-08-04-15-44-48 -p "自動運転バスの運行時間は?"
運行時間は? 通常運行は午前7%
データ量が少ないからか、こちらが想定しているような回答は返ってこない。。
参考