ChatGPTを学習させる
ChatGPTに独自のデータを学習させる方法はいくつかあります。主な方法は以下の通りです。
プロンプトによる学習
プロンプトに独自のデータや情報を含めることで、ChatGPTにその情報を学習させることができます。ただし、プロンプトには上限があり、大量のデータを学習させるには向いていません。
OpenAI API を使ったファインチューニング
OpenAI が提供する API を使って、独自のデータセットでモデルをファインチューニング(転移学習)することができます。これにより、独自のデータに特化したカスタムモデルを作成できます。ただし、APIの利用には料金がかかります。
GPTs (Customized ChatGPT)
ChatGPT Plusの有料プランで提供されている機能で、独自のデータセットを使ってカスタマイズされたChatGPTモデルを作成できます。作成したモデルはチーム内で共有できます。
ベクトルデータベースとエンベディング
独自のデータをベクトル化してデータベースに格納し、エンベディングの手法でChatGPTにそのデータを参照させることができます。この方法では大量のデータを扱えますが、実装が複雑です。
RAG (Retrieval Augmented Generation)
事前に用意した独自のデータから関連する情報を取り出し、ChatGPTの出力に反映させる手法です。
いずれの方法も一長一短があり、用途や目的に合わせて適切な方法を選ぶ必要があります。APIを使ったファインチューニングが最も確実な方法ですが、費用がかかります。プロンプトによる学習は無料で試せますが、学習できるデータ量に限界があります。
また、独自データの学習時には、データのプライバシーやセキュリティ、法的な規制にも注意を払う必要があります。
プロンプトによる学習によりChatGPTを学習させる
ChatGPTにプロンプトを使って新しい情報を学習させることは可能ですが、限界があります。プロンプトは主に以下の2つの目的で使われます。
コンテキストの提供
プロンプトでコンテキストを与えることで、ChatGPTがそのコンテキストに基づいた回答を生成できるようになります。例えば、ある企業の製品情報をプロンプトに含めれば、その製品に関する質問に適切に答えられるようになります。
フューチャープロンプト
プロンプトに特定の書き方や文体を指示することで、ChatGPTがその指示に従った回答を生成するよう誘導できます。例えば「ビジネス文書の文体で答えてください」と指示すれば、そのスタイルで回答が返ってきます。
しかし、プロンプトによる学習には以下の制限があります。
-
[% module(広告) %]
- 一時的な学習しかできない: プロンプトで与えた情報はChatGPTのメモリに一時的にしか保持されず、次のセッションでは失われてしまいます。
- 矛盾する情報への対処が難しい: プロンプトで与えた情報が既存の知識と矛盾する場合、ChatGPTが適切に対処するのは難しいです。
このため、ChatGPTに大量の新しい情報を永続的に学習させるには、プロンプトではなく「ファインチューニング」と呼ばれる手法を使う必要があります。ファインチューニングでは、学習用データセットを用いてChatGPTのモデル自体を再学習させることができます。
プロンプトは一時的な学習やコンテキストの提供には有効ですが、ChatGPTに本格的に新しい知識を学習させるには限界があり、ファインチューニングが必要不可欠となります。
OpenAI API を使ったファインチューニングによりChatGPTを学習させる
OpenAI API を使ってChatGPTをファインチューニング(転移学習)する手順は以下の通りです。
トレーニングデータの準備
ChatGPTに学習させたい質問と回答のペアを収集し、JSONLファイル形式で保存します。各行は以下の形式になります。
{"messages": [{"role": "system", "content": "システムメッセージ"}, {"role": "user", "content": "ユーザーの質問"}, {"role": "assistant", "content": "モデルが生成すべき回答"}]}
OpenAI APIキーの取得
トレーニングデータのアップロード
Python の openai ライブラリを使って、準備したトレーニングデータをOpenAIサーバにアップロードします。
import openai openai.File.create(file=open("data.jsonl", "rb"), purpose="fine-tune")
ファインチューニングジョブの作成
アップロードしたデータを使って、ファインチューニングジョブを実行します。
response = openai.FineTune.create( train_file="ファイルID", model="gpt-3.5-turbo", suffix="カスタムモデル名" )
ジョブの進行状況の確認
ジョブが完了するまで待ちます。進行状況は以下のコマンドで確認できます。
resp = openai.FineTune.retrieve(response["id"]) print(resp)
ファインチューニングモデルの使用
ジョブが完了したら、生成されたモデルを使ってChatGPTと対話できます。
completion = openai.ChatCompletion.create( model=f"ft-{openai.FineTune.retrieve(response['id'])['fine_tuned_model']}", messages=[{"role": "user", "content": "質問"}] ) print(completion.choices[0].message.content)
OpenAI APIを使えば、ChatGPTにカスタムデータを学習させて、特定のタスクに特化したモデルを作ることができます。ただし、十分な量の高品質なデータが必要になるため、データ収集が重要になります。
ファインチューニングには、別途料金がかかります。
[% module(広告) %]
ファインチューニングモデルの料金
- ファインチューニングモデルのトレーニングには、1,000トークンあたり$0.008の料金がかかります。
- ファインチューニングモデルの入力時には、1,000トークンあたり$0.003の料金がかかります。
- ファインチューニングモデルの出力時には、1,000トークンあたり$0.006の料金がかかります。
ベクトルデータベースとエンベディングによりChatGPTを学習させる
ベクトルデータベースとエンベディングを組み合わせることで、ChatGPTに独自のデータを学習させることができます。この手法には以下のようなメリットがあります。
ベクトルデータベースの利点
- 大量のデータを効率的に検索できる
- 意味的な関連性に基づいて関連情報を取得できる
- 従来のデータベースよりも高速な検索が可能
エンベディングの利点
- ChatGPTの既存知識に独自データを追加できる
- ハルシネーション(事実と異なる回答)を抑制できる
- 回答に利用したデータソースを特定できる
関連 生成AIのEmbedding 追加学習や検索・類似度判定
手順
- 独自のデータ(PDFや社内文書など)をベクトル化してベクトルデータベースに保存する
- ユーザーの質問をベクトル化し、関連するデータベクトルを検索する
- 関連データをChatGPTのプロンプトに追加して回答を生成する
この手法を使えば、ChatGPTの既存知識に加えて独自データに基づいた高精度な回答を生成できます。ただし、ベクトル化の品質やデータの適切性に依存するため、十分な事前準備が重要です。
具体的には、以下のRAGと呼ばれる方法でChatGPTを学習させることになります。
RAG (Retrieval Augmented Generation)によりChatGPTを学習させる
RAG (Retrieval Augmented Generation) は、ChatGPTなどの大規模言語モデル (LLM) の出力を改善するための手法です。以下の手順で実装されます。
データの準備
学習させたい企業の独自データ (社内文書、製品情報、FAQ など) を収集し、適切な形式に変換します。
ベクトル化とインデックス化
収集したデータをベクトル化し、ベクトル検索エンジンにインデックス化します。これにより、LLMの入力に対して関連するデータを効率的に検索できるようになります。
検索と生成
ユーザーの入力 (質問など) に対して、ベクトル検索エンジンから関連するデータを取得します。その関連データと入力をLLMに与えると、LLMはその情報に基づいて出力を生成します。
RAGの利点は以下の通りです
- 最新の情報を反映: LLMの学習データは固定されていますが、RAGではリアルタイムの企業データを参照できるので、常に最新の情報に基づいた出力が可能です。
- 透明性の向上: 出力に使用されたデータソースが明示されるので、回答の根拠が分かります。
- ドメイン知識の活用: 企業の専門知識を含むデータを学習できるので、その分野に特化した高度な出力が期待できます。
- 機密情報の制御: 企業が管理するデータのみを使用するので、機密情報の漏洩リスクが低減できます。
ただし、RAGを実装するには、データの収集・前処理、ベクトル検索エンジンの構築・運用など、一定の技術的な取り組みが必要になります。企業のニーズに合わせて、適切なツールやサービスを選択する必要があります。
ChatGPTを学習させるまとめ
- 短期的には、プロンプトに情報を埋め込むことで、ChatGPTに追加の知識を与えることが可能
- 追加料金を支払って、ファインチューニングでの追加学習が可能。追加データの量と手間の点で、この方法がもっとも現実的
- ベクトルデータベースでRAGという手法で大掛かりな追加学習が可能。しかし、実装や構築・運用の面で現実的ではない
[% module(差し替え広告) %]