8月24日に『GPT3.5-Turbo』のファインチューニングが可能となりました!
ファインチューニングの解禁によってChatGPTをデータをもとに学習させ、特定業務に特化させたり、知識の幅を広げることが可能となりました。
この記事ではファインチューニングにやり方/方法や料金、注意点などについて詳しく紹介していきます。
目次
第1章 ファインチューニングの概要
そもそもファインチューニングとは?
ファインチューニングとは、事前に大規模なデータセット(大量の訓練用データ)で学習・訓練されたニューラルネットワークモデルを、特定のタスクや新しいデータセットに適応させるための再訓練のプロセスを指します。
ChatGPTの場合は、ChatGPT自体が”大規模なデータセットで学習・訓練されたニューラルネットワークモデル”に当たるので、『ChatGPTを特定のタスクや新しいデータセットに適応させるための再訓練のプロセス』ということになります。
つまり、こちらからデータを与えて特定業務に特化したChatGPTを訓練できるようになったということです!
ファインチューニングで何ができる?
OpenAIの公式ドキュメントには、ファインチューニングのメリットとして、次のような記載があります。()内はGoogle翻訳
・Higher quality results than prompting(プロンプトよりも高品質の結果)
・Ability to train on more examples than can fit in a prompt(プロンプトに収まりきらないより多くの例でトレーニングする機能)
・Token savings due to shorter prompts(プロンプトの短縮によるトークンの節約)
・Lower latency requests(リクエストのレイテンシを短縮)
それぞれについて解説します。
・Higher quality results than prompting(プロンプトよりも高品質の結果)
これは先ほどの通り、特定タスクに対してプロンプトを工夫して対処するよりも、ファインチューニングによってモデル自体を学習させた方が良い結果を残せることを意味しています。
例えば、横浜市に関するデータを大量に与えて、『横浜市に関する質問に答えるBot』の構築したり、エアコンの取り扱いや修理方法に関する情報で訓練して、『エアコンの不具合に答えるBot』の構築などが可能となるのです。
また、社内業務に特化させることで、社内Q&Aボットの作成なども可能となりそうです。
・Ability to train on more examples than can fit in a prompt(プロンプトに収まりきらないより多くの例でトレーニングする機能)
こちらは与えるデータ量が圧倒的に増加することを示しています。
ChatGPTに入力できる文字数には制限があるため、一度に何万字もの文章を入力することはできません。しかしファインチューニングモデルを使用すれば、事前に何万字ものデータでトレーニングすることができます。
・Token savings due to shorter prompts(プロンプトの短縮によるトークンの節約)
こちらはAPIの使用料を抑えることができることを意味しています。
前述の通りプロンプトを工夫したり、プロンプトを通して教育する必要がなくなるため、ChatGPTに入力する文章量、すなわちトークン量を節約することができ、API使用料を抑えることができます。
ただし注意点として後述しますが、GPT3.5-Turboのファインチューニングモデルは通常のGPT3.5-Turboモデルより使用量が高くなっているため、一概に使用料を抑えられるわけではないことに注意です。
・Lower latency requests(リクエストのレイテンシを短縮)
レイテンシー(latency)とは、ユーザーのアクションとその後の応答の間に経過する時間のことです。
つまり、応答時間が短縮されるということでしょう。
ファインチューニングを行うことには以上のようなメリットがあります。では、そのファインチューニングはどのように行うのか?次の章で詳しく紹介します。
第2章 ファインチューニングのやり方
では、どのようにファインチューニングを行えば良いのでしょうか?詳しい手順を以下で紹介します。
①データセットを用意する
まずはChatGPTを訓練するためのデータを用意する必要があります。
{"messages": [{"role": "system", "content": "AIツールを紹介するチャットボットです。"}, {"role": "user", "content": "議事録を取るのに役立つAIツールは何ですか?"}, {"role": "assistant", "content":『tl;dv』や『Otter』などが議事録作成に役立ちます。 ""}]}
以上のように『JSON』というプログラミング言語を用いて、サンプルとなる会話を作成します。
『role』は『system』『user』『assistant』の3つがあり、『system』でChatGPTの役割を入力し、『user』に利用者側の質問内容を、『assistant』にChatGPTの解答例を、それぞれ『”content”:』の後に入力します。
通常は100個以上の訓練データを制作する必要があります。ただし、全て考えて作成するのはそれなりの労力を必要とするため、ChatGPTの助けを借りると効果的です。(ChatGPTのログインはこちら)
具体的には以下のようなプロンプトを使用します。
PROMPT{“messages”: [{“role”: “system”, “content”: “このチャットボットはAIに関する質問に答えます。”}, {“role”: “user”, “content”議事録を作成するのに使えるAIツールを教えて “”}, {“role”: “assistant”, “content”: “議事録に使えるAIはtl;dvやotterなどです。.”}]} 上記のコードを参考に、AIツールに関する質問に答えるチャットボットのファインチューニングを行うためのデータセットをjsonl形式で20セット作成してください。
contentの中身はそれぞれ使用したい用途に合わせて変えてください。
ChatGPTからの返答は以下のようになります。
このように瞬時に大量のデータセットを用意することができるためぜひ利用してみてください。
データセットが十分な数用意できたらJSONファイルとして保存しましょう。
②データセットの整合性の確認
次に、上記で作成したデータに形式が正しく、エラーがないかをチェックします。
OpenAIの公式ドキュメントにチェックのためのPythonコードが用意されているのでそちらを利用します。
ドキュメント内の『Data formatting script』を開くと該当のコードが記載されています。
<YOUR_JSON_FILE_HERE>内にデータセットのJOSNファイルのパスを入力しましょう。
『No error found』と表示されれば問題ないので次に進みましょう。
③OpenAIのAPIキーの取得
次にOpenAIのAPIキーを取得しましょう。
OpenAIのプラットフォームから取得可能です。
OpenAIのAPIキーについては以下の記事で詳しく紹介しています。
④ファインチューニングの実行
PythonのOpenAIライブラリを用いてファイルのアップロードを行います。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTuningJob.create(training_file="file-abc123", model="gpt-3.5-turbo")
“OPENAI_API_KEY”の部分に先ほど発行したAPIキーを入力しましょう。
また、”file-abc123″の部分を作成したデータセットのファイル名に置き換えましょう。
こちらを実行するとファインチューニングが開始します。
ファインチューニングの状態の確認
ファインチューニング自体には数十分かかることもありますので、必要に応じて以下のpythonスクリプトを用いて状態の確認などを行いましょう
最新の10件のファインチューニングジョブのリストを取得
openai.FineTuningJob.list(limit=10)
ファインチューニングの詳細や状態を取得
FineTuningJob.retrieve("ft-abc123")
ファインチューニングジョブをキャンセル
openai.FineTuningJob.cancel("ft-abc123")
モデルの削除
openai.Model.delete("ft-abc123")
statusがsucceededとなれば、ファインチューニング完了です。
第3章 ファインチューニングにおける料金と注意点
モデルの料金
ファインチューニングに使用するモデルは通常のGPT3.5-Turboモデルと料金が異なる点に注意が必要です。
特筆すべき点はトレーニングにも料金が課される点で、1000トークンあたり0.008ドルかかります。
また、通常の入力に対しては1000トークンあたり0.012ドル、出力に対しては0.016ドルかかります。
通常のGPT3.5-Turboモデルが入力が0.0015ドル、出力が0.002ドルであることから8倍ほどの価格となっています。
利用の際の注意点
やはり注意すべきなのは、利用料金が気付かぬうちに高額となってしまうことです。
トレーニングのためのデータ自体にも料金がかかるため、大きなのデータセットを用いる場合は事前に価格を概算する必要があるでしょう。
料金を抑える方法としては以下の二つが挙げられます。
①利用金額の上限を設定
OpenAIのAPI利用金額には上限を設定することが可能です。
OpenAIのプラットフォームを開きます。(リンク)
サイドバーの『Usage limits』をクリックします。
『Hard limit』で上限金額を設定できます。
『Soft limit』は超えるとお知らせメールが届くラインを設定できる。
②日本語ではなく英語でトレーニングデータを作成
日本語ではなく英語をもとに訓練することも料金を抑えるという点では効果的でしょう。
APIの使用料金は1000トークン単位で要求されるため、トークン数を抑えることが料金を抑えることに直結します。
一般的に、英語に比べて日本語はトークン数が大きくなりやすいため、英語を用いることでトークン数を抑えられるでしょう。
ただし、日本語で回答させたい場合は学習精度が落ちないか検証する必要があるでしょう。
第4章 まとめ
今回はChatGPTのファインチューニングについて紹介しました。
ChatGPTの訓練によるカスタマイズが可能となったことで、さまざまな業務に特化させることができるようになりました。また、通常のChatGPTでは持ち得ない知識を与えることで、より使用な幅を広げることができます。
皆さんも実際に利用してみてください!
執筆者:河津 大誠
この記事は役に立ちましたか?
もし参考になりましたら、下記のボタンで教えてください。
コメント