見出し画像

GPT-3におけるtokensとは?

はじめに

@yutakikuchi_ です。
話題のChatGPT, GPT-3 APIなど多くの方が利用し始めているかと思います。
GPT-3に関してはOpenAIからWebAPIも一般公開されているのですが、従量課金対象となるtokensというのがちょっと分かりづらかったので、内容をここで整理します。

GPT-3における日本語のtokensとは

日本語でのtokensの数量は何か?というと結論としては、単語数でも無い、文字数でも無い、形態素数でも無い、何か独自のカウント指標となっています。現在OpenAIのGPT-3の価格表を見ると、4種類のモデルがあり、それぞれに対して、入力と出力の1000tokensごとに価格が決まっています。

https://openai.com/api/pricing/

OpenAIの説明として、英語の場合は1000tokens = 約750単語(1 tokenが約0.75単語)のように定義されているのですが、日本語はこれが当てはまりません。おそらく日本語がマルチバイト文字列であるため。

Prices are per 1,000 tokens. You can think of tokens as pieces of words, where 1,000 tokens is about 750 words. This paragraph is 35 tokens.

https://openai.com/api/pricing/

実際にOpenAIのtokenizerを使ってtokens量を測ってみます。

英語の 「This is sample」 は14文字、3tokens。対して、日本語で「これはテストをするための投稿内容になります。」は22文字、27tokens。なるほど、tokenの方が文字数より大きい数字としてカウントがされています。

https://beta.openai.com/tokenizer
https://beta.openai.com/tokenizer

GPT-2のTokenizerであればpythonのtransformer packageから使えるようですのでお手元で試したい方は是非。

結論として

日本語でのtokensの数量は何か?というと結論としては、単語数でも無い、文字数でも無い、形態素数でも無い、何か独自のカウント指標となっております。おそらく形態素とマルチバイトの関係で成り立っているかと。

日本語の場合は文字数よりtokensの方が数字的に大きくなるので、GPT-3を使う場合のtokens見積もりは余分に見ておくと無難です。


この記事が気に入ったらサポートをしてみませんか?