PR

ChatGPTを学習させる方法 独自データの活用と注意点

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がその指示に従った回答を生成するよう誘導できます。例えば「ビジネス文書の文体で答えてください」と指示すれば、そのスタイルで回答が返ってきます。

しかし、プロンプトによる学習には以下の制限があります。

  • 学習できる情報量が限られる: プロンプトのサイズには上限があり、大量の情報を一度に学習させることはできません。
  • 一時的な学習しかできない: プロンプトで与えた情報は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キーの取得
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にカスタムデータを学習させて、特定のタスクに特化したモデルを作ることができます。ただし、十分な量の高品質なデータが必要になるため、データ収集が重要になります。

ファインチューニングには、別途料金がかかります。

ファインチューニングモデルの料金

  • ファインチューニングモデルのトレーニングには、1,000トークンあたり$0.008の料金がかかります。
  • ファインチューニングモデルの入力時には、1,000トークンあたり$0.003の料金がかかります。
  • ファインチューニングモデルの出力時には、1,000トークンあたり$0.006の料金がかかります。

ベクトルデータベースとエンベディングによりChatGPTを学習させる

ベクトルデータベースとエンベディングを組み合わせることで、ChatGPTに独自のデータを学習させることができます。この手法には以下のようなメリットがあります。

ベクトルデータベースの利点

  • 大量のデータを効率的に検索できる
  • 意味的な関連性に基づいて関連情報を取得できる
  • 従来のデータベースよりも高速な検索が可能

関連 word2vecの学習済みモデル

エンベディングの利点

  • ChatGPTの既存知識に独自データを追加できる
  • ハルシネーション(事実と異なる回答)を抑制できる
  • 回答に利用したデータソースを特定できる

関連 生成AIのEmbedding 追加学習や検索・類似度判定

手順

  1. 独自のデータ(PDFや社内文書など)をベクトル化してベクトルデータベースに保存する
  2. ユーザーの質問をベクトル化し、関連するデータベクトルを検索する
  3. 関連データを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という手法で大掛かりな追加学習が可能。しかし、実装や構築・運用の面で現実的ではない