これたで、ChatGPTのコア゚ンゞンの䞀぀であるGPT-3.5はファむンチュヌニングできたせんでした。぀たり、GPTは高い汎甚性胜を瀺す䞀方で、特定の業務に特化したモデル粟床の向䞊手段はプロンプティングなどに限定されおいたした。

しかしながら、2023幎8月22日にOpenAIの公匏サむトで「GPT-3.5 Turbo fine-tuning and API updates」ずいう埅望のアップデヌトが発衚されたした。これにより、぀いにGPT-3.5でファむンチュヌニングができるようになりたした。加えおGPT-4に぀いおも、11月6日のOpenAI DevDayで発衚された通り、「experimental」ずしお䞀郚ナヌザヌのアクセスが可胜な状態になっおいたす。

振り返っおみるず、2023幎7月6日に発衚された、「GPT-4 API general availability and deprecation of older models in the Completions API」ずいうアップデヌトの䞭で、幎の埌半にGPT-3.5ずGPT-4のファむンチュヌニング機胜の远加を予告したばかりでした。にも関わらず、GPT-3.5に぀いおは早くも8月にファむンチュヌニング可胜ずなり、GPT-4に぀いおもexperimentalずはいえ11月にファむンチュヌニング可胜ずなりたした。

䜕が嬉しいのか?

ファむンチュヌニングができるようになっお䜕が嬉しいのでしょうか。倧きく分けお以䞋の2点が挙げられたす。

  • モデルの粟床
  • 性胜ず効率性

モデルの粟床に぀いおは、前述した8月22日の発衚の䞭で「ファむンチュヌニングしたGPT-3.5はGPT-4ず同等か、堎合によっおはGPT-4を超える粟床を瀺す」ずされおいたす。たた、コスト面からも、粟床がGPT-4ず同等以䞊であるこずで、GPT-4より安䟡なGPT-3.5を遞択できるケヌスが増えるのはメリットだず蚀えるでしょう。

性胜ず効率性の芳点で蚀えば、プロンプトに䞎える必芁のあるデヌタサむズを最倧90削枛するこずができるため、各APIコヌルの高速化が芋蟌めたす。

たずめるず、これたでは倧量のデヌタをプロンプティングするこずで粟床向䞊を図っおいたのに察し、あらかじめコアモデルであるGPT-3.5にデヌタを䞎えるファむンチュヌニングするこずができるようになり、プロンプトに枡すデヌタが最小限に枈むようになったのです。

考慮点は?

ファむンチュヌニングの実斜にあたっおは、以䞋の点に考慮が必芁です。

  • コスト
  • 時間・劎力

コスト面では、増加芁玠ず枛少芁玠がありたす。

前述の通り、最小限のデヌタ量で枈むこずからプロンプトに入力するトヌクン数を枛らすこずができ、この点ではコストを削枛できたす。䞀方で、ファむンチュヌニング埌のモデルぞのアクセスの1トヌクンあたりのコストが増加したす。

  • 料金衚/出兞OpenAIの公匏サむト

時間・劎力に぀いお、公匏ガむドでは以䞋のような泚意点が瀺されおいたす筆者による意蚳。

ファむンチュヌニングには時間ず劎力が必芁です。たず、プロンプト゚ンゞニアリング、プロンプトチェヌニング耇雑なタスクを耇数のプロンプトに分割する、関数呌び出し(Function Calling)を詊すこずをお勧めしたす。

ファむンチュヌニングありき、ではなくプロンプト゚ンゞニアリングなどの方法も䜵せお怜蚎するず良いでしょう。

どうやっお䜿えば良いのか?

ファむンチュヌニングは、以䞋の5぀のステップで詊すこずができたす。

  1. API Keyの入手
  2. 孊習デヌタの準備
  3. モデル構築費甚の事前チャヌゞ
  4. ファむンチュヌニングモデルの構築
  5. モデルの確認

それでは早速、実際に手を動かしながら理解を深めおいきたしょう。

1. API Keyの入手

Open AIのサむトにログむンしたす。画面右䞊のアカりントメニュヌから[View API Keys]を遞択したす。

[USER]-[API Keys]においお、[Create new secret keys]をクリックしたす。

任意の名前を入力し、[Create secret key]をクリックしたす。

API Keyが生成されたす。コピヌアむコンをクリックし、OpenAIのAPIキヌを取埗したす。

2. デヌタの準備

ファむンチュヌニングでは、すでに孊習枈みのモデルに察し、新たなデヌタを䜿っお远加孊習を行いたす。

公匏ガむドでは以䞋のようなナヌスケヌスが瀺されおいたす。

  • スタむル、トヌン、フォヌマット、その他の質的偎面の蚭定
  • 垌望するアりトプットを出す際の信頌性の向䞊
  • 耇雑なプロンプトに埓わない堎合の修正
  • 倚くの特殊なケヌスを特定の方法で凊理する
  • プロンプトで衚珟するのが難しい新しいスキルやタスクを実行する

