OpenAI の GPT-4o と GPT-4 Turbo のトークン数比較
先日リリースされた GPT-4o と GPT-4 Turbo のトークン数比較をしました。
公式の説明では次の文章のトークン数が GPT-4 Turbo: 37 → GPT-4o: 26 となっており 1.4 倍の圧縮率になっていると言われています。
こんにちは、私の名前はGPT-4oです。私は新しいタイプの言語モデルです。初めまして!
結論から言うと、公式の説明のとおり 1.4 倍効率化されていることが確認できました。
以下の文章で試しました。
- A) 特定電子メールの送信の適正化等に関する法律 | e-Gov法令検索
- B) 不当景品類及び不当表示防止法 | e-Gov法令検索
- C) 中島敦 山月記
- D) 芥川龍之介 羅生門
- E) 生成的人工知能 - Wikipedia
結果は次のとおりです。
文章 | 文字数 | GPT-4 Turbo | GPT-4o | GPT-4o / GPT-4 Turbo |
---|---|---|---|---|
A | 13543 | 15354 | 10903 | 71% |
B | 23653 | 27407 | 19771 | 72% |
C | 7003 | 8064 | 6184 | 77% |
D | 6212 | 6974 | 5287 | 76% |
E | 7381 | 7497 | 5461 | 73% |
GPT-4o の方が GPT-4 Turbo と比べて 71 - 76% ほどのトークン数となりました。 71 - 76% の逆数がほぼ 1.4 なので、これは公式の「 Japanese 1.4x fewer tokens 」という説明と整合している感じがします。
1 文字あたりのトークン数でいうと、 GPT-4 Turbo はほぼ 1 文字 = 1 トークンでしたが、GPT-4o の方は 1 文字あたり 0.8 トークンほどとなっています。
トークンとして採用されている語句の一部 ↓ を見ると、ネットスラング的な言葉が多く含まれています。 法令や小説よりも学習データに近い、もっと砕けた文章だと圧縮率はもう少し高くなりそうです。
使用したスクリプト
トークナイズに使われる titkoken
はオープンソース化されており、 Open AI の API にアクセスせずに使えます。
pip install 'tiktoken~=0.7.0'
import sys
import tiktoken
def main():
"""標準入力のトークン数を比較する"""
if sys.stdin.isatty():
sys.exit("stdin is a tty.")
text = sys.stdin.read()
tokens_4_turbo = tokens("gpt-4-turbo", text)
tokens_4o = tokens("gpt-4o", text)
len_4_turbo = len(tokens_4_turbo)
len_4o = len(tokens_4o)
comparison = len_4o / len_4_turbo * 100
print("文字数 | GPT-4 Turbo | GPT-4o | GPT-4o / GPT-4 Turbo")
print(f"{len(text)} | {len_4_turbo} | {len_4o} | {comparison:.f}%")
def tokens(model: str, content: str) -> list[int]:
encoding = tiktoken.encoding_for_model(model)
return encoding.encode(content)
if __name__ == "__main__":
main()
ちなみに、文章がどのようにトークン化されるのかを確認したい場合は次のような感じにするとよいです。
import sys
import tiktoken
MODEL = "gpt-4o"
def main():
"""標準入力のテキストのトークンの単位で分割する"""
if sys.stdin.isatty():
sys.exit("stdin is a tty.")
text = sys.stdin.read()
encoding = tiktoken.encoding_for_model(MODEL)
tokens = encoding.encode(text)
for token in tokens:
print(encoding.decode([token]))
if __name__ == "__main__":
main()
これを A) の特定電子メールの送信の適正化等に関する法律の条文で実行すると次のような出力が得られます。
第一
章
総
則
(
目的
)
第一
条
この
法律
は
、一
時
に
多数
の
者
に
対
して
され
る
特
定
電子
メール
の
送
信
等
によ
る
電子
メール
の
送
受
信
上
の
支
障
を
防
止
する
必要
性
が
生
じ
て
いる
こと