チャプター 02 · トークン化 · 8 min
テキストからトークンへ
テキストが数値になる仕組み。BPE、サブワード、そしてLLMが文字を数えるのが苦手な理由。
なぜトークンが必要なのか
言語モデルはテキストを直接処理できない。処理するのは数字だ。LLMに話しかけるたびに最初に行われることは、テキストを整数の列——トークンID——に変換することだ。
トークン化とは、この変換を可能にする分割処理のことだ。
なぜ1単語1トークンではないのか
一見すると、1単語=1トークンと考えるかもしれない。シンプルだ。
しかし、それではうまくいかない:
- 言語には数百万もの可能な単語が含まれる(活用形、新語、固有名詞、タイプミス……)。1単語1トークンでは巨大な語彙が必要になる。
- モデルは一度も見たことのない単語を処理できない。
- 中国語や日本語などの言語では、単語間にスペースがない。
ほぼすべての現代LLMが採用した解決策:サブワード。
サブワードトークン化
サブワードトークナイザーでは:
- 頻繁な単語は単一のトークンになる(
は、の、です) - 珍しい単語は小さな部品に分割される(
トークン化→トークン+化) - 未知の文字は常に個別の文字まで分解できる
結果として、合理的なサイズの語彙(通常3万〜20万トークン)がどんなテキストでも表現できる。
最も広く使われているアルゴリズムは**BPE**(Byte Pair Encoding)と呼ばれる。個別の文字から始め、訓練コーパスで最も頻繁に出現するペアを反復的にマージしていく仕組みだ。
BPEを30秒で理解する
3単語だけの小さなコーパスを想像しよう:low、lower、lowest。まず文字レベルでトークン化する:
l o w
l o w e r
l o w e s t
各反復で、最も頻繁な隣接ペアを探す。ここでは、l oが3回出現する——これをloにマージする:
lo w
lo w e r
lo w e s t
次にlo wが最も頻繁なペアになる。マージする:
low
low e r
low e s t
望む語彙サイズに達するまで続ける。よく現れる断片(low)は単一のトークンになる。珍しいもの(est)は分解されたままになる。これがまさにBPEの動作だ——3単語ではなく数十億の単語に対して、そして現代のモデルでは文字ではなくバイト単位で(バイトレベルBPE)処理することで、どんな入力も「未知」になることがないことを保証している。
知っておくべきいくつかの仲間:WordPiece(BERT)、SentencePiece(T5、Llama)、Unigram LM(mT5)。これらは同じアイデア——サブワード語彙——を共有しているが、マージのヒューリスティックが異なる。
特殊トークン
テキストのサブワード以外に、トークナイザーは自然には現れない特殊トークンをいくつか予約している:
<|im_start|>、<|im_end|>(OpenAI)、[INST]…[/INST](Llama)、<|user|>/<|assistant|>——会話のターンを区切る。<|endoftext|>——ドキュメントの終わり。<|fim_prefix|>、<|fim_middle|>——コード補完で使われるfill-in-the-middle用。
これらが、*「ユーザーがXと言い、アシスタントがYと答えた」*という対話を、モデルが処理できる線形のトークン列に変える役割を果たす。ChatGPTにメッセージを送ると、これらのマーカーがトークン化の前に自動的に追加されている。
試してみよう
右側にサブワードが表示される:各トークンは再利用可能な断片であり、必ずしも完全な単語ではない。頻繁に使われる語は 1 つのトークンに収まり、まれな語は複数の断片に分解される。
注目すべきいくつかの点:
- 短くて頻繁な単語はほとんど分割されない。
- 長い単語や珍しい単語は複数の部品に分割されることが多い。
- 単語の前のスペースはトークンの一部だ(だから
·helloとhelloは異なるトークン)。 - 日本語では、英語よりもトークン/文字の比率が高くなる傾向がある——モデルは英語のテキストをより多く学習している。
実用的な影響
このトークンという仕組みには、予想外の影響がたくさんある:
- LLMは文字を数えるのが苦手だ。「"いちご"には何文字ある?」——トークンが文字を個別に処理しないため、間違えることがある。
- APIの料金はトークン単位で計算され、単語単位ではない。トークン化効率の低い言語は処理コストが少し高くなる。
- コンテキストウィンドウ(
128kトークン、200kトークン……)もトークンで測られる。10万語の本は約13万トークンになる。
モデルにとって、「トークン化」と「トーク・ン・か」は同じものだ。部品しか見えていない。
次へ
テキストが整数の列になったので、それらの整数がモデルに入力される。モデルの最初のステップでは、これらがベクトル——意味が幾何学的な位置になる数百次元の空間——に変換される。
それが次の章のテーマだ。
更新日