トークンとトークナイザ

トークンとは

トークンは、[[生成AI・LLM]] が文章を処理するときの最小単位です。LLM は文章をそのまま読むのではなく、まず文章を細かい部品(トークン)に分割してから処理します。この分割を行うプログラムがトークナイザです。

トークンは「単語」とも「文字」とも一致しません。たとえば英語の "unbelievable" は "un" + "believ" + "able" のように、単語より小さい部品(サブワード)に分かれることがあります。

トークナイザの仕組み

トークナイザは、学習データによく出てくる文字の並びを1つのトークンとしてまとめる方式(BPE などのサブワード分割)が主流です。

  • 頻出する単語 → 1トークンにまとまる("the" など)
  • 珍しい単語 → 複数のトークンに分割される
  • どんな未知の単語でも、細かい部品の組み合わせで必ず表現できる

この方式により、辞書にない新語や固有名詞でも処理できるようになっています。

なぜトークンを意識する必要があるのか

トークンは LLM 利用のコストと制限の単位だからです。

場面トークンとの関係
API の料金入力・出力のトークン数で課金される
入力の上限[[コンテキストウィンドウ]] のサイズはトークン数で決まる
日本語の扱い同じ内容でも英語よりトークン数が多くなりがちでコストが高くつく

日本語は1文字が複数トークンに分かれることもあり、目安として英語より2〜3割以上多くのトークンを消費する傾向があります。

初学者向けポイント

  • 「文字数」と「トークン数」は別物です。API の料金見積もりでは必ずトークン数で考えましょう
  • 各社が公開しているトークナイザのデモツールで、自分の文章が何トークンになるか試してみると感覚がつかめます
  • LLM が文字数のカウントや単語の逆さ読みを苦手とするのは、文字ではなくトークン単位で世界を見ていることが一因です

関連技術とのつながり

  • [[生成AI・LLM]] — トークンは LLM の入出力の基本単位
  • [[コンテキストウィンドウ]] — 一度に扱えるトークン数の上限
  • [[Transformer]] — トークン列を入力として処理するアーキテクチャ
  • [[自然言語処理]] — トークン分割は自然言語処理の前処理の基本
  • [[推論パラメータと出力のばらつき]] — 次のトークンをどう選ぶかが出力のブレを決める
Q: トークンの説明として正しいものはどれ?
- [x] LLMが文章を処理するときの最小単位
- [ ] 文章の文字数と常に一致する単位
- [ ] データベースの行を数える単位
解説: LLM は文章をトークンに分割してから処理します。トークンは文字数とも単語数とも一致しません。

Q: サブワード分割の利点はどれ?
- [ ] 全ての単語が必ず1トークンになる
- [x] 辞書にない未知の単語でも部品の組み合わせで表現できる
- [ ] トークン数が常にゼロになる
解説: 頻出パターンをトークン化し、珍しい語は分割することで、どんな文字列でも処理できます。

Q: 日本語をLLMで扱うときの傾向として正しいものはどれ?
- [ ] 英語よりトークン数が少なくなりやすい
- [x] 同じ内容でも英語よりトークン数が多くなりやすい
- [ ] トークン数は言語に関係なく一定
解説: 日本語は1文字が複数トークンに分かれることもあり、英語より多くのトークンを消費しがちです。