Une fois que vous avez créé un ensemble de données d'évaluation, l'étape suivante consiste à définir les métriques utilisées pour mesurer les performances du modèle. Les modèles d'IA générative peuvent créer des applications pour un large éventail de tâches. Le service d'évaluation de l'IA générative utilise un framework axé sur les tests qui transforme les évaluations subjectives en résultats objectifs et exploitables.
Pour en savoir plus sur les types de métriques, consultez la section Métriques d'évaluation de la page Présentation de Gen AI Evaluation Service.
Métrique de qualité générale
Vous pouvez accéder aux rubriques adaptatives via le SDK. Nous vous recommandons de commencer par GENERAL_QUALITY comme valeur par défaut.
GENERAL_QUALITY génère un ensemble de rubriques couvrant diverses tâches telles que le respect des instructions, la mise en forme, le ton et le style, en fonction du prompt d'entrée. Vous pouvez combiner la génération de rubriques avec la validation dans la ligne de code suivante :
from vertexai import types
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[
types.RubricMetric.GENERAL_QUALITY,
],
)
Vous pouvez générer des rubriques séparément (pour les examiner ou les réutiliser dans différents modèles et agents) avant de les utiliser pour évaluer les réponses du modèle :
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",
)],
)
Vous pouvez également guider GENERAL_QUALITY avec des guidelines en langage naturel pour concentrer la génération de rubriques sur les critères qui vous intéressent le plus. Gen AI Evaluation Service génère ensuite des rubriques couvrant à la fois ses tâches par défaut et les guidelines que vous spécifiez.
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."
}
)
],
)
Métriques de qualité ciblées
Si vous devez évaluer un aspect plus ciblé de la qualité du modèle, vous pouvez utiliser des métriques qui génèrent des rubriques axées sur un domaine spécifique. Exemple :
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 propose les types de rubriques adaptatives suivants :
INSTRUCTION_FOLLOWING: mesure dans quelle mesure la réponse respecte les contraintes et les instructions spécifiques du prompt.TEXT_QUALITY: se concentre spécifiquement sur la qualité linguistique de la réponse, en évaluant la fluidité, la cohérence et la grammaire.
Conversation multitours
multi_turn_general_quality: évalue la qualité globale de la conversation dans un dialogue multitours.multi_turn_text_quality: évalue la qualité du texte des réponses dans un dialogue multitours.
Évaluation des agents
final_response_reference_free: évalue la qualité de la réponse finale d'un agent sans avoir besoin d'une réponse de référence.final_response_quality: utilise des rubriques adaptatives pour évaluer la qualité de la réponse finale d'un agent en fonction de la configuration de l'agent et de l'utilisation des outils.hallucination: évalue si les réponses textuelles d'un agent sont fondées sur la configuration de l'agent et l'utilisation des outils.tool_use_quality: évalue l'exactitude des appels de fonction effectués par l'agent pour répondre à un prompt utilisateur.
Pour en savoir plus sur les rubriques adaptatives ciblées, consultez Détails des rubriques adaptatives.
Rubriques statiques
Une rubrique statique applique un ensemble unique et fixe de guidelines de notation à chaque exemple de votre ensemble de données. Cette approche axée sur les scores est utile lorsque vous devez mesurer les performances par rapport à un benchmark cohérent pour tous les prompts.
Par exemple, la rubrique statique suivante évalue la qualité du texte sur une échelle de 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 fournit les métriques de rubriques statiques suivantes :
GROUNDING: vérifie la véracité et la cohérence par rapport à un texte source fourni (vérité terrain). Cette métrique est essentielle pour les systèmes RAG.SAFETY: évalue la réponse du modèle pour détecter les violations des règles de sécurité, telles que les discours haineux ou les contenus dangereux.
Vous pouvez également utiliser des modèles de prompts de métriques tels que FLUENCY.
from vertexai import types
eval_result = client.evals.evaluate(
dataset=eval_dataset,
metrics=[
types.RubricMetric.SAFETY,
types.RubricMetric.GROUNDING,
types.RubricMetric.FLUENCY,
],
)
Personnaliser des rubriques statiques
Pour des besoins très spécifiques, vous pouvez créer votre propre rubrique statique. Cette méthode offre un contrôle maximal, mais vous oblige à concevoir soigneusement le prompt d'évaluation pour garantir des résultats cohérents et fiables. Nous vous recommandons d'utiliser des guidelines avec GENERAL_QUALITY avant de personnaliser des rubriques statiques.
# 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
],
)
Métriques issues de calculs
Les métriques issues de calculs utilisent des algorithmes déterministes pour attribuer un score à la réponse d'un modèle en la comparant à une réponse de référence. Elles nécessitent une vérité terrain dans votre ensemble de données et sont idéales pour les tâches où une réponse "correcte" est bien définie.
Recall-Oriented Understudy for Gisting Evaluation (rouge_l, rouge_1) : mesure le chevauchement des n-grammes (séquences contiguës de mots) entre la réponse du modèle et un texte de référence. Elle est couramment utilisée pour évaluer la synthèse de texte.
Bilingual Evaluation Understudy (bleu) : mesure la similitude d'une réponse avec un texte de référence de haute qualité en comptant les n-grammes correspondants. Il s'agit de la métrique standard pour la qualité de la traduction, mais elle peut également être utilisée pour d'autres tâches de génération de texte.
Exact Match (exact_match) : mesure le pourcentage de réponses identiques à la réponse de référence. Cette métrique est utile pour les questions-réponses factuelles ou les tâches où il n'existe qu'une seule réponse correcte.
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')
],
)
Métrique de fonction personnalisée
Vous pouvez également implémenter une logique d'évaluation personnalisée en transmettant une fonction Python personnalisée au paramètre custom_function. Gen AI Evaluation Service exécute cette fonction pour chaque ligne de votre ensemble de données.
# 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]
)
Métrique de fonction personnalisée à distance
En plus d'exécuter une logique d'évaluation personnalisée localement, vous pouvez implémenter une logique d'évaluation personnalisée qui s'exécute de manière sécurisée dans un environnement de bac à sable à distance. Cela est utile lorsque vous souhaitez intégrer l'évaluation à votre workflow de réglage de modèle ou lorsque vous avez un scénario spécifique à l'utilisateur qui n'est pas couvert par les métriques d'évaluation existantes. Pour ce faire, transmettez un extrait de code Python sous forme de chaîne au paramètre remote_custom_function de la classe Metric. Gen AI Evaluation Service exécute cette fonction à distance pour chaque ligne de votre ensemble de données.
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],
)
Entrées d'instance d'évaluation
La fonction evaluate accepte un dictionnaire instance comme argument. instance représente l'instance d'évaluation, et tous les champs renseignés dans EvaluationInstance sont disponibles pour la fonction en tant que instance[field_name]. Les champs disponibles incluent les suivants :
prompt: prompt utilisateur fourni au modèle.response: sortie générée par le modèle.reference: vérité terrain utilisée pour effectuer une comparaison avec la réponse.rubric_groups: groupes nommés de rubriques associés au prompt.other_data: autres données utilisées pour renseigner les espaces réservés en fonction de leur clé.agent_eval_data: données spécifiques aux évaluations d'agents, telles que les configurations et les traces d'agents.
Contraintes techniques
- Environnement d'exécution : le code personnalisé s'exécute dans un environnement de bac à sable sans accès au réseau.
- Limite de temps d'exécution : l'exécution de la notation est limitée à une minute.
- Limite de mémoire : la taille totale du code importé, combinée à toutes les données chargées lors de l'exécution, ne doit pas dépasser 1,5 Go.
Les packages tiers suivants sont disponibles au moment de l'exécution :
altair
chess
cv2
deepdiff
editdistance
jsonschema
matplotlib
mpmath
nltk
numpy
pandas
pdfminer
pydantic
rdkit
reportlab
scipy
seaborn
sklearn
sqlparse
statsmodels
striprtf
sympy
tabulate