LLM基礎

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

関連用語