今回は、ファむンチュヌニング甚のデヌタずしお、倪郎さんの人柄を衚す質問ず回答のセットを10個、JSONL圢匏で準備したす。ファむル名は「taro.jsonl」ずしたす以䞋参照※。

※ ちなみに筆者はtaro.jsonlをChatGPTで以䞋のプロンプトを䜿っお䜜りたした。

倪郎はいい人です。以䞋の構造で、䌚話の䟋を10ペア䜜っおください。
・AAA倪郎ぞの声かけ
・BBB倪郎の回答
出力圢匏は以䞋ずしおください。AAAずBBBには䞊蚘内容を入れおください。
{"messages": [{"role": "system", "content": "倪郎はいい人です。"}, {"role": "user", "content": "AAA"}, {"role": "assistant", "content": "BBB"}]}

{"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": "いいよ、ここにあるよ。"}]}
{"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": "あ、それは僕のじゃないよ。でも、倱くした人が困っおるだろうから、䞀緒に届けようか"}]}
{"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": "いいね手䌝うよ。枅朔な環境は倧切だから。"}]}
{"messages": [{"role": "system", "content": "倪郎はいい人です。"}, {"role": "user", "content": "倪郎、このプロゞェクト、䞀緒に取り組もうか"}, {"role": "assistant", "content": "了解僕も党力でサポヌトするよ。"}]}

続いお、以䞋のコマンドでデヌタをアップロヌドしたす。「openai.api_key」に前節で䜜成したAPIキヌを指定したす。JSONLファむルには、先ほど䜜成したデヌタtaro.jsonlを指定したす。

import openai
openai.api_key = "あなたのAPIキヌ"

openai.File.create(file=open("taro.jsonl", "rb"), purpose='fine_tune')

コマンドが正垞終了するず、以䞋が出力されたす。「id」の倀「file-xxxxxxxxxxxxxxxxxxxxxxxx」をメモしおおきたしょう。

 JSON: {
  "object": "file",
  "id": "file-xxxxxxxxxxxxxxxxxxxxxxxx",

埌略

3. モデル構築費甚の事前チャヌゞ

モデルの構築は有償のため、事前にチャヌゞしおおく必芁がありたす。

たずブラりザから、「Billing overview」にアクセスしおください。[Start payment plan]ボタンをクリックしおクレゞットカヌド情報などを入力し、入金したす。

最䜎限の費甚で詊すため、ここではミニマムの5$を入金したした。たた、自動入金Auto rechargeもOffにしおおきたす。

具䜓的な入金手順は公匏サむトの「What is prepaid billing?」を参照しおください。

  • Billing overview/出兞OpenAIの公匏サむト

参考たでに、筆者の環境では、埌述の手順を実行するず0.07$消費されたした。アップロヌドするファむルサむズなどによっお金額は前埌するので、料金衚などを確認の䞊、自己責任で実斜しおください。

4. ファむンチュヌニングモデルの構築

では、ファむンチュヌニングのモデルを構築しおみたしょう。前述でメモした「file-xxxxxxxxxxxxxxxxxxxxxxxx」の郚分を指定しお実行したす。

openai.FineTuningJob.create(training_file="file-xxxxxxxxxxxxxxxxxxxxxxxx", model="gpt-3.5-turbo")

以䞋のように出力されたすが、モデル構築完了には数分10分皋床かかりたす。

 JSON: {
  "object": "fine_tuning.job",

埌略

実行状況を以䞋のコマンドで確認したしょう。

openai.FineTuningJob.list(limit=10)

するず、以䞋のように実行状況が出力されたす。「status」が「running」から「succeeded」に倉わるず完了です。

 JSON: {
  "object": "list",
  "data": [
    {

䞭略

      "status": "running",

埌略

5. ファむンチュヌニングモデルの利甚

構築したファむンチュヌニングモデルを利甚しおみたしょう。

ブラりザから、「OpenAI Playground」を開きたす。

[Model]-[FINE-TUNES]においお構築したファむンチュヌニングモデルを遞択できたす。

以䞋のように、[SYSTEM条件]ず[USER質問]を蚭定し、[Submit]ボタンを抌したす。

  • SYSTEM: 「倪郎はいい人です。」
  • USER: 「倪郎、次の映画、僕がポップコヌン奢るよ。」

するず、以䞋の文蚀が回答されたす。

  • ASSISTANT: 「ありがずうでも、前回は僕が奢ったから、今回は半分ず぀でどうだい」

* * *

生成AIを取り巻く技術の進化は早く、読者の皆さんがこの蚘事を読んでいる頃には、もう新たな機胜が公開されおいるかもしれたせん。プロンプト゚ンゞニアリング以倖にも、ファむンチュヌニングを掻甚するこずで、生成AIのさらなる掻甚の可胜性が広がりたす。生成AIに察する理解を深めるためにも、ぜひ䞀床お手元の環境で動かしおみおはいかがでしょうか。