評価を実行する

Vertex AI SDK for PythonGen 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)を設定します。

    1. Google Cloud CLI をインストールし、次のコマンドを実行して初期化します。

      gcloud init
      
    2. Google アカウントのローカル認証情報を作成します。

      gcloud auth application-default login
      

      ログイン画面が表示されます。ログインすると、ADC で使用されるローカル認証情報ファイルに認証情報が保存されます。ローカル環境での 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 回の評価実行で複数の指標を同時に評価することも重要です。

EvalTaskVertex 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 クラスを使用して、CriteriaRating 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 を使用するときに、評価指標として BLEUMetricXCOMET を指定します。

#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 を使用するには、次の操作を行います。

  1. Google Cloud コンソールで、[IAM と管理] ページに移動します。

    コンソールで割り当てを表示する

  2. [フィルタ] フィールドで、ディメンション(モデル ID)と指標(Gemini モデルの割り当て ID)を指定します。base_model:gemini-1.5-proMetric:aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model です。

  3. 増やす割り当てで、[その他の操作] メニュー ボタンをクリックします。

  4. プルダウン メニューで [割り当てを編集] をクリックします。[割り当ての変更] パネルが開きます。

  5. [割り当ての編集] で、新しい割り当て値を入力します。

  6. [リクエストを送信] をクリックします。

  7. 割り当ての増加リクエストはメールで確認されます。通常、処理には 2 営業日かかります。

  8. 割り当て増加リクエストがメールで承認されたら、次のように 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 をご覧ください。

次のステップ