Azure OpenAI ServiceのChatGPTモデルでのFine-Tuningを試してみた

OpenAIでは既にリリースされていますが、AzureでもFine-TuningがAzure OpenAI Serviceの新しいfine-tuningモデルのプレビューとして利用可能になったため、試してみました。

この更新にはChatGPTモデル(gpt-3.5-turbo-0613)も含まれております。社内データでファインチューニングしたChatGPTモデルを利用することによって、今までのChatGPTモデルよりもハレーションの少ない回答をすることが期待できます。

使えるファインチューニングモデルの種類

モデルの種類

新しくファインチューニングモデルが使えるようになったのは以下です。

  • gpt-35-turbo-0613
  • babbage-002
  • davinci-002

gpt-35-turbo-0613とbabbage-002、davinci-002ではトレーニングデータの形式が違うのでご注意ください。

Azure OpenAI Service models - Azure OpenAI | Microsoft Learn

使えるリージョン

以下のリージョンのみになります。日本リージョンでは使えないのでご注意ください。

  • 米国中北部
  • スウェーデン中部

クォーター

各リージョンとも50kTPMとなります。

Azure OpenAI Service quotas and limits - Azure AI services | Microsoft Learn

ファインチューニングモデルを作ってみる

今回はChatGPTモデルであるgpt-35-turbo-0613を試してみたいと思います。

リソースのデプロイ

スウェーデン中部にデプロイします

権限の付与

デプロイしただけでは「カスタムモデルの作成」がグレイアウトしています。

ドキュメントにも書いてありますが、所有者(owner)の権限を持っているユーザーであっても、追加で「Cognitive Services OpenAI Contributor 」の権限が必要になります。

Azure OpenAI Service fine-tuning gpt-3.5-turbo - Azure OpenAI | Microsoft Learn

Cognitive Services OpenAI Contributorを付与すると「カスタムモデルの作成」が有効になります。

トレーニングデータの用意

jsonlという拡張子で学習データを作ります。今回はJBSに関するトレーニングデータを用意しました。

※こちらのドキュメントではBOM有と書いてありますが、テキストエディタでBOM有でファイルつくると学習でエラーになってしまいました。

Customize a model with Azure OpenAI Service - Azure OpenAI | Microsoft Learn

jbs-fine.jsonl
(エンコード:UTF-8 BOM無し、改行:LFのみ)

