![thumb_gptfinetuning_01](/placeholder.png)
ChatGPTのファインチューニングとは?
![img_gptfinetunnig_01](/placeholder.png)
AI技術の発展により、自然言語処理分野においても目覚ましい進歩が見られます。中でもChatGPTのような大規模言語モデル(LLM)は、人間レベルの文章生成や翻訳など、様々なタスクをこなせるようになってきました。
その一方、LLMは汎用的なモデルのため、特定のタスクでさらに高い精度を得るためには、AIのさらなる学習が必要です。この学習にはファインチューニングと呼ばれる手法が有効で、LLMを特定のタスクに対応させることができます。
例えば、社内で業務マニュアルをAIに覚え込ませたり、顧客の問い合わせに対応できるように学習させたりすることで、AIをより業務改善に活かすことが可能になります。
この記事では、ChatGPTのファインチューニングにフォーカスして図解していきます。
![](/placeholder.png)
そもそもファインチューニングとは
ファインチューニングとは、事前学習済みモデルと呼ばれる、大量のデータで学習済みのLLMに対して、さらに特定のタスクに特化したデータを学習させることで、モデルのパラメータを微調整する手法です。
事前学習済みモデルには、すでに言語の基礎的な知識や文法構造などが学習されています。ファインチューニングでは、この事前学習済みの知識をベースに、特定のタスクに必要な知識や技能をさらに学習させることで、モデルの精度を向上させることができます。
ファインチューニングが必要な理由
既存のAIモデルは、広範なデータセットを基に学習していますが、社内など特定のタスクにおいてはこの汎用性が必ずしも最適とは限りません。ファインチューニングによって、モデルは特定のドメイン知識や専門的な要求に応じた応答を生成できるようになります。
例えば、医療分野のデータでファインチューニングを行うことで、患者からの医療相談に対してより適切な応答を返すことができるようになったといった事例もあります。
ファインチューニングの仕組み
![img_gptfinetuning_02](/placeholder.png)
ファインチューニングでは、事前学習済みの言語モデルがベースとなり、GPT-3.5やGPT-4などのLLMに対して、さらに追加したいデータを学習させます。ファインチューニングの手順は、次の3つのステップに分けられます。
![](/placeholder.png)
データ収集と準備
ファインチューニングの第1歩は、適切なデータセットを収集し準備することです。このデータセットは、ファインチューニングの対象となるタスクに関連するものでなければなりません。例えば、カスタマーサポート用のモデルを作成する場合、過去の顧客問い合わせデータが利用されます。
![](/placeholder.png)
モデルの初期化
次に、既存のモデル(例:GPT-3.5)を初期化し、新しいデータセットで再学習させます。この段階では、元のモデルの知識を保持しつつ、新たな情報を追加することが重要です。通常、元のモデルは膨大なデータで事前にトレーニングされているため、基礎的な言語能力や知識がすでに備わっています。
学習と評価
モデルが新しいデータセットで学習を開始すると、その性能を評価する必要があります。評価は、モデルがどれだけ正確に新しいタスクを遂行できるかを測定するために行われます。評価方法では、テストデータセットを使用してモデルの応答を検証する方法が一般的です。
また、評価の結果に基づいてモデルのパラメータを調整し、最適化を図ります。
![img_gptfinetuning_03](/placeholder.png)
学習時にはモデルのパラメータを更新することで、タスクデータに含まれるパターンや規則を学習します。
ファインチューニングのメリット
![img_gptfinetuning_04](/placeholder.png)
ファインチューニングを行うことで、AIの精度の向上、AIの学習時間の短縮、少量データで済む、転移学習よりも柔軟といったメリットがあります。
AIの精度の向上
ファインチューニングは、特に新しいタスクと既存のモデルのタスクが類似している場合に効果的です。これは、既存のモデルがすでに関連する知識を学習しているためです。
学習時間の短縮
ファインチューニングは、既存のモデルがすでに関連する知識を学習しているため、最初からモデルを学習させるよりも、遥かに短い時間で学習させることができます。
少ないデータで学習可能
ファインチューニングは、データ量が少ない場合でも有効です。これは、既存のモデルがすでに多くの知識を学習しているため、少量のデータでも十分に学習効果が上がるからです。
転移学習より柔軟
転移学習と比較して、ファインチューニングはより柔軟な手法です。これは、ファインチューニングでは、モデルのどの部分を微調整するかを制御できるためです。
※転移学習では、出力層以外の学習モデルをそのまま利用し、出力層に新しい層を追加してその層だけを再学習します。
ファインチューニングのデメリット
![img_gptfinetuning_05](/placeholder.png)
ファインチューニングは、機械学習モデルの性能向上に役立つ手法の1つですが、次のようなデメリットもあります。デメリットが大きくなると、労力に対する成果を得にくいことがありますので、デメリットを理解した上でファインチューニングの可否判断を行いましょう。
過学習しやすい
ファインチューニングは、モデルが過学習しやすいというデメリットがあります。これは、モデルが学習データに過剰に適合してしまい、汎化能力が低下してしまう可能性があるためです。
時間が掛かる
ファインチューニングには、モデルを学習させるために時間がかかります。これは、特にデータ量が多い場合や、モデルが複雑な場合に顕著で、中には学習に数日掛かるケースもあります。
専門知識が必要
ファインチューニングを行うためには、機械学習に関する専門知識が必要です。これは、モデルのアーキテクチャや、ハイパーパラメータの調整方法などを理解する必要があるためです。
![](/placeholder.png)
![](/placeholder.png)
セキュリティリスクがある
ファインチューニングでは企業ノウハウや機密情報を扱う場合があるため、適切なセキュリティ対策が必要です。特に外部委託する場合には、情報漏えい対策をしっかり講じておくことが大切です。
ファインチューニングの料金
![img_gptfinetuning_06](/placeholder.png)
ChatGPTは無料プランもありますが、ファインチューニングは料金が発生します。料金は、以下の2つの要素で構成されます。ファインチューニングにかかる時間は、データ量やモデルの複雑性によって異なりますが、数時間から数日程度かかります。
![img_gptfinetuning_07](/placeholder.png)
■ モデルのトレーニング料金 使用するモデルの種類やデータ量によって異なりますが、一般的には100万トークンあたり8ドル程度です。
■ ファインチューニングされたモデルの使用料金 月額課金制で、利用するモデルの種類や機能によって料金が異なります。
【参考】:Pricing | OpenAI
ファインチューニングのデータセットの作り方
![img_gptfinetuning_08](/placeholder.png)
データセットとは、ある目的のために集められ、一定の形式に整えたデータの集合体のことです。ファインチユーニングのデータセットは、既成のAIに対して追加学習ざるためのデータです。
ここでは、一般的なデータセットの作成手順と、ChatGPTにおけるファインチューニングのステップについて紹介します。
データセット作成の手順
ファインチューニング用データセットを作成する一般的な手順は以下の通りです。
1.データ収集 対象となるタスクに関連するデータを収集します。データは、テキストデータ、画像データ、音声データなど、タスクによって形式が異なります。
2.データ前処理 収集したデータをクリーニングし、ノイズや欠損値を除去します。また、データの形式を統一するなど、モデルが学習しやすいように加工します。
3.データアノテーション データにラベルやタグを付与します。ラベル付けは、手作業で行うこともあれば自動で行うこともできます。
4.データセット分割 データセットを、学習用データ、検証用データ、テスト用データに分割します。学習用データはモデルの学習に使用し、検証用データはモデルの汎化性能を評価するために使用し、テスト用データは最終的なモデルの性能を評価するために使用します。
OpenAI APIキーを取得する
OpenAIのAPIを使用するために、次のOpenAIの公式サイトからAPIキーを取得します。OpenAIのアカウントが必要ですので、アカウントがない方は、OpenAIの公式サイトでアカウント登録しておきます。
※すでにChatGPTを利用している方は、同じアカウントでログインできます。
![img_gptfinetuning_09](/placeholder.png)
APIキーを取得する
次にAPIキーを取得します。OpenAIのAPI Key取得サイト(下記、参考サイト)にアクセスし、シークレットキーをメモ帳などにコピペしておきます。
【参考】:API Keys |Open AI
![img_gptfinetuning_10](/placeholder.png)
![](/placeholder.png)
作業環境を準備する
Python環境を整え、PythonのOpenAIライブラリをインストールする必要があります。
pip install openai
インストールできたら、下記のようにOpenAIライブラリをインポートできます。
import openai
トレーニングデータを準備する
トレーニングデータは、タスクに特化したデータセットを用意します。例えば、特定の分野の質問と回答のペアなどです。データは通常、JSONL(JSON Lines)形式で構成します。
以下はJSONL形式の例です。手持ちのQ&A集などを利用して、質問と回答を入力していきます。
データセットは最低でも10セットは必要です。ファインチューニングができない場合、データ量の不足や品質の問題が考えられます。
{prompt: Q: AIとは何ですか?, completion: A: 人工知能のことです。}
{prompt: Q: ファインチューニングの目的は?, completion: A: 特定のタスクに最適化することです。}
![](/placeholder.png)
トレーニングデータのフォーマットをチェックする
作成したデータの形式が正しいか、エラーがないか、チェックを行います。OpenAIの公式ドキュメント(下記参照)にデータセットチェック用のPythonコードが掲載されていますので、そちらを利用すると良いでしょう。
公式ドキュメント内で『Data formatting script』を検索すると、コードが記載されていますので使ってみましょう。
![img_gptfinetuning_11](/placeholder.png)
ファインチューニングを実行する
PythonのOpenAIライブラリを利用して、データセットのファイルをアップロードし、実行します。"OPENAI_API_KEY"の箇所には先程取得済のAPIキーを入力しておきます。"file-name"の箇所には、作成したデータセットのファイル名を入れます。
こちらを実行すると、ファインチューニングが開始されます。
import os
import openai
openai.api_key = os.getenv(""OPENAI_API_KEY"")
openai.FineTuningJob.create(training_file=""file-name"", model=""gpt-3.5-turbo"")"
モデルの評価と調整をする
ファインチューニング後のモデルをテストし、必要に応じてトレーニングデータを追加して再度ファインチューニングを行います。ファインチューニングを実行した際にジョブIDを取得できますので、以下の形式でWebで実行結果を確認できます。実行結果が”succeeded"となっていれば成功です。
https://platform.openai.com/docs/guides/fine-tuning/{job_id}
データセット作成のツール
![img_gptfinetuning_12](/placeholder.png)
ファインチューニング用データセットを作成するためのツールは、いくつかあります。代表的なツールを3つ紹介しますので、比較検討してみることをおすすめします。
Labelbox
Labelboxは、画像、動画、テキストなどのデータにアノテーションを付与するためのプラットフォームです。AIモデルの学習に必要な教師データを効率的に作成・管理することができます。Webブラウザ上で利用でき、高精度なアノテーション作業を実現する様々な機能が備わっています。
【参考】:Labelbox | Data-centric AI Platform for Building & Using AI
Amazon SageMaker Ground Truth
機械学習モデルのトレーニングデータセットを効率的に作成・管理するためのAWSのフルマネージドサービスです。豊富なワークフローテンプレートによる迅速なデータセット作成から、画像、テキスト、音声などのデータのラベル付けまで行えます。
【参考】:Amazon SageMaker Ground Truth を使用してデータにラベルを付ける|Amazon SageMaker
Google AI Data Labeling Service
機械学習モデルの学習に必要なデータにラベルを付与するための、Googleが提供するクラウドサービスです。画像、動画、テキストなどの様々なデータに対応しており、高精度なラベル付けを実現する機能が備わっています。
【参考】:データラベルの手順の作成 | Data Labeling Service | Google Cloud
ファインチューニングでChatGPTをさらに活用しよう
![img_gptfinetuning_13](/placeholder.png)
ここまでファインチューニングとは何か、メリットとデメリット、実行手順などについて解説しました。ファインチューニングは、既存のAIモデルを特定のタスクやデータセットに適応させるための重要なプロセスです。
ファインチューニングを利用することで適切なデータ収集とモデルの初期化、学習と評価を経て、特定のニーズに応じた適格なモデルを作成することができます。
これにより、ビジネス領域ではAIの本格的な活用が可能になります。例えば、社内FAQチャットボットの構築や、カスタマーサポートチャットボットの開発、医療や金融分野などでの活用策が考えられます。ぜひファインチューニングに関するスキルを磨き、AIの有効活用を図ってみましょう。
編集部オススメコンテンツ
アンドエンジニアへの取材依頼、情報提供などはこちらから