3秒でわかる
生成 AI が文章を扱うときの最小の単位。入力も出力もトークン数で数えられ、料金と入力可能な長さの上限がどちらもこの単位で決まります。
30秒図解
もう少し詳しく
どういうものか
トークンは、言語モデルが文章を処理するときに使う細かな断片である。モデルは文字や単語をそのまま読むのではなく、あらかじめ決めた語彙表にしたがって文章を数千から十数万種類の断片に切り分け、それぞれを ID の並びに変換してから計算する。
英語ではおおむね 1 トークンが 4 文字前後、単語 1 つがそのまま 1 トークンになることも多い。日本語は 1 文字が 1 トークン、あるいは 1 文字が 2 トークン以上に割れることもあり、同じ内容でも英語よりトークン数が増えやすい。
なぜ必要か
トークンは 2 つの実務的な上限に直結する。1 つは料金で、API は入力トークンと出力トークンをそれぞれ数えて課金する。もう 1 つはコンテキスト長で、モデルが一度に受け取れる量はトークン数で決まっている。長い PDF を丸ごと貼って「入りきらない」となるのはこのためである。
RAG で文書を分割するときのチャンクサイズも、文字数ではなくトークン数で見積もると上限の計算が合いやすい。
具体例
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
print(len(enc.encode("Hello, world!"))) # 4
print(len(enc.encode("こんにちは、世界!"))) # 9 前後 ── 日本語は増えやすい
# どこで切れているかを確かめる
for t in enc.encode("tokenization"):
print(t, enc.decode([t]))
# "token" と "ization" のように、単語の途中で割れることがあるトークン数を事前に数えておくと、長い入力を送る前に分割の必要を判断できる。
つまずきやすいところ
「文字数 = トークン数」と考えて見積もると外れる。日本語のプロンプトは、文字数の 1 倍から 2 倍近いトークンになることがある。
もう 1 つ、AI の文脈のトークンと、認証で使うアクセストークンや API キーは、名前が同じでもまったく別物である。検索して出てきた記事がどちらの話をしているかは最初に見分けておく。
数を数える処理そのものが苦手なのもトークンが原因である。「strawberry の r は何個か」に間違えることがあるのは、モデルが文字ではなく断片の並びを見ているためで、単語が 1 つの塊になっていると内部の文字が見えにくい。
似た用語との違い
| 語 | 指すもの |
|---|---|
| トークン (AI) | 文章を分割した処理単位。課金と長さの上限の単位 |
| トークン (認証) | 本人確認に使う文字列。アクセストークンなど |
| トークン (構文解析) | プログラムを字句解析して得た最小単位 |
| 埋め込みベクトル | トークン列を意味の座標に変換した数値の並び |