AIにおけるトークンとは、LLMがテキストを表現・生成するために使う語彙の1項目です。モデルのトークナイザーによって、単語、単語の一部、句読点、空白、さらにはエンコードされた文字の一部に対応することがあります。

トークンは、言語に共通する普遍的な単位ではありません。モデルが処理できるように、テキストを番号付きの項目列へ変換する、モデル固有の方法です。

トークンはコードブックの項目

トークナイザーを、テキストを準備するソフトウェアと、それを処理するLLMが共有するコードブックだと考えてみましょう。コードブックには、許可されたテキストまたはバイト列が収録され、それぞれに整数のIDが割り当てられています。

例として、あるトークナイザーが次のように分割するとします。

The cat sat.

これを次のように分割します。

The |  cat |  sat | .

これらの見える断片は、たとえば次のようなIDに対応します。

[814, 3290, 7112, 13]

ここで示した番号は、仕組みを説明するために作ったものです。実際のIDと境界はトークナイザーによって異なります。先頭の空白が後続の単語とまとめられることがあるため、cat catは異なる項目になることがあります。

日常的な説明では、トークンは、見える断片そのものと、そのIDのどちらを指すこともあります。この区別は重要です。モデルが受け取るのは読みやすい小さな文字列ではなくIDです。各IDは、モデルが処理できる、学習済みの数値表現の初期値を選択します。

モデルが単語より小さい断片を使う理由

単語全体を語彙にすると、モデルが遭遇する可能性のあるあらゆる名前、綴り、語形変化、専門用語、新語について項目が必要になります。登録されていない単語は未知語になります。

文字だけの語彙なら未知語を避けられますが、通常のテキストがはるかに長い列になります。その結果、モデルが処理しなければならないステップ数が増えます。

サブワードトークン化は、その妥協案です。頻出する文字列には独自の項目を割り当て、まれな単語は小さな項目を組み合わせて表現できます。一般的な単語は1トークンになることがあります。珍しい名前は複数の断片に分かれることがあります。句読点や空白も、トークンまたはトークンの一部になることがあります。

断片は、各断片が独立した辞書上の意味を持つからではなく、十分なカバレッジとコンパクトな列を実現するように選ばれます。mentのような断片、先頭に空白を含む単語、またはバイト列は、トークナイザーの語彙に含まれていれば有効なトークンです。

トークン化の仕組み

正確な手順は異なりますが、テキストモデル内での処理経路は一般に次のような形です。

text
  ↓
model-specific tokenizer
  ↓
token pieces
  ↓
integer token IDs
  ↓
language model
  ↓
next token ID
  ↓
tokenizer decoder
  ↓
generated text

まず、トークナイザーが入力に固定の規則を適用します。設計によっては、テキストを正規化し、最初の分割を行い、その後BPE、Unigram、WordPieceなどのアルゴリズムでセグメント化します。

次に、生成された各断片を語彙から検索し、対応するIDを出力します。境界やリクエスト構造を示すなどの目的で、特殊IDを追加することもあります。これらの特殊トークンは、必ずしも見えるテキストとして現れるわけではありません。

モデルは入力IDを処理します。テキストを生成するときは、次に続く可能性のあるトークンIDに確率を割り当て、デコード設定に従って1つを選びます。その新しいIDが列に加わり、処理が繰り返されます。最後に、デコーダーが生成されたIDをバイトまたはテキストへ戻します。

完全で有効な列であれば、通常、トークン化は可逆的です。IDをデコードすると元のテキストが再現されます。ただし、特にバイトレベルのトークナイザーでは、個々のトークンだけでは読みやすい文字にデコードできない場合があります。まず隣接するトークンを組み合わせる必要があることもあります。

同じ単語でもトークン数は異なる

単語数とトークン数を正確に換算する方法はありません。

あるOpenAIのトークナイザーの例では、antidisestablishmentarianismが、あるエンコーディングによって次の5トークンに分割されます。

ant | idis | establishment | arian | ism

別のエンコーディングでは、6トークンに分割されます。

ant | idis | establish | ment | arian | ism

どちらの分割でも綴りは変わりません。また、どちらかのモデルのほうがその単語をよく理解していることを示すものでもありません。エンコーディングごとに語彙と分割規則が異なるだけです。

