AI・機械学習
上級

Byte Pair Encoding(バイトペアエンコーディング)

Byte Pair Encoding(BPE)とは、テキスト中の最も頻出する連続バイト/文字ペアを反復的にマージすることで語彙を構築するサブワード分割アルゴリズムである。GPT系、Llama系、Qwen系など主要LLMの大半で採用されるトークナイザの中核技術。

0 回閲覧
0 いいね

Byte Pair Encoding(BPE)は1994年にPhilip Gageがデータ圧縮アルゴリズムとして提案し、2016年にSennrichらがNMT(機械翻訳)に適用して以来、NLP・LLMのトークナイザの事実上の標準となった技術である。

概要

BPEの基本原理は極めてシンプルである:

  1. テキストを最小単位(バイトまたは文字)に分解
  2. コーパス内で最も頻繁に隣接するペアを特定
  3. そのペアを1つの新しいトークンとしてマージ
  4. 手順2-3を語彙サイズが目標に達するまで反復

この反復マージにより、頻出する単語は1トークンに、稀な単語は複数のサブワードに分割される。「the」は1トークン、「anthropomorphize」は「anthrop」+「omorph」+「ize」の3トークンに分割されるイメージである。

BPEの訓練プロセス

具体例として「low lower lowest」からBPE語彙を構築する過程:

初期状態(文字レベル):

l o w _ l o w e r _ l o w e s t

Step 1: 最頻出ペア「l o」をマージ → 「lo」 Step 2: 最頻出ペア「lo w」をマージ → 「low」 Step 3: 最頻出ペア「low e」をマージ → 「lowe」 Step 4: 最頻出ペア「lowe r」をマージ → 「lower」

各ステップのマージルールが「merges file」として保存され、推論時のトークン分割に使用される。

バイトレベルBPE vs 文字レベルBPE

方式初期語彙未知文字実装例
文字レベルUnicode文字(数千)UNKトークンに変換旧GPT-2
バイトレベル256バイト値なし(全バイト表現可能)GPT-4, Llama 3

2026年の主要LLMはほぼ全てバイトレベルBPEを採用している。バイトレベルの最大の利点は「未知文字が存在しない」ことで、あらゆる言語・記号・バイナリデータを表現可能。初期語彙が256と小さいため、語彙構築の効率も高い。

GPT-4 / tiktoken の BPE 実装

OpenAIのtiktokenは、BPEの推論(エンコード)をRustで実装し、Pythonバインディングを提供する高速トークナイザである。

主な最適化:

  • 正規表現プレトークン化: \'(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\r\n\p{L}\p{N}]?\p{L}+|... パターンでテキストを事前分割し、BPEの探索空間を縮小
  • バイトレベルBPE: UTF-8バイト列に対してBPEを適用
  • 特殊トークン処理: <|im_start|> 等のコントロールトークンをBPEの前に検出・分離
  • 並列処理: 複数テキストのバッチエンコードをRustスレッドで並列化

tiktokenのエンコード速度はHuggingFace tokenizersの2-5倍、Python実装のsentencepieceの10-50倍と報告されている。

Llama 3 の BPE 語彙設計

Meta Llama 3は前世代の32K語彙から128,256語彙に4倍拡張した。この設計判断の背景:

  • 多言語性能: 32K語彙では非英語テキストの圧縮率が低く、日本語で英語の3-5倍のトークン数が必要だった
  • コード対応: プログラミング言語のキーワード・構文を専用トークンでカバー
  • 効率性: 同じ文章を少ないトークンで表現でき、推論ステップ数が減少

語彙拡張の効果(トークン数比較、同一テキスト):

言語Llama 2 (32K)Llama 3 (128K)削減率
英語100トークン85トークン15%
日本語100トークン55トークン45%
中国語100トークン50トークン50%
Python100トークン78トークン22%

よくある質問(FAQ)

Q1: BPEの語彙構築にはどの程度のデータが必要ですか? A: 語彙の品質はデータの多様性に大きく依存します。GPT-4のBPE語彙は数兆トークンの多言語コーパスから構築されていると推定されます。実用的には、目標言語をカバーする10-100GBのテキストデータがあれば品質の高い語彙を構築可能です。HuggingFace tokenizersライブラリでは1GB程度のテキストから数分で語彙を構築できます。

Q2: BPEとWordPieceの違いは何ですか? A: 両者ともサブワード分割アルゴリズムですが、マージルールの選択基準が異なります。BPEは「最も頻出するペア」を選択するのに対し、WordPieceは「マージによる尤度の向上が最大のペア」を選択します。実用上の性能差は小さく、BPEの方が実装がシンプルで高速なため、最新のLLMではBPEが主流です。WordPieceはBERT系モデルで使用されています。

Q3: BPEの語彙にない単語はどう処理されますか? A: バイトレベルBPEでは「語彙にない単語」は原理的に存在しません。あらゆるテキストは最終的にバイト(256種類、全て語彙に含まれる)まで分解可能です。稀な単語は多数のサブワードに分割されるためトークン数は増加しますが、UNK(未知語)トークンに置換されることはありません。これがバイトレベルBPEの最大の利点です。

まとめ

  • BPEは頻出ペアの反復マージで語彙を構築するサブワード分割アルゴリズム
  • GPT-4、Llama 3、Qwen3など主要LLMの大半で採用
  • バイトレベルBPEにより未知文字問題を完全解消
  • tiktokenのRust実装で高速エンコードを実現
  • 語彙サイズ拡張(32K→128K)で多言語圧縮率が大幅改善