AzureOpenAIのGPT4oでFineTuning!!! 仮想小説の登場人物を学習させてみる
はじめに
RAGによるトレーニングレスなLLMアプリを作成してきましたが、
Fine-Tuningをやったことがなかったため、まずはトライしたので結果を残します。
Azure OpenAI のGPT4oをFine-Tuningしてみましょう。
また、Azure AI Studioが Azure AI Foundry に名称変更し、ハブやプロジェクトを作成する思想になりました。それらを作成してFine-Tuningします。
RAGとFine-Tuningの使い分け
わたしの今の理解では、RAGとFine-Tuningの使い分けはこのような認識です。
- RAG
- RAGは、事前にトレーニングされた言語モデルに外部の知識ベースやデータベースから情報を取得して、生成した応答や文章に組み込む手法。モデルはリアルタイムに外部の情報源を参照し、応答を生成する。
- メリット
- 最新の情報や動的なデータにアクセスできるため、常に新しい情報をもとに推論できる。
- 大規模データセット不要: 事前に大量のトレーニングデータを用意する必要がなく、必要な情報をその都度取得できる。
- デメリット
- リアルタイムに外部の情報源にアクセスするため、レスポンスタイムが遅くなる可能性がある。
- ポイント
- 検索結果次第で推論できるかが決まるため、検索エンジンの精度が重要。検索できる状態のデータになっているか。
- Fine-Tuning
- 既存の大規模言語モデルを特定のタスクやドメインに特化するために、追加のデータセットを使ってモデルを再トレーニングする手法。
- メリット
- 専門領域特化の知識をつけるられる。
- あるタスクに対する考え方(複数タスクのワークフロー)を身につけさせられる?(不明確です...)
- 検索をなくして回答速度を上げる
- 一貫性のある出力
- デメリット
- さまざまなパターンのトレーニングと評価のためのデータセットが必要。
- トレーニングしたモデルをデプロイすると、オンボーディングだけで料金が発生してしまう。
Fine-Tuningしたモデルに学習させたいこと
今回はお試しなので、GPT4oが学習していない、仮想の小説の登場人物について学習させ、回答できるようにしてみます。
(※そもそもこういう登場人物の関係性などはGraph構造で持たせてRAGさせるのがよさそうですが、今回はFine-Tuningのトライ目的ですので目をつむり。。。)
質問と想定回答
①
- 質問
- 香坂 義孝の性格について説明してください。
- 想定回答
- 香坂 義孝は正義感が強く、人の気持ちに寄り添える性格です。素直で明るいが、思い詰めやすい一面もあります。意外と頑固で、警察官は憧れていた職業です。
素のGPT4oに聞いてみる
GPT4oでは答えられない
トレーニングデータと検証データの作成
トレーニングデータと検証データの違い
-
トレーニングデータ
- 目的:モデルの学習に使用されます。多様なデータが必要です。
- 使われるタイミング:モデルの学習プロセス全体に使用されます。
- データの多様性: トレーニングデータは、モデルが様々なパターンを学習できるように、多様なデータを含む必要があります。異なるシナリオ、環境、条件をカバーすることが重要です。
- バランス: クラスの不均衡を避けるために、データセット内の各クラスが均等に含まれるように注意。
-
検証データ
- 目的:モデルの性能を評価するために使用されます。現実的で未見のデータが必要です。
- 使われるタイミング:モデルの学習の途中や最終評価に使用されます。
- データ:実際の運用環境で遭遇する可能性のあるデータを代表するものであるべきです。これにより、モデルの実用性を評価できます。
データの作成
答えさせたい質問と回答から、文章を変えたトレーニングデータを生成させてみました。
- データ作成プロンプト
与えられた質問と回答のセットをもとに、GPT-4oモデルのファインチューニング用トレーニングデータを生成してください。
以下のフォーマットで回答を作成してください。
# 生成の要件
与えられた質問と回答が想定データです。
小説の登場人物の説明です。
日本語の文章の書き方を変えて、10パターン以上のjsonlを出力して。
# 出力フォーマット
JSONL形式で提供してください。各メッセージは以下のように構成されます。
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}
# 例
以下にいくつかの例を示します。
## 例1
**入力:**
ユーザーの質問: "Is Xbox better than PlayStation?"
**出力:**
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
さらにいろんなパターンを出させます。
漢字、ひらがな、カタカナ、英語を混ぜた文章を生成して
さらにさらに...
主語、目的語、動詞を入れ替えた文章を生成して
そして作成した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": "香坂 義孝は、強い正義感を持ち、人の気持ちに寄り添える優しい性格です。彼は素直で明るい一方、思い詰めやすい面もあります。また、意外にも頑固で、警察官という職業は体の弱かった父が憧れていたものです。"}]}
{"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": "香坂 義孝は、正義感が非常に強くて、人の気持ちに寄り添うことができる性格です。彼は素直で明るいですが、考えすぎることがあって、意外に頑固なところもあります。警察官という職業は、体の弱かった父が憧れていたものです。"}]}
{"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": "正義感が強いのが香坂 義孝の特徴であり、他人の気持ちに寄り添うことができる優しさがあります。素直で明るいですが、時には思い詰めやすい一面があり、頑固な性格でもあります。警察官という職業は、彼の父が憧れていたものです。"}]}
{"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": "香坂 義孝は正義感が強く、人の気持ちに寄り添うことができる性格です。彼は明るく素直ですが、思い詰めてしまうこともあります。意外にも頑固なところがあって、警察官という職業は彼の父が憧れていたものです。"}]}
Fine-Tuning開始
ではさっそく、Fine-Tuningしていきましょう。
Azure AI Foundry (旧AI Studio)から画面でポチポチするだけなんですね。インフラ意識しないのすごく楽...
まずは学習対象のモデルを指定。GPT-4oを使います。
モデルバージョンを指定します。GPT-4oの最新バージョンを指定します。
※モデルサフィックスは、Fine-Tuningによって生成されたカスタムモデルの名前の一部として使用されます。このサフィックスを付けることで、元のモデルと区別しやすくなります。
トレーニングデータをアップロードします。
検証データをアップロードします。
指定するパラメータはこれらがあります。今回はすべてデフォルト値を指定します。
-
Batch size
- トレーニングするために使用するトレーニング例の数を指定します。一般的に、
- 大規模なデータセットでは、一般的にバッチサイズが大きいほど学習効果が大きい。
-
Learning rate multiplier
- トレーニングに使用する学習率乗数。学習率が高いほど、大きいバッチサイズでのトレーニング効果が向上する傾向になる。
- Microsoft Learn「0.02 から 0.2 の範囲の値を試して、最適な結果が得られるものを確認することをお勧め」とのことです。
-
Number of epochs
- モデルをトレーニングするエポックの数。 エ
- トレーニングデータ全体を何回モデルに供給するかを指します。
- エポック数が多いほど、モデルがデータを詳しく学習する時間が増えますが、過学習のリスクも増えます。逆に、エポック数が少ないと学習が不十分となる可能性があります。
-
Seed
- 乱数生成の初期値を決めるための値。これにより、データのシャッフルやパラメータの初期化が再現可能になる。
- トレーニング結果の再現性を確保し、同じシード値を使うことで、同じ条件下で再度トレーニングができる。
トレーニングが開始しました。
- training lossとは、機械学習モデルのトレーニング過程で、モデルの予測値と実際の正解値との誤差を測定するための指標です。
- トレーニング最適化の指標になります。
- トレーニングロスが減少している間、モデルのパラメータを適切に調整できていると判断できます。
- 逆に、トレーニングロスが減少しない場合や増加する場合、学習率や他のハイパーパラメータを見直す必要があります。
- 過学習かどうかを判断できます。
- トレーニングロスが非常に小さく、同時に検証ロスが増加する場合、モデルがトレーニングデータに過学習している可能性があります。これにより、モデルの一般化能力が低下し、未知のデータに対する予測精度が悪化します。
- トレーニングロスが非常に小さく、同時に検証ロスが増加する場合、モデルがトレーニングデータに過学習している可能性があります。これにより、モデルの一般化能力が低下し、未知のデータに対する予測精度が悪化します。
- トレーニング最適化の指標になります。
トレーニング完了です。
Fine-Tuning済みモデルで動作確認
では、トレーニングしたモデルをデプロイしましょう。
では、デプロイ済みモデルでチャットしてみます。
学習した内容で回答が得られました。
少しだけ雑な聞き方にしてみましょう。これだったら、トレーニングデータに似たような問い合わせ例があるので答えられます。
トレーニングデータには、フルネームのみの問い合わせしかありません。苗字のみ、名前のみで聞いてみましょう。
この場合、答えてくれませんでした。こういった、いろいろなパターンの聞かれ方を想定したトレーニングデータがなかったため、トレーニングデータに問い合わせのされ方もさまざまなパターンが必要なようです。
他にも、ひらがなで聞いてみましょう。
氏名をひらがなにしたトレーニングデータはありませんでしたが、なぜかこれは答えてくれる。。。
まとめ
今回は、Azure AI Foundry (旧AI Studio)を使って、"GPT-4oが知らない知識"という観点でFine-Tuningしました。
今回はお試しレベルですが、今後は以下の点について深堀していきたいと思います。
- トレーニングデータと検証データの使い分け
- トレーニングパラメータの設定によるトレーニング結果の違い
- 過学習の防止を判断するtranining loss
- あるタスクに対する"考え方"を学習させる。
参考にしたページ
Discussion