BPE(Byte Pair Encoding)は、コーパス内で最も頻繁に現れるペアを繰り返し統合し、語彙(トークンの一覧)を構築するサブワード・トークン化手法です。トークンが「LLMが処理する最小単位」なら、BPEは「その単位をどう切るか」の設計図。本記事はマージ回数の暗記ではなく、「なぜ単語を丸ごと持たず、分割で語彙を育てるか」に焦点を当てます。
単語単位の限界
もし語彙を「辞書に載る単語だけ」に限定すると、次の問題が起きます。
- 未知語 — 学習時に見なかった語をどう扱うか
- 語彙の爆発 — 複合語・固有名詞・造語で辞書が際限なく膨らむ
- 言語差 — 日本語など、単語境界が曖昧な言語での分割
BPEはサブワード——語の一部や文字のまとまり——を語彙の素片にします。「unhappiness」を一語として覚えるのではなく、「un」「happi」「ness」のような頻出パーツを組み合わせて表現するイメージです。
ペア統合の直感
試験向けの手順イメージは次のとおりです。
- 初期 — 文字(またはバイト)単位からスタート
- カウント — コーパス内で最も頻繁な隣接ペアを探す
- 統合 — そのペアを新しいシンボル(サブワード)として語彙に追加
- 繰り返し — 目標の語彙サイズに達するまでマージを続ける
名前の Byte Pair は、元々バイト列に対してペア統合を行う発想に由来します。結果として、よく使われる文字列ほど長いトークンになり、まれな語は短い断片の組み合わせで表現されます。
G-347のfastTextが「文字n-gramで部分語情報を使う」と説明されるのと同様、語の内部構造を活かす発想の一族です(fastText自体はBPEではありませんが、サブワード思想は近い)。
LLMのTokenizerとの関係
現代のLLM(GPT系列など)は、学習前にテキストをトークン列に変換します。この分割器がTokenizer(トークナイザ)で、BPEやその改良(SentencePiece、WordPieceなど)が広く使われます。
| 段階 | 何が起きるか |
|---|---|
| 事前学習前 | コーパスからBPEで語彙を構築 |
| 推論時 | 入力テキストを語彙に沿ってトークンID列に変換 |
| 生成時 | モデルが次のトークンを1つずつ予測(TF-0178) |
だから「1単語=1トークン」とは限りません(トークン記事参照)。BPEの語彙次第で、英単語の一部や日本語の数文字が1トークンになります。
似た用語との区別
| 用語 | 役割 | BPEとの違い |
|---|---|---|
| トークン | 処理・生成の単位 | BPEはトークンを作る手法 |
| BoW | 文書の特徴ベクトル | 古典的な文書表現。トークン化とは別目的 |
| n-gram | 連続語列のモデル | 言語モデル。BPEは語彙構築 |
| ワンホット | 1語の疎な符号化 | 単語の符号化。BPEはサブワード語彙の構築 |
試験で押さえるポイント
- 定義 — 頻出ペアを統合して語彙を構築するトークン化(サブワード)
- 目的 — 未知語対応・語彙サイズの抑制・多言語対応
- 位置づけ — トークンを作るTokenizerの中核手法の一つ
- すり替え回避 — BoW、埋め込み、Transformerそのものではない
すり替えに注意
| 誤った説明 | 正しい理解 |
|---|---|
| BPE=BoW | トークン化 vs 文書の出現回数ベクトル |
| BPE=トークンそのもの | トークンを定義する手法 |
| BPE=word2vec | 語彙構築 vs 意味ベクトルの学習 |
| BPE=Transformer | 前処理 vs モデルアーキテクチャ |
| 1単語=必ず1トークン | サブワード分割されうる |
よくある質問
BPEは何をする手法ですか?
コーパス内で最も頻繁に現れる文字やサブワードのペアを繰り返し統合し、語彙(トークンの一覧)を構築するトークン化手法です。単語を一塊とみなさず、頻出部分をサブワードとして学習する点が特徴です。
BPEとトークンは同じですか?
違います。BPEはテキストをトークン列に分割するための語彙構築・トークン化の手法です。トークンは分割後の処理単位そのものを指します。GPTなどのTokenizerはBPE系の手法を採用していることが多いです。
BPEとBoWは同じですか?
いいえ。BPEはLLM向けのサブワードトークン化です。BoW(Bag of Words)は文書を単語の出現回数ベクトルで表す古典的な文書表現手法であり、目的も時代も異なります。