SIMPLE

BPEとSentencePieceとは? トークンの歴史と仕組みをやさしく解説

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

通りすがりのラマ🦙
26 April, 2025

はじめに

自然言語処理(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 趣味: 個人開発、テニス