日本語のトークン計算、そんなに不利じゃなかった(けど英語のほうがまだまだ有利)

多くのLLMを利用できるAPIサービスで課金算出の対象となる「トークン」という単位。 以前GPT-3で計算した結果をもって「日本語はトークン消費が多くてかなり不利」という感覚を持ってましたが一部勘違いしてたみたい。

日本語の文章とその英語版(DeepLで直訳したもの)を用意して、GPT-3と、最近よく使うClaude(Anthropic社)とGPT-4(OpenAI)での計算をしてみる↓

from anthropic import Anthropic
import tiktoken

words_ja = '以下の条件を満たすJob Descriptionを日本語で作成してください。Job Descriptionには職務概要、ミッション・責任、求められるスキル・要件を必ず含めてください。'
words_en = 'Please prepare a Job Description in Japanese that meets the following requirements: Job Description must include a job description, mission/responsibilities, and required skills/requirements.'

# Count word length
print("length(ja): ", len(words_ja))
print("length(en): ", len(words_en))

# Count token using GPT-3
encoding = tiktoken.get_encoding("cl100k_base")
encoding = tiktoken.encoding_for_model("gpt2")
print("GPT-3 token(ja): ", len(encoding.encode(words_ja)))
print("GPT-3 token(en): ", len(encoding.encode(words_en)))

# Count token using GPT-4
encoding = tiktoken.encoding_for_model("gpt-4")
print("GPT-4 token(ja): ", len(encoding.encode(words_ja)))
print("GPT-4 token(en): ", len(encoding.encode(words_en)))

# Count token using Anthropic 
client = Anthropic()
print("Anthropic token(ja): ", client.count_tokens(words_ja))
print("Anthropic token(en): ", client.count_tokens(words_en))

length(ja):  91
length(en):  191
GPT-3 token(ja):  94
GPT-3 token(en):  33
GPT-4 token(ja):  64
GPT-4 token(en):  32
Anthropic token(ja):  65
Anthropic token(en):  32

GPT-3だと日本語かなり不利(91文字で構成されているものが94トークン消費=3倍乖離)だなと思うが、ClaudeやGPT-4だと同じ意味の文章に対して64〜65文字=2倍乖離ということで、英語のほうがあいかわらず有利だけど、これくらいなら悪い印象までは持たないかも。

しかも今後は1トークンあたり費用もどんどん安くなっていくと思うので、とくに社内利用であればあまりコスト懸念なくじゃんじゃん活用していけば良いではないだろうか。