python OpenAIのAPIを使用してファインチューニングを検証

OpenAIライブラリをインストール

!pip install openai==0.28

OpenAI APIキーをセット

import os
os.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

学習データ(ファインチューニングデータ)を用意

list_message = [
    [{'role': 'user', 'content': '◯◯◯◯◯◯◯◯◯◯◯'}, {'role': 'assistant', 'content': '△△△△△△△△△△△'}],
    [{'role': 'user', 'content': '◯◯◯◯◯◯◯◯◯◯◯'}, {'role': 'assistant', 'content': '△△△△△△△△△△△'}],
        ・
        ・
        ・
        ・
        ・
        ・
]

※最低10セットは必要

学習用データをjson形式で出力

import json
with open("xxxxxx.jsonl", "w") as file:
    for messages in list_message:
        json_line = json.dumps({"messages": messages})
        file.write(json_line + '\n')

OpenAIのサーバーにファイルをアップロード

import openai
test_data_file_object = openai.File.create(
  file=open("xxxxxx.jsonl", "rb"),
  purpose='fine-tune'
)
file_id = test_data_file_object.id

アップロード後のファイルidをfile_id変数に格納する。

ファインチューニングの実行

job_response = openai.FineTuningJob.create(
    training_file=file_id,    # ファイルアップロードで取得したファイルid
    model="gpt-3.5-turbo"    # モデルを指定
)

完了まで数分から10数分かかる。
完了後はメールで通知されるが、以下のコマンドで確認することも可能。

ファインチューニング完了確認

job_id = job_response.id
response_retrieve = openai.FineTuningJob.retrieve(job_id)
response_retrieve

以下のように”status”が”succeeded”になっていれば正常終了している。

"status": "succeeded",

ファインチューニング後のモデルに質問

fine_tuned_model = response_retrieve.fine_tuned_model
response = openai.ChatCompletion.create(
    model=fine_tuned_model,
    messages=[
        {"role": "user", "content": "◯◯◯◯◯◯◯◯◯◯◯"}  #質問をセット
    ]
)
print(response["choices"][0]["message"]["content"])

△△△△△△△△△△△(回答)

う~ん、イマイチだな~。
学習データを50件にしてみたり、プロンプトの指示文を追加してみたりハイパーパラメーターであるn_epochsやlearning_rate_multiplierを触ってみたけど、ベースモデルのいい加減な情報を混ぜて回答するので業務で使用するのは非常に危険。

プロンプト版のチャットボットは優秀だけど、毎回回答に必要な情報をフルで与えるというのはコストもかかるしなんか無駄が多い気がしていて、ファインチューニングはとてもスマートな手法で、これだ!!って思っていたから残念だ。。。

OpenAIとしてもあまりオススメしてない理由がなんとなく理解できるが
素晴らしい手法なのに本当に残念。。。

ただ、私の知識が少ないせいでうまく回答してくれない可能性も十分にあり
正しくパラメーターの調整をすれば希望通りの回答をしてくれることも考えられます!

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です