概要
Open AI APIのモデルを自分好みにチューニング(調整)するFine-tuningを行う。
Microsoftは微調整と呼んでいるが意味としては同じである。
ChatGPTでも入力に学習させたいデータを入れることで性格や情報を記憶させることは可能だが、この方法だと情報が再学習されたり使用されるトークン数が膨大になったりするため、簡易的なものに過ぎず業務利用も現実的では無い。
環境構築
以下の環境でFine-tuningを行う。
Windows11
Python3.9
前提として、pythonのインタープリターとpipをWindowsのpathに通しておく必要がある。
環境によって詳細は異なるが、python.exeとpip.exeが存在するディレクトリをPathという名の環境変数に設定しておく。
openaiのPythonライブラリをインストールしておく。
pip install openai
Fine-turning
まずはモデルに学習したい情報を整理する。
OpenAI APIでは入力をprompt、出力をcompletionと呼び、これらの組み合わせを学習していくことになるので、対になるように整理しておくと楽になる。
学習させる情報はjson形式でもCSVでも入力できる。ただし、体裁があっていないとAPIに怒られてしまう。以下に今回学習に使用するデータを示す。文字コードはUTF-8指定。本当は数百の情報を入れないと実用性が無い。
prompt,completion
こんにちは,はいはい
テスト,おいしいごはんです。
トヨタ,世界一の完成車メーカー
アンパンマン総合ランキング1位,てんどんまん
[
{
"prompt": "こんにちは",
"completion": "はいはい"
},
{
"prompt": "テスト",
"completion": "おいしいごはんです。"
},
{
"prompt": "トヨタ",
"completion": "世界一の完成車メーカー"
},
{
"prompt": "アンパンマン総合ランキング1位",
"completion": "てんどんまん"
}
]
(トヨタさんすみません。やなせたかしさんすみません。)
ファイルさえ作ることができれば、あとはコマンドを叩くだけで完了する。
openai tools fine_tunes.prepare_data -f tune.json
これにより学習に使用可能なjsonl形式に変換される。
tune_prepared.jsonlというファイルが作成されるので、次のコマンドで実際に学習される。
openai api fine_tunes.create -t tune_prepared.jsonl -m ada
モデルはada, babbage, curie, davinciから選ぶことができる。
このコマンドは途中で中断されてしまう可能性が高く、APIからもコマンドを再開できる以下のようなコマンドを案内される。
openai api fine_tunes.follow -i <一意のID>
これを何度か叩くと学習が完了する。(10回くらい叩いてもダメだったので、30分くらい待ってから実行したらいけました。)
最後に次のようなコマンドが案内される。
openai api completions.create -m davinci:<今回作成したモデル名> -p <YOUR_PROMPT>
YOUR_PROMPTの部分に好きな語句を入れると返答が返ってくる。
openai api completions.create -m <今回作成したモデル名> -p アンパンマン総合ランキング1位は何ですか?
どんどん世界に広が
はいはいどんどんまん
openai api completions.create -m <今回作成したモデル名> -p トヨタとはどんな企業?
トヨタとはどんな企業?世界一の完成車メーカー
openai api completions.create -m <今回作成したモデル名> -p こんにちは
こんにちは)はいはいはいはいはいはいは
正直まともな日本がどうか怪しいレベルである。。。
かなり精度は低いが、それとなく学習させたデータを返そうとしていることは伺える。
まとめ
今回はOpenAI APIを利用してdavinciモデルにFine-tuningを実施した。
davinciモデルに4組のプロンプトしか学習させていないためか、ChatGPTのGTI3.5やGPT4モデルのようなレベルの会話を実現することはできなかった。
しかし、学習させたデータが出力に影響することを確認することができた。
これを使用して独自のデータや個人的な情報をFine-tuningさせることで、オリジナルのAIを容易に作成することが可能となる。
さらにAPIを使用しているので入力が再学習される恐れがなく、業務での使用も期待できる。