BPEとSentencePieceとは? トークンの歴史と仕組みをやさしく解説
BPEとSentencePieceのアルゴリズムを比較し、トークナイザー設計における語彙生成プロセスと適用対象の違いを解説。トークン分割例も交えて詳述。


はじめに
自然言語処理(NLP)や大規模言語モデル(LLM)では、テキストを「トークン」と呼ばれる単位に分割することが不可欠です。
この記事では、トークナイザーの中でも特に重要なBPE(Byte Pair Encoding)とSentencePieceについて、わかりやすく解説します!
BPE(Byte Pair Encoding)とは?
仕組み
BPEは、もともとデータ圧縮に使われていた技術をトークン分割に応用したものです。
特徴は、
- 文字単位からスタートして
- **頻繁に登場するペア(隣り合う文字の組み合わせ)**を
- 順番に結合していく
というシンプルな仕組みです。
これにより、単語のパーツ(サブワード)を効率的に学習し、未知語(OOV)にも柔軟に対応できます。
手作業で体験してみる:例「low lower newest widest」
Step 1: 最初は文字単位にバラバラ
l o w
l o w e r
n e w e s t
w i d e s t
Step 2: 出現頻度の高いペアを探す
例:「l o」「o w」など。
Step 3: 頻出ペアを合体
- lo → low
- ow → low
- we → lower
- es → newest / widest
これを繰り返すことで、自然な単語構造に近づいていきます。
BPEはいつ辞めるの?
主に語彙数(ボキャブラリーサイズ)で打ち切ります。
- あらかじめ「30,000語」など目標を設定
- 到達したら、そこで終了
これにより、モデルサイズや計算コストをバランス良く管理できます。
SentencePieceとは?
仕組み
SentencePieceは、Googleが開発したトークナイザーで、言語を問わず文字列をサブワードに分割できます。
最大の特徴は、
- 空白(単語の区切り)を考慮せず
- すべてのテキストを一連の文字列として扱う
ことです。
これにより、特に日本語や中国語など、単語区切りが明確でない言語にも強く対応できます。
日本語文で体験してみる:「私は昨日映画を見た。」
Step 1: 文字列として扱う
私 は 昨 日 映 画 を 見 た 。
Step 2: 頻繁な組み合わせを合体
- 「昨日」
- 「映画」
- 「見た」
など、自然なサブワード単位でまとめられます。
最終的なトークン列:
私 は 昨日 映画 を 見た 。
BPEとSentencePieceの違いまとめ
項目 | BPE | SentencePiece |
---|---|---|
開発背景 | データ圧縮から着想 | 多言語対応を重視 |
入力の扱い方 | 空白を基準に単語区切り | 空白も含めすべて文字列扱い |
適用例 | BERT、GPT系 | T5、mT5、各種日本語モデル |
特徴 | シンプル、速い | 言語非依存、柔軟 |
まとめ
BPEとSentencePieceは、どちらも自然言語処理の根幹を支える重要な技術です。
- BPEは、頻出文字ペアをどんどん合体しながら自然な単語に近づける手法
- SentencePieceは、空白すら無視して、柔軟にトークン化できる手法
LLM内部の仕組みを理解して、もっとAIと仲良くなりたいです。

通りすがりのラマ🦙
このブログでは個人開発で得た知見や興味のあるテクノロジーに関する記事を執筆します。 日々公開されている情報に助けられているので、自分が得た知見も世の中に還元していければと思います。 解決できないバグに出会うと、草を食べます。🦙🌿 経歴: 情報工学部→日系SIer→外資系IT企業 興味: Webアプリケーション開発、Webデザイン、AI 趣味: 個人開発、テニス