LLM(大規模言語モデル)がテキストを処理する際に、入力文字列を数値トークン列に変換するトークナイザーの設計思想・構成要素・アルゴリズム選択を体系的にまとめた技術概念。BPE・WordPiece・Unigram LM・SentencePieceなど複数の分割アルゴリズムと、語彙テーブル・特殊トークン・正規化ルールで構成される。
LLMトークナイザーアーキテクチャとは、大規模言語モデル(LLM)が自然言語テキストを内部で扱える数値表現(トークン列)に変換するための設計体系である。GPT-4oのcl100k_baseやLlama 3のtiktoken互換トークナイザー、Gemma 2のSentencePiece Unigramなど、各モデルファミリーは独自のトークナイザー設計を採用しており、モデル性能・推論速度・多言語対応力に直結する重要コンポーネントである。
トークナイザーは、LLMの入力パイプラインにおける最初の処理段階であり、生テキストをモデルが理解可能なトークンID列に変換する。2026年現在、主流のトークナイザーアーキテクチャは以下の要素で構成される:
<|endoftext|>、<s>、</s>、[PAD]、<|im_start|> などトークナイザーの設計は、モデルの語彙効率(1トークンあたりの情報量)と計算コスト(シーケンス長)のトレードオフを規定する。語彙サイズが大きいほど1トークンの情報密度は高くなるが、埋め込み層のパラメータ数が増大し、メモリ消費量が増加する。
| アルゴリズム | 採用モデル | 語彙サイズ | 特徴 | 多言語性能 |
|---|---|---|---|---|
| BPE | GPT-4o, Llama 3, Mistral | 100,000〜128,000 | 頻度ベースのマージ、バイトレベル対応 | 高い |
| WordPiece | BERT, DistilBERT | 30,522 | サブワード確率最大化、##プレフィックス | 中程度 |
| Unigram LM | Gemma 2, T5, mBART | 32,000〜256,000 | 確率的分割、複数候補から最尤選択 | 非常に高い |
| SentencePiece BPE | Llama 2, Baichuan | 32,000 | 言語非依存、空白をメタ文字▁で表現 | 高い |
| tiktoken (BPE) | GPT-4o, Claude 3.5 | 100,256〜200,019 | Rust実装の高速BPE、正規表現前分割 | 高い |
トークナイザーアーキテクチャは、大きく3つのレイヤーで構成される。
テキストが分割アルゴリズムに渡される前の前処理を担う。GPT系のtiktokenでは正規表現パターン '(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\r\n\p{L}\p{N}]?\p{L}+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n]*|\s*[\r\n]+|\s+(?!\S)|\s+ によってテキストを単語・数字・記号のチャンクに事前分割する。SentencePieceでは空白文字を▁(U+2581)に置換し、言語に依存しない一様な処理を実現する。
プリトークナイズされたチャンクを、語彙テーブルに基づいてサブワード単位に分割する。BPEの場合、学習時に構築されたマージルール(例:t + h → th、th + e → the)を順序通りに適用する。Unigram LMでは、考えられる全分割パターンのうち対数尤度が最大となる分割をViterbiアルゴリズムで選択する。
分割されたサブワード文字列を、語彙テーブル内の整数IDにマッピングする。GPT-4oのcl100k_baseでは100,256個のトークンIDが定義されており、特殊トークン(<|endoftext|> = 100257、<|im_start|> = 100264など)が追加されている。未知のバイト列は、バイトフォールバック機構によりUTF-8の各バイトに対応するトークン(例:0xE3 → トークンID 163)に分解される。
| モデル | トークナイザー名 | アルゴリズム | 語彙サイズ | 最大コンテキスト | 日本語効率 |
|---|---|---|---|---|---|
| GPT-4o | o200k_base | BPE (tiktoken) | 200,019 | 128,000トークン | 1文字≒1.2トークン |
| Claude 3.5 Sonnet | 非公開 | BPE系 | 約100,000 | 200,000トークン | 1文字≒1.3トークン |
| Llama 3.1 | llama3-tokenizer | BPE (tiktoken互換) | 128,256 | 128,000トークン | 1文字≒1.5トークン |
| Gemma 2 | gemma-tokenizer | SentencePiece Unigram | 256,128 | 8,192トークン | 1文字≒1.1トークン |
| Qwen 2.5 | qwen2-tokenizer | BPE | 151,643 | 131,072トークン | 1文字≒0.9トークン |
| Mistral Large | mistral-tokenizer | BPE (SentencePiece) | 32,768 | 128,000トークン | 1文字≒1.8トークン |
トークナイザーの設計はLLMの性能に以下の影響を及ぼす:
def、return、import などのPythonキーワードが単一トークンとして扱われるBPEトークナイザーの学習プロセスは以下の手順で進む:
学習に使用するコーパスの言語比率がそのまま各言語のトークン効率に反映されるため、多言語モデルでは意図的に低リソース言語のテキストをオーバーサンプリングする手法が一般的である。
Q1: トークナイザーを変更するとモデルの再学習が必要ですか? A: はい、必要です。トークナイザーの語彙テーブルが変わると埋め込み層の次元数が変化するため、モデル全体の再学習(または少なくとも埋め込み層の再初期化と追加学習)が必要になります。Llama 2からLlama 3への移行では、語彙サイズが32,000から128,256に拡大され、ゼロからの事前学習が行われました。
Q2: 日本語テキストのトークン効率が悪い場合、どう改善できますか? A: 日本語トークン効率の改善には3つのアプローチがあります。(1) 語彙テーブルに日本語文字・熟語を追加する(Qwen方式)、(2) SentencePiece Unigramで多言語コーパスから学習する(Gemma方式)、(3) 語彙サイズ自体を拡大して多言語カバレッジを確保する(GPT-4o方式・200K語彙)。実務ではQwen 2.5やGemma 2のように日本語効率が高いモデルを選定するのが最も手軽です。
Q3: BPEとWordPieceの違いは何ですか? A: BPEは出現頻度ベースでバイグラムを貪欲にマージする手法で、WordPieceは各マージが語彙全体の対数尤度をどれだけ改善するかを基準にマージを選択する手法です。BPEはGPT系・Llama系で広く採用され、WordPieceはBERT系モデルで使われています。BPEの方が実装がシンプルで高速なため、2026年現在の大規模LLMではBPEが主流です。
Q4: トークナイザーの語彙サイズはどのくらいが最適ですか? A: 最適な語彙サイズはモデルの用途と対象言語に依存しますが、2026年の大規模LLMでは100,000〜256,000が主流です。語彙サイズを2倍にすると埋め込み層のパラメータ数も2倍になりますが、シーケンス長が短縮されるためTransformerの計算量はO(n²)で削減されます。Gemma 2の256,128語彙は多言語性能で優れ、Mistralの32,768語彙はモデルサイズ効率で優れるというトレードオフがあります。