LoginSignup
3
5

OpenAI APIでdavinciをファインチューニングしてみた。

Last updated at Posted at 2023-06-01

OpenAI APIには簡単にファインチューニング出来る機能があるので、ファインチューニングしてみることにしました。
※この記事は連作の2/2です。※前回はこちら

前回作成したツールを用いて100程のデータを用意したので、こちらを用いてdavinciをファインチューニングします。(現在、ファインチューニング出来るモデルでdavinciが一番使いやすいため、davinciを使用しました。)

OpenAIのAPIのファインチューニングはOpenAIのサーバーで行われ、長期的に実行中にする必要はないので、今回はGoogle colabを使用します。

手順は、davinciをファインチューニングするだけです。

davinciをファインチューニングする

まずdavinciをファインチューニングするデータをGoogle colabで使用するGoogleアカウントのドライブに保存します。

次にGoogle colabで新規ノートブックを開き、Google colabからGoogle ドライブにアクセスして、ファインチューニングするデータを読み込めるように以下の操作を行います。

ファイルを開く
写真の赤枠のマークを押す。
ECEC3A64-9001-4920-BBB8-BB2D6042E2F0.jpeg

Googleドライブをマウントする
写真の赤枠のマークを押す。メニューが開いたら、ドライブに接続を押す。
75EE7CC2-6328-4BFC-99DB-EE8025D72621.jpeg

次に、以下をインストールします。

!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に、「トトとは?」と聞いたら、以下のような返答をしました。かなりイマイチですね。
IMG_8289.jpeg

最後に

davinciだとやっぱり微妙ですね。
ファインチューニングはそこそこコストもかかるので、GPT系のモデルで出来るようになったらまた試してみます。
また何か作ってみます。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5