Effectuer une évaluation basée sur les métriques

Vous pouvez évaluer les performances des modèles de fondation et de vos modèles d'IA générative réglés sur Vertex AI. Les modèles sont évalués avec un ensemble de métriques sur un ensemble de données d'évaluation que vous fournissez. Cette page explique comment fonctionne l'évaluation des modèles, comment créer et formater l'ensemble de données d'évaluation, et comment effectuer une évaluation à l'aide de la console Google Cloud, de l'API Vertex AI ou du SDK Vertex AI pour Python.

Fonctionnement de l'évaluation des modèles

Pour évaluer les performances d'un modèle, vous devez d'abord créer un ensemble de données d'évaluation contenant des paires constituées d'une invite et d'une vérité terrain. Pour chaque paire, l'invite est l'entrée que vous souhaitez évaluer et la vérité terrain est la réponse idéale pour cette invite. Lors de l'évaluation, l'invite de chaque paire de l'ensemble de données d'évaluation est transmise au modèle pour produire un résultat. Les résultats générés par le modèle et la vérité terrain de l'ensemble de données d'évaluation sont utilisés pour calculer les métriques d'évaluation.

Le type de métriques utilisé pour l'évaluation dépend de la tâche que vous évaluez. Le tableau suivant présente les tâches compatibles et les métriques utilisées pour évaluer chaque tâche :

Tâche Métrique
Classification Micro-F1, Macro-F1, F1 par classe
Synthèse ROUGE-L
Systèmes de questions-réponses Correspondance exacte
Génération de texte BLEU, ROUGE-L

Modèles compatibles

L'évaluation des modèles est compatible avec les versions de base et réglées de text-bison.

Préparer l'ensemble de données d'évaluation

L'ensemble de données d'évaluation utilisé pour l'évaluation du modèle inclut des paires d'invites et de vérités terrain qui s'alignent avec la tâche que vous souhaitez évaluer. Votre ensemble de données doit inclure au moins une paire d'invites et de vérité terrain, et au moins 10 paires pour les métriques pertinentes. Plus vous fournissez d'exemples, plus les résultats sont pertinents.

Format de l'ensemble de données

Votre ensemble de données d'évaluation doit être au format JSON Lines (JSONL), chaque ligne contenant une seule paire constituée d'une invite et d'une vérité terrain, respectivement spécifiées dans les champs input_text et output_text. Le champ input_text contient l'invite que vous souhaitez évaluer et le champ output_text contient la réponse idéale pour cette invite.

La longueur maximale de jeton pour input_text est de 8 192, et la longueur maximale de jeton pour output_text est de 1 024.

Exemples d'ensembles de données d'évaluation

Classification

