定義評估指標

建立評估資料集後,下一步就是定義用於評估模型效能的指標。生成式 AI 模型可建立各種用途的應用程式,而 Gen AI Evaluation Service 採用測試導向架構,可將主觀評分轉換為客觀、可執行的結果。

如要進一步瞭解指標類型,請參閱 Gen AI Evaluation Service 總覽頁面的「評估指標」一節。

一般品質指標

您可以透過 SDK 存取自動調整式評量表。建議您從預設的 GENERAL_QUALITY 開始。

GENERAL_QUALITY 會根據輸入提示詞,生成一組涵蓋各種任務的評分量表,例如遵循指示、格式設定、語氣和樣式。您可以在下列程式碼行中,將評量準則生成與驗證功能結合:

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.GENERAL_QUALITY,
    ],
)

您可以先分別生成評分量表 (以便在模型和代理程式之間審查或重複使用),再用來評估模型回覆:

from vertexai import types

# Use GENERAL_QUALITY recipe to generate rubrics, and store them
# as a rubric group named "general_quality_rubrics".
data_with_rubrics = client.evals.generate_rubrics(
    src=eval_dataset_df,
    rubric_group_name="general_quality_rubrics",
    predefined_spec_name=types.RubricMetric.GENERAL_QUALITY,
)

# Specify the group of rubrics to use for the evaluation.
eval_result = client.evals.evaluate(
    dataset=data_with_rubrics,
    metrics=[types.RubricMetric.GENERAL_QUALITY(
      rubric_group_name="general_quality_rubrics",
    )],
)

您也可以使用自然語言guidelines引導 GENERAL_QUALITY,讓評分量表著重於您最重視的標準。接著,Gen AI Evaluation Service 會產生評分量表,涵蓋預設工作和您指定的準則。

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.GENERAL_QUALITY(
            metric_spec_parameters={
                "guidelines": "The response must maintain a professional tone and must not provide financial advice."
            }
        )
    ],
)

指定品質指標

如要評估模型品質的特定面向,可以使用可產生評分量表 (著重於特定領域) 的指標。例如:

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.TEXT_QUALITY,
        types.RubricMetric.INSTRUCTION_FOLLOWING,
    ],
)

Gen AI Evaluation Service 提供下列類型的自適性評量表:

  • INSTRUCTION_FOLLOWING:評估回覆內容是否符合提示中的特定限制和指令。

  • TEXT_QUALITY:專門評估回覆的語言品質,包括流暢度、連貫性和文法。

多輪對話

  • multi_turn_general_quality:評估多輪對話的整體品質。

  • multi_turn_text_quality:評估多輪對話中回應的文字品質。

代理評估

  • final_response_reference_free:評估代理最終答案的品質,不需要參考答案。

  • final_response_quality:使用自動調整評分量表,根據代理的設定和工具使用情況,評估代理最終答案的品質。

  • hallucination:評估代理程式的文字回覆是否以代理程式的設定和工具使用情況為依據。

  • tool_use_quality:評估代理程式為回應使用者提示詞而進行的函式呼叫是否正確。

如要進一步瞭解目標導向自動調整評分量表,請參閱「自動調整評分量表詳細資料」。

靜態評分量表

靜態評量表會對資料集中的每個範例套用一組固定的評分指南。如果您需要根據一致的基準評估所有提示的成效,這種以分數為導向的方法就非常實用。

舉例來說,下列靜態評分量表會以 1 到 5 分評估文字品質:

5: (Very good). Exceptionally clear, coherent, fluent, and concise. Fully adheres to instructions and stays grounded.
4: (Good). Well-written, coherent, and fluent. Mostly adheres to instructions and stays grounded. Minor room for improvement.
3: (Ok). Adequate writing with decent coherence and fluency. Partially fulfills instructions and may contain minor ungrounded information. Could be more concise.
2: (Bad). Poorly written, lacking coherence and fluency. Struggles to adhere to instructions and may include ungrounded information. Issues with conciseness.
1: (Very bad). Very poorly written, incoherent, and non-fluent. Fails to follow instructions and contains substantial ungrounded information. Severely lacking in conciseness.

Gen AI Evaluation Service 提供下列靜態評分量表指標:

  • GROUNDING:根據提供的來源文字 (基準真相) 檢查真實性和一致性。這項指標對 RAG 系統至關重要。

  • SAFETY:評估模型回覆是否違反安全政策,例如仇恨言論或危險內容。

您也可以使用指標提示範本,例如 FLUENCY

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.RubricMetric.SAFETY,
        types.RubricMetric.GROUNDING,
        types.RubricMetric.FLUENCY,
    ],
)

自訂靜態評量表

如有高度專業化的需求,可以自行建立靜態評分量表。這種方法可提供最大程度的控制權,但您必須仔細設計評估提示,確保結果一致且可靠。建議您先使用附有GENERAL_QUALITY指引的評量表,再自訂靜態評量表。

