ChatGPTのトークン数をtiktokenで見積もる

うわっ…私のトークン数、多すぎ…? とならないように事前チェックする方法をご紹介
2023.03.10

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんちには。

データアナリティクス事業本部 インテグレーション部 機械学習チームの中村です。

OpenAIからChatGPTとWhisperに関するAPIがリリースされ、先日その紹介記事を書きました。

前回はWhisper APIを深堀して、データ制限について書きました。

今回はChatGPT API側を深堀し、トークンを事前に見積もる方法について詳しく見ていきます。

公式ドキュメントの情報

最初の記事で以下のように書いてあると説明しました。

これらのトークン(入力側)がどの程度の数になるかをAPIコール前に知りたい場合は、公式ドキュメントに記載の通り以下のNotebookのコードが参考になりそうです。

  • https://github.com/openai/openai-cookbook/blob/main/examples/How_to_count_tokens_with_tiktoken.ipynb

しかし実際、1時間程度の会議についてトークン数はどの程度になるのでしょうか?

これを前回書き起こしたWhisperの音声データで見てみようと思います。

使用するデータ

以下の動画を書き起こしたデータとなります。

前回書き起こしたWhisperのデータは以下のようなものでした。

はい、みなさんこんばんは。 クラスメソッドがですね、ラスベガスからリインベントの様子をお届けします。 Developers IEO in Las Vegas 2022ということで始めさせていただきます。 どうぞよろしくお願いします。 日本は今ですね、12月1日のお昼12時の時間帯だと思いますけれども、 こちらはですね、まだ11月30日の夜7時ということで、 ちょっと夜でですね、お疲れもあってちょっと変な感じになるんですけれども、 暖かく聞いていただければと思います。 はい、ちなみに今何人くらい入ってらっしゃるんですか?視聴者の方は。 104名です。 素晴らしいですね。 ありがとうございます。 この配信ではですね、 AWS Re-Invent 2022でですね、たくさんのアップデートだったりとかですね、 セッション、キーノート等ありましたので、ここまでで出ている情報をもとにですね、 クラスメソッドのエンジニアが注目した内容とか、 そういったものをですね、エンジニアメンバーから聞いていきたいと思います。 今回ですね、人数の都合上ですね、二部制となっておりまして、 今回今出ているのが前半のメンバーということで、 大体30分くらい目途でですね、後半のメンバーにチェンジしてお送りしていきたいと思います。 じゃあまずですね、今出ている前半メンバーの自己紹介をしたいと思いますので、 順によろしくお願いします。 はい、ARXジオン本部のコンサルティング部で働いてます。(...以下略)

こちらを題材にトークン数を見ていきます。

まずは文字数カウント

こちらのtranscriptions.txtとして保存していましたので、文字数は以下でカウントできます。

with open("transcription.txt", "rt", encoding="utf-8") as f:
    lines = f.readlines()
    transcription = lines[0]
    char_count = len(transcription)
print(f"{char_count=}")
char_count=22275

通常の会議とは少し異なるものの、1時間の音声でおおむね22,000文字程度ということが分かります。

実際にトークン数を計算

次に公式が紹介しているトークンを数える方法でカウントをトライしています。

まずはtiktokenをインストールします。

!pip install tiktoken

このモジュールを使って、ChatGPTで使用されるgpt-3.5-turboを指定し、Encodingというオブジェクトを取得します。

import tiktoken
from tiktoken.core import Encoding

encoding: Encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")

このトークナイザを使えば、文字列をトークン化できます。

tokens = encoding.encode(transcription)
tokens_count = len(tokens)
print(f"{tokens_count=}")
tokens_count=21246

トークン数は文字数より若干少ない結果となりました。

料金への換算

最後にトークン数を料金に変換してみます。現在は1,000トークンあたり$0.002となっているようですので以下が合計値です。

  • 21246 / 1000 x $0.002 = $0.0425

現在の為替ですと約5.8円程度となります。Whisperが1時間約50円くらいでしたので、Whisper側よりだいぶお安くなっていそうですね!

なお実際の料金は、スペシャルトークンの存在や出力側のトークン数にもよりますので、あくまで概算として参考までとして頂き、厳密にはAPIドキュメントを参照されてください。

まとめ

いかがでしたでしょうか。

OpenAIのAPIを使うにあたってはハードリミットも設定できるため、あまり不安はないかもしれませんが、実際にどの程度のデータがどの程度の料金になるのかは把握しておくと助かるかなということで、今回は公式で紹介されている方法でトークン量を計算してみました。

本記事が、今後APIをお使いになられる方の参考になれば幸いです。