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 il Gen AI evaluation service utilizza un framework basato su test che trasforma la valutazione da valutazioni soggettive a risultati oggettivi e utilizzabili.
Per ulteriori informazioni sui tipi di metriche, consulta la sezione Metriche di valutazione nella pagina di panoramica di Gen AI evaluation service.
Metrica di qualità generale
Puoi accedere alle griglie adattive tramite l'SDK. Ti consigliamo di iniziare con GENERAL_QUALITY come impostazione predefinita.
GENERAL_QUALITY genera un insieme di griglie che coprono una serie di attività come il rispetto delle istruzioni, la formattazione, il tono e lo stile, a seconda del prompt di input. Puoi combinare la generazione di griglie 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 esaminarle 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 di griglie sui criteri più importanti per te. Gen AI evaluation service genera quindi griglie 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 griglie 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 griglie adattive:
INSTRUCTION_FOLLOWING: misura l'aderenza della risposta ai vincoli e alle istruzioni specifici nel prompt.TEXT_QUALITY: si concentra in modo specifico sulla qualità linguistica della risposta, valutando la fluidità, la coerenza e la grammatica.
Conversazione a turni multipli
multi_turn_general_quality: valuta la qualità complessiva della conversazione in un dialogo a turni multipli.multi_turn_text_quality: valuta la qualità del testo delle risposte all'interno di un dialogo a turni multipli.
Valutazione agente
final_response_reference_free: valuta la qualità della risposta finale di un agente senza la necessità di una risposta di riferimento.final_response_quality: utilizza le 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 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 griglie adattive scelte come target, consulta Dettagli delle griglie adattive.
Griglie statiche
Una griglia statica applica un insieme fisso di linee guida per l'assegnazione dei punteggi a ogni esempio nel set di dati. Questo approccio basato sui punteggi è utile quando devi misurare le prestazioni 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.
Gen AI evaluation service fornisce le seguenti metriche di griglie statiche:
GROUNDING: verifica la veridicità e la coerenza rispetto a un testo di origine fornito (dati 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 i modelli di prompt delle metriche, ad esempio 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 griglie statiche
Per esigenze altamente specializzate, puoi creare la tua griglia statica. Questo metodo offre il massimo controllo, ma richiede di progettare attentamente il prompt di valutazione per garantire risultati coerenti e affidabili. Ti consigliamo di utilizzare le linee guida con GENERAL_QUALITY prima di personalizzare le griglie 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 fatto 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 di n-grammi (sequenze contigue di parole) tra la risposta del modello e un testo di riferimento. Viene comunemente utilizzata per valutare il riassunto del testo.
Bilingual Evaluation Understudy (bleu): misura la somiglianza di una risposta a 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. È utile per le attività di risposta a domande basate su fatti o in cui è presente 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 di funzione personalizzata
Puoi anche implementare una logica di valutazione personalizzata passando una funzione Python personalizzata al parametro custom_function. Gen AI evaluation service 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 di 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. Questa opzione è utile quando vuoi integrare la valutazione nel flusso di lavoro di ottimizzazione del modello o quando hai uno scenario specifico dell'utente non coperto dalle metriche di valutazione esistenti. Per farlo, puoi passare uno snippet di codice Python come stringa al parametro remote_custom_function della classe Metric. Gen AI evaluation service esegue questa funzione in remoto per ogni riga del 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 dell'utente fornito al modello.response: l'output generato dal modello.reference: i dati di fatto utilizzati per il confronto con la risposta.rubric_groups: gruppi denominati di griglie associati al prompt.other_data: altri dati utilizzati per popolare i segnaposto in base alla relativa chiave.agent_eval_data: dati specifici per le 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.
I seguenti pacchetti di terze parti sono disponibili al momento dell'esecuzione:
altair
chess
cv2
deepdiff
editdistance
jsonschema
matplotlib
mpmath
nltk
numpy
pandas
pdfminer
pydantic
rdkit
reportlab
scipy
seaborn
sklearn
sqlparse
statsmodels
striprtf
sympy
tabulate