{"input_text": "Multi-choice problem: What is the topic of this text? OPTIONS: -
nature - news - politics - sports - health - startups TEXT: #DYK In 2015, the
world produced 322M tonnes of plastic. That equals 900 Empire State Buildings!
Act:\u2026 https://t.co/qGrpumIN20", "output_text": "nature"}
{"input_text": "Multi-choice problem: What is the topic of this text? OPTIONS: -
nature - news - politics - sports - health - startups TEXT: Do you agree with
Chris Pratt? https://t.co/1q43CvIWAY https://t.co/zcKnTa9hKS", "output_text":
"news"}
{"input_text": "Multi-choice problem: What is the topic of this text? OPTIONS: -
nature - news - politics - sports - health - startups TEXT: Cahill and Diego
Costa aren't far away from getting their head on Hazard's corner. Meanwhile,
Ibe has replaced Pugh for Bournemouth. #BOUCHE", "output_text": "sports"}
{"input_text": "Multi-choice problem: What is the topic of this text? OPTIONS: -
nature - news - politics - sports - health - startups TEXT: Protecting our
oceans is integral to protecting the global environment #EarthDay
https://t.co/CN5NHKFbsB", "output_text": "nature"}
{"input_text": "Multi-choice problem: What is the topic of this text? OPTIONS: -
nature - news - politics - sports - health - startups TEXT: Scientists have
found that water is gushing across Antarctica \u2014 more than they ever
realized:\u2026 https://t.co/ttBGA15w5G", "output_text": "news"}

Systèmes de questions-réponses

{"input_text": "What is the capital of Australia?", "output_text": "Canberra"}
{"input_text": "Who is the author of The Great Gatsby?", "output_text": "F. Scott
Fitzgerald"}
{"input_text": "What is the highest mountain in the world?", "output_text":
"Mount Everest"}
{"input_text": "What is the largest country in South America?", "output_text":
"Brazil"}
{"input_text": "Who directed The Godfather?", "output_text": "Francis Ford
Coppola"}

Génération de textes d'ordre général

{"input_text":"Basketball teams in the Midwest.", "output_text":"There are
several basketball teams located in the Midwest region of the United States.
Here are some of them:"}
{"input_text":"How to bake gluten-free bread?", "output_text":"Baking gluten-free
bread can be a bit challenging because gluten is the protein that gives bread
its structure and elasticity."}
{"input_text":"Want to buy a new phone.", "output_text":"Great! There are many
factors to consider when buying a new phone, including your budget, preferred
operating system, desired features, and more. Here are some general steps to
follow to help you make an informed decision:"}
{"input_text":"I told them \"see you tomorrow\"", "output_text":"If you told
someone \"see you tomorrow,\" you most likely meant that you will see them the
following day. This is a common phrase used when saying goodbye to someone
with the intention of seeing them again soon. If you are unable to meet with
them as planned, it is always polite to let them know as soon as possible so
that they are not left waiting or wondering."}
{"input_text":"Apples are red\nOranges are orange", "output_text":"Yes, apples
are often red, although there are other varieties of apples that can be green,
yellow, or a combination of these colors. Oranges are typically orange, but
they can also be green or even slightly red depending on their variety and
ripeness. Colors are an important characteristic of fruits, as they can be an
indication of ripeness and nutritional value."}

Synthèse

{"input_text": "Summarize this: The coronavirus pandemic has resulted in a global
health crisis, with millions of people infected and hundreds of thousands of
deaths. Governments and healthcare organizations around the world are working
to contain the spread of the virus and develop effective treatments and
vaccines. In addition to the health impacts, the pandemic has also had major
economic and social consequences, with many businesses forced to shut down and
people facing unemployment and financial hardship.", "output_text": "The
coronavirus pandemic has caused a global health crisis, with governments and
healthcare organizations working to contain the virus and develop treatments
and vaccines. The pandemic has also had major economic and social
consequences, with businesses shutting down and people facing financial
hardship."}

{"input_text": "Summarize this: The United States has a long and complicated history of race relations, with racism and discrimination affecting many aspects of society. In recent years, there have been numerous protests and movements calling for racial justice and equality. These efforts have brought renewed attention to issues such as police brutality, mass incarceration, and systemic inequality.", "output_text": "The United States has a history of racism and discrimination, with recent protests calling for racial justice and equality. Issues such as police brutality, mass incarceration, and systemic inequality have been brought to the forefront."}
{"input_text": "Summarize this: Climate change is a pressing global issue, with rising temperatures and sea levels posing significant threats to ecosystems and human societies. Many governments and organizations are taking steps to reduce greenhouse gas emissions and transition to cleaner sources of energy. However, there is still much work to be done to address the root causes of climate change and mitigate its impacts.", "output_text": "Climate change is a global issue, with rising temperatures and sea levels posing significant threats. Many governments and organizations are taking steps to reduce greenhouse gas emissions, but more work needs to be done to address the root causes and mitigate the impacts."}
{"input_text": "Summarize this: Artificial intelligence and machine learning are rapidly advancing fields with many potential applications in industry, healthcare, and other sectors. However, there are also concerns about the ethical implications of AI and the potential for these technologies to exacerbate existing inequalities. As AI continues to evolve, it will be important to ensure that its development and use are guided by principles of fairness and accountability.", "output_text": "Artificial intelligence and machine learning have many potential applications, but there are also concerns about the ethical implications and potential for exacerbating existing inequalities. It will be important to ensure that AI development and use are guided by principles of fairness and accountability."}

Importer l'ensemble de données d'évaluation dans Cloud Storage

Vous pouvez créer un bucket Cloud Storage ou utiliser un bucket existant pour stocker votre fichier d'ensemble de données. Le bucket doit se trouver dans la même région que le modèle.

Une fois votre bucket prêt, importez-y le fichier d'ensemble de données.

Évaluer des modèles

Vous pouvez évaluer des modèles à l'aide de l'API REST ou de la console Google Cloud.

REST

Pour créer un job d'évaluation de modèle, envoyez une requête POST avec la méthode pipelineJobs.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID : projet Google Cloud qui exécute les composants du pipeline.
  • PIPELINEJOB_DISPLAYNAME : nom à afficher pour le pipelineJob.
  • LOCATION : région d'exécution des composants de pipeline. Pour le moment, seule la région us-central1 est compatible.
  • DATASET_URI : URI Cloud Storage de votre ensemble de données de référence. Vous pouvez spécifier un ou plusieurs URI. Ce paramètre prend en charge les caractères génériques. Pour en savoir plus sur ce paramètre, consultez la page InputConfig.
  • OUTPUT_DIR : URI Cloud Storage où stocker le résultat de l'évaluation.
  • MODEL_NAME : spécifiez un modèle de diffuseur ou une ressource de modèle réglée comme suit :
    • Modèle de diffuseur : publishers/google/models/MODEL@MODEL_VERSION

      Exemple : publishers/google/models/text-bison@001

    • Modèle réglé : projects/PROJECT_NUMBER/locations/LOCATION/models/ENDPOINT_ID

      Exemple : projects/123456789012/locations/us-central1/models/1234567890123456789

    Le job d'évaluation n'a aucune incidence sur les déploiements existants du modèle ou des ressources associées.

  • EVALUATION_TASK : tâche sur laquelle vous souhaitez évaluer le modèle. Le job d'évaluation calcule un ensemble de métriques pertinentes pour cette tâche spécifique. Les valeurs acceptées incluent les suivantes :
    • summarization
    • question-answering
    • text-generation
    • classification
  • INSTANCES_FORMAT : format de votre ensemble de données. Pour le moment, seul le format jsonl est pris en charge. Pour en savoir plus sur ce paramètre, consultez la page InputConfig.
  • PREDICTIONS_FORMAT : format de sortie de l'évaluation. Pour le moment, seul le format jsonl est pris en charge. Pour en savoir plus sur ce paramètre, consultez la section InputConfig.
  • MACHINE_TYPE : (facultatif) Type de machine pour l'exécution du job d'évaluation. La valeur par défaut est e2-highmem-16. Pour obtenir la liste des types de machines compatibles, consultez la page Types de machines.
  • SERVICE_ACCOUNT : (facultatif) compte de service à utiliser pour exécuter le job d'évaluation. Pour savoir comment créer un compte de service personnalisé, consultez la page Configurer un compte de service avec des autorisations précises. Si le champ n'est pas spécifié, l'agent de service de code personnalisé Vertex AI est utilisé.
  • NETWORK : (facultatif) nom complet du réseau Compute Engine auquel appairer le job d'évaluation. Le format du nom du réseau est projects/PROJECT_NUMBER/global/networks/NETWORK_NAME. Si vous spécifiez ce champ, vous devez disposer d'un appairage de réseau VPC pour Vertex AI. Si le champ n'est pas spécifié, la tâche d'évaluation n'est appairée à aucun réseau.
  • KEY_NAME : (facultatif) Le nom de la clé de chiffrement gérée par le client (CMEK). Le cas échéant, les ressources créées par le job d'évaluation sont chiffrées à l'aide de la clé de chiffrement fournie. Le format à utiliser pour le nom de la clé est projects/PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY. La clé doit se trouver dans la même région que le job d'évaluation.

Méthode HTTP et URL :

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs

Corps JSON de la requête :

{
  "displayName": "PIPELINEJOB_DISPLAYNAME",
  "runtimeConfig": {
    "gcsOutputDirectory": "gs://OUTPUT_DIR",
    "parameterValues": {
      "project": "PROJECT_ID",
      "location": "LOCATION",
      "batch_predict_gcs_source_uris": ["gs://DATASET_URI"],
      "batch_predict_gcs_destination_output_uri": "gs://OUTPUT_DIR",
      "model_name": "MODEL_NAME",
      "evaluation_task": "EVALUATION_TASK",
      "batch_predict_instances_format": "INSTANCES_FORMAT",
      "batch_predict_predictions_format: "PREDICTIONS_FORMAT",
      "machine_type": "MACHINE_TYPE",
      "service_account": "SERVICE_ACCOUNT",
      "network": "NETWORK",
      "encryption_spec_key_name": "KEY_NAME"
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1"
}

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/pipelineJobs" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante. Notez que pipelineSpec a été tronqué pour économiser de l'espace.

Exemple de commande curl

PROJECT_ID=myproject
REGION=us-central1
MODEL_NAME=publishers/google/models/text-bison@001
TEST_DATASET_URI=gs://my-gcs-bucket-uri/dataset.jsonl
OUTPUT_DIR=gs://my-gcs-bucket-uri/output

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
"https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/pipelineJobs" -d \
$'{
  "displayName": "evaluation-llm-text-generation-pipeline",
  "runtimeConfig": {
    "gcsOutputDirectory": "'${OUTPUT_DIR}'",
    "parameterValues": {
      "project": "'${PROJECT_ID}'",
      "location": "'${REGION}'",
      "batch_predict_gcs_source_uris": ["'${TEST_DATASET_URI}'"],
      "batch_predict_gcs_destination_output_uri": "'${OUTPUT_DIR}'",
      "model_name": "'${MODEL_NAME}'",
    }
  },
  "templateUri": "https://us-kfp.pkg.dev/vertex-evaluation/pipeline-templates/evaluation-llm-text-generation-pipeline/1.0.1"
}'

Python

Pour savoir comment installer ou mettre à jour le SDK pour Python, consultez la page Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.


from google.auth import default
import vertexai
from vertexai.preview.language_models import (
    EvaluationTextClassificationSpec,
    TextGenerationModel,
)

# Set credentials for the pipeline components used in the evaluation task
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])

def evaluate_model(
    project_id: str,
    location: str,
) -> object:
    """Evaluate the performance of a generative AI model."""

    vertexai.init(project=project_id, location=location, credentials=credentials)

    # Create a reference to a generative AI model
    model = TextGenerationModel.from_pretrained("text-bison@002")

    # Define the evaluation specification for a text classification task
    task_spec = EvaluationTextClassificationSpec(
        ground_truth_data=[
            "gs://cloud-samples-data/ai-platform/generative_ai/llm_classification_bp_input_prompts_with_ground_truth.jsonl"
        ],
        class_names=["nature", "news", "sports", "health", "startups"],
        target_column_name="ground_truth",
    )

    # Evaluate the model
    eval_metrics = model.evaluate(task_spec=task_spec)
    print(eval_metrics)

    return eval_metrics

Console

Pour créer un job d'évaluation de modèle à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la section "Vertex AI" de la console Google Cloud, accédez à la page Vertex AI Model Registry.

    Accéder à Vertex AI Model Registry

  2. Cliquez sur le nom du modèle que vous souhaitez évaluer.
  3. Dans l'onglet Évaluer, cliquez sur Créer une évaluation et configurez comme suit :
    • Objectif : Sélectionner la tâche à évaluer.
    • Colonne ou champ cible : (classification uniquement) saisissez la colonne cible pour la prédiction. Exemple : ground_truth.
    • Chemin d'accès source : saisissez ou sélectionnez l'URI de votre ensemble de données d'évaluation.
    • Format de sortie : saisissez le format de sortie de l'évaluation. Pour le moment, seul le format jsonl est pris en charge.
    • Chemin d'accès Cloud Storage : saisissez ou sélectionnez l'URI où stocker le résultat de l'évaluation.
    • Noms de classe : (classification uniquement) saisissez la liste des noms de classe possibles.
    • Nombre de nœuds de calcul : saisissez le nombre de nœuds de calcul pour exécuter le job d'évaluation.
    • Type de machine : sélectionnez un type de machine à utiliser pour exécuter le job d'évaluation.
  4. Cliquez sur Démarrer l'évaluation.

Afficher les résultats de l'évaluation

Vous pouvez trouver les résultats de l'évaluation dans le répertoire de sortie Cloud Storage que vous avez spécifié lors de la création de la tâche d'évaluation. Le fichier se nomme evaluation_metrics.json.

Pour les modèles ajustés, vous pouvez également afficher les résultats d'évaluation dans la console Google Cloud:

  1. Dans la section "Vertex AI" de la console Google Cloud, accédez à la page Vertex AI Model Registry.

    Accéder à Vertex AI Model Registry

  2. Cliquez sur le nom du modèle pour lequel vous souhaitez afficher les métriques d'évaluation.

  3. Dans l'onglet Évaluation, cliquez sur le nom de l'exécution d'évaluation que vous souhaitez afficher.

Étapes suivantes