MENU

Knowledge Oasisは主にAIとAWSの知識を共有するブログです。その他ITに関する知識やまれに生活に役立つ知識も共有するかもしれません。

KOふみ
名前はKOふみ(こふみ)。独立系SIerで20年のキャリアを持ち、新人研修の講師から請負開発まで幅広く経験。現在はAIを駆使したソリューション開発に従事。資格は応用情報技術者、データベーススペシャリスト、プロジェクトマネージャー、PMP、簿記2級。AWS学習中で、将来はAWSアンバサダーを目指す。

OpenAIのAPI完全制覇パート1 基本のパラメータ編

OpenAIのAPI完全制覇パート1 基本のパラメータ編
  • URLをコピーしました!

前回の記事ではOpenAIのAPIの始め方と必須のパラメータについてご紹介しました。今回は残りのオプションパラメータを解説したいと思います。オプションパラメータは数が多いので2回に分けて解説していきます。今回はPlaygroundで動作確認ができる7項目について解説します。パラメータを自在に使いこなしてAPIマスターになりましょう!

目次

パラメータ一覧

まずは全パラメータを確認しましょう。なんと19個もあります。今回はマーカーを引いた7個を解説したいと思います。今回解説するパラメータはPlaygroundで試せる物であり、他のLLMでも設定できる基本のパラメータになっています。

より詳しく知りたい方は公式API Referenceをご確認ください。ちなみ以下のリストは公式API ReferenceをGPT-4oに要約させました。これだけでは良く分からないと思うので1つずつ詳しく見ていきましょう。

  • model (string, 必須): 使用するモデルのID。
  • messages (array, 必須): 会話を構成するメッセージのリスト。
  • temperature (number, オプション): 0から2.0までの範囲。出力のランダム性を制御。
  • top_p (number, オプション): 0から1の範囲。上位の確率質量のトークンのみを考慮。
  • n (integer, オプション): デフォルトは1。各入力メッセージに対して生成される回答の数。
  • stop (string or array, オプション): APIがトークン生成を停止するシーケンス。
  • max_tokens (integer, オプション): 生成される最大トークン数。
  • presence_penalty (number, オプション): -2.0から2.0の範囲。新しいトピックについて話す可能性を制御。
  • frequency_penalty (number, オプション): -2.0から2.0の範囲。繰り返しを減少。
  • logit_bias (map, オプション): トークンの出現確率を調整。
  • logprobs (bool, オプション): 出力トークンの対数確率を返すかどうか
  • top_logprobs (integer, オプション): 各出力トークンについて採用されなかったトークンを出力する
  • response_format (object, オプション): 出力する形式を指定する。 jsonを指定可能。
  • seed (integer, オプション): 2024/05/24時点ではベータ版。seed値を指定する。
  • stream (boolean, オプション): デフォルトはfalse。部分的なメッセージをストリーミングするかどうか。
  • stream_options (object, オプション): stream時の動作を制御するオプション。
  • tools (array, オプション): モデルが呼び出せる関数を定義する。
  • tool_choice (string, オプション): toolsで指定した関数の呼び出しを制御する。
  • user (string, オプション): エンドユーザーの一意の識別子。

temperature

回答のバラつきを制御します。
0.0から2.0までの値を指定できます。デフォルト値は1.0。
値が低いとバラつきが少なく決定論的に、値が大きいとバラつきが大きくランダムになります。
バラつきの制御にはtop_pかtemperatureを指定する事になりますが両方を変更する事は推奨されません。

  • temperature=0.1の結果が1回目
    temperature=0.1の結果が1回目

temperatureを大きくすると公式API Referenceの通り、バラつきが出てきます。特筆すべき点はtemperatureを大きくするとトークン数が跳ね上がる点です。0.1の時には188トークンだったのに対し、1.2の時には1497と10倍以上になっています。1を超えると増加する傾向にあるようです。

temperatureが1.0を超えるとトークン数が増大するので注意が必要です!

top_p

