Bewertungsmesswerte definieren

Nachdem Sie ein Bewertungs-Dataset erstellt haben, müssen Sie die Messwerte definieren, mit denen die Modellleistung gemessen wird. Modelle für generative KI können Anwendungen für eine Vielzahl von Aufgaben erstellen. Der Gen AI Evaluation Service verwendet ein testgesteuertes Framework, das die Bewertung von subjektiven Bewertungen in objektive, umsetzbare Ergebnisse umwandelt.

Weitere Informationen zu den Messwerttypen finden Sie im Abschnitt Bewertungs-Messwerte auf der Seite Übersicht über den Gen AI Evaluation Service.

Allgemeiner Qualitätsmesswert

Sie können über das SDK auf adaptive Bewertungsschemas zugreifen. Wir empfehlen, mit GENERAL_QUALITY als Standardeinstellung zu beginnen.

GENERAL_QUALITY generiert eine Reihe von Bewertungsschemas für verschiedene Aufgaben wie das Befolgen von Anweisungen, Formatierung, Ton und Stil, je nach Eingabeaufforderung. Sie können die Bewertungsschema-Generierung mit der Validierung in der folgenden Codezeile kombinieren:

from vertexai import types

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

Sie können Bewertungsschemas separat generieren (um sie zu überprüfen oder für verschiedene Modelle und Agents wiederzuverwenden), bevor Sie sie zur Bewertung von Modellantworten verwenden:

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",
    )],
)

Sie können GENERAL_QUALITY auch mit guidelines in natürlicher Sprache anleiten, um die Bewertungsschema-Generierung auf die für Sie wichtigsten Kriterien zu konzentrieren. Der Gen AI Evaluation Service generiert dann Bewertungsschemas, die sowohl die Standardaufgaben als auch die von Ihnen angegebenen Richtlinien abdecken.

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."
            }
        )
    ],
)

Gezielte Qualitätsmesswerte

Wenn Sie einen gezielteren Aspekt der Modellqualität bewerten müssen, können Sie Messwerte verwenden, die Bewertungsschemas für einen bestimmten Bereich generieren. Beispiel:

from vertexai import types

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

Der Gen AI Evaluation Service bietet die folgenden Arten von adaptiven Bewertungsschemas:

  • INSTRUCTION_FOLLOWING: Misst, wie gut die Antwort den spezifischen Einschränkungen und Anweisungen im Prompt entspricht.

  • TEXT_QUALITY: Konzentriert sich speziell auf die sprachliche Qualität der Antwort und bewertet Flüssigkeit, Kohärenz und Grammatik.

Multi-Turn Conversation

  • multi_turn_general_quality: Bewertet die allgemeine Gesprächsqualität in einem Multi-Turn-Dialog.

  • multi_turn_text_quality: Bewertet die Textqualität der Antworten in einem Multi-Turn-Dialog.

KI-Agentenbewertung

  • final_response_reference_free: Bewertet die Qualität der endgültigen Antwort eines KI-Agenten, ohne dass eine Referenzantwort erforderlich ist.

  • final_response_quality: Verwendet adaptive Bewertungsschemas, um die Qualität der endgültigen Antwort eines KI-Agenten basierend auf der Konfiguration und Toolnutzung des KI-Agenten zu bewerten.

  • hallucination: Bewertet, ob die Textantworten eines KI-Agenten auf der Konfiguration und Toolnutzung des KI-Agenten basieren.

  • tool_use_quality: Bewertet die Richtigkeit der Funktionsaufrufe, die vom KI-Agenten ausgeführt werden, um auf einen Nutzerprompt zu reagieren.

Weitere Informationen zu gezielten adaptiven Bewertungsschemas finden Sie unter Details zu adaptiven Bewertungsschemas.

Statische Bewertungsschemas

Bei einem statischen Bewertungsschema wird für jedes Beispiel in Ihrem Dataset ein einzelner, fester Satz von Bewertungsrichtlinien angewendet. Dieser punktzahlbasierte Ansatz ist nützlich, wenn Sie die Leistung für alle Prompts anhand eines einheitlichen Benchmarks messen müssen.

Das folgende statische Bewertungsschema bewertet beispielsweise die Textqualität auf einer Skala von 1 bis 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.

Der Gen AI Evaluation Service bietet die folgenden statischen Bewertungsschema-Messwerte:

  • GROUNDING: Prüft die Faktengenauigkeit und Konsistenz anhand eines bereitgestellten Quelltexts (Grundwahrheit). Dieser Messwert ist entscheidend für RAG-Systeme.

  • SAFETY: Bewertet die Antwort des Modells auf Verstöße gegen Sicherheitsrichtlinien, z. B. Hassreden oder gefährliche Inhalte.

