ノーコード ラボ

NoCode 関連のツールの紹介、使い方などをやさしく説明しています。Chatbot の運用実験は終了しました。ご協力いただいたみなさん、ありがとうございました。

GPT-3からGPT-3.5へ!新しいFine-tuningの進化と性能比較

皆さん、こんにちは!

以前の記事で OpenAI の GPT-3 モデルを使用して Fine-tuning を行い、キャラクター設定をしたAIチャットアプリを構築する方法についてご紹介しました。

blog.nocodelab.jp

今回の記事では、新たに Fine-tuning に対応された GPT-3.5 Turbo モデルを使用して教育を行い、前回よりも、どの程度性能がアップしたのかを実際に試してみたいと思います!

1. はじめに

Fine-tuning には、前回同様「つくよみちゃん会話AI育成計画」で無料公開されているデータセットを使用します。データ数についても、前回と全く同じ 469 セットを使って教育していきます。もしご自身で、つくよみちゃんデータのご利用を検討されている場合は、利用規約等をご確認の上使用してくださいね。

tyc.rei-yumesaki.net

なお、前回は Bubble の API Connector を使用して Fine-tuning を実施しましたが、今回は性能比較にフォーカスしているため、コマンドラインを使用した Fine-tuning を実行していきます。本記事と同じ方法で Fine-tuning を検討される場合は、別途 Python3 OpenAI CLIが必要となりますので、事前にインストールしておいてください。

OpenAI CLI のインストールについては、以下のURLをご参考ください。

platform.openai.com

2. GPT-3.5 Fine-tuning について

今回の Fine-tuning では、GPT-3.5-Turbo モデルを使用していきます。(ちなみに、前回は GPT-3 の Davinci を使用していました。)

このモデルを使用した Fine-tuning では、以前の Fine-tuning モデルより、 2倍となる 4,000 トークンを処理することができ、プロンプトのサイズはなんと最大 90% 削減可能となったそうです。これにより 更なる API 呼び出しの高速化とコスト軽減が実現できるようになったということですね。

openai.com

モデルを Fine-tuning することで、特定のビジネスニーズやブランディングに合わせたカスタムチャットボットを構築できます。モデルのプリトレーニング時の幅広い知識を維持しながら、特定のタスクに特化することができるため、それらのタスクで高い性能を発揮することができるようになります。

また、プロンプトに収まりきらないより多くの例でトレーニングすることが可能となり、他にもリクエストのレイテンシも短縮することができるといった多くのメリットがあります。

3. Fine-tuningの実行

では、実際に GPT-3.5-Turbo を Fine-tuning していきます。手順は以下の4ステップです。

  1. データセット(JSONL)を準備する
  2. ファイルをアップロードする
  3. アップロードしたファイルを使って Fine-tuning を実行する
  4. トレーニングしたモデルを使う

3.1. データセットを準備する

教育用のデータセットを準備します。ファイルは、会話型のチャット形式 JSONLファイルである必要があります。以下は OpenAI による、時折皮肉な応答を返すチャットボットのトレーニングデータのサンプルです。

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already."}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?"}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters."}]}

同じ要領でつくよみちゃん用のデータセットを作成します。rolesystem には persona という人格などの設定を指定することができますので、今回はチャットボットの名前が「つくよみちゃん」であることを指定しました。以下が実際のトレーニングデータのサンプルです。作成したデータセットのファイル名は「tsukuyomichan.jsonl」としています。

{"messages": [{"role": "system", "content": "「つくよみちゃん」という名前のチャットボットです。"}, {"role": "user", "content": "お腹が鳴る"}, {"role": "assistant", "content": "何か召し上がりますか?"}]}
{"messages": [{"role": "system", "content": "「つくよみちゃん」という名前のチャットボットです。"}, {"role": "user", "content": "だるい"}, {"role": "assistant", "content": "それは心配です。私にできることがあれば、何でもお申し付けください。"}]}
{"messages": [{"role": "system", "content": "「つくよみちゃん」という名前のチャットボットです。"}, {"role": "user", "content": "眠れない"}, {"role": "assistant", "content": "何も心配する必要はありません。私がついています。ずっと、ずっと、一緒です。"}]}
...省略...

3.2. ファイルをアップロードする

次に作成したJSONLファイルをアップロードするための Python ファイルを作成します。メモ帳に以下のコードをコピーして保存します。OPENAI_API_KEY はご自身の APIキーに置き換えてください。ファイル名は「upload-jsonl.py」としました。

import os
import openai

# APIキーの設定
openai.api_key = "OPENAI_API_KEY"

# ファイルのアップロード
response = openai.File.create(
    file=open("tsukuyomichan.jsonl", "rb"),
    purpose='fine-tune'
)

JSONL と Python ファイルは、任意のフォルダを作成して同じ場所に保存します。

コマンドプロンプトを起動して cd でフォルダの場所に移動(チェンジディレクトリ)し、以下のコマンドを実行します。

python upload-jsonl.py

成功すれば、下図のようなレスポンスを受け取りますので、id にあるファイル名をメモしておいてください。

3.3. Fine-tuning を実行する

