トークンはサブワード(部分語)の断片なので、単語数とは一致しません。一般的な英語では1トークンあたり平均で約4文字、つまり単語の約4分の3です。つまり1,000単語はおよそ1,300トークンになります。コード、日本語などの非英語スクリプト、珍しい単語は文字あたりのトークン数が多くなり、数倍になることもあります。
トークンとは実際には何か
言語モデルは文字や単語をそのまま読むのではなく、トークンを読みます。トークンとは、学習データから得られた固定の語彙表に従ってテキストを分割して生まれる断片のことです。
よく使われる単語は通常1トークンですが、珍しい単語は複数の断片に分割されます。空白は通常、直後のトークンの先頭に付加されるため、同じ単語でも文頭に来るかどうかで数え方が変わることがあります。
たとえば unbelievable という単語は1トークンではなく、Un + believ + able のように分割される可能性が高いでしょう。一方で the は1トークン、international も1トークンです。学習データに十分な頻度で登場したため、独自のエントリーが与えられているからです。
これがトークン数を予測しにくく感じさせる理由です。この単位は言語学的なものではなく、統計的なものです。学習コーパス内での出現頻度が、1トークンになるか4トークンになるかを決めています。
37文字 · 7トークン · 1トークンあたり約5.3文字
英語の目安: 1トークン ≈ 4文字 ≈ 0.75単語。
コード、英語以外の文字、まれな単語は、1文字あたりのトークン数が多くなります。
実際に使える目安
英語の文章の場合:
- 1トークン ≈ 4文字
- 1トークン ≈ 0.75単語
- 1,000単語 ≈ 1,300トークン
- 標準的な1ページ(約500単語)≈ 650トークン
ただし、普通の文章以外ではこの目安はすぐに崩れます:
| コンテンツの種類 | 目安 |
|---|---|
| 英語の文章 | 1トークンあたり0.75単語 |
| コード | 同等の文章の2〜3倍のトークン |
| 長いキーを持つJSON | 非常に多い — 句読点や引用符も個別のトークン |
| 中国語・日本語・韓国語 | 多くの場合1文字あたり1〜2トークン |
| キリル文字・デーヴァナーガリー・アラビア文字 | 同じ意味で英語の2〜3倍が一般的 |
| URLやハッシュ値 | 非常に多い — ランダムな文字列はトークン化が苦手 |
| 連続する空白 | ひとかたまりごとに独立したトークンになることも |
多言語間の差は大きいのに見過ごされがちです。同じ文でも、日本語では英語の数倍のコストがかかることがあり、料金とコンテキストウィンドウに収まる量の両方に影響します。
モデルによってトークン数が異なる理由
各モデルファミリーは独自の語彙表を持つ独自のトークナイザーを使っているため、同じテキストでもトークン数は異なります。
GPTモデルはバイトペアエンコーディングの一種を使います。GPT-4世代では cl100k_base、新しいモデルでは o200k_base です。Claudeは別の語彙表を持つ別のトークナイザーを使っています。LlamaやMistralなどのオープンモデルも、それぞれ独自のものを採用しています。
同じ英語テキストでもファミリー間で10〜20%の差が出るのは普通で、語彙表の違いが最も大きいコードや非英語テキストではさらに開きます。
実務上これは次のことを意味します:
- あるトークナイザーのカウントは、他のモデルにとっては推定値にすぎません。
- 課金に関して正確な数値が得られるのは、プロバイダー自身のトークナイザーだけです。
- 上限ぴったりに合わせるのではなく、余裕を持って予算を立てましょう。
トークンカウンターではGPT-4oのカウントとClaudeの推定値を並べて表示するため、プロンプトが上限に余裕で収まっているのか、ギリギリなのかを判断するには十分です。
この数字が重要な理由
コスト。 APIの料金はトークン単位で、入力と出力は別々に価格設定され、出力のほうが数倍高いのが一般的です。システムプロンプトを2倍にすれば、すべての呼び出しでそのコストが2倍になります。テスト中は見えず、大量利用で初めて響いてくる種類のコストです。
コンテキスト制限。 コンテキストウィンドウにはすべてが含まれます。システムプロンプト、会話履歴、検索で取得した文書、現在のメッセージ、そして応答用に確保された領域です。長い会話が失敗するのは、個々のメッセージが長いからではなく、履歴が蓄積するからです。
切り捨て。 入力が上限を超えると、何かが削除されます。多くの場合、警告なしに、そして最も古い内容から失われます。「指示を忘れた」ように見えるモデルは、実際には指示が切り捨てられただけということがよくあります。
検索用のチャンク分割。 埋め込み用に文書を分割する際の単位は文字ではなくトークンです。文字数で区切られたチャンクはサイズが不揃いになり、文の途中で切れたチャンクは検索精度が下がります。長いテキストを扱いやすい単位に分けるには、テキスト分割ツールが単語の途中ではなく段落の区切りに近い位置で切ってくれます。
意味を失わずにトークン数を減らす方法
効果の高い削減方法を、おおよその順番で:
- 会話履歴を整理する。 長い会話では、これが他のすべてを圧倒します。古いやり取りをそのまま再送するのではなく、要約して送りましょう。
- 重複する指示を削る。 同じルールを3通りに繰り返しても、守られる確率が3倍になるわけではありません。そのルールのコストが確実に3倍になるだけです。
- 書式のゴミを取り除く。 不可視文字、連続する空白、装飾的な区切り線はすべてトークン化されます。ハイフン40個の列は、その上の文よりコストが高いことさえあります。不可視文字を削除で目に見えないものを除去できます。
- 構造化プロンプトではJSONのキーを短くする。
{"n": ...}と{"customer_full_name": ...}の差は、1,000件のレコードに掛け算すると非常に大きくなります。 - 関連する抜粋だけを送る。 関連する3段落を検索して送るほうが、文書全体を貼り付けるより優れており、安いだけでなく回答の質も向上するのが普通です。
効果がないのは、普通の句読点を削除したり、冠詞を省いたり、電報のような文体で書いたりすることです。削減効果はわずかで、出力品質への悪影響のほうが大きくなります。
よくある質問
1,000単語は何トークンですか?
一般的な英語の文章では約1,300トークンです。1トークンあたり約0.75単語が目安です。コード、JSON、非英語テキストはかなり多くなり、中国語・日本語・韓国語では1文字あたり1〜2トークンになることも珍しくありません。
GPTとClaudeでトークン数が違うのはなぜですか?
各モデルファミリーは、学習された語彙表が異なる独自のトークナイザーを使っているため、同じテキストでも分割の仕方が異なります。英語の文章で10〜20%の差は普通で、コードや非英語テキストではさらに差が開きます。
AIモデルにおけるトークンとは何ですか?
モデルの固定語彙表に含まれるテキストの断片です。よく使われる単語は通常1トークンですが、珍しい単語は複数の断片に分割されます。たとえば「unbelievable」は3トークンになる一方、「international」は1トークンだけ、ということがあります。
スペースや句読点もトークンに数えられますか?
はい。空白は通常、直後のトークンの先頭に付加され、句読点は単独のトークンになることがよくあります。連続する空白や装飾的な区切り線は、思いのほか多くのトークンを消費することがあります。
トークン使用量を減らすにはどうすればいいですか?
まず蓄積した会話履歴を整理しましょう。長い会話ではこれが最大の要因です。次に、重複した指示を削除し、不可視文字や連続する空白を取り除き、JSONのキーを短くし、文書全体ではなく関連する抜粋だけを送ります。