最近、ChatGPT などの API 料金表を見たことある?
「1,000トークンあたり◯円」って書かれていて、意外と「トークンって何?」と質問されるのよ。
えっ、知らなかった!
トークンって単語数のことなん?
ほぼ単語だけど、少し違うの。
トークナイザーが文章を AI の処理単位に刻むんだけど、単語より細かいサブワードまで刻む方式が主流なのよ。
たとえば「unhappiness」は「un」「happi」「ness」のようにサブワード単位に分割される、という理解で合っていますか?
未知語でも、既知のサブワードの組み合わせで表現できるのがサブワード方式の強みですよね。
正解。
BPE(Byte Pair Encoding)が代表格よ。
ざっくり、①最初は文字ごとに分割、②よく一緒に現れる2文字をくっつけて語彙に追加、③これを繰り返して数万語彙を作る——が BPE のコア。
他に WordPiece や Unigram LM があって、BERT、GPT、LLaMA で微妙に違うのよ。
細かいとこは分かんないけど、なんとなく形は見えてきた!
日本語はどうなるん?
あの〜、日本語って英語と違ってスペースで区切れないよね?
どうやって分けるのぉ?
ましろちゃん、それが今日の核心ね。
日本語は1文字単位や、よく使われる文字列の単位で分割されるのよ。
例えば「東京都」なら「東京」「都」のように、ね。
GPT-4 では日本語が GPT-3.5 よりも効率的に分割されるように改良されたわ。
すご〜い!
じゃあ日本語で同じ内容書いても、モデルによって消費トークン数が変わるってこと?
英語と日本語でも違うん?
そう。
一般に英語に比べて日本語はトークン消費が多め。
同じ質問でも日本語だと料金が高くつくケースがあるわ。
ビジネスで API を使う側としては、トークナイザの特性を知って、英語で書いた方が安いケースも考慮すべき、ということですね。
じゃあ俳句とか短文がお得なのぉ?
えへへ。
LLMの入力も出力も、このトークンの単位で数えられてるんだね。
AIの「言葉のカケラ」みたい…ふぇぇ。
ましろちゃん、美しい表現ね。
短く書くことは節約になるわ、意味が伝わる範囲で、ね。
試験的には「トークン化=テキストを処理最小単位に分割」「BPE が代表」「日本語は文字ベース寄り」の3点で押さえて。
補足すると、LLM のコンテキストウィンドウもトークン単位で定義されるので、長文処理を議論する時には必ず登場します。
100万トークンを謳うモデルでも、日本語だと実質的な文字数はさらに減る可能性があります。
ビジネスでは、RAG の検索結果を何件入れるか・どれだけ長いドキュメントを一括で扱えるかが、トークンコストに直結するんですね。
確認クイズ
トークナイザがテキストをサブワードに分割する利点として最も適切なものはどれか。
- 処理速度が必ず上がる
- 未知の単語にも対応でき語彙数を抑えられる
- 翻訳精度が向上する
- 文法エラーを検出できる
こたえを見る
正解: 2. 未知の単語にも対応でき語彙数を抑えられる
サブワード方式では未知語もサブワードの組み合わせで表現でき、語彙爆発を防げます。速度向上・翻訳精度向上・文法エラー検出はサブワード化の直接効果ではありません。