Vertex AI SDK for Python の Gen AI Evaluation モジュールを使用すると、Gen AI Evaluation Service API を使用して生成言語モデルとアプリケーションをプログラムで評価できます。このページでは、Vertex AI SDK を使用して評価を実行する方法について説明します。
始める前に
Vertex AI SDK をインストールする
Vertex AI SDK for Python から Gen AI Evaluation モジュールをインストールするには、次のコマンドを実行します。
!pip install -q google-cloud-aiplatform[evaluation]
詳細については、Vertex AI SDK for Python をインストールするをご覧ください。
Vertex AI SDK を認証する
Vertex AI SDK for Python をインストールしたら、認証を行う必要があります。以下のトピックでは、ローカルで作業している場合と Colaboratory で作業している場合に、Vertex AI SDK で認証する方法について説明します。
ローカルで開発している場合は、ローカル環境でアプリケーションのデフォルト認証情報(ADC)を設定します。
Colaboratory で作業している場合は、Colab のセルで次のコマンドを実行して認証します。
from google.colab import auth auth.authenticate_user()
このコマンドを実行するとウィンドウが開き、認証を完了できます。
サービス アカウントについて
サービス アカウントは、モデルベースの評価指標の Vertex AI の Gemini API から予測を取得するために、Gen AI 評価サービスによって使用されます。このサービス アカウントは、Gen AI 評価サービスへの最初のリクエストで自動的にプロビジョニングされます。
名前 | 説明 | メールアドレス | ロール |
---|---|---|---|
Vertex AI Rapid Eval サービス エージェント | モデルベースの評価で予測を行うために使用されるサービス アカウント。 | service-PROJECT_NUMBER@gcp-sa-vertex-eval.iam.gserviceaccount.com |
roles/aiplatform.rapidevalServiceAgent |
Rapid Eval のサービス エージェントに関連付けられている権限は次のとおりです。
ロール | 権限 |
---|---|
Vertex AI Rapid Eval サービス エージェント(roles/aiplatform.rapidevalServiceAgent) | aiplatform.endpoints.predict |
評価を実行する
EvalTask
クラスを使用すると、次のユースケースで評価を実行できます。
EvalTask
クラス
EvalTask
クラスは、特定のタスクに基づいてモデルとアプリケーションを評価するのに役立ちます。生成モデルを公平に比較するには、通常、特定の指標を使用して、固定された評価データセットに対してさまざまなモデルとプロンプト テンプレートを繰り返し評価する必要があります。1 回の評価実行で複数の指標を同時に評価することも重要です。
EvalTask
は Vertex AI Experiments と統合されており、評価の実行ごとの構成と結果を追跡できます。Vertex AI Experiments は、評価結果の管理と解釈を支援し、十分な情報に基づいて意思決定できるようにします。
次の例は、EvalTask
クラスをインスタンス化して評価を実行する方法を示しています。
from vertexai.evaluation import (
EvalTask,
PairwiseMetric,
PairwiseMetricPromptTemplate,
PointwiseMetric,
PointwiseMetricPromptTemplate,
MetricPromptTemplateExamples,
)
eval_task = EvalTask(
dataset=DATASET,
metrics=[METRIC_1, METRIC_2, METRIC_3],
experiment=EXPERIMENT_NAME,
)
eval_result = eval_task.evaluate(
model=MODEL,
prompt_template=PROMPT_TEMPLATE,
experiment_run=EXPERIMENT_RUN,
)
モデルベースの指標を使用して評価を実行する
モデルベースの指標の場合は、PointwiseMetric
クラスと PairwiseMetric
クラスを使用して、特定の基準に合わせて指標を定義します。次のオプションを使用して評価を実行します。
モデルベースの指標の例を使用する
Vertex AI SDK 内で組み込み定数 Metric Prompt Template Examples
を直接使用できます。または、自由形式の指標定義インターフェースで変更して組み込むこともできます。
主なユースケースのほとんどを網羅する指標プロンプト テンプレートの例の一覧については、指標プロンプト テンプレートをご覧ください。
次の Vertex AI SDK の例は、MetricPromptTemplateExamples
クラスを使用して指標を定義する方法を示しています。
# View all the available examples of model-based metrics
MetricPromptTemplateExamples.list_example_metric_names()
# Display the metric prompt template of a specific example metric
print(MetricPromptTemplateExamples.get_prompt_template('fluency'))
# Use the pre-defined model-based metrics directly
eval_task = EvalTask(
dataset=EVAL_DATASET,
metrics=[MetricPromptTemplateExamples.Pointwise.FLUENCY],
)
eval_result = eval_task.evaluate(
model=MODEL,
)
モデルベースの指標テンプレート インターフェースを使用する
Vertex AI SDK 内の PointwiseMetricPromptTemplate
クラスと PairwiseMetricPromptTemplate
クラスを使用して、Criteria
や Rating Rubrics
などのフィールドにデータを入力して指標をカスタマイズします。Instruction
などの特定のフィールドには、入力が指定されていない場合にデフォルト値が割り当てられます。
必要に応じて、input_variables
を指定できます。これは、指標プロンプト テンプレートがモデルベースの評価結果の生成に使用する入力フィールドのリストです。デフォルトでは、ポイントワイズ指標の場合はモデルの response
列が含まれ、ペアワイズ指標の場合は候補モデルの response
列と baseline_model_response
列の両方が含まれます。
詳細については、指標プロンプト テンプレートの「指標プロンプト テンプレートの構造」セクションをご覧ください。
# Define a pointwise metric with two custom criteria
custom_text_quality = PointwiseMetric(
metric="custom_text_quality",
metric_prompt_template=PointwiseMetricPromptTemplate(
criteria={
"fluency": "Sentences flow smoothly and are easy to read, avoiding awkward phrasing or run-on sentences. Ideas and sentences connect logically, using transitions effectively where needed.",
"entertaining": "Short, amusing text that incorporates emojis, exclamations and questions to convey quick and spontaneous communication and diversion.",
},
rating_rubric={
"1": "The response performs well on both criteria.",
"0": "The response is somewhat aligned with both criteria",
"-1": "The response falls short on both criteria",
},
input_variables=["prompt"],
),
)
# Display the serialized metric prompt template
print(custom_text_quality.metric_prompt_template)
# Run evaluation using the custom_text_quality metric
eval_task = EvalTask(
dataset=EVAL_DATASET,
metrics=[custom_text_quality],
)
eval_result = eval_task.evaluate(
model=MODEL,
)
モデルベースの指標の自由形式の SDK インターフェースを使用する
指標プロンプト テンプレートをより柔軟にカスタマイズするには、フリーフォーム インターフェースを使用して指標を直接定義します。このインターフェースでは、文字列を直接入力できます。
# Define a pointwise multi-turn chat quality metric
pointwise_chat_quality_metric_prompt = """Evaluate the AI's contribution to a meaningful conversation, considering coherence, fluency, groundedness, and conciseness.
Review the chat history for context. Rate the response on a 1-5 scale, with explanations for each criterion and its overall impact.
# Conversation History
{history}
# Current User Prompt
{prompt}
# AI-generated Response
{response}
"""
freeform_multi_turn_chat_quality_metric = PointwiseMetric(
metric="multi_turn_chat_quality_metric",
metric_prompt_template=pointwise_chat_quality_metric_prompt,
)
# Run evaluation using the freeform_multi_turn_chat_quality_metric metric
eval_task = EvalTask(
dataset=EVAL_DATASET,
metrics=[freeform_multi_turn_chat_quality_metric],
)
eval_result = eval_task.evaluate(
model=MODEL,
)
翻訳モデルを評価する
翻訳モデルを評価するには、Vertex AI SDK を使用するときに、評価指標として BLEU、MetricX、COMET を指定します。
#Prepare the dataset for evaluation.
sources = [
"Dem Feuer konnte Einhalt geboten werden",
"Schulen und Kindergärten wurden eröffnet.",
]
responses = [
"The fire could be stopped",
"Schools and kindergartens were open",
]
references = [
"They were able to control the fire.",
"Schools and kindergartens opened",
]
eval_dataset = pd.DataFrame({
"source": sources,
"response": responses,
"reference": references,
})
# Set the metrics.
metrics = [
"bleu",
pointwise_metric.Comet(),
pointwise_metric.MetricX(),
]
eval_task = evaluation.EvalTask(
dataset=eval_dataset,
metrics=metrics,
)
eval_result = eval_task.evaluate()
コンピューティング ベースの指標を使用して評価を実行する
計算ベースの指標は、単独で使用することも、モデルベースの指標と組み合わせて使用することもできます。
# Combine computation-based metrics "ROUGE" and "BLEU" with model-based metrics
eval_task = EvalTask(
dataset=EVAL_DATASET,
metrics=["rouge_l_sum", "bleu", custom_text_quality],
)
eval_result = eval_task.evaluate(
model=MODEL,
)
指標の追加カスタマイズ
モデルベースの指標に別のジャッジモデルを選択する、新しい計算ベースの指標を定義するなど、指標をさらにカスタマイズする必要がある場合は、Vertex AI SDK の CustomMetric
クラスを使用できます。詳細については、次のノートブックをご覧ください。
レート制限と割り当てを増やしてモデルベースの評価を実行する
モデルベースの指標の 1 回の評価リクエストで、Vertex AI の Gemini API に対して基盤となるリクエストが複数発生し、ジャッジモデルの gemini-1.5-pro
割り当てが消費されます。1 分あたりのモデル リクエスト数(RPM)の割り当てはプロジェクトごとに計算されます。つまり、ジャッジモデル gemini-1.5-pro
へのリクエストと、モデルベースの指標の生成 AI 評価サービスへのリクエストの両方が、gemini-1.5-pro
の特定のリージョンのプロジェクト ジャッジモデルの RPM 割り当てにカウントされます。
次のユースケースでは、判定モデルの RPM 割り当てを増やし、評価サービスのレート制限 evaluation_service_qps
を高く設定する必要があります。
データ量の増加: モデルベースの指標を使用して処理するデータ量が大幅に増加すると、デフォルトの RPM 割り当てに達する可能性があります。割り当てを増やすと、パフォーマンスの低下や中断なしでより多くのボリュームを処理できます。
評価の迅速化: アプリケーションで評価の納期を短縮する必要がある場合は、RPM の割り当てを増やす必要があります。これは、時間に敏感なアプリケーションや、評価の遅延がユーザー エクスペリエンスに影響する可能性があるリアルタイム インタラクションを使用するアプリケーションでは特に重要です。
複雑な評価タスク: RPM 割り当てを増やすと、複雑なタスクや大量のテキストのリソース集約的な評価を処理するのに十分な容量を確保できます。
ユーザーの同時実行が多い場合: プロジェクト内でモデルベースの評価とモデル推論を多数のユーザーが同時にリクエストすると予想される場合は、ボトルネックを回避し、応答性を維持するために、モデルの RPM の上限を高くすることが重要です。
モデルの割り当てを増やし、増加したレート制限で Gen AI Evaluation Service SDK を使用するには、次の操作を行います。
Google Cloud コンソールで、[IAM と管理] ページに移動します。
[フィルタ] フィールドで、ディメンション(モデル ID)と指標(Gemini モデルの割り当て ID)を指定します。
base_model:gemini-1.5-pro
とMetric:aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model
です。増やす割り当てで、[その他の操作] メニュー
ボタンをクリックします。プルダウン メニューで [割り当てを編集] をクリックします。[割り当ての変更] パネルが開きます。
[割り当ての編集] で、新しい割り当て値を入力します。
[リクエストを送信] をクリックします。
割り当ての増加リクエストはメールで確認されます。通常、処理には 2 営業日かかります。
割り当て増加リクエストがメールで承認されたら、次のように
evaluation_service_qps
パラメータを設定できます。
from vertexai.evaluation import EvalTask
# GEMINI_RPM is the requests per minute (RPM) quota for gemini-1.5-pro in your region
# Evaluation Service QPS limit is equal to (gemini-1.5-pro RPM / 60 sec / default number of samples)
CUSTOM_EVAL_SERVICE_QPS_LIMIT = GEMINI_RPM / 60 / 4
eval_task = EvalTask(
dataset=DATASET,
metrics=[METRIC_1, METRIC_2, METRIC_3],
)
eval_result = eval_task.evaluate(
evaluation_service_qps=CUSTOM_EVAL_SERVICE_QPS_LIMIT,
# Specify a retry_timeout limit for a more responsive evaluation run
# the default value is 600 (in seconds, or 10 minutes)
retry_timeout=RETRY_TIMEOUT,
)
割り当てと上限の詳細については、Gen AI Evaluation Service の割り当てと Gen AI Evaluation Service API をご覧ください。
次のステップ
モデルベースの指標テンプレートを見つけます。
評価用のサンプル ノートブックを試す。