言語、空白、句読点、コード、絵文字、珍しい文字列によってもカウントは変わります。小さな編集だけで、その周辺の境界が変わることもあります。初期見積もりには概算値が役立ちますが、信頼できる正確な数は、使用するモデルと完全なリクエストに対応したトークナイザーまたはカウント用エンドポイントから取得する必要があります。

トークンが重要な理由

収容できる量を決めるためです。モデルのコンテキストウィンドウは、単語数ではなくトークン数で測定されます。入力、過去のメッセージ、生成された出力、場合によってはリクエスト内のその他の内容が、プロバイダーの規則に従ってその容量を奪い合います。

利用量を測るためです。多くのAI APIは、入力トークン出力トークンを別々に報告し、課金します。料金と区分は異なるため、トークン数だけでは価格は決まりません。

生成時間に影響するためです。テキスト生成はトークン単位で進みます。出力トークンが多いほど、一般に生成ステップが増えます。ただし、総レイテンシーはモデル、ハードウェア、負荷、入力処理にも左右されます。

テキストの効率を左右するためです。人間が読める長さが近い2つの文字列でも、消費するトークン数が異なることがあります。これは、複数の言語、ソースコード、構造化データ、珍しい識別子を扱うアプリケーションで重要です。

トークナイザーとモデルを結び付けるためです。モデルは、IDと語彙項目の特定の対応関係を使って学習します。無関係なトークナイザーに置き換えることは見た目だけの変更ではありません。同じIDが別の断片を指す可能性があるため、モデルは誤った学習済み表現を受け取ることになります。

よくある誤解

1トークンは1単語である

短く一般的な単語が1トークンになることはあります。しかし、トークンは単語の断片、句読点、空白を含む断片、文字、バイト列の場合もあります。1単語あたりのトークン数は、特定の種類のテキストに対する概算値として扱ってください。

トークン境界は、モデルが概念をどう捉えているかを示す

トークン境界は、トークナイザーの語彙と分割規則によって決まります。モデルの概念の地図ではありません。ある単語が4トークンに分かれていても、必ずしも4つの考えを意味するわけではありません。また、あるフレーズが1トークンとして保存されていても、必ずしも分割不能な1つの概念として理解されているわけではありません。

すべてのモデルは同じテキストを同じように数える

語彙が異なれば、境界とカウントも異なります。同じプロバイダーのモデルでも、異なるエンコーディングを使うことがあります。別のモデルで得たカウントを再利用せず、使用するモデルのインターフェースで数えてください。

入力したテキストだけがカウントされる

APIリクエストには、システム指示、会話履歴、ツール定義、ファイルや画像の表現、サービスが追加する書式などが含まれることがあります。これらの一部は、最終的なチャット画面では見えなくてもトークンとして加算される場合があります。正確なカウントが必要な場合は、プロバイダーの利用量レポートまたは完全なリクエスト用のカウントツールを使用してください。

トークンが多いほど意味も多い

トークン数が測るのは、モデルによる表現の長さであり、情報の量や質ではありません。反復的なテキストは多くのトークンを使うことがあります。コンパクトな数式は、少ないトークンで多くの意味を伝えることがあります。

AIトークンは暗号資産のトークンである

共有しているのは名前だけで、仕組みは異なります。テキストトークンはモデルの語彙単位です。暗号資産のトークンは、ブロックチェーン上のデジタル資産または記録です。

トークンがより広いシステムに組み込まれる仕組み

トークナイザーの語彙は通常、言語モデルの学習前に決められます。学習テキストはそのトークナイザーでIDに変換され、モデルはそれらのID上のパターンを学習します。推論時には、同じ対応関係によって新しいプロンプトが入力IDに変換され、生成されたIDが再びテキストに戻されます。

このため、トークナイザーが別のファイルやライブラリとして提供されていても、トークナイザーはモデルの一部です。モデル、語彙、トークナイザーの規則、特殊トークンの定義は一致していなければなりません。

トークン」という言葉は、マルチモーダルシステムでより広い意味で使われることもあります。プロバイダーは、画像パッチ、音声区間、動画フレームを、トークンとして報告する単位に変換する場合があります。これらの単位はモデル処理や利用量計算において似た役割を果たしますが、テキストトークナイザーが生成する断片ではありません。

次に読む内容

コンテキストウィンドウとは?」を読んで、トークンがモデルの作業上限をどのように決めるかを確認しましょう。APIの利用区分については、続けて「入力トークン・出力トークン・推論トークンの違い」を参照してください。