{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社はどこにありますか?"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズにあります"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の略称を教えてください。"}, {"role": "assistant", "content": "JBSです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSに社食はありますか?"}, {"role": "assistant", "content": "Lucy’s CAFE & DINING虎ノ門ヒルズが17階にあります。URLはhttps://www.jbs.co.jp/corp/policy/HumanCapitalです。"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSは技術ブログを書いていますか?"}, {"role": "assistant", "content": "JBS Tech Blogがあります。URLはこちらです。https://blog.jbs.co.jp/"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの社長は誰ですか?"}, {"role": "assistant", "content": "牧田 幸弘です"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の設立はいつですか?"}, {"role": "assistant", "content": "1990年10月4日です"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の事業内容は?"}, {"role": "assistant", "content": "・クラウドインテグレーション事業・クラウドサービス事業・ライセンス & プロダクツ事業の3つです。"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社はプライバシーマークを取得していますか?"}, {"role": "assistant", "content": "取得しています"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSは株式を上場していますか?"}, {"role": "assistant", "content": "2022年8月に東京証券取引所スタンダード市場に上場しました。"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の資本金は?"}, {"role": "assistant", "content": "5億3,963万円です"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の売上高は?"}, {"role": "assistant", "content": "863億円(2022年9月期)です"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの社員数を教えてください"}, {"role": "assistant", "content": "2,379名(2023年3月31日現在)です"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSホームページのURLは?"}, {"role": "assistant", "content": "https://www.jbs.co.jpです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの取引銀行は?"}, {"role": "assistant", "content": "三菱UFJ銀行、りそな銀行、みずほ銀行、三井住友銀行、三井住友信託銀行です"}]}

ちなみにトレーニングデータは10件以上ないとエラーになります。

カスタムモデルの作成

カスタムモデルの作成を選択します。

gpt-35-turboを選択してモデル名を入力します。

トレーニングファイルをアップロードします。

アップロードしたトレーニングデータを選択して次へを選択します。

今回検証データは用意していないので特に選択せず次へを選択します。

オプションは既定のまま次へを選択します。

トレーニングジョブを開始を選択します。

実行中になりますのでしばらく待ちます。

トレーニングの完了です。今回11件のデータで1時間ほどかかりました。

モデルのデプロイ

新しいデプロイの作成を選択します。

ファインチューニングしたモデルを選択します。

デプロイ名をつけて作成します。

デプロイ完了です。30分ほどでデプロイが完了しました。

ファイチューニングしたモデルを使ってみる

通常のChatGPTモデルでテスト

デフォルトのプレイグラウンドで「JBSの本社はどこにありますか?」と質問します。正確な回答は「東京都港区虎ノ門の虎ノ門ヒルズ」ですが当然ながら正確な回答ではありません。

システム メッセージを変更して「JBSの本社はどこにありますか?」と質問しますが、日本国内にはなりましたがやはり正確な回答ではありません。

ファインチューニングしたモデルでテスト

ファインチューニングしたモデルに変更して「JBSの本社はどこにありますか?」と質問しますが、残念ながらこちらも正確な回答ではありませんでした。

もう一度聞くと正解のような回答でしたが安定した回答ではなく通常のChatGPTモデルと変わらない印象です。

そこで、住所に絞った26件の以下のトレーニングデータでモデルを作りました。

jbs-fine.jsonl
(エンコード:UTF-8 BOM無し、改行:LFのみ)

{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社はどこにありますか?"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズにあります"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの住所を教えてください。"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの住所は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社はどこ?"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズです。"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの住所は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社はどこ?"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社にいきたいです"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズまでお越しください"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社の住所は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社の住所を教えてください"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社の所在地を教えてください"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社の所在地は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社の場所を教えてください"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "JBSの本社の場所は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社はどこにありますか?"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズにあります"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の住所を教えてください。"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の住所は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社はどこ?"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズです。"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の住所は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社はどこ?"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社にいきたいです"}, {"role": "assistant", "content": "東京都港区虎ノ門の虎ノ門ヒルズまでお越しください"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社の住所は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社の住所を教えてください"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社の所在地を教えてください"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社の所在地は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社の場所を教えてください"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}
{"messages": [{"role": "system", "content": "あなたは日本ビジネスシステムズ株式会社(略称:JBS)のアシスタントです。日本ビジネスシステムズのことに関して丁寧に答えます。"}, {"role": "user", "content": "日本ビジネスシステムズ株式会社の本社の場所は?"}, {"role": "assistant", "content": "〒105-6316 東京都港区虎ノ門1-23-1 虎ノ門ヒルズ森タワー16Fです"}]}す

すると以下のように正確な回答をしてくれました。

少し変えてもきちんと答えてくれます。

まとめ

Microsoftのドキュメントでは、トレーニングデータは少なくとも50個の高品質のサンプルが必要と記載されていますのでやはり最小の10件ではテストは難しいと思います。

ただし、50件に満たなくても同様の内容の質問を異なる形で記載すれば、今回のように26件のトレーニングデータでも正確な回答が得られました。

Azure OpenAI Service fine-tuning gpt-3.5-turbo - Azure OpenAI | Microsoft Learn

またトレーニングデータは一度検証したほうが良いです。トレーニングデータの検証はMicrosoftのドキュメントにも記載ありますが、後述するOpenAIのサイトのほうが分かりやすかったです。

Appendix

トレーニングデータの検証

OpenAIのドキュメントからこのcookbookを参考にトレーニングデータの検証を行いました。

cookbook.openai.com

執筆担当者プロフィール
上田 英治

上田 英治(日本ビジネスシステムズ株式会社)

エンジニアとしてインフラ構築、システム開発やIoT基盤構築等を経験し、現在はクラウドアーキテクトとして先端技術の活用提案や新規サービスの立ち上げを担当。

担当記事一覧