トークンとは何か

LLM(大規模言語モデル)は文字列をそのまま処理するのではなく、「トークン」という単位に変換してから処理する。APIの料金はトークン数で決まり、コンテキストウィンドウの上限もトークン数で規定される。LLMを実務で使うなら、トークンの概念は避けて通れない。

トークンは単語と一致するとは限らない。英語であれば概ね4文字が1トークン程度、日本語では1文字が1〜3トークンになることが多い。「Tokenization」という単語は「Token」「ization」の2トークンに分割されたりする。

トークン化の仕組み

BPE(バイト対符号化)

現代のLLMの多くは「BPE(Byte Pair Encoding)」というアルゴリズムでテキストをトークンに分割する。BPEはもともとデータ圧縮のための手法で、頻繁に出現する文字の組み合わせを一つの記号にまとめることでデータを圧縮する。

これをテキストに適用すると、頻出する単語やフレーズがそのまま一つのトークンになる。「the」「is」「ing」などの英語の頻出パターンは独立したトークンとして登録され、出現するたびに1トークンで表現される。あまり出現しない珍しい単語は、複数の小さいトークンに分解される。

ボキャブラリとトークンID

BPEで作られたトークンの一覧を「ボキャブラリ(語彙)」と呼ぶ。GPT-4のボキャブラリは約10万種類、Claudeも同程度の規模とされる。各トークンにはIDが付与され、モデルはテキストをトークンIDの数列として処理する。

「Hello world」というテキストは「Hello」「 world」(スペース含む)などの2〜3トークンになり、それぞれのIDの数列に変換されてからモデルに入力される。

Tiktoken(OpenAI)とトークナイザー

OpenAIはtiktokenというPythonライブラリでトークン数を確認できる。import tiktokenしてエンコーダーを初期化し、テキストを渡すとトークンのリストが返ってくる。AnthropicもAPIでトークン数をカウントする機能を提供しており、送信前にコストを見積もることができる。

日本語のトークン数がなぜ多くなるか

ボキャブラリの設計による影響

GPT・Claudeなどの主要LLMは英語中心のデータで訓練されており、ボキャブラリも英語のパターンを優先的に収録している。このためBPEが英語テキストを効率よく圧縮できる一方、日本語・中国語・アラビア語などの非ラテン文字言語は効率が落ちる。

英語では「knowledge」が1〜2トークンになることが多いが、日本語の「知識」は2〜3トークン、「知識ベース」は4〜6トークンになることもある。文字単位で見ると、日本語の漢字1文字が2〜3トークン相当になるケースがある。

実際の比較

同じ意味の文章を英語と日本語で書いた場合、日本語の方がトークン数が2〜3倍多くなることは珍しくない。例えば100トークンの英文が、意味的に同等の日本語では200〜300トークンになる。

これはAPIコストに直接影響する。日本語で会話するシステムを構築する場合、英語システムと比べてコストが増えることを考慮したシステム設計が必要だ。

日本語対応の改善

GPT-4oなどの新しいモデルでは、多言語対応のトークナイゼーションが改善されており、以前のモデルと比べて日本語のトークン効率が上がっている。それでも英語と比べると非効率なのは変わらないが、差は縮まっている。

コスト計算への影響

入力・出力それぞれで課金

ほとんどのLLM APIは入力トークンと出力トークンを別々に課金する。一般的に出力の方が割高に設定されている。Claude 3.5 Sonnetを例にすると、入力が1Mトークンあたり3ドル、出力が15ドルという価格設定だ(2025年時点の参考値)。

1000回の会話で、一回あたり入力500トークン・出力300トークンとすると、入力500,000トークン+出力300,000トークンとなり、1ドル50セント程度のコストになる計算だ。日本語の場合、同じ情報量でもトークン数が増えるため、コストも比例して増える。

プロンプト設計でコストを最適化する

トークン数を意識したプロンプト設計がコスト最適化につながる。不必要な前置き・冗長な表現・大量の例示はトークン消費を増やす。System Promptは毎回のリクエストに含まれるため、そのトークン数も積み上がる。プロンプトキャッシュ機能(AnthropicやOpenAIが提供)を使うと、繰り返し使う長いSystem Promptのコストを大幅に削減できる。

まとめ

トークンはLLMがテキストを処理する基本単位で、BPEというアルゴリズムで文字列を分割する。英語中心のボキャブラリ設計により、日本語は英語に比べてトークン効率が低く、同じ情報量でも2〜3倍のトークン数になることがある。APIコストはトークン数で決まるため、日本語システムの設計ではトークン効率を意識したプロンプト設計が重要になる。tiktoken等のツールでトークン数を確認しながら設計する習慣が、コスト管理の基本だ。