トークナイズ — LLMは文章をどう刻んで読むか
ChatGPTのような大規模言語モデル(LLM)は、文章を1文字ずつ読んでいるわけでも、1単語ずつ読んでいるわけでもありません。その中間のトークン(token)という単位に刻んでから処理します。よく使われるかたまり(「ing」「東京」など)は1トークンにまとめ、珍しい並びは細かく割る —— このギザギザの刻み方をトークナイズ(tokenization)と呼びます。
下の図1に文章を打ち込んでみてください。入力した瞬間に、文字がトークンのチップに刻まれていきます。英語と日本語、空白や記号でかたまり方がどう変わるかを見比べてみましょう。
なぜトークン数が大事なのか
トークンは、LLMにとっての料金メーターであり、記憶できる長さの上限でもあります。APIの利用料は「入力◯トークンあたりいくら」で決まり、一度に渡せる文章の長さ(コンテキスト長)も「最大◯トークン」で制限されます。だから同じ内容でもトークン数が少ないほど、安く・長く扱えるのです。
図1で気づくのは、日本語は英語よりトークンを食いやすいこと。英語は「1トークン ≒ 4文字」くらいに収まりますが、日本語や絵文字は1〜2文字で1トークンになりがちです。これは、モデルが学習データでよく見た並びを優先的に1かたまりにするから。英語のほうが学習量が多く、効率よくまとめられる傾向があります。なお実際のモデルはBPE(Byte Pair Encoding)などの方式で、データから「どの並びをまとめると得か」を学習して刻みます。図1はその雰囲気を再現した簡易版です。
- トークン
- LLMが文章を処理する最小単位。単語・部分語・文字・記号などのかたまり。
- トークナイズ
- 文章をトークンの列に変換する処理。逆に並べ直して文章に戻すこともできる。
- BPE
- 頻出する文字ペアを繰り返し結合して語彙を作る代表的な分割方式。
- コンテキスト長
- モデルが一度に受け取れるトークン数の上限。会話の「記憶の長さ」にあたる。
まとめ
トークナイズは、文章をモデルが扱いやすいかたまりに刻む下ごしらえです。よく出る並びは1つに、珍しい並びは細かく —— その結果、トークン数は文字数とは一致しません。トークンは料金とコンテキスト長を左右する物差しなので、LLMを扱うなら「自分の文章が何トークンになるか」の感覚が効いてきます。図1で英語・日本語・記号を打ち替えて、刻まれ方の違いを体感してみてください。