トークンとは、大規模言語モデルがテキストを読み書きする最小の単位であり、APIの従量課金の単位でもある。モデルは漢字や単語を直接読むのではなく、数字のIDの列だけを認識する。入力されたテキストはまずトークナイザーによってトークンに分割され、IDに変換されてモデルに渡され、出力時にはIDが再びテキストに戻される。OpenAIによれば、英語では1トークンは約4文字、およそ4分の3語に相当し、100トークンは約75語の英単語にあたる。この単位を理解して初めて、コンテキスト長や料金の話に共通の物差しが生まれる。
トークンはどう切り出されるのか
トークナイザーはバイトペアエンコーディングのような統計的手法を使う。よく使われる単語は1トークンで済み、珍しい単語や長い単語はいくつかに分割され、句読点や空白、数字もそれぞれ1トークンになることがある。OpenAIは自社のトークナイザーであるtiktokenをオープンソース化しており、任意の文章のトークン数を自分で数えることができる。注意したいのは、モデルごとにトークナイザーが異なり、同じ文でもモデルによってトークン数が変わることだ。中国語では一般的な漢字1字がおよそ1〜2トークンを占め、コードやURL、連続した数字はさらに細かく分割されるため、同じ長さの中国語と英語でも料金は同じにはならない。
トークンは字でも単語でもない
請求書には通常3種類が並ぶ。入力トークンは送るものすべて、つまり質問、貼り付けた文書、会話履歴、システム指示である。出力トークンはモデルが書き返すテキストで、通常は入力より単価が高い。推論トークンは推論モデルが内部で考える際に使うもので、回答には現れないが、出力単価で課金される。価格は一般に100万トークンあたりで示され、入力と出力は別々に表示される。コンテキストウィンドウもトークンで測られる。100万トークンのウィンドウがあるからといって、100万語が入るわけではない。履歴やツールの返り値なども場所を取るため、ウィンドウが満杯になれば切り捨てるか圧縮しなければならない。
よくある誤解
第一に、文字数が少なければ安いというわけではない。コードや数字はトークン密度が高く、同じ長さの散文よりもエラーログのほうがはるかに多くのトークンを含むことがある。第二に、単価が安ければ合計も安いとは限らない。推論モデルは単価が安くても、答える前に長く考えるため、推論トークンがかさみ、合計では高単価のモデルを上回ることがある。第三に、コンテキストウィンドウを倉庫のように扱い、何でも詰め込む人がいるが、ウィンドウが大きいほど1回のリクエストの入力トークンは増え、請求額は速く膨らむ。長い会話を定期的に整理することこそ、まっとうな節約法である。
節約の方法は実はシンプルだ。要件を先に明確に伝え、モデルに長文を書かせてからやり直させるのを避ける。長い文書は全文を貼るのではなく、要約してから貼る。繰り返し使う指示はキャッシュする。簡単なタスクには小さいモデルを使う。月額制のチャット製品ではトークンを数える必要はなく、請求は月単位だ。トークンが直接お金になるのは、APIで従量課金する場合だけである。まず理解し、それから節約を語ること。そうすれば安い単価に騙されることはない。