AI · AIの基礎
AIのトークンとコンテキストウィンドウとは?
結論
トークンは、言語モデルが読み書きするテキストの単位です。短い単語1つ、長い単語の一部、句読点、数文字のかたまりなどがトークンになります。コンテキストウィンドウは、モデルが一度に考慮できるトークンの上限で、指示、チャット履歴、添付ファイル、そしてモデルが書く回答まで含めて数えます。上限を超えると、古い内容が切り捨てられるか、リクエストが失敗します。
トークンとはどんなものか
言語モデルは、文字や単語そのものを読んでいるわけではありません。まずトークナイザーが、決まった語彙の中からテキストを断片に切り分け、各断片を数値に変えます。モデルが目にするのは、この数値だけです。
以下の例は、OpenAIのオープンソースのトークナイザーライブラリ tiktoken で、o200k_base エンコーディングを使って数えたものです。他のモデルは別のトークナイザーを使うので数は変わりますが、傾向は似ています。
| テキスト | トークン数 | 分割のされ方 |
|---|---|---|
| The cat sat on the mat. | 7 | The | cat | sat | on | the | mat | . |
| Tokenization is surprisingly unintuitive. | 7 | Token | ization | is | surprisingly | unint | uitive | . |
| unbelievable | 3 | un | bel | ievable |
| strawberry | 3 | st | raw | berry |
| 2026-11-02 | 6 | 202 | 6 | - | 11 | - | 02 |
| ChatGPT | 2 | Chat | GPT |
| 我喜欢吃苹果。 | 5 | 我 | 喜欢 | 吃 | 苹果 | 。 |
よく使われる単語は、たいてい直前の空白を含めて1トークンです。珍しい単語や長い単語は、いくつかの断片に分かれます。数字や日付は意味と合わない区切り方になり、モデルが計算で小さなミスをする原因の1つです。また、strawberry は3つのかたまりで届くため、モデルは r が何文字あるかを直接見ることはありません。
モデルがサブワードのトークンを使う理由
単語をそのまま語彙にすると、とても大きくなる上に、新語や名前、タイプミスには対応できません。逆に1文字ずつの語彙にすると、どのテキストも非常に長くなってしまいます。その折衷案がサブワードのトークンです。
現在のトークナイザーの多くは、バイトペアエンコーディング(BPE)か、その近い方式を使っています。1バイトまたは1文字から始めて、学習テキストで最もよく並ぶペアを繰り返し結合し、新しいトークンにしていきます。多数回の結合を経ると、よく出る単語は1トークンになり、まれな単語も小さな断片から組み立てられます。語彙にない文字列は存在しません。
モデルの系統ごとに独自のトークナイザーを学習するため、同じ文でもモデルが違えば数も変わります。トークン数は見積もりや予算管理には役立ちますが、共通の単位ではありません。
同じ文でも言語によって数が違う
トークナイザーは、学習データに多い言語を中心に学習されています。データが少ない言語や文字体系が異なる言語では、同じ意味でもトークンが多く必要になることがよくあります。ここでは「この記事を3つの箇条書きで要約してください」という指示を各言語に訳し、古いトークナイザー cl100k_base と新しい o200k_base で数えました。
| 言語 | 文字数 | トークン数(cl100k_base) | トークン数(o200k_base) |
|---|---|---|---|
| 英語 | 53 | 9 | 9 |
| スペイン語 | 36 | 7 | 7 |
| 中国語(簡体字) | 13 | 13 | 10 |
| 日本語 | 20 | 15 | 12 |
| 韓国語 | 24 | 19 | 13 |
| ベトナム語 | 42 | 21 | 14 |
注目点は2つあります。語彙が大きい新しいトークナイザーは、中国語、日本語、韓国語、ベトナム語でずっと効率的です。それでも、この例では、これらの言語は英語より1つの内容あたりのトークンが多くなっています。APIの料金もコンテキストの上限もトークンで数えるため、同じ作業でも、言語によってコストが上がり、ウィンドウの消費も速くなることがあります。
コンテキストウィンドウとは
コンテキストウィンドウは、1回のリクエストにおけるモデルの作業用メモリです。学習で身につけた知識とは別のものです。モデルが回答を書くために使えるものはすべてこの中に収まる必要があり、回答そのものも数に入ります。
チャットアプリでは、新しいメッセージを送るたびに、それまでの会話も一緒に送られます。そのため、チャットが長くなるほどウィンドウは埋まっていきます。典型的なリクエストでは、次のものがすべて数に入ります。
- システムプロンプト:アプリや開発者が設定する、見えない指示。
- 会話に含まれる、これまでのユーザーのメッセージとアシスタントの返信すべて。
- 添付した文書、貼り付けたテキスト、画像とそこから抽出したテキスト。
- ツールの定義と、Web検索の結果などツールが返した内容。
- 新しい回答。モデルが先に書く、見えない推論(思考)トークンも含みます。
ウィンドウの大きさはモデルによって大きく異なり、頻繁に変わります。執筆時点では、小さなローカルモデルの数千トークンから、一部の大規模なホスト型モデルの100万トークン以上まであります。使うモデルのドキュメントで確認してください。
ウィンドウがいっぱいになるとどうなるか
上限への対処は、製品によって違います。
| 状況 | 通常起きること | 気づく症状 |
|---|---|---|
| APIリクエストがウィンドウより大きい | エラーでリクエストが拒否される | プロンプトが長すぎるというメッセージ |
| 回答が出力の上限に達する | 生成が途中で止まる | 返信が文の途中や箇条書きの途中で終わる |
| アプリでの長いチャット | 古いやりとりが削除されるか、要約に置き換えられる | アシスタントが最初のほうの詳細を忘れる |
| 収まってはいるが非常に長いコンテキスト | すべて保持されるが、使いこなしにくくなる | 長い入力の中ほどにある事実を見落とす |
日常で最も大事なのは最後の行です。研究では、モデルは長い入力の先頭と末尾の情報を、中ほどの情報より上手に使うことが多いと示されています。また、トークン数が増えると精度や再現率が下がりうると、モデル提供元も述べています。ウィンドウが大きければ多くを入れられますが、モデルがそのすべてをうまく使うとは限りません。
トークンの見積もりと節約のしかた
- まず見積もる。英語は単語数に約1.3を掛けます。中国語や日本語は文字数を数え、新しいトークナイザーなら1文字あたり1トークンかそれ以下と考えます。cv.cmの文字数カウントのような文字数カウンターを使うと、語数と文字数がすぐにわかります。
- 正確さが必要なときは正確に数える。モデルごとに数が違うので、使うモデルのトークナイザーやトークン数カウントのエンドポイントを使います。
- 必要な部分だけを送る。ファイル全体ではなく、関係するセクションを貼り付けます。繰り返しのヘッダー、フッター、定型文は取り除きます。
- 重要な指示は、長いプロンプトの先頭か末尾に置く。中ほどに埋もれさせません。
- 話題が変わったら新しいチャットを始める。古いメッセージは容量を使い続け、モデルの気を散らすことがあります。
- 回答の分の余裕を残す。入力でウィンドウがほぼいっぱいだと、返信は短くなるか途中で切れます。
- 長い作業では、ここまでの決定事項の要約を頼み、その要約を持って新しいチャットで続ける。
よくある間違い
- トークンを単語と同じものとして扱う。1,000語の文書は1,000トークンではなく、多くの言語ではそれよりずっと多くなります。
- モデルがすべて読んだと思い込む。ウィンドウに収まっていても、長い入力の中ほどにある詳細は無視されることがあります。根拠にした箇所を引用するよう頼みましょう。
- チャットをまたいで記憶があると期待する。アプリが保存したメモを差し込まない限り、新しい会話は空のウィンドウから始まります。
- 見えない内容を忘れる。システムプロンプト、ツール定義、推論トークンは、見えなくてもウィンドウを使います。
- モデル間の上限をそのまま比べる。あるモデルの10万トークンと別のモデルの10万トークンは、トークナイザーが違うため、収まるテキスト量が異なります。
よくある質問
1,000語は何トークンですか?
現在の一般的なトークナイザーで、ふつうの英語の文章なら約1,200〜1,300トークンです。コード、数字、URL、英語以外の多くの言語では、もっと多くなります。
スペースや句読点もトークンに数えられますか?
はい。句読点は通常それだけで1トークンになり、1つの空白は普通、次の単語の先頭にまとめられます。余分な空白、改行、インデントでトークンが増えることもあります。
画像もトークンを消費しますか?
はい。画像を受け付けるモデルは、画像を一定数のトークンに変換し、それがコンテキストウィンドウに加算されます。大きい画像や細かい画像ほどトークンが多くなるのが一般的ですが、正確なルールはモデルによります。
ChatGPTなどのチャットボットが、前に話したことを忘れるのはなぜですか?
長い会話では、アプリがコンテキストウィンドウに収めるために古いメッセージを削除または要約することがあります。古いメッセージが残っていても、モデルがあまり注意を向けないこともあります。重要な事実を繰り返すか、短い要約を持って新しいチャットを始めると改善します。
コンテキストウィンドウは大きいほど良いのですか?
必ずしもそうではありません。多くの資料を入れられますが、コストが増え、モデルが遅くなったり、細部が不正確になったりすることがあります。短く、よく選んだコンテキストを送るほうが、良い回答になることも多いです。