OpenAI の GPT-4o と GPT-4 Turbo のトークン数比較

OpenAI生成 AI

先日リリースされた GPT-4o と GPT-4 Turbo のトークン数比較をしました。

公式の説明では次の文章のトークン数が GPT-4 Turbo: 37 → GPT-4o: 26 となっており 1.4 倍の圧縮率になっていると言われています。

日本語トークン

こんにちは、私の名前はGPT-4oです。私は新しいタイプの言語モデルです。初めまして!

結論から言うと、公式の説明のとおり 1.4 倍効率化されていることが確認できました。

以下の文章で試しました。

結果は次のとおりです。

文章 文字数 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) の特定電子メールの送信の適正化等に関する法律の条文で実行すると次のような出力が得られます。

第一
章

総
則


(
目的
)

第一
条

この
法律
は
、一
時
に
多数
の
者
に
対
して
され
る
特
定
電子
メール
の
送
信
等
によ
る
電子
メール
の
送
受
信
上
の
支
障
を
防
止
する
必要
性
が
生
じ
て
いる
こと

アバター
後藤隼人 ( ごとうはやと )

Python や PHP を使ってソフトウェア開発やウェブ制作をしています。詳しくはこちら