OpenAI APIには簡単にファインチューニング出来る機能があるので、ファインチューニングしてみることにしました。
※この記事は連作の2/2です。※前回はこちら
前回作成したツールを用いて100程のデータを用意したので、こちらを用いてdavinciをファインチューニングします。(現在、ファインチューニング出来るモデルでdavinciが一番使いやすいため、davinciを使用しました。)
OpenAIのAPIのファインチューニングはOpenAIのサーバーで行われ、長期的に実行中にする必要はないので、今回はGoogle colabを使用します。
手順は、davinciをファインチューニングするだけです。
davinciをファインチューニングする
まずdavinciをファインチューニングするデータをGoogle colabで使用するGoogleアカウントのドライブに保存します。
次にGoogle colabで新規ノートブックを開き、Google colabからGoogle ドライブにアクセスして、ファインチューニングするデータを読み込めるように以下の操作を行います。
Googleドライブをマウントする
写真の赤枠のマークを押す。メニューが開いたら、ドライブに接続を押す。
次に、以下をインストールします。
!pip install --upgrade pip
!pip install setuptools wheel
!pip install openai
以下を実行してファインチューニングを行います。
実行前にコードに以下を入れてください。
openai_api_keyには、openaiのキー
ft_datasetには、ファインチューニングするデータのパスかID
ft_modelには、ファインチューニングするベースのモデル(2023年6月1日時点だと、ada, babbage, curie, davinci)
ft_filenameには、ファインチューニング後のモデル名の一部
# 入力事項
openai_api_key = "" # openaiのキー
ft_dataset = "" # ファインチューニングするデータのパスかID
ft_model = "" # ファインチューニングするベースのモデル(2023年6月1日時点だと、ada, babbage, curie, davinci)
ft_filename = "" # ファインチューニング後のモデル名の一部
# ファインチューニングを申し込む
!OPENAI_API_KEY={openai_api_key} openai api fine_tunes.create -t {ft_dataset} -m {ft_model} --suffix ft_filename
fine_tuned_modelが生成されるまで待ちます。生成までに数時間かかる場合があるようです。
以下のコードのyour-fine-tune-job-idに、先程の実行後に生成されたID(openai api fine_tunes.follow -iの後のft-からの部分)を入れて実行するとファインチューニング状況を確認出来ます。
import openai
# openai_api_key = "" # openaiのキー
openai.api_key = openai_api_key
# ファインチューニング状況の確認
fine_tune = openai.FineTune.retrieve('your-fine-tune-job-id')
print(fine_tune)
以下を実行するとファインチューニングしたモデルのリストを確認出来ます。
# openai_api_key = "" # openaiのキー
!OPENAI_API_KEY={openai_api_key} openai api fine_tunes.list
fine_tuned_modelが生成されたらファインチューニングしたモデルを試してみます。
以下のコードに、fine_tuned_modelにはファインチューニングしたモデルと、textには任意のプロンプトを入れて実行します。
import openai
# openai_api_key = "" # openaiのキー
fine_tuned_model = ""
text = ""
response = openai.Completion.create(
model=fine_tuned_model,
prompt=text,
max_tokens=100
)
print(response.choices[0].text.strip())
元のモデルと違った返答が返ってきたら成功です!
※以前、私が作成したトトというキャラクターを学習したdavinciに、「トトとは?」と聞いたら、以下のような返答をしました。かなりイマイチですね。
最後に
davinciだとやっぱり微妙ですね。
ファインチューニングはそこそこコストもかかるので、GPT系のモデルで出来るようになったらまた試してみます。
また何か作ってみます。