BPE(Byte Pair Encoding) びーぴーいー(ばいとぺあえんこーでぃんぐ)
BPEByte Pair Encodingトークナイザーサブワード語彙構築GPT
BPEについて教えて
簡単に言うとこんな感じ!
「よく一緒に出てくる文字のペアを1つの単語に合体させる」を繰り返して語彙を作るアルゴリズムだよ!“a”+“b”が頻繁に出てきたら”ab”を1トークンに、さらに”ab”+“c”が多ければ”abc”を1トークンに…と圧縮していくんだ。GPT-4なんかで使われてる標準的な手法だよ!
BPE(Byte Pair Encoding)とは
BPE(Byte Pair Encoding) とは、最も頻繁に隣接して出現する文字ペアを1つのトークンに統合することを繰り返し、効率的な語彙を構築するアルゴリズムです。元々はデータ圧縮の手法でしたが、2016年にSennrich et al.が機械翻訳のサブワード分割に応用し、NLPの標準手法となりました。
BPEの優れた点は「未知語(OOV: Out-of-Vocabulary)の問題を解決する」ことです。例えば「untranslatable」という珍しい単語も、“un”・“translat”・“able”など学習済みのサブワードに分解できるため、完全な未知語として扱うことなく処理できます。GPT-2・GPT-3・GPT-4・LLaMA等の主要LLMで採用されています。
BPEのアルゴリズム
ステップ1: 文字単位の初期語彙を作成
コーパス: "low low lower newest newest"
初期語彙: {l, o, w, e, r, n, s, t}
ステップ2: 最頻ペアを統合(繰り返し)
ペア "lo" が最頻 → "lo"を追加、"l"+"o"を"lo"に置き換え
ペア "low" が最頻 → "low"を追加
ペア "es" が最頻 → "es"を追加
ペア "est" が最頻 → "est"を追加
...
ステップ3: 所望の語彙サイズになるまで繰り返す
(GPT-4では約100,000語彙)
歴史と背景
- 1994年:Philip Gageがデータ圧縮手法としてBPEを発表
- 2016年:Sennrich et al.が機械翻訳のサブワード分割にBPEを応用
- 2019年:GPT-2採用で大規模LLMにBPEが普及
- 2022年:OpenAIが「tiktoken」でBPEの高速実装を公開
- 現在:Byte-level BPE(文字ではなくバイト単位)が現在主流
BPE vs SentencePiece vs WordPiece
| 手法 | 分割の基準 | 未知語対応 | 代表例 |
|---|---|---|---|
| BPE | 頻度ベースの統合 | サブワード分解 | GPT-4、LLaMA |
| SentencePiece | 言語非依存のBPE/ULM | サブワード分解 | T5、Gemma |
| WordPiece | 尤度最大化 | サブワード分解 | BERT |
| Unigram | 確率モデルベース | サブワード分解 | XLNet |
関連用語
- トークナイザー — BPEを実装するテキスト分割ツール
- SentencePiece — BPEを多言語対応で実装したライブラリ
- トークン — BPEが生成する処理単位
- 事前学習 — BPEが使われるLLMの学習工程