概要
モデルはテキストをトークンとして読み込み、学習では各サンプルを1つのトークンシーケンスとして処理します。プロバイダーはサンプルあたりのトークン上限(1つの学習レコードに含めることができる最長のシーケンス)を設定しています。学習時にはトークンを読み込むだけでなく、すべての重みをどのように変更すべきかを計算するためのメモリも必要となるため、この上限は通常の使用におけるモデルのコンテキストウィンドウよりも小さく設定されることが一般的です。
ほとんどのサポートチャットは簡単に収まります。収まらないのは、長時間のトラブルシューティングのスレッド、誰かがログファイルを貼り付けた会話、または午後中続いたようなチャットです。これらについては、それぞれどう扱うかの判断が必要です。
仕組み
record tokens = system prompt + every earlier turn + the target reply
fits = record tokens ≤ per-example limit
rough estimate: tokens ≈ characters ÷ 4 (English text)Trimは、ターゲットとなる回答から遡って処理します。システムプロンプトとターゲットは常に保持され、全体のサイズが上限に収まるまで、会話の最初から順にやり取りが削除されます。やり取りは、ユーザーのメッセージとそれに対する回答がセットで丸ごと削除されるため、質問が消えて回答だけが宙に浮いた状態でレコードが始まることはありません。
なぜ最も古い部分から削除するのでしょうか。ほとんどのチャットにおいて、最も関連性の高いコンテキストは最新のものです。つまり、回答しようとしている質問、引用されたばかりのエラーメッセージ、アシスタントが最後に提案した内容などです。また、長い入力に関する研究(Liu et al., 2023)でも、モデルはコンテキストの中間に埋もれた情報よりも、最初と最後の情報をうまく活用することが示されています。そのため、短く絞り込まれたレコードは、トークン数の減少が示唆するほどには情報を失いません。
Dropはレコードを除外します。会話の初期部分が回答に不可欠な場合に使用します。例えば、ユーザーが最初のメッセージでアカウントの種類や重要な制約を述べており、ターゲットとなる回答がそれに依存している場合などです。このようなチャットをTrimしたバージョンは、実際には必要な情報がない状態で回答するようモデルに教えることになり、結果としてモデルに推測で答えるよう暗に学習させてしまいます。
レコードが上限に収まるまで最も古いやり取りを削除し、システムプロンプト、最新のコンテキスト、およびターゲットを保持します。データセット内のすべてのサンプルが維持されます。
上限を超えるレコードを除外します。回答が長い会話の初期に提供された詳細に依存している場合や、影響を受けるレコードがごくわずかな場合に選択します。
- レコードには、250トークンのシステムプロンプト、1,500、1,300、1,200トークンの3つの過去のやり取り、ユーザーの質問(350)、およびターゲットの応答(600)が含まれています。合計5,200トークンです。
- やり取り1を削除:3,700トークン。まだ超過しています。
- やり取り2を削除:2,400トークン。制限内に収まり、600トークンの余裕があります。
- トレーニングに使用されるレコードには、システムプロンプト、やり取り3(インポートエラーが引用された箇所)、質問、および回答が保持されます。これらはすべて、ターゲットが実際に参照する内容です。
- もしユーザーがやり取り1で「旧プランを利用している」と発言し、回答がそれに依存していた場合、Drop(除外)を選択する方が安全だったと言えます。
カウントが概算である理由
モデルファミリーごとに独自のトークナイザーがあるため、同じ文でも、あるモデルでは20トークン、別のモデルでは24トークンになることがあります。したがって、学習前に表示されるトークン数は推定値です(英語の場合、平均して1トークンあたり約4文字です)。プロバイダーはファイルを受信した際に正確なカウントを行います。コード、数字、URL、および英語以外のテキストは、通常、通常の英語よりも1文字あたりのトークン数が多くなるため、データにこれらが多く含まれる場合は余裕を持たせてください。
よくある間違い
- システムプロンプトがすべてのレコードでカウントされることを忘れること。600トークンのプロンプトは、会話に使えるトークンを600減らします。
- 回答が冒頭の発言に依存しているチャットをTrimし、モデルがアカウント情報を捏造する理由を不思議に思うこと。
- 推定値が正確であると思い込み、コードや数字が多いデータで上限ぎりぎりまで実行すること。
- Trimされたレコード数を無視すること。その大半がTrimされている場合、データセットはより上限の高いモデルに適している可能性があります。
参考文献および関連資料
外部ソースは新しいタブで開きます。
- 01Lost in the Middle: How Language Models Use Long ContextsLiu et al., 2023 · arXiv · arxiv.orgモデルは、長い入力の中間にある情報よりも、最初と最後にある情報をよりうまく活用します。
- 02Prepare data for fine-tuning your modelsAmazon Bedrock User Guide · docs.aws.amazon.com複数のモデルにおける実際のサンプルあたりのトークン上限の比較。
- 03Prepare supervised fine-tuning data for Gemini modelsGoogle Cloud documentation · docs.cloud.google.comサイズ上限を含む、別のプロバイダーのデータセット要件。