BioErrorLog Tech Blog

試行錯誤の記録

GPTのtoken数を確認する | Python

GPTにて、テキストのToken数を確認する方法をまとめます。

はじめに

ChatGPTでも使われているGPTシリーズは、その入力テキストを'Token'という単位で処理しています。

OpenAI APIの課金はこのToken単位で行われるので、いかに情報をToken効率良く記載するか、も重要な観点になります。

例:GPT-4の課金体系

今回は、このGPTシリーズの実際のToken分割を確認する方法をまとめます。

GPTのToken数を確認する

GUIで確認する | Tokenizer

手軽かつ分かりやすくToken分割を確認できる方法に、OpenAIが提供しているTokenizerというサイトがあります。

Tokenizer - OpenAI API

テキストを入力するだけで、どの単語がどのようにToken分割されているのかが可視化できます。

TokenizerでToken分割を可視化する例

余談ですが、日本語が英語の倍近いToken数を消費していることが分かります。

Pythonで確認する | tiktoken

tiktokenを使うことで、PythonでToken分割を確認することができます。
(先述のTokenizerも内部ではこのtiktokenが使われているようです)

# インストール
pip install tiktoken


テキストのToken数は、例えば下記のようにして取得できます。

import tiktoken


def num_tokens_from_string(string: str, model_name: str) -> int:
    """Returns the number of tokens in a text string."""
    encoding = tiktoken.encoding_for_model(model_name)
    num_tokens = len(encoding.encode(string))
    return num_tokens

(コードはOpenAI Cookbookを元に改変)

実行例:

text = "This is an example of using a Tokenizer."

# GPT-3でToken数を確認
num_tokens_from_string(text, "gpt-3.5-turbo")
# 10

# GPT-4でToken数を確認
num_tokens_from_string(text, "gpt-4")
# 10

選択できるモデルと、そこで使われるエンコーディングは以下の通りです。

OpenAI Cookbookより

(gpt-3.5-turbogpt-4は同じエンコーディングcl100k_baseが利用されているので、先の例でも両者の結果に差は出ていません)

終わりに

以上、GPTのToken分割を確認する方法をまとめました。

いかに少ない文字数(Token数)でこちらの意図を明示するか、というのは、シンプルで綺麗なコードを書く、という行為に似ていて面白いですね。

どなたかの参考になれば幸いです。

[関連記事]

www.bioerrorlog.work

www.bioerrorlog.work

www.bioerrorlog.work

参考

OpenAI Platform

Pricing

GitHub - openai/tiktoken: tiktoken is a fast BPE tokeniser for use with OpenAI's models.

openai-cookbook/examples/How_to_count_tokens_with_tiktoken.ipynb at main · openai/openai-cookbook · GitHub