Sie können auch Vorlagen für Messwertprompts wie FLUENCY verwenden.

from vertexai import types

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

Statische Bewertungsschemas anpassen

Für hochspezialisierte Anforderungen können Sie Ihr eigenes statisches Bewertungsschema erstellen. Diese Methode bietet maximale Kontrolle, erfordert jedoch, dass Sie den Bewertungsprompt sorgfältig entwerfen, um konsistente und zuverlässige Ergebnisse zu erzielen. Wir empfehlen, Richtlinien mit GENERAL_QUALITY zu verwenden, bevor Sie statische Bewertungsschemas anpassen.

# 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
    ],
)

Berechnungsbasierte Messwerte

Berechnungsbasierte Messwerte verwenden deterministische Algorithmen, um die Antwort eines Modells zu bewerten, indem sie mit einer Referenzantwort verglichen wird. Sie erfordern eine Grundwahrheit in Ihrem Dataset und eignen sich ideal für Aufgaben, bei denen eine „richtige“ Antwort genau definiert ist.

  • Recall-Oriented Understudy for Gisting Evaluation (rouge_l, rouge_1): Misst die Überschneidung von n-Grammen (zusammenhängende Wortfolgen) zwischen der Antwort des Modells und einem Referenztext. Es wird häufig zur Bewertung von Textzusammenfassungen verwendet.

  • Bilingual Evaluation Understudy (bleu): Misst, wie ähnlich eine Antwort einem hochwertigen Referenztext ist, indem übereinstimmende n-Gramme gezählt werden. Es ist der Standardmesswert für die Übersetzungsqualität, kann aber auch für andere Aufgaben zur Textgenerierung verwendet werden.

  • Exact Match (exact_match): Misst den Prozentsatz der Antworten, die mit der Referenzantwort identisch sind. Dies ist nützlich für faktenbasierte Fragen und Antworten oder Aufgaben, bei denen es nur eine richtige Antwort gibt.

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')
    ],
)

Benutzerdefinierter Funktionsmesswert

Sie können auch eine benutzerdefinierte Bewertungslogik implementieren, indem Sie eine benutzerdefinierte Python-Funktion an den Parameter custom_function übergeben. Der Gen AI Evaluation Service führt diese Funktion für jede Zeile Ihres Datasets aus.

# 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]
)

Benutzerdefinierter Remote-Funktionsmesswert

Neben der lokalen Ausführung einer benutzerdefinierten Bewertungslogik können Sie auch eine benutzerdefinierte Bewertungslogik implementieren, die sicher in einer Remote-Sandbox-Umgebung ausgeführt wird. Dies ist nützlich, wenn Sie die Bewertung in Ihren Workflow zur Modellabstimmung einbinden möchten oder wenn Sie ein nutzerspezifisches Szenario haben, das von den vorhandenen Bewertungs-Messwerten nicht abgedeckt wird. Dazu übergeben Sie einen Python-Code-Snippet als String an den Parameter remote_custom_function der Klasse Metric. Der Gen AI Evaluation Service führt diese Funktion für jede Zeile Ihres Datasets remote aus.

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],
)

Eingaben für Bewertungsinstanzen

Die Funktion evaluate verwendet ein instance-Wörterbuch als Argument. instance stellt die Bewertungsinstanz dar. Alle Felder, die in der EvaluationInstance ausgefüllt sind, sind für die Funktion als instance[field_name] verfügbar. Die verfügbaren Felder sind:

  • prompt: Der Nutzerprompt, der dem Modell gegeben wurde.
  • response: Die vom Modell generierte Ausgabe.
  • reference: Die Grundwahrheit, mit der die Antwort verglichen wird.
  • rubric_groups: Benannte Gruppen von Bewertungsschemas, die mit dem Prompt verknüpft sind.
  • other_data: Andere Daten, die zum Ausfüllen von Platzhaltern anhand ihres Schlüssels verwendet werden.
  • agent_eval_data: Daten, die speziell für KI-Agentenbewertungen verwendet werden, z. B. KI-Agentenkonfigurationen und -Traces.

Technische Einschränkungen

  • Ausführungsumgebung:Benutzerdefinierter Code wird in einer Sandbox-Umgebung ohne Netzwerkzugriff ausgeführt.
  • Zeitlimit für die Ausführung:Die Bewertung selbst ist auf 1 Minute begrenzt.
  • Speicherlimit:Die Gesamtgröße des hochgeladenen Codes darf zusammen mit allen während der Ausführung geladenen Daten 1,5 GB nicht überschreiten.

Die folgenden Drittanbieterpakete sind zur Ausführungszeit verfügbar:

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

Nächste Schritte