モデルのしくみ 上級

バイトペアエンコーディング

BPE

文章を細かい断片(トークン)に区切るための代表的な方法で、よく一緒に出てくる文字の並びを順番にひとまとめにして語彙を作ります。多くの LLM のトークナイザーに使われています。

例日本語の文章がやけに多くのトークンに分かれるのは、BPE の語彙に日本語の断片が少ないためだ。

詳しく

バイトペアエンコーディング(BPE)は、テキストをトークンに区切るための語彙を作る方法です。もとは文章の圧縮手法として考えられたもので、自然言語処理に取り入れられて広まりました。現在の多くの大規模言語モデルで、トークナイザーの土台として使われています。

なぜ必要か

単語単位で区切ると、新語や固有名詞、誤字、活用形が語彙に入らず「未知語」になってしまいます。逆に1文字単位で区切ると、どんな文字列も表せますが、系列が長くなって計算が重くなります。BPE は、その中間をとる考え方です。よく使う文字列は大きな塊に、珍しい文字列は小さな断片に分けて扱います。

しくみ

学習用の大量のテキストを使って、次の手順を繰り返します。

  • まず、全体を最小の単位(文字、または1バイト)に分けておく。
  • 隣り合う2つの単位の組のうち、最も頻繁に出てくるものを探す。
  • その組を新しい1つの単位として語彙に加え、全体を置き換える。
  • 語彙が目標の大きさ(数万〜数十万個ほど)になるまで繰り返す。

例として、英語で「lo」「w」の組がよく出てくれば「low」という単位ができ、さらに「er」が付く形がよく出てくれば「lower」も単位になります。出現頻度が高い語は1つのトークンに、稀な語は複数のトークンに分かれます。

バイト単位で動く利点

「バイト」が名前に入っているのは、文字ではなくバイト(UTF-8 の数値)を最小単位にする方式が広く使われているためです。これにより、絵文字や珍しい漢字を含め、どんな入力も必ず表現できます。未知語で止まることがありません。

具体例

英語のよく使う単語は1トークンになりやすく、漢字かな交じりの日本語は、学習データに含まれる量が少ないモデルほど1文字が複数トークンに分かれやすい傾向があります。同じ内容でも言語によって使うトークン数が違うので、利用料金や、文脈長の消費量にも差が出ます。

使うときの注意・よくある誤解

  • BPE は意味を理解して区切っているのではない:頻度の統計で決まるだけなので、区切りが人間の感覚の「単語」や「文節」と一致するとは限りません。
  • モデルごとに語彙が違う:同じ BPE でも、学習データや目標の語彙数が違えば結果が変わります。トークン数の見積もりは、使うモデル専用の方法で数える必要があります。
  • 文字数の数え間違いの原因になる:トークン単位で読むモデルは、「単語の中の特定の文字を数える」ような作業が苦手になることがあります。
  • 他の方式として、SentencePiece のようなツールや、Unigram 言語モデル方式もあります。

関連する考え方

BPE で作られた語彙を使い、実際に文字列とトークンの番号を相互変換する部品がトークナイザーです。その単位であるトークンが、料金や文脈長の計算の基本になります。

あわせて知りたい言葉

「モデルのしくみ」の言葉をすべて見る