トークナイザー語彙サイズ(トークナイザーゴイサイズ)
トークナイザーが保持するユニークなトークン(サブワード)の総数。語彙サイズはモデルのEmbeddingパラメータ数、多言語対応力、テキスト圧縮率を左右する重要な設計パラメータ。
トークナイザー語彙サイズとは
トークナイザー語彙サイズ(Vocabulary Size)は、LLMのトークナイザーが認識・出力できるユニークなトークン(サブワード断片)の総数です。この数値はモデルのテキスト処理効率、多言語対応力、メモリ消費に直接影響する重要なハイパーパラメータです。
主要モデルの語彙サイズ一覧
| モデル | 語彙サイズ | 方式 | 発表年 |
|---|---|---|---|
| GPT-2 | 50,257 | Byte-level BPE | 2019 |
| GPT-3 | 50,257 | Byte-level BPE | 2020 |
| T5 | 32,000 | SentencePiece Unigram | 2019 |
| LLaMA 2 | 32,000 | SentencePiece BPE | 2023 |
| Mistral 7B | 32,768 | SentencePiece BPE | 2023 |
| GPT-4 | 100,277 | tiktoken cl100k | 2023 |
| LLaMA 3 | 128,256 | tiktoken BPE | 2024 |
| Gemma 2 | 256,000 | SentencePiece BPE | 2024 |
| GPT-4o | 200,019 | tiktoken o200k | 2024 |
| Qwen 2.5 | 151,665 | Byte-level BPE | 2024 |
2019〜2020年のモデルは3〜5万語彙が主流でしたが、2024年以降は10〜25万語彙へと拡大する傾向にあります。
語彙サイズが影響する要素
テキスト圧縮率(Fertility)
語彙サイズが大きいほど、1トークンで表現できる文字数が増えます。これを「圧縮率」または「Fertility」と呼びます。
| モデル | 「自作パソコンを組み立てる」のトークン数 | 圧縮率 |
|---|---|---|
| GPT-2(50K語彙) | 12トークン | 0.83字/tok |
| GPT-4(100K語彙) | 8トークン | 1.25字/tok |
| GPT-4o(200K語彙) | 5トークン | 2.0字/tok |
日本語では語彙拡大の効果が顕著で、GPT-4oはGPT-2の約2.4倍のトークン効率を実現しています。
Embeddingパラメータ数
語彙の各トークンはEmbeddingベクトル(通常4,096〜8,192次元)に変換されます。語彙サイズ × 隠れ次元 = Embeddingレイヤーのパラメータ数です。
32,000語彙 × 4,096次元 = 131M パラメータ(約500MB)
128,000語彙 × 4,096次元 = 524M パラメータ(約2GB)
256,000語彙 × 4,096次元 = 1,048M パラメータ(約4GB)
語彙を4倍にするとEmbeddingだけで4倍のメモリを消費します。7Bモデルで256K語彙にすると、Embeddingだけでパラメータの約15%を占有します。
多言語対応力
語彙サイズが小さいモデルは英語中心の語彙配分になりがちで、日本語・中国語・アラビア語などの非ラテン文字が不効率に分割されます。GPT-2の50K語彙では英語1単語 = 1〜2トークンですが、日本語の漢字1文字 = 2〜3トークンになることがあります。
語彙サイズ拡大の主なモチベーションの一つが、この多言語間の不公平の解消です。
語彙サイズの設計トレードオフ
大きい語彙のメリット
- テキスト圧縮率が高い(コンテキストウィンドウを有効活用)
- 多言語でのトークン効率が改善
- APIコスト削減(トークン課金のため)
- 少ないトークンで同じ意味を表現可能
大きい語彙のデメリット
- Embedding/LM Headのパラメータ増大
- 低頻度トークンの学習が不十分になりやすい
- GPU VRAMの消費増加
- 推論時のsoftmax計算コスト増加(語彙全体の確率分布を計算)
小さい語彙のメリット
- メモリ効率が良い
- 全トークンが十分に学習される
- softmax計算が高速
小さい語彙のデメリット
- テキスト圧縮率が低い
- 非英語テキストの処理が非効率
- コンテキストウィンドウの実効容量が減少
最適な語彙サイズの選び方
| ユースケース | 推奨語彙サイズ | 理由 |
|---|---|---|
| 英語特化モデル | 32,000〜50,000 | 英語は小語彙でも十分な圧縮率 |
| 多言語モデル | 100,000〜256,000 | CJK等の効率的な表現に必要 |
| コード特化モデル | 50,000〜100,000 | プログラミング言語のキーワード・記号をカバー |
| 軽量モデル(〜3B) | 32,000 | Embeddingの比率を抑制 |
| 大規模モデル(70B+) | 128,000〜256,000 | Embeddingの相対比率が小さいため拡大が合理的 |
FAQ
Q1: 語彙サイズは後から変更できますか?
原則として事前学習時に決定され、後から変更するとEmbeddingレイヤーの再学習が必要になります。ファインチューニングで特殊トークンを少数追加することは可能ですが、大幅な語彙変更は事実上の再学習を意味します。
Q2: 同じ語彙サイズでも性能差はありますか?
あります。学習コーパスの言語分布、BPE vs Unigram の選択、バイトフォールバックの有無などで、同じ語彙サイズでも圧縮率は大きく異なります。語彙の「質」も重要な要素です。
Q3: なぜ2のべき乗に近い数値が多いのですか?
GPUのメモリアラインメントと行列演算の効率を考慮して、2のべき乗(32,768 = 2^15)またはそれに近い値が選ばれることが多いです。ただしGPT-4の100,277やLLaMA 3の128,256のように、厳密に2のべき乗でないケースも増えています。