LLMを使っていると「トークン制限」という壁に必ずぶつかる。でも「トークン」って何?文字数とは違うの?と思ったこと、ないだろうか。これ、LLMを深く理解する上でめちゃくちゃ重要な概念だ。
トークンとは、LLMがテキストを処理する最小単位。英語ならおおよそ「1単語≒1.3トークン」。でも日本語はそう単純じゃない。「りんご」は1トークンのこともあれば2トークンのこともある。漢字一文字で1トークンになることも。この言語間格差、地味にデカい。
トークナイザーの仕組み。有名なのはBPE(Byte Pair Encoding)。頻出する文字列パターンを辞書に登録していく方式だ。簡単に言うと:
- 最初は全文字をバラバラにする(「あ」「い」「う」…)
- よく一緒に出てくるペアを見つけて、それを1つのトークンとして辞書に登録
- これを何万回も繰り返して、最適なトークン辞書を作る
これで「今日はいい天気」が「今日」「は」「いい」「天気」みたいに分割される。よく使う単語は1トークン、珍しい単語は複数トークン、という塩梅。
日本語のトークン問題は深刻で:
- 英語: 1000文字 ≒ 約750トークン
- 日本語: 1000文字 ≒ 約400〜600トークン(モデルによる)
- 同じ情報量でも日本語の方がトークン数が多くなりがち → API料金が割高に
最近のモデル(GPT-4o、Claude 3)は日本語トークナイザーが改善されてて、以前よりはマシになった。でもまだ英語に比べると不利。これは日本語ユーザーの永遠の悩みだ。