はじめに
本記事は、Google Cloud の Vertex AI を初めて利用する方に向けた内容です。
今回、Vertex AI で生成AIを使ってみたところ、プロンプトの出力結果にばらつきがありました。
そこで、出力内容に一貫性を持たせるよう調整できないかと思い、Vertex AIにおけるAPIのパラメータ設定について調査しました。
パラメータの設定
Vertex AI では、APIのパラメータ設定を行うことにより出力時のトークンに
様々な条件を設定することができます。
以下では、選択条件を任意の値になる(近づける)ように変更することができるパラメータについていくつかまとめています。
出力トークンの確率分布、選択範囲を指定するパラメータ
出力トークンの確率分布、選択範囲を指定できるパラメータについて図を用いて説明します。
前提として、生成AIとは、次に選ばれる単語の確率から文章を生成しているものになり
AI 内では 「その次に出力されるトークン」について確率を持っています。
Temperature
次に選ばれる単語の候補の、確率の分布度合いを調整する。
⇒ 選ばれる単語の確率の分布を指定できる
ここで図を用いて考えていきます。
たとえば、 今日について何か教えてください
という入力をプロンプトで行った際に、出力結果のトークンが 今日の
から始まるとします。
temperature = 1
の設定のときに、次に出力されるトークンの確率が図のようになっているとします。
ここで、temperature = 0.5
に変更したとすると、次の図のように単語の生成確率が変動します。
生成確率が高い上位の単語に確率が収束するようになり、より一貫性のある出力結果が期待できます。
反対に、temperature
の値を上げれば出力される確率が分散するため、多様性のある出力結果が期待できます。
Top_p
次に選ばれる単語の候補を、確率の高いものから並び変えて累計確率を選択する。
⇒ 選ばれる単語の候補範囲を確率で指定
top_p = 0.90
に設定したとすると、出力されるトークンの選択肢の確率の累計が、図赤枠の「上位90%」までのトークンになります。
top_p
の値を下げることで、累計確率の合計値が小さくなり上位のトークンが選択されやすい状態となるため、一貫性のある出力結果が期待できます。
Top_k
次に選ばれる単語の候補を、確率の高いものから並び変えて選択肢の上位数を選択する。
⇒ 選ばれる単語の候補範囲を数で指定
top_k = 5
に設定したとすると、出力されるトークンの選択肢の数が、図赤枠の「上位5個」までのトークンになります。
top_p
と同じく、top_k
の値を下げることで上位のトークンが選択されやすく、より一貫性のある出力結果が期待できます。
実際にパラメータを設定した出力結果
実際にtemperature
を設定し、本記事の内容に関連する技術名を「単語で5個」出力してもらうプロンプトを実行しました。
今回は出力にある程度一貫性を持たせたいということで、temperature=0.8, top_p=0.1, top_k=10
と極端な設定にしています。
config = GenerationConfig(
temperature=0.8, # 出力トークンの確率分布を指定
top_p=0.1, # 出力トークンの候補範囲を確率で指定
top_k=10, # 出力トークンの候補範囲を数で指定
response_mime_type="application/json", # 出力形式を指定
response_schema=response_schema, # 出力形式を指定
)
出力結果
パラメータの設定を極端にしたこともあり、実行した出力結果が同じものになりました。
出力に一貫性を持たせたいのか、多様性を持たせたいのかでパラメータの設定を変更し、プロンプトを使い分けることができそうですね。