AI・機械学習
中級

BPEトークナイザー(ビーピーイートークナイザー)

Byte Pair Encodingに基づくサブワード分割アルゴリズム。頻出する文字ペアを繰り返しマージして語彙を構築し、未知語への対応力と語彙効率を両立するLLMの基盤技術。

0 回閲覧
0 いいね

BPEトークナイザーとは

BPE(Byte Pair Encoding)トークナイザーは、テキストをサブワード単位に分割するアルゴリズムです。元々はデータ圧縮技術として1994年にPhilip Gageが発案しましたが、2016年にSennrichらが機械翻訳に応用して以降、LLMのトークナイゼーションの事実上の標準となっています。GPT系列、LLaMA、Mistralなど主要なLLMの大半がBPEまたはその派生を採用しています。

アルゴリズムの仕組み

学習フェーズ(語彙構築)

  1. 学習コーパスを文字(またはバイト)単位に分解
  2. 全ての隣接ペアの出現頻度をカウント
  3. 最頻出ペアを1つの新トークンとしてマージ
  4. 指定した語彙サイズに達するまで手順2-3を繰り返し
初期: ['t', 'h', 'e']
Step 1: 'th' が最頻出 → マージ → ['th', 'e']
Step 2: 'the' が最頻出 → マージ → ['the']
... 語彙サイズ上限まで繰り返し

推論フェーズ(テキスト分割)

学習で得たマージルールを優先度順に適用し、入力テキストをトークン列に変換します。マージルール表にない文字列は個別文字(またはバイト)に分解されるため、未知語(OOV: Out-of-Vocabulary)が原理的に発生しません。

BPEの主要な派生

変種採用モデル特徴
Byte-level BPEGPT-2/3/4, LLaMAバイト単位で開始、Unicode問題を回避
BPE-dropout研究用途学習時にランダムにマージをスキップし正則化
SentencePiece BPELLaMA, Mistral空白も1文字として扱い前処理不要
tiktokenGPT-3.5/4/4oOpenAI独自の高速BPE実装

Byte-level BPE

GPT-2で導入された方式で、文字ではなくバイト(0-255)を基本単位とします。任意のUnicode文字を256個のバイトトークンの組み合わせで表現できるため、言語に依存しない汎用的なトークナイザーが構築できます。

語彙サイズの設計

モデル語彙サイズ方式
GPT-250,257Byte-level BPE
GPT-4 / GPT-4o100,277cl100k_base (tiktoken)
LLaMA 232,000SentencePiece BPE
LLaMA 3128,256tiktoken BPE
Mistral32,768SentencePiece BPE
Gemma 2256,000SentencePiece BPE

語彙サイズが大きいほど1トークンで表現できる文字数が増え(圧縮率が上がり)、入力長を節約できます。一方、Embeddingレイヤーのパラメータ数が増加し、メモリ消費と低頻度トークンの学習不足が問題になります。

日本語におけるBPEの課題

日本語はスペースで単語区切りがないため、Byte-level BPEでは漢字1文字が2〜3トークンに分解されがちです。「自作パソコン」が ["自", "作", "パソ", "コン"] のように分割され、英語の同等表現より多くのトークンを消費します。

対策として、LLaMA 3やGemma 2は語彙サイズを12〜25万に拡大し、日本語の頻出サブワードを多数語彙に含めることで圧縮率を改善しています。

FAQ

Q1: BPEと形態素解析の違いは何ですか?

形態素解析(MeCab等)は言語学的な知識に基づいて単語を分割しますが、BPEは統計的な頻度のみに基づきます。BPEは言語に依存せず、未知語にも対応できる汎用性が強みですが、言語学的に意味のない分割が生じることもあります。

Q2: 語彙サイズを大きくすれば良いのでは?

語彙サイズ増加はEmbeddingパラメータ増大とメモリ消費増を伴います。また低頻度トークンの学習が不十分になり、生成品質が下がるリスクもあります。言語カバレッジとモデル効率のバランスが重要です。

Q3: BPEの学習にはどれくらいのデータが必要ですか?

語彙サイズ32,000〜128,000のBPEを適切に学習するには、最低でも数GB〜数十GBのテキストコーパスが推奨されます。学習データが少ないとマージルールが偏り、汎化性能が低下します。