BPEとは
BPE(Byte Pair Encoding:バイトペアエンコーディング)とは、テキストをサブワード単位に分割するためのアルゴリズムです。元々はデータ圧縮のアルゴリズムですが、2015年にSennrichらによりニューラル機械翻訳に適用され、現在は大規模言語モデルの標準的なトークン化手法となっています。
| ひとことで言うと | よく一緒に出る文字の組を繰り返しまとめて、分割ルールを作るアルゴリズム。 |
|---|---|
| どこで使う | GPT系モデルのトークナイザー、多言語モデルの前処理。 |
| 注意点 | 学習に使った文章の傾向がルールに出る。日本語主体なら日本語で学習したものを使う。 |
BPEの学習アルゴリズム
BPEの学習は以下の手順で行われます。まず、コーパス中のすべての単語を文字に分解します。次に、隣接する文字ペアの中で最も頻度が高いペアを一つのトークンとして統合します。この統合操作を指定した語彙サイズに達するまで繰り返します。例えば「lo」と「w」が頻繁に隣接するなら「low」という新しいトークンが作られます。
1文字に分解1文字ずつに分ける
▶
2頻出ペアを数える隣り合う組を集計
▶
3最頻ペアを結合1つの単位にする
▶
4語彙表が完成分割ルールとして保存
↺ 決めた語彙数になるまで、2〜3をくり返す
BPEの適用
学習済みのBPEルールを新しいテキストに適用する際は、学習時と同じ順序で統合操作を適用していきます。頻出する文字列はそのまま一つのトークンになり、珍しい文字列は細かく分割されます。
BPEの採用例
GPTシリーズはBPEの変種を採用しています。GPT-2以降ではバイトレベルBPE(Byte-level BPE)が使われ、任意のUnicode文字列を処理できます。Llamaなどの他の主要なLLMでもBPEベースのトークナイザーが広く使用されています。