トークン

テキストを処理する際の最小単位。自然言語処理や LLM では文字や単語とは異なる独自の分割単位を使用する。

トークンとは、テキストを処理する際の最小単位です。自然言語処理 (NLP) や大規模言語モデル (LLM) では、テキストをトークンに分割 (トークナイズ) してから処理します。トークンは文字とも単語とも異なる独自の単位であり、言語やモデルによって分割方法が異なります。LLM の普及に伴い、トークンの概念はプログラマーだけでなく一般ユーザーにも広く知られるようになりました。

ChatGPT などの LLM で使われるトークナイザー (BPE: Byte Pair Encoding) は、頻出する文字列パターンを 1 つのトークンとして学習します。英語では 1 トークンが約 4 文字 (約 0.75 語) に相当し、"Hello" は 1 トークン、"indistinguishable" は 4 トークンに分割されます。日本語では 1 トークンが約 1〜3 文字に相当し、ひらがな・カタカナは 1〜2 文字で 1 トークン、漢字は 1 文字で 1 トークンになることが多いです。GPT-4o のコンテキストウィンドウは 128K トークンで、英語で約 96,000 語、日本語で約 64,000〜128,000 文字に相当します。自然言語処理の入門書でトークナイゼーションの仕組みを学べます。

API の利用料金はトークン数に基づいて計算されるため、トークン数の管理はコスト管理に直結します。OpenAI の API では入力トークンと出力トークンそれぞれに料金が設定されており、プロンプトの最適化 (不要な文脈の削除、簡潔な指示の記述) がコスト削減の鍵となります。tiktoken ライブラリを使えば、API 呼び出し前にトークン数を事前に計算でき、コンテキストウィンドウの超過を防げます。

日本語は英語に比べてトークン効率が低い傾向があります。同じ意味の文章でも、日本語は英語より多くのトークンを消費します。これは BPE トークナイザーの学習データに英語テキストが多く含まれているためです。たとえば「東京は日本の首都です」は約 8〜10 トークンですが、英語の "Tokyo is the capital of Japan" は約 7 トークンです。この差は大量のテキストを処理する場合にコストの差として顕在化します。

トークンの概念は LLM 以外の分野でも使われます。プログラミング言語のコンパイラでは、ソースコードを字句解析 (レキシカルアナリシス) でトークンに分割します。この場合のトークンはキーワード、識別子、演算子、リテラルなどの構文要素です。また、認証分野では JWT (JSON Web Token) のように、認証情報を含むデータ構造をトークンと呼びます。文脈によってトークンの意味が異なるため、どの分野の話かを明確にすることが重要です。

文字数カウントの観点では、トークン数と文字数は異なる指標です。文字数は人間が視覚的に認識する単位であるのに対し、トークン数はモデルが処理する単位です。LLM を活用する実務では、文字数制限 (SNS の投稿制限など) とトークン数制限 (API のコンテキストウィンドウ) の両方を意識する必要があります。文字数カウントツールにトークン数の推定機能を追加することで、ユーザーの利便性を大幅に向上させることができます。ChatGPT 活用の書籍ではトークン数を意識したプロンプト設計が解説されています。