定義評估指標

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

以下是與評估指標相關的核心概念:

  • 評量表:評估 LLM 模型或應用程式回覆的標準。

  • 指標:根據評分標準評估模型輸出內容的分數。

Gen AI Evaluation Service 提供下列指標類別:

  • 以評分量表為基礎的指標:將大型語言模型納入評估工作流程。

    • 自動調整評量表 (建議):系統會為每個提示動態生成評量表。系統會根據提示提供詳細的通過或失敗意見回饋,評估回覆內容。

    • 靜態評量表:明確定義評量表,並將同一份評量表套用至所有提示。系統會使用同一組以分數為依據的評估人員來評估回覆。每個提示的單一數值分數 (例如 1 到 5 分)。需要評估非常具體的層面,或所有提示都必須使用完全相同的評分標準時。

  • 運算資源相關指標:使用確定性演算法評估回覆,通常會使用真值。每個提示的數值分數 (例如 0.0 到 1.0)。實際資料可用,且可透過確定性方法比對。

  • 自訂函式指標:透過 Python 函式定義自己的指標。

以評量表為準的指標

以評分量表為基礎的指標會在工作流程中採用大型語言模型,評估模型回覆品質。以評量表為準的評估方式適用於各種工作,特別是寫作品質、安全性及指令遵循程度,這些通常難以透過確定性演算法評估。

自動調整式評量表

調整型評分量表就像為模型進行單元測試一樣。適應性評分量表會針對資料集中的每個提示,動態生成一組專屬的通過或未通過測試。評分量表可確保評估內容與所要求的工作有關,並提供客觀、可解釋且一致的結果。

以下範例說明如何為一組提示生成適應性評量表:

提示詞 自動調整式評量表
「Summarize the following article about the benefits of solar power in under 100 words…」(請用 100 字以內總結下列文章,內容是有關太陽能的好處…)
  • 摘要是否少於 100 字?
  • 摘要是否列出太陽能的優點?
  • 回覆內容是否包含文章中沒有的資訊?
「請撰寫簡短友善的電子郵件,邀請員工參加公司年度野餐活動。請提及日期為 9 月 15 日,並說明當天會提供素食選項…」
  • 電子郵件的語氣是否友善且具吸引力?
  • 電子郵件是否提及 9 月 15 日?
  • 電子郵件是否說明會提供素食料理?

您可以透過 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",
    )],
)

你也可以使用自然語言GENERAL_QUALITYguidelines引導 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]
)

後續步驟