temperatureの代替手段です。
0.0から1.0までの値を指定できます。デフォルト値は1.0。
0.1だと上位10%、1.0だと全てのトークンを対象に回答を生成します。
小さい値になるほど選択肢が少なくなるので決定論的に、大きい値ほどランダムになります。

  • top_p=0.1で1回目。
    top_p=0.1で1回目。

top_p=0.1だとほとんど変化はありません。top_p=1.0にすると変化が出てきます。temperatureとの違いは文意に大きな変化が見られない点です。temperatureを大きくした際には材料の分量の記述が増えてかなり違う文になった印象ですがtop_1を大きくしても表現が違ってくるくらいで受ける印象に大きな違いはありません。

top_pを大きくしても文意は大きく変化せず、表現が変わる。
temperatureを大きくすると表現だけではなく内容も変わる。

n

デフォルトは1。生成される回答の数になります。
すべての回答で生成されたトークンの数に基づいて課金されることに注意してください。

  • n=2で動かしたイメージ。Playgroundでは異なるパラメータで実行して結果を比較できる。
    n=2で動かしたイメージ。Playgroundでは異なるパラメータで実行して結果を比較できる。

Playgroundでは2つまで同時に回答を生成することができます。これが n に相当する部分かと思います。APIで実行する際には3つ以上同時に回答を生成できます。

PlaygroundではCompareボタンをクリックすることで2つ同時に回答を生成できます。
ボタンをクリックしてパラメータを変えることで異なるパラメータで実行して結果を比較できます。

stop

APIがトークン生成を停止するキーワードです。
4つまで指定できます。
<<おわり>>EOF などの特定のキーワードをAPIが出力したタイミングで生成を停止させることができます。
これにより形式を維持したり意図しない長さの出力になることを防ぐ事が出来ます。

  • stop="ソース"で動かした結果。ソース自体は表示されずに回答が止まります。
    stop="ソース"で動かした結果。ソース自体は表示されずに回答が止まります。

Playgroundでは ソース を指定してみましたが、ソース 自体は出力されませんでした。

stopで指定した文字列自体は表示されない。

max_tokens

生成されるトークンの最大数。
回答が長い場合は指定のトークン数を超えたあたりで回答が打ち切られます。

  • max_token=100で動かした結果。回答の途中だが133トークンで回答が打ち切られた。
    max_token=100で動かした結果。回答の途中だが133トークンで回答が打ち切られた。

トークン数が指定を超えると回答が打ち切られる。
指定のトークン数内での回答を生成する訳ではない。

presence_penalty

トークンの重複出現を制御します。
-2.0から2.0までの値を指定でき、デフォルト値は0です。
正数の場合は既に回答したトークンを避けて回答をするので新しい話題に移りやすくなります。
負数の場合は同じトークンを繰り返しを促進します。

  • presence_penalty=0.1。
    presence_penalty=0.1。

Playgroundでは0~2.0までしか指定できませんでした。
負数が指定できないのは何故なのでしょう?

frequency_penalty

トークンの繰り返しを制御します。
-2.0から2.0までの値を指定でき、デフォルト値は0です。
負数を指定すると繰り返しの可能性を高めます。
繰り返しを強く抑制するには2.0を指定できますが、品質が下がる恐れがあります。
繰り返しを多少抑える目的であれば0.1~1.0が良いようです。
繰り返しが減る事で表現が多様になり新しいアイディアを生み出しやすくなります。

  • frequency_penalty=0.1。自然な文章。"ひき肉"や"混ぜます"など複数回出てきます。
    frequency_penalty=0.1。自然な文章。"ひき肉"や"混ぜます"など複数回出てきます。

Playgroundでは0~2.0までしか指定できませんでした。
負数が指定できないのは何故なのでしょう?

まとめ

いかがだったでしょうか? Playgroundで動作確認できる7つのパラメータについて解説しました。これらのパラメータだけでもChatGPTでは制御できない部分を細かく制御できるようになります。他のLLMでも設定できる基本のパラメータになるのでしっかり理解しておきしょう。

  • URLをコピーしました!

コメント

コメントする

目次