1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPT API検証 max_tokens について

Last updated at Posted at 2023-12-22

概要

ChatGPTのAPIを利用時にmax_tokensというオプション設定ができる.
これについて解説・実験してみる.

前提

  • ChatGPTをAPI経由で使用したことがある人
  • WebAPIをJSONで扱っている
  • トークンの量と文字量の違いが分かる人
  • トークンを数えるツールはこちら

前提知識(トークンについて)

トークンとは,ChatGPTに聞いてみた.

ChatGPTにおける「トークン」とは、
テキストを処理する際に使用される基本的なデータ単位です。
トークンは単語、句読点、スペース、特殊文字などを表すことができ、
テキストを機械が解析しやすい形に分割するために用いられます。

例えば、「こんにちは、世界!」という文は、
「こんにちは」「、」「世界」「!」というトークンに分割されます。
このトークン化により、ChatGPTはテキストを理解し、
適切な応答を生成することができます。
また、トークンは、ChatGPTが生成するテキストの長さを計算する際にも使用されます。

こう返ってきますが,単語で分割されているというのは嘘です.

基本的に英語ベースの場合の処理だと,綺麗に単語単位での分割になります.
image.png

日本語での「こんにちは、世界!」は以下のように分割され,「世界」という単語は2トークンで「世」,1トークンで「界」を表現します.
一部の漢字が1トークン扱いでない理由は,漢字単体に複数の読みや意味があり,文脈でそれらが変わるためとされています.
image.png

また,英語の場合でも,1単語が長い場合その限りではありません.
例として,医学用語「Pseudopseudohypoparathyroidism」は1トークンではありません.
image.png

また,生成系AIモデル(GPT-3やGPT-3.5など)毎にトークンの分け方が異なる場合や,アップデート,バックエンドシステムの改修で変更される場合がありますので,
トークン数を厳密に制御することは困難と考えて活用するのがいいかと思います.

だいたいこれぐらいのトークン数だよね,という使い方が適切とおもわれます.

前提知識(max_tokensについて)

以下は,max_tokensについての解説になります.

簡単に言うと,ChatGPTの回答に文字数(正確にはトークン数)制限を付ける機能です.
APIはこの文字数(トークン)で料金が変わります.
10文字ぐらいで答えてほしいのに,毎回10万文字で返答されて,その分料金が上がってしまったらユーザーもお怒りです.
今回は,max_tokensについて検証します.

機能解説

max_tokensは,ChatGPTのレスポンスのトークン量を制限する機能になります.

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {"role": "user", "content": "太陽はなぜ明るいのか?"}
  ],
  "max_tokens": 800
}

例えば上記の入力に対して,下記のように返答があります.
image.png
返答のトークン数が,設定値以下になります.(tokenizerを使用)

image.png

800トークン以内という制限は満たしていますが,説明をこのトークン数分までしてくれるわけではなさそうです.

実験 ① とても短く設定してみる.

max_tokensを少なく設定することで強制的に短い答えを作れるか検証します.
そのため,単語で答えられる質問をします.

入力をした質問 : 赤と青を混ぜたら何色ですか?
予想される回答 : 紫 (2トークン)

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {"role": "user", "content": "赤と青を混ぜたら何色ですか?"}
  ],
  "max_tokens": 2
}

image.png

いや,間違えとるがな
でもこれ,赤と青を混ぜたら紫になります.と言おうとしたら文章がブちぎれた可能性があるので,max_tokenを3にしてみます.

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {"role": "user", "content": "赤と青を混ぜたら何色ですか?"}
  ],
  "max_tokens": 3
}

image.png
どうやら予想は当たっていそうです.
ちょっとSeed値を固定して,1ずつ増やしてみます.

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {"role": "user", "content": "赤と青を混ぜたら何色ですか?"}
  ],
  "seed" : 27 // 適当な数,固定しておくことで何度やっても回答が同じになる.
  "max_tokens": N // 増やしていく
}

N = 5の時 (青は2トークンなので,N=3とN=4の時は同じ)
image.png
N = 6の時
image.png
N = 17の時
image.png
N = 21の時
image.png

実験 ② とても長く設定してみる.

N = 10000の時
image.png

上記よりmax_tokensに関わらず,文章を作ろうとしてます.

結論

max_tokens
生成する文章の質に対しては影響を与えず,分量のみを制御する.

余談,返答文章の減らし方

上記の例のように,質問に対して端的にこたえてほしいものです.

なので注文に簡単に答えてなどと加えます.

{
  "model": "gpt-3.5-turbo",
  "messages": [
    {"role": "system", "content": "一言で回答すること"},
    {"role": "user", "content": "赤と青を混ぜたら何色ですか?"}
  ],
  "seed" : 27 // 上記と同じ
  "max_tokens": 10
}

一言で回答してくれました.
image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?