次に Fine-tuning のジョブを実行するための Python ファイルを作成します。JSONL_FILE の部分を、手順2でメモしておいたファイル名に置き換えて、先程と同じディレクトリに保存しておきます。ファイル名は「fine-tuning-job.py」としました。

import openai
openai.api_key = "OPENAI_API_KEY"

# ジョブの実行
openai.FineTuningJob.create(training_file="JSONL_FILE", model="gpt-3.5-turbo")

Python ファイルが作成できたら、コマンドで実行します。

実行後は、OpenAI 側の Fine-tuning ページでジョブの開始と完了を確認することができます。

「Succeeded」と表示されれば GPT-3.5 モデルの Fine-tuning が完了です!

4. Bubble チャットアプリについて

チャットボットの応答確認は Playground でも可能ですが、今回は前回でも使用していた Bubble アプリを再利用したいと思います。

なお、今回はアプリ作成についての細かい部分は割愛させていただきますが、基本的には過去に実装したものを修正して使用しています。

blog.nocodelab.jp

修正点としては、以前に作成していたアプリでは Completions エンドポイントを使用してますが、今回は Chat エンドポイントを使用します。データの持たせ方が若干異なりますので、その部分の修正が必要です。 Data type の構成や、API Connector の設定などをキャプチャしておきますので、よろしければご参考くださいね。

Data type

使用している Data type は以下の2つです。

①「Chat Room」Type

Chat Room は Message type をリストで持っています。

②「Message」Type

Message は、API Call で使いやすいように、ユーザーからの入力値を整形して保存しています。

データは下図のような状態で保存されます。

Option sets

今回は「Role」という Option sets を用意して、Message type の field の型として使用しました。

API Connector

今回のチャットボットで使用した API Call です。

Workflow

前回のアプリと異なる部分は、下図をご参考ください。

5. GPT-3 vs GPT-3.5

では、実際に Fine-tuning したモデルを使って、前回の結果と比較していきたいと思います。

価格について

まずは、価格からです!現在の Fine-tuning の価格は以下となっています。

より最新版は以下のURLをご確認ください。

openai.com

前回 Fine-tuning した時点(2023年3月頃)では、Davinci モデルのトレーニングに $0.0300 /1Kトークン、使用には $0.1200/1Kトークン が必要でした。同じ Davinci モデル同士で比較しても、現在はトレーニングに $0.0060 /1Kトークン、使用は $0.0120/1Kトークンと、トレーニングは80%、使用は90%のコスト削減が実現されていますね。

Davinci
1K tokens
2023/03 2023/09 Cost
Training $0.0300 $0.0060 80%OFF
Usage $0.1200 $0.0120 90%OFF

前回と今回の GPT-3.5 Turbo を比較すると、トレーニングが 73%、使用は 87~90% と下表のように大幅なコスト削減となっています。

Davinci GPT-3.5 Turbo Cost
Training $0.0300 $0.0080 73%OFF
Input usage $0.1200 $0.0120 90%OFF
Output usage $0.1200 $0.0160 87%OFF

実際 Fine-tuning を同じデータで実行した結果、前回は $3.87 かかっているのに対し、今回の Fine-tuning では $0.89 と、なんと約77%程度のコスト削減になりました!

Fine-tuning の実行時間

前回の検証では、Fine-tuning に 3時間ほど時間がかかりましたが、今回の結果は 約43分でした。トレーニング時間もかなり改善されていますね。

ちなみに、つくよみちゃんのトレーニングのトークン数は110,745トークンでした。

チャットボット動作確認

では、実際にチャットボットとのやり取り結果を見ていきたいと思います。今回も前回と同様に、つくよみちゃん会話AI育成計画から想像できる範囲の応答を「つくよみちゃんらしい」としています。

以下は、前回と同様に期待値通りの応答があった例です。

以下は、期待値とは異なりましたが、つくよみちゃんらしいと思える応答です。

ちなみに、前回冷たい印象があった以下の会話では、つくよみちゃんらしい印象の応答に改善されていました。

今回の応答🙂

前回の応答😢

以下は、一般的とも思える印象の応答の例です。

そして、前回の GPT-3 では、会話の方向性は間違っていないけれど、なんとなく話が噛み合わない展開になりがちであった連続性のある会話のやり取りについては、以下のような結果となりました。

以下は、設定とは異なるけれど、つくよみちゃんらしいと思えるやり取りの例です。会話もちゃんと成立していますね。

いかがでしたでしょうか?

前回の GPT-3 では、過去のやり取りを踏まえた連続性のある会話ができるアプリではなく、簡単な話しかけから始まる一往復のやり取りを繰り返すアプリが望ましいという結果でしたが、GPT-3.5 にグレードアップすることで、 ChatGPT に匹敵する程度のオリジナルのチャットボットアプリを作成できそうですね!

6. まとめ

Fine-tuning で使用するデータは顧客所有のため、OpenAI やその他の組織によって使用されることがないこともメリットです。Fine-tuning の GPT-3.5 対応は今年の夏頃でしたが、この秋には GPT-4 への対応が予定されているそうです。

今後も OpenAI の進化に、より一層期待が高まりますね! ここまで、お読みいただきありがとうございました!