BPE(LLM)

Byte Pair Encoding

BPEとは

BPE(Byte Pair Encoding:バイトペアエンコーディング)とは、テキストをサブワード単位に分割するトークン化アルゴリズムです。もともとはデータ圧縮手法として開発されましたが、2016年に自然言語処理に適用されて以降、GPTシリーズをはじめとする多くのLLMで標準的なトークナイザーとして採用されています。

表:BPE(LLM)の要点まとめ
ひとことで言うとよく出る文字の並びをまとめて1単位にする、文章の分割ルール。
どこで使うLLMの前処理。未知語や多言語を、少ない語彙数で扱えるようにする。
注意点日本語は1文字が複数トークンになる場合があり、英語より消費が多くなりやすい。

BPEの仕組み

BPEは、テキスト内で最も頻繁に隣接して出現するバイト(文字)ペアを繰り返し結合することで、語彙を構築します。初期状態では各文字が個別のトークンで、頻出ペアを統合していく過程で「un」「ing」「tion」といったサブワードが形成されます。最終的に指定した語彙サイズに達するまでこの統合を繰り返します。高頻度の単語は一つのトークンとなり、低頻度の単語はサブワードの組み合わせで表現されます。

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

BPEの利点と改良版

BPEの大きな利点は、未知語(OOV:Out-of-Vocabulary)問題を解決できることです。どんな新しい単語でもサブワードの組み合わせで表現できるため、語彙にない単語でも処理可能です。GPTシリーズではBPEをバイトレベルに拡張したBBPE(Byte-level BPE)が使用されており、任意のUnicode文字を扱えます。tiktoken(OpenAI提供)やsentencepiece(Google提供)などのライブラリで効率的なBPEトークン化が実装されています。