ChatGPTや生成AIについて調べていると、「100万トークンあたりの料金」「最大入力トークン数」といった表現を目にします。
この「トークン」とは、AIが文章を処理するために使う、小さな単位のことです。文字数や単語数に近いものですが、同じではありません。
トークンの仕組みを知ると、ChatGPTが文章を作る流れだけでなく、「長い資料を渡すと費用が増えるのはなぜか」「会話をどこまでも覚えていられないのはなぜか」も理解しやすくなります。
この記事では、ChatGPTなどの大規模言語モデル(LLM)がテキストを扱う基本的な流れを、具体例とともに解説します。
トークンとは、AIが文章を処理するための単位
私たちは文章を読むとき、単語や文節を自然に捉えています。一方、LLMは入力された文章を「トークナイザー」という仕組みで細かく分割してから処理します。この分割された一つひとつがトークンです。
例えば、「今日はとてもいい天気ですね」という文章なら、次のように区切るイメージです。
「今日」|「は」|「とても」|「いい」|「天気」|「です」|「ね」
これは仕組みを説明するための例であり、実際の分割結果ではありません。区切り方は、モデルが使うトークナイザーによって異なります。
大切なのは、1トークンが必ず1文字や1単語になるわけではないことです。
- 一つの単語が、複数のトークンに分かれることがある
- よく使われる文字列が、一つのトークンにまとまることがある
- 句読点、数字、空白などもトークンの一部になる
- 言語や表記、使うトークナイザーによってトークン数が変わる
トークナイザーは、国語の文法に沿って単語を切り出す仕組みとは限りません。「意味のある言葉のまとまり」というより、モデルが扱える文字列の部品と考えると分かりやすいでしょう。OpenAIの公式説明でも、トークンを文字列のまとまりとして説明しています。
文章は、トークンから数値へ変換される
コンピューターが計算するには、文字列を数値で表す必要があります。そこで、分割したトークンを「トークンID」という番号に変換します。
架空の例で表すと、次のようになります。
| トークン | トークンIDの例 |
|---|---|
| 今日 | 125 |
| 天気 | 836 |
| いい | 241 |
この番号は、部品を識別するためのラベルです。「836だから天気の意味になる」といった意味が、番号そのものにあるわけではありません。
次に、モデル内部の「Embedding(エンベディング、埋め込み)」によって、IDに対応する数値の並びを取り出します。この数値の並びを「ベクトル」と呼びます。
「天気」→ トークンID → [0.25, −0.63, 0.81, …]
この数値も説明用の例です。実際には、多数の数値を使ってトークンの特徴を表します。数値の対応関係は学習によって調整され、その後の計算に使われます。
ただし、Embeddingへ変換しただけで文章全体の意味が決まるわけではありません。モデルは、語順や周囲のトークンとの関係も踏まえて、数値表現をさらに更新していきます。
Transformerによる文脈の処理
LLMで広く使われる「Transformer」は、文章中のトークン同士の関係を計算する仕組みです。その中心にあるのが「Attention(アテンション、注意機構)」です。
例えば、次の文章を考えてみましょう。
田中さんは傘を忘れました。外は雨なので、彼は駅で傘を買いました。
「彼」が誰を指すのか、なぜ傘を買ったのかを読み取るには、直前の言葉だけでなく、「田中さん」「傘を忘れた」「雨」といった情報が必要です。
Attentionは、こうしたトークン間の関係を重み付けし、文脈に応じた表現を作るために使われます。モデルはこのような計算を何層も重ね、次の出力を予測します。OpenAIの技術解説でも、トークンの数値表現とAttentionの関係が説明されています。
ChatGPTが文章を「理解する」というときは、人間と同じように意味を感じていることを指すわけではありません。ここでは、学習した言葉の関係と入力の文脈を計算に使い、質問や指示に応じた出力を作ることを指します。
ChatGPTは「次のトークン」を予測して文章を作る
文章生成の基本は、それまでのトークン列をもとに、次に続くトークンの候補と確率を計算することです。
例えば、「今日は天気が」という文章の続きについて、次のような候補があるとします。
| 次に続く候補 | 確率の例 |
|---|---|
| いい | 60% |
| 悪い | 25% |
| とても | 10% |
| その他 | 5% |
この表は架空の例です。候補を読みやすい言葉で示していますが、実際にはトークン単位で確率を計算します。OpenAIの解説でも、トークンの確率は、それまでの文脈に基づくものとされています。
モデルはこの確率分布と生成時の設定に従って、次のトークンを選びます。必ず最も確率の高い候補を選ぶとは限りません。
「いい」が選ばれたら、今度は「今日は天気がいい」という続きまで含めて、さらに次を予測します。この処理を繰り返し、選ばれたトークン列を文字列へ戻すことで、私たちが読む回答になります。
流れを整理すると、次のようになります。
- 入力された文章をトークンに分割する
- トークンIDを経由して数値ベクトルに変換する
- 語順やトークン同士の関係を踏まえて文脈を処理する
- 次に続くトークンの確率を計算し、一つ選ぶ
- 生成したトークンを加えて続きを予測し、文章へ戻す
なお、この確率は「回答が事実として正しい確率」ではありません。自然に続く文章を生成できても、内容に誤りが含まれる場合があります。この点は、AIのハルシネーションに関するコラムでも解説しています。
新しい言葉の分割と意味の扱い
「AIが知らない新語やネットスラングは、入力できないのでは?」と感じるかもしれません。
しかし、ある言葉が一つのトークンとして登録されていなくても、より小さなトークンに分けられれば、文字列として扱えます。
例えば、「バズってる」という表現を、説明上は次のように分割できます。
「バズ」|「って」|「る」
この区切り方も実際の分割結果を示すものではありません。ポイントは、言葉全体が登録されていなくても、既存の部品を組み合わせて表せることです。
ただし、文字列として扱えることと、その意味を正しく知っていることは別です。学習していない新語や社内独自の略語は、文脈から推測しても誤る可能性があります。
例えば「社内では、初回の相談から契約まで進んだ案件を『青案件』と呼びます」と意味を説明すれば、その会話の中で使いやすくなります。新しい言葉を入力するたびに、モデル本体がその意味を学び直すわけではありません。
トークン数は、料金・応答時間・扱える情報量に関わる
トークンは、AIの内部処理だけでなく、実際の利用にも関係します。
API料金では、入力と出力を分けて考える
多くのLLM APIでは、渡した文章の「入力トークン」と、生成された文章の「出力トークン」に応じて料金が発生します。OpenAIのAPI料金表でも、入力と出力に別の単価が設定されています。
基本的な見方は、次のとおりです。
入力トークン数 × 入力単価 + 出力トークン数 × 出力単価
実際の費用には、キャッシュの適用やツール利用料なども関わります。また、ここで説明しているのはAPIの料金体系です。ChatGPTの利用プランとは区別して考えてください。
入力には、今回の質問だけでなく、一緒に渡す会話履歴や資料も含まれます。長い回答を求めれば、出力側の使用量も増えます。
応答時間にも影響する
一般に、生成するトークンが多いほど、回答の完了までに時間がかかります。ただし、実際の応答時間はモデルや混雑状況、ツールの処理時間などにも左右されます。OpenAIのトークン管理の説明でも、トークン数と処理時間の関係が示されています。
コンテキストウィンドウの上限
モデルが一度の処理で扱えるトークン数には上限があり、これを「コンテキストウィンドウ」と呼びます。
この上限には、指示、会話履歴、参照資料と、これから生成する回答のトークンが含まれます。
OpenAIの公式ドキュメントでは、コンテキストウィンドウに入力と出力、一部のモデルでは内部の推論用トークンも含まれると説明しています。
長い会話や大量の資料では、サービスや実装に応じて、古い履歴を省いたり要約したりする処理が必要になります。会話画面に過去の発言が残っていても、そのすべてが毎回モデルへ渡されるとは限りません。
また、コンテキストウィンドウが大きいほど、より多くの情報を渡せますが、それだけで回答の正確さが決まるわけではありません。必要な情報を選び、分かりやすく整理することも重要です。
トークンを意識してAIを使うためのポイント
普段のチャットで、毎回厳密にトークン数を数える必要はありません。まずは、次の三つを意識すると使いやすくなります。
- 必要な条件は残し、重複を減らす。 目的、対象、回答形式は明確にし、同じ説明の繰り返しを整理します。
- 資料は質問に関係する部分を渡す。 問い合わせへの回答なら、関連するFAQや規約の該当箇所を選びます。
- 回答の長さを指定する。 「要点を3つ」「200文字程度」など、必要な出力量を伝えます。
料金や上限を正確に見積もる場合は、文字数だけで判断せず、対象モデルに対応したトークナイザーやAPIの使用量情報を確認します。OpenAIには、文章の分割やトークン数を試せるTokenizerもあります。
特に日本語では、「1トークン=何文字」と一律には決められません。必要な説明を削りすぎず、回答の品質と使用量のバランスを取ることが大切です。
まとめ
トークンは、ChatGPTなどのLLMが文章を処理するための基本単位です。
文章を小さな部品に分け、数値へ変換し、文脈を処理して、次に続く部品を予測する。この積み重ねによって、自然な回答が生成されます。
トークンは文字数や単語数とは異なり、その数はAPI料金、応答時間、一度に扱える情報量に関わります。そして、多くの文章を扱えることや自然な文章を作れることが、内容の正しさを保証するわけではありません。
この仕組みを知っておくと、必要な情報を過不足なく伝え、AIの回答を確かめながら活用しやすくなります。
参考資料
-
OpenAI Cookbook「Prompt Caching 201」(EmbeddingとAttentionの基本説明を参照)
-
OpenAI Cookbook「Using logprobs」(トークンの確率に関する説明を参照)
