OpenAIのGPTモデルをカスタマイズ(Fine Tuning)してみる with Node
category
date
Jan 28, 2023
slug
fine-tune-openai-with-node
status
Published
summary
NodeでOpenAIのAPIでモデルをFine Tuningしてみた話。
type
Post
(JavaScriptを愛し、意地でもPythonを使いたくない人のためのお試し方法ですが、ちゃんとやるならPythonでやったほうがいいです)
Open AIのFine Tuningについて
OpenAIのFine Tuningは、既存の大規模な言語モデル(例えばGPT-3)を、特定タスク向けに転移学習するための手法です。Fine Tuningを使用することで、新しいタスクに対して高い精度を実現することができます。
Fine Tuningを行うには、以下のステップを踏む必要があります。
- OpenAI APIを使用して、既存の言語モデルを取得します。これには、APIキーが必要です。
- 新しいタスクに適したデータセットを用意します。このデータセットは、Fine Tuningに使用するために、適切なフォーマットに変換する必要があります。
- Fine Tuning用のコードを書きます。このコードは、OpenAI APIを使用して、既存の言語モデルに新しいデータセットを学習させます。
Node CLIでの実行例
node-cliをインストールします。
npm install -g openai-node-cli
# 環境変数にキーを定義
export OPENAI_API_KEY="YOUR_API_KEY_HERE"
まずはトレーニングファイルを作成・アップロードします。
{"prompt": "フランスの首都は?", "completion": "パリス"}
openai createFile --file "/path/to/training.jsonl" --purpose "fine-tune"
// 以下のように返ってきます。
{
"object": "file",
"id": "file-Z8MM94T3WnvLd0GHr3fUk8Ee",
"purpose": "fine-tune",
"filename": "training.jsonl",
"bytes": 66,
"created_at": 1674974712,
"status": "uploaded",
"status_details": null
}
↑で帰ってきたファイルIDを元に、fineTuneを作成します。
learning_rate_multiplierには、この学習の適用率を入れます。1以上の値をとり、デフォルトは1です。
openai createFineTune --model "davinci" --training-file file-Z8MM94T3WnvLd0GHr3fUk8Ee --learning-rate-multiplier 1
※ node-cliの問題でうまくいかなくなっていたので、curl版↓↓↓
curl https://api.openai.com/v1/fine-tunes \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"training_file": "file-Z8MM94T3WnvLd0GHr3fUk8Ee",
"learning_rate_multiplier": 3,
}
この例では、jsonl形式のデータセットをfs.readFileSyncメソッドを使用して読み込んでいます。jsonl形式のデータセットは、各行に1つのjsonデータを記述したもので、例えば以下のような形式になります。
jsonlファイルの例
{"prompt": "フランスの首都は?", "answer": "パリス"}
Fine tunedなモデルを呼び出す
以下のコマンドで学習が完了したモデルを確認できます。
openai listFineTunes
# 返却
{
"object": "fine-tune",
"id": "ft-HQmxNHpzOWP8XIVp9IacRMko",
"hyperparams": {
"n_epochs": 4,
"batch_size": 1,
"prompt_loss_weight": 0.01,
"learning_rate_multiplier": 0.1
},
"organization_id": "org-qUlIngAsF5QG6ACYc05SSS24",
"model": "curie",
"training_files": [
{
"object": "file",
"id": "file-Z8MM94T3WnvLd0GHr3fUk8Ee",
"purpose": "fine-tune",
"filename": "training.jsonl",
"bytes": 66,
"created_at": 1674974712,
"status": "processed",
"status_details": null
}
],
"validation_files": [],
"result_files": [
{
"object": "file",
"id": "file-tKULG85RP4hFwRaj2ttDmc7E",
"purpose": "fine-tune-results",
"filename": "compiled_results.csv",
"bytes": 346,
"created_at": 1674975556,
"status": "processed",
"status_details": null
}
],
"created_at": 1674975345,
"updated_at": 1674975560,
"status": "succeeded",
"fine_tuned_model": "curie:ft-personal-2023-01-29-06-59-11"
},
最新バージョンのopenai-nodeでは、通常と同じようにFine Tunedなモデルが指定できるようになっています。上記の "fine_tuned_model": "curie:ft-personal-2023-01-29-06-59-11"を利用して、completionsを取得できます。
openai createCompletion --prompt "The quick brown fox jumps over the lazy" --model "curie:ft-personal-2023-01-29-06-59-11"