BPE(Byte Pair Encoding)

Byte Pair Encoding

BPEとは

BPE(Byte Pair Encoding:バイトペアエンコーディング)とは、テキストをサブワード単位に分割するためのアルゴリズムです。元々はデータ圧縮のアルゴリズムですが、2015年にSennrichらによりニューラル機械翻訳に適用され、現在は大規模言語モデルの標準的なトークン化手法となっています。

表:BPE(Byte Pair Encoding)の要点まとめ
ひとことで言うとよく一緒に出る文字の組を繰り返しまとめて、分割ルールを作るアルゴリズム。
どこで使うGPT系モデルのトークナイザー、多言語モデルの前処理。
注意点学習に使った文章の傾向がルールに出る。日本語主体なら日本語で学習したものを使う。

BPEの学習アルゴリズム

BPEの学習は以下の手順で行われます。まず、コーパス中のすべての単語を文字に分解します。次に、隣接する文字ペアの中で最も頻度が高いペアを一つのトークンとして統合します。この統合操作を指定した語彙サイズに達するまで繰り返します。例えば「lo」と「w」が頻繁に隣接するなら「low」という新しいトークンが作られます。

図:BPEが語彙を作る手順
1文字に分解1文字ずつに分ける
▶
2頻出ペアを数える隣り合う組を集計
▶
3最頻ペアを結合1つの単位にする
▶
4語彙表が完成分割ルールとして保存
↺ 決めた語彙数になるまで、2〜3をくり返す

BPEの適用

学習済みのBPEルールを新しいテキストに適用する際は、学習時と同じ順序で統合操作を適用していきます。頻出する文字列はそのまま一つのトークンになり、珍しい文字列は細かく分割されます。

BPEの採用例

GPTシリーズはBPEの変種を採用しています。GPT-2以降ではバイトレベルBPE(Byte-level BPE)が使われ、任意のUnicode文字列を処理できます。Llamaなどの他の主要なLLMでもBPEベースのトークナイザーが広く使用されています。