1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

同じプロンプトを27言語で測ったら、日本語は英語の1.79倍のトークンだった

1
Posted at

同じプロンプトを27言語に翻訳して、OpenAIのトークナイザーでトークン数を測ってみました。「日本語は英語よりトークンを食う」とよく言われますが、実際どのくらいなのか、他の言語と比べてどうなのかを数字で確認したかったからです。

結論から言うと、日本語は英語の1.79倍。27言語中4番目に高く、トークナイザーの世代交代でほとんど改善されなかった数少ない言語でした。

測定方法

英語で34トークンになる、ごく普通のカスタマーサポート用プロンプトを使いました。

Please summarize the customer email below in three bullet points and suggest a polite reply. The customer says the order arrived two days late and one item was missing from the box.

日本語版はこちらです。

以下の顧客メールを3つの箇条書きで要約し、丁寧な返信を提案してください。顧客によると、注文品が2日遅れて届き、箱から商品が1つ欠けていたそうです。

これを27言語に翻訳し、2つのエンコーディングで数えました。

  • o200k_base:GPT-4o以降のOpenAIモデルで使われている現行トークナイザー
  • cl100k_base:GPT-4 / GPT-3.5時代の旧トークナイザー(比較用)
import { getEncoding } from "js-tiktoken";

const enc = getEncoding("o200k_base");
const count = (text) => enc.encode(text).length;

count(english);  // 34
count(japanese); // 61

Pythonなら tiktoken で同じことができます。

import tiktoken
enc = tiktoken.get_encoding("o200k_base")
print(len(enc.encode(japanese)))  # 61

結果

言語ごとの追加トークン(英語比)

言語 トークン数 (o200k) 英語比 旧GPT-4トークナイザー (cl100k)
英語 34 1.00倍 1.00倍
中国語(簡体字) 35 1.03倍 1.53倍
スペイン語 40 1.18倍 1.29倍
ドイツ語 43 1.26倍 1.50倍
アラビア語 43 1.26倍 3.03倍
フランス語 44 1.29倍 1.44倍
ロシア語 45 1.32倍 2.15倍
中国語(繁体字) 46 1.35倍 2.12倍
ベトナム語 46 1.35倍 2.32倍
韓国語 49 1.44倍 2.50倍
ヒンディー語 51 1.50倍 4.59倍
ベンガル語 57 1.68倍 6.09倍
タイ語 59 1.74倍 3.71倍
日本語 61 1.79倍 2.21倍
ウクライナ語 64 1.88倍 3.15倍
ポーランド語 64 1.88倍 2.12倍
チェコ語 68 2.00倍 2.59倍

(27言語すべての結果はこちらの英語記事にあります)

意外だったこと

1. 日本語は「改善が一番小さかった言語」のひとつ

旧トークナイザーから現行への変化を見ると、多くの言語が大幅に安くなっています。

  • ベンガル語:6.09倍 → 1.68倍
  • ヒンディー語:4.59倍 → 1.50倍
  • アラビア語:3.03倍 → 1.26倍
  • 韓国語:2.50倍 → 1.44倍

一方、日本語は 2.21倍 → 1.79倍 とあまり縮まりませんでした。旧トークナイザーの頃は韓国語より安かったのに、今は韓国語より高くなっています。

2. 同じ漢字でも中国語(簡体字)はほぼ英語と同じ

中国語(簡体字)は35トークンで、英語とほぼ同じです。同じ内容の繁体字は1.35倍でした。漢字の多さが原因なら中国語も高くなるはずなので、日本語の割高さは漢字そのものより、ひらがな・カタカナと漢字が混ざる書き方や学習データの量の影響が大きそうです。

3. 一番高いのはアジア言語ではなかった

最下位はチェコ語(2.00倍)、次いでポーランド語とウクライナ語(1.88倍)。語形変化が多い言語は、ラテン文字やキリル文字でも細かく分割されるようです。

コストにするとどのくらいか

入力が100万トークンあたり2ドルのモデルで、このプロンプトを100万回送った場合です。

言語 入力トークン 入力コスト
英語 3,400万 $68
韓国語 4,900万 $98
日本語 6,100万 $122
チェコ語 6,800万 $136

これは入力だけの話です。回答も日本語で返ってくれば、単価が4〜5倍高い出力トークンにも同じ倍率がかかります。

日本語でトークンを節約するコツ

  • システムプロンプトや固定の指示文は英語で書く。ユーザーの入力だけ日本語にすれば、毎回送る部分のコストが下がります。
  • 中間処理(分類・抽出・ツール呼び出し)は英語かJSONで出力させる。ユーザーに見せる最終回答だけ日本語にします。
  • 全角スペースや空行を消す。コピペした文章には意外と多く含まれています。
  • 敬語を盛りすぎない。「〜していただけますと幸いです」のような丁寧な言い回しは、指示としての効果に比べてトークンが多くかかります。
  • プロンプトキャッシュを使う。固定部分をキャッシュすれば入力単価は大幅に下がります(90%以上安くなるモデルもあります)。

注意点

  • 測ったのは1つのプロンプトだけです。文によって倍率は0.1〜0.2倍ほど変わるので、順位はおおまかな目安として見てください。
  • 翻訳は機械翻訳をベースに確認しました。日本語訳に違和感があれば教えてください。測り直します。
  • ClaudeとGeminiはトークナイザーが異なるため、この数字がそのまま当てはまるのはOpenAIのモデルだけです。

自分の文章で測れるツールを作りました

同じ計測をブラウザで手軽にできるように、TokenSave という無料ツールを作りました。

  • GPTのトークン数を正確にカウント(o200kをブラウザ内で実行、テキストは送信されません)、ClaudeとGeminiは推定
  • 「英語の何倍か」を示す言語オーバーヘッド表示(今回の実測値で調整済み)
  • 入力・予想出力トークン・月間リクエスト数から月額コストを計算
  • チャット形式(JSON)のメッセージ配列にも対応

UIは日本語を含む27言語に対応しています。

みなさんの実際のプロンプトでは、日本語は英語の何倍になっていますか? Claudeのトークンカウント API などで測った方がいれば、ぜひ結果を教えてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?