Definisci le metriche di valutazione

Dopo aver creato un set di dati di valutazione, il passaggio successivo consiste nel definire le metriche utilizzate per misurare le prestazioni del modello. I modelli di AI generativa possono creare applicazioni per un'ampia gamma di attività e Gen AI evaluation service utilizza un framework basato su test che trasforma le valutazioni soggettive in risultati oggettivi e azionabili.

Per saperne di più sui tipi di metriche, consulta la sezione Metriche di valutazione nella pagina di panoramica del servizio di valutazione dell'AI generativa.

Metrica generale sulla qualità

Puoi accedere alle rubriche adattive tramite l'SDK. Ti consigliamo di iniziare con GENERAL_QUALITY come impostazione predefinita.

GENERAL_QUALITY genera una serie di rubriche che coprono una varietà di attività come il rispetto delle istruzioni, la formattazione, il tono e lo stile, a seconda del prompt di input. Puoi combinare la generazione della rubrica con la convalida nella seguente riga di codice:

from vertexai import types

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

Puoi generare le griglie separatamente (per rivederle o riutilizzarle in modelli e agenti) prima di utilizzarle per valutare le risposte del modello:

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

Puoi anche guidare GENERAL_QUALITY con guidelines in linguaggio naturale per concentrare la generazione della griglia sui criteri più importanti per te. Gen AI evaluation service genera quindi rubriche che coprono sia le attività predefinite sia le linee guida che specifichi.

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

Metriche di qualità scelte come target

Se devi valutare un aspetto più mirato della qualità del modello, puoi utilizzare metriche che generano rubriche incentrate su un'area specifica. Ad esempio:

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 offre i seguenti tipi di rubriche adattive:

  • INSTRUCTION_FOLLOWING: misura il grado di aderenza della risposta ai vincoli e alle istruzioni specifiche nel prompt.

  • TEXT_QUALITY: si concentra in modo specifico sulla qualità linguistica della risposta, valutando fluidità, coerenza e grammatica.

Conversazione a turni multipli

  • multi_turn_general_quality: valuta la qualità complessiva della conversazione in un dialogo a più turni.

  • multi_turn_text_quality: valuta la qualità del testo delle risposte all'interno di un dialogo a più turni.

Valutazione agente

  • final_response_reference_free: valuta la qualità della risposta finale di un agente senza richiedere una risposta di riferimento.

  • final_response_quality: utilizza griglie adattive per valutare la qualità della risposta finale di un agente in base alla configurazione e all'utilizzo degli strumenti dell'agente.

  • hallucination: valuta se le risposte di testo di un agente sono fondate basate sulla configurazione e sull'utilizzo degli strumenti dell'agente.

  • tool_use_quality: valuta la correttezza delle chiamate di funzione effettuate dall'agente per rispondere a un prompt dell'utente.

Per ulteriori dettagli sulle rubriche adattive mirate, consulta Dettagli sulle rubriche adattive.

Griglie statiche

Una rubrica statica applica un unico insieme fisso di linee guida per l'assegnazione del punteggio a ogni esempio nel set di dati. Questo approccio basato sul punteggio è utile quando devi misurare il rendimento rispetto a un benchmark coerente in tutti i prompt.

Ad esempio, la seguente griglia statica valuta la qualità del testo su una scala da 1 a 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.

Il servizio di valutazione Gen AI fornisce le seguenti metriche statiche della griglia:

  • GROUNDING: verifica l'oggettività e la coerenza rispetto a un testo di origine fornito (dato di fatto). Questa metrica è fondamentale per i sistemi RAG.

  • SAFETY: valuta la risposta del modello per verificare la presenza di violazioni delle norme di sicurezza, ad esempio incitamento all'odio o contenuti pericolosi.

Puoi anche utilizzare modelli di prompt per le metriche come FLUENCY.

from vertexai import types

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

Personalizzazione delle rubriche statiche

Per esigenze altamente specializzate, puoi creare la tua griglia statica. Questo metodo offre il massimo controllo, ma richiede di progettare con attenzione il prompt di valutazione per garantire risultati coerenti e affidabili. Ti consigliamo di utilizzare le linee guida con GENERAL_QUALITY prima di personalizzare le rubriche statiche.

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

Metriche basate su calcolo

Le metriche basate su calcolo utilizzano algoritmi deterministici per assegnare un punteggio alla risposta di un modello confrontandola con una risposta di riferimento. Richiedono dati di riferimento nel set di dati e sono ideali per le attività in cui una risposta "corretta" è ben definita.

  • Recall-Oriented Understudy for Gisting Evaluation (rouge_l, rouge_1): misura la sovrapposizione degli n-grammi (sequenze contigue di parole) tra la risposta del modello e un testo di riferimento. È di uso comune per valutare il riepilogo del testo.

  • Bilingual Evaluation Understudy (BLEU): misura la somiglianza di una risposta con un testo di riferimento di alta qualità contando gli n-grammi corrispondenti. È la metrica standard per la qualità della traduzione, ma può essere utilizzata anche per altre attività di generazione di testo.

  • Corrispondenza esatta (exact_match): misura la percentuale di risposte identiche alla risposta di riferimento. Questo approccio è utile per le attività di risposta a domande basate su fatti o per le attività in cui esiste una sola risposta corretta.

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

Metrica della funzione personalizzata

Puoi anche implementare una logica di valutazione personalizzata passando una funzione Python personalizzata al parametro custom_function. Il servizio di valutazione dell'AI generativa esegue questa funzione per ogni riga del set di dati.

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

Metrica della funzione personalizzata remota

Oltre a eseguire la logica di valutazione personalizzata in locale, puoi implementare una logica di valutazione personalizzata che viene eseguita in modo sicuro in un ambiente sandbox remoto. Ciò è utile quando vuoi integrare la valutazione nel workflow di ottimizzazione del modello o quando hai uno scenario specifico per l'utente che non è coperto dalle metriche di valutazione esistenti. Puoi farlo passando uno snippet di codice Python come stringa al parametro remote_custom_function della classe Metric. Il servizio di valutazione Gen AI esegue questa funzione in remoto per ogni riga del tuo set di dati.

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

Input dell'istanza di valutazione

La funzione evaluate accetta un dizionario instance come argomento. instance rappresenta l'istanza di valutazione e tutti i campi compilati in EvaluationInstance sono disponibili per la funzione come instance[field_name]. I campi disponibili includono:

  • prompt: il prompt utente fornito al modello.
  • response: l'output generato dal modello.
  • reference: i dati di riferimento utilizzati per il confronto con la risposta.
  • rubric_groups: Gruppi denominati di rubriche associati al prompt.
  • other_data: Altri dati utilizzati per compilare i segnaposto in base alla chiave.
  • agent_eval_data: dati specifici delle valutazioni degli agenti, come configurazioni e tracce degli agenti.

Vincoli tecnici

  • Ambiente di esecuzione:il codice personalizzato viene eseguito in un ambiente sandbox senza accesso alla rete.
  • Limite di tempo di esecuzione:l'esecuzione della valutazione è limitata a 1 minuto.
  • Limite di memoria:le dimensioni totali del codice caricato, combinate con i dati caricati durante l'esecuzione, non devono superare 1,5 GB.

Al momento dell'esecuzione sono disponibili i seguenti pacchetti di terze parti:

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

Passaggi successivi