Byte Pair Encoding(BPE)に基づくサブワード分割アルゴリズム。テキストを文字単位から出発し、出現頻度の高い隣接ペアを繰り返しマージして語彙を構築する。GPT系列・LLaMA・Mistralなど主要LLMの標準トークナイザー方式。
BPE(Byte Pair Encoding)トークナイザーは、テキストをサブワード単位に分割するためのアルゴリズムで、現代の大規模言語モデル(LLM)において最も広く採用されているトークナイゼーション方式である。元々はデータ圧縮アルゴリズムとして1994年にPhilip Gageが提案し、2016年にSennrichらが機械翻訳のサブワード分割に応用したことで自然言語処理の標準技術となった。
BPEの語彙構築(学習フェーズ)は以下のステップで進行する。
| ステップ | 処理内容 | 例 |
|---|---|---|
| 1. 初期化 | テキストを文字(またはバイト)単位に分解 | "lower" → [l, o, w, e, r] |
| 2. 頻度カウント | 全隣接ペアの出現頻度を集計 | (l,o)=5, (o,w)=3, (e,r)=8 ... |
| 3. マージ | 最頻ペアを1トークンに統合 | (e,r) → "er" |
| 4. 反復 | 目標語彙サイズに達するまで2-3を繰り返す | "er"+"s" → "ers" ... |
| 5. 完了 | マージルール(merge table)を保存 | 32,000〜128,000トークンが標準 |
推論時(エンコードフェーズ)は、学習済みのマージルールを優先順位順に適用し、入力テキストをトークン列に変換する。
GPT-2以降のOpenAIモデルは、文字レベルではなくバイトレベルのBPEを採用している。
Byte-level BPEの利点は多言語対応の容易さで、日本語・中国語・アラビア語なども追加学習なしで扱える。
| モデル | トークナイザー | 語彙サイズ | 実装ライブラリ |
|---|---|---|---|
| GPT-4 / GPT-4o | Byte-level BPE | 約100,000 | tiktoken (cl100k_base) |
| GPT-3.5 | Byte-level BPE | 約100,000 | tiktoken (cl100k_base) |
| LLaMA 2 | BPE (SentencePiece) | 32,000 | sentencepiece |
| LLaMA 3 | Byte-level BPE | 128,256 | tiktoken互換 |
| Mistral 7B | BPE (SentencePiece) | 32,000 | sentencepiece |
| Gemma 2 | BPE (SentencePiece) | 256,000 | sentencepiece |
| Claude 3/4 | Byte-level BPE | 非公開 | 独自実装 |
語彙サイズのトレンドは拡大傾向にあり、LLaMA 2の32,000からLLaMA 3では128,256、Gemmaでは256,000と大幅に増加している。語彙拡大はトークン効率(同じテキストをより少ないトークンで表現)を向上させるが、embedding層のパラメータ数が増加するトレードオフがある。
BPEの2大実装ライブラリの特性を比較する。
| 項目 | tiktoken | sentencepiece |
|---|---|---|
| 開発元 | OpenAI | |
| 主な採用モデル | GPT系列 | LLaMA, Mistral, T5 |
| BPEバリアント | Byte-level BPE | BPE / Unigram 選択可 |
| エンコード速度 | 非常に高速(Rust実装) | 高速(C++実装) |
| 学習機能 | なし(事前学習済みのみ) | あり(カスタム語彙構築可) |
| ライセンス | MIT | Apache 2.0 |
語彙サイズはハイパーパラメーターとして事前に設定します。一般的に32,000〜256,000の範囲で、モデルの用途と対象言語に応じて調整します。語彙を大きくするとトークン効率(テキスト圧縮率)が向上しますが、embedding層のメモリ消費が増加します。LLaMA 3が128,256に拡大した主な理由は多言語対応の改善です。
日本語はByte-level BPEで1文字あたり平均1.5-3トークンを消費し、英語の1文字≒0.25トークンと比べて効率が3-6倍低くなります。これは日本語のUTF-8エンコードが1文字3バイトであることに起因します。日本語に最適化されたモデル(例: Rinna、ELYZA)は日本語テキストを多く含む学習データでBPEを訓練し、「東京」「です」などの頻出語を1トークンに圧縮しています。
BPEは隣接ペアの出現頻度でマージを決定しますが、WordPiece(BERT採用)は尤度最大化(言語モデルの確率が最も上がるペア)でマージを選択します。実用上の差は小さいですが、WordPieceの方が理論的により最適な分割を見つけやすいとされています。一方でBPEの方が実装が単純で高速なため、GPT系列やLLaMA系列ではBPEが選ばれています。