Open5

OpenAIのAPIを利用する際のトークン数を見積もる

kurehajimekurehajime

ChatGPTは要約タスクがとても得意だが、残念なことにOpen AIのAPIには一度に利用できるトークン数に縛りがある。

縛りを回避するためにドキュメントを分割するという手もあるが、そのためにはトークン数を見積もらなければならない。

なのでPython向けに提供されているtiktokenというライブラリでトークン数を見積もってみる。

kurehajimekurehajime

お手軽な方法

OpenAIが提供しているブラウザで使えるトークン測定器。テキストをペタッと貼ればトークン数を測れる。

https://platform.openai.com/tokenizer

しかしこれは3月6日現在、GPT-3にしか対応していない。
同じ文章でもモデルによってトークン数は代わり、ChatGPT相当のgpt-3.5-turboはGPT-3よりも数割コンパクトに収まる。
gpt-3.5-turboを使って限界ギリギリまで攻めるのであれば、gpt-3.5-turbo用のトークナイザーを利用したい。

kurehajimekurehajime

Pythonのコードで図る

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

!pip install tiktoken

サンプルとして日本国憲法をダウンロードする。
滅多に内容が変わらないから定量化に向いている。

!mkdir ./data
!curl -L -o ./data/日本国憲法.txt https://raw.githubusercontent.com/yuki-sato/japan/master/%E6%86%B2%E6%B3%95.txt

読み込んでトークンを数える。

import tiktoken
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
count = 0
with open('./data/日本国憲法.txt', 'r') as f:
  for data in f:
    count += len(encoding.encode(data))
print(count)

結果はこちら。

17614

gpt-3.5-turboは一度に4000トークンしか扱えないので、日本国憲法を扱うなら5分割する必要がある。
空白を除けばもう少し圧縮できるかもしれない。