# Define a custom metric to evaluate language simplicity
simplicity_metric = types.LLMMetric(
    name='language_simplicity',
    prompt_template=types.MetricPromptBuilder(
        instruction="Evaluate the story's simplicity for a 5-year-old.",
        criteria={
            "Vocabulary": "Uses simple words.",
            "Sentences": "Uses short sentences.",
        },
        rating_scores={
            "5": "Excellent: Very simple, ideal for a 5-year-old.",
            "4": "Good: Mostly simple, with minor complex parts.",
            "3": "Fair: Mix of simple and complex; may be challenging for a 5-year-old.",
            "2": "Poor: Largely too complex, with difficult words/sentences.",
            "1": "Very Poor: Very complex, unsuitable for a 5-year-old."
        }
    )
)

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        simplicity_metric
    ],
)

以運算為基礎的指標

以運算為基礎的指標會使用確定性演算法,比較模型回覆與參考答案,然後為模型回覆評分。這類指標需要資料集中的基準真相,適合用於「正確」答案定義明確的任務。

  • 喚回度導向的摘要評估研究 (rouge_l、rouge_1):評估模型回覆與參考文字之間 n 元語法 (連續字詞序列) 的重疊程度。通常用於評估文字摘要。

  • 雙語評估研究 (BLEU):計算相符的 n 元語法,評估回覆與高品質參考文字的相似程度。這是翻譯品質的標準指標,但也可用於其他文字生成工作。

  • 完全比對 (exact_match):測量與參考答案完全相同的回覆百分比。這項功能適用於回答事實類問題,或只能有一個正確答案的工作。

from vertexai import types

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[
        types.Metric(name='bleu'),
        types.Metric(name='rouge_l'),
        types.Metric(name='exact_match')
    ],
)

自訂函式指標

您也可以將自訂 Python 函式傳遞至 custom_function 參數,實作自訂評估邏輯。Gen AI Evaluation Service 會針對資料集的每個資料列執行這項函式。

# Define a custom function to check for the presence of a keyword
def contains_keyword(instance: dict) -> dict:
    keyword = "magic"
    response_text = instance.get("response", "")
    score = 1.0 if keyword in response_text.lower() else 0.0
    return {"score": score}

keyword_metric = types.Metric(
    name="keyword_check",
    custom_function=contains_keyword
)

eval_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[keyword_metric]
)

遠端自訂函式指標

除了在本機執行自訂評估邏輯,您也可以實作自訂評估邏輯,在遠端沙箱環境中安全地執行。如果您想將評估作業整合至模型調整工作流程,或是有現有評估指標未涵蓋的使用者專屬情境,這項功能就非常實用。方法是將 Python 程式碼片段做為字串,傳遞至 Metric 類別的 remote_custom_function 參數。Gen AI Evaluation Service 會針對資料集的每個資料列,遠端執行這項函式。

import pandas as pd
from vertexai import types

code_snippet = """
def evaluate(instance):
    if instance['response'] == instance['reference']:
        return 1.0
    return 0.0
"""

custom_metric = types.Metric(
    name="my_custom_code_metric",
    remote_custom_function=code_snippet,
)

prompts_df = pd.DataFrame(
    {
        "prompt": ["What is 2+2?", "What is 3+3?"],
        "response": ["4", "5"],
        "reference": ["4", "6"],
    }
)

eval_dataset = types.EvaluationDataset(
    eval_dataset_df=prompts_df,
    candidate_name="test_model",
)

evaluation_result = client.evals.evaluate(
    dataset=eval_dataset,
    metrics=[custom_metric],
)

評估執行個體輸入內容

evaluate 函式會將 instance 字典做為引數。instance 代表評估執行個體,而 EvaluationInstance 中填入的任何欄位,都可做為 instance[field_name] 供函式使用。可用欄位包括:

  • prompt:提供給模型的使用者提示。
  • response:模型產生的輸出內容。
  • reference:用來與回應比較的基準真相。
  • rubric_groups:與提示相關聯的評量表命名群組。
  • other_data:其他資料,用於根據索引鍵填入預留位置。
  • agent_eval_data:與代理程式評估相關的資料,例如代理程式設定和追蹤記錄。

技術限制

  • 執行環境:自訂程式碼會在沙箱環境中執行,且無法存取網路。
  • 執行時間限制:評分執行作業本身的時間上限為 1 分鐘。
  • 記憶體限制:上傳的程式碼總大小,加上執行期間載入的任何資料,不得超過 1.5 GB。

執行階段可用的第三方套件如下:

altair
chess
cv2
deepdiff
editdistance
jsonschema
matplotlib
mpmath
nltk
numpy
pandas
pdfminer
pydantic
rdkit
reportlab
scipy
seaborn
sklearn
sqlparse
statsmodels
striprtf
sympy
tabulate

後續步驟