Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Évaluation d’un modèle Amazon Bedrock pour l’exactitude de synthétisation de texte
Vous pouvez utiliser un ModelRunner wrapper de haut niveau pour créer une évaluation personnalisée basée sur un modèle hébergé en dehors de JumpStart.
Ce didacticiel explique comment charger le modèle Anthropic Claude 2
Ce didacticiel montre comment effectuer les opérations suivantes :
-
Configurez votre environnement.
-
Exécution de votre évaluation de modèles
-
Visualisation de vos résultats d’analyse
Configuration de votre environnement
Conditions préalables
-
Utilisez un environnement de noyau Python 3.10 de base et une instance
ml.m5.2xlargeAmazon Elastic Compute Cloud (Amazon EC2) avant de commencer ce didacticiel.Pour plus d’informations sur les types d’instances et leurs cas d’utilisation recommandés, consultez Types d'instances disponibles pour une utilisation avec les blocs-notes Amazon SageMaker Studio Classic.
Configuration d’Amazon Bedrock
Avant de pouvoir utiliser un modèle Amazon Bedrock, vous devez demander l’accès à ce modèle.
-
Connectez-vous à votreCompte AWS.
-
Si vous n'avez pas de AWS compte, consultez Créer un AWS compte dans Configurer Amazon Bedrock.
-
-
Ouvrez la console Amazon Bedrock
. -
Dans la section Bienvenue sur Amazon Bedrock ! qui s’ouvre, choisissez Gérer l’accès aux modèles.
-
Dans la section Accéder aux modèles qui apparaît, choisissez Gérer l’accès aux modèles.
-
Dans la section Modèles de base qui apparaît, cochez la case à côté de Claude dans la sous-section Anthropic de Modèles.
-
Choisissez Demander l’accès au modèle.
-
Si votre demande est acceptée, une coche indiquant Accès accordé devrait apparaître sous Statut de l’accès à côté du modèle sélectionné.
-
Vous devrez peut-être vous reconnecter Compte AWS à votre compte pour pouvoir accéder au modèle.
Installation des bibliothèques requises
-
Dans votre code, installez les bibliothèques
fmevaletboto3comme suit :!pip install fmeval !pip3 install boto3==1.28.65 -
Importez les bibliothèques, définissez un facteur de parallélisation et invoquez un client Amazon Bedrock comme suit :
import boto3 import json import os # Dependent on available hardware and memory os.environ["PARALLELIZATION_FACTOR"] = "1" # Bedrock clients for model inference bedrock = boto3.client(service_name='bedrock') bedrock_runtime = boto3.client(service_name='bedrock-runtime')Dans l’exemple de code précédent, les points suivants s’appliquent :
-
PARALLELIZATION_FACTOR: multiplicateur du nombre de lots simultanés envoyés à votre instance de calcul. Si votre matériel autorise la parallélisation, vous pouvez définir ce nombre avec lequel multiplier le nombre d’invocations pour votre tâche d’évaluation. Par exemple, si vous avez100invocations et quePARALLELIZATION_FACTORa pour valeur2, votre tâche exécutera200invocations. Vous pouvez augmenterPARALLELIZATION_FACTORjusqu’à10ou supprimer complètement la variable. Pour lire un blog sur l'utilisation de AWS Lambda,PARALLELIZATION_FACTORconsultez la section Nouveaux contrôles de dimensionnement Lambda pour les sources d'événements Kinesiset DynamoDB.
-
-
Téléchargez l’exemple de jeu de données
JSON Lines, sample-dataset.jsonl, dans votre répertoire de travail actuel. -
Vérifiez que votre environnement contient l’exemple de fichier d’entrée suivant :
import glob # Check for the built-in dataset if not glob.glob("sample-dataset.jsonl"): print("ERROR - please make sure file exists: sample-dataset.jsonl")
Envoi d’un exemple de demande d’inférence à votre modèle
-
Définissez le modèle et le type
MIMEde votre invite. Pour un modèle Anthropic Claude 2hébergé sur Amazon Bedrock, votre invite doit être structurée comme suit : import json model_id = 'anthropic.claude-v2' accept = "application/json" contentType = "application/json" # Ensure that your prompt has the correct format prompt_data = """Human: Who is Barack Obama? Assistant: """Pour plus d’informations sur la manière de structurer le corps de votre demande, consultez Champ body de la demande d’invocation du modèle. Les autres modèles peuvent avoir des formats différents.
-
Envoyez un exemple de demande à votre modèle. Le corps de votre demande contient l’invite et tous les paramètres supplémentaires que vous souhaitez définir. Voici un exemple de demande avec
max_tokens_to_sampledéfini sur500:body = json.dumps({"prompt": prompt_data, "max_tokens_to_sample": 500}) response = bedrock_runtime.invoke_model( body=body, modelId=model_id, accept=accept, contentType=contentType ) response_body = json.loads(response.get("body").read()) print(response_body.get("completion"))Dans l’exemple de code précédent, vous pouvez définir les paramètres suivants :
-
temperature: contrôle le degré de hasard du texte généré et accepte les valeurs positives. Des valeurs plus élevées detemperatureindiquent au modèle de générer des réponses plus aléatoires et plus diverses. Des valeurs plus faibles génèrent des réponses plus prévisibles. Les plages detemperaturesont comprises entre0et1, avec une valeur par défaut de 0,5. -
topP: contrôle le degré de hasard en limitant l’ensemble de jetons à prendre en compte lors de la génération du jeton suivant. Des valeurs plus élevées detopPautorisent un ensemble contenant un vocabulaire plus large et des valeurs plus faibles limitent l’ensemble de jetons à des mots plus probables. Les plages detopPvont de0à1, avec une valeur par défaut de1. -
topK: limite les prédictions modélisées auxkjetons les plus probables. Des valeurs plus élevées detopKpermettent des réponses plus inventives. Des valeurs plus faibles génèrent des réponses plus cohérentes. Les plages detopKvont de0à500, avec une valeur par défaut de250. -
max_tokens_to_sample: limite la longueur de la réponse en limitant le nombre de jetons renvoyés par votre modèle. Les plages demax_tokens_to_samplevont de0à4096, avec une valeur par défaut de200. -
stop_sequences: spécifie une liste de séquences de caractères qui indiquent à votre modèle d’arrêter de générer une réponse. La sortie du modèle est arrêtée la première fois que l’une des chaînes répertoriées est rencontrée dans la sortie. La réponse ne contient pas la séquence d’arrêt. Par exemple, vous pouvez utiliser une séquence de retour chariot pour limiter la réponse du modèle à une seule ligne. Vous pouvez configurer jusqu’à4séquences d’arrêt.
Pour plus d’informations sur les paramètres que vous pouvez spécifier dans une demande, consultez Modèles Anthropic Claude.
-
Configurez FMEval
-
Chargez les bibliothèques requises pour qu'elles s'exécutent FMEval comme suit :
from fmeval.data_loaders.data_config import DataConfig from fmeval.model_runners.bedrock_model_runner import BedrockModelRunner from fmeval.constants import MIME_TYPE_JSONLINES from fmeval.eval_algorithms.summarization_accuracy import SummarizationAccuracy, SummarizationAccuracyConfig -
Configurez la configuration des données pour votre jeu de données d’entrée.
L’exemple d’entrée suivant se trouve à une ligne de
sample-dataset.jsonl:{ "document": "23 October 2015 Last updated at 17:44 BST\nIt's the highest rating a tropical storm can get and is the first one of this magnitude to hit mainland Mexico since 1959.\nBut how are the categories decided and what do they mean? Newsround reporter Jenny Lawrence explains.", "summary": "Hurricane Patricia has been rated as a category 5 storm.", "id": "34615665", }L’exemple d’entrée précédent contient le texte à résumer dans la clé
document. La référence par rapport à laquelle évaluer la réponse de votre modèle est dans la clésummary. Vous devez utiliser ces clés dans votre configuration de données pour spécifier les colonnes contenant les informations FMEval nécessaires à l'évaluation de la réponse du modèle.Votre configuration de données doit identifier le texte que votre modèle doit résumer dans
model_input_location. Vous devez identifier la valeur de référence avectarget_output_location.L’exemple de configuration de données suivant fait référence à l’exemple d’entrée précédent pour spécifier les colonnes requises pour une tâche de synthétisation de texte, le nom, l’identifiant de ressource uniforme (URI) et le type
MIME:config = DataConfig( dataset_name="sample-dataset", dataset_uri="sample-dataset.jsonl", dataset_mime_type=MIME_TYPE_JSONLINES, model_input_location="document", target_output_location="summary" )Pour plus d’informations sur les informations de colonne requises pour d’autres tâches, consultez la section Utilisation d’un jeu de données d’entrée personnalisé dans Évaluation automatique de modèles.
-
Configurez un élément
ModelRunnerpersonnalisé dans l’exemple de code suivant :bedrock_model_runner = BedrockModelRunner( model_id=model_id, output='completion', content_template='{"prompt": $prompt, "max_tokens_to_sample": 500}' )L’exemple de code précédent spécifie les éléments suivants :
-
model_id: l’identifiant utilisé pour spécifier votre modèle. -
output: capture la sortie du modèle Anthropic Claude 2, qui renvoie sa réponse dans une clé completion. -
content_template: spécifie la façon dont votre modèle interagit avec les demandes. L’exemple de modèle de configuration est détaillé comme suit uniquement pour expliquer l’exemple précédent, et il n’est pas obligatoire.-
Dans l’exemple
content_templateprécédent, les points suivants s’appliquent :-
La variable
promptspécifie l’invite d’entrée, qui capture la demande faite par l’utilisateur. -
La variable
max_tokens_to_samplespécifie le nombre maximal de jetons sur500, afin de limiter la longueur de la réponse.Pour plus d’informations sur les paramètres que vous pouvez spécifier dans votre demande, consultez Modèles Anthropic Claude.
Le format du paramètre
content_templatedépend des entrées et des paramètres pris en charge par votre LLM. Dans ce didacticiel, le modèle Claude 2 d’Anthropicutilise l’élément content_templatesuivant :"content_template": "{\"prompt\": $prompt, \"max_tokens_to_sample\": 500}"Autre exemple, le modèle Falcon 7b
peut prendre en charge l’élément content_templatesuivant :"content_template": "{\"inputs\": $prompt, \"parameters\":{\"max_new_tokens\": \ 10, \"top_p\": 0.9, \"temperature\": 0.8}}" -
-
-
Exécution de votre évaluation de modèles
Définition et exécution de votre algorithme d’évaluation
-
Définissez votre algorithme d’évaluation. L’exemple suivant montre comment définir un algorithme
SummarizationAccuracy, qui est utilisé pour déterminer l’exactitude des tâches de synthétisation de texte :eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig())Pour des exemples d’algorithmes qui calculent des métriques pour d’autres tâches d’évaluation, consultez Évaluation de votre modèle dans Utilisation de la bibliothèque fmeval pour exécuter une évaluation automatique.
-
Exécutez votre algorithme d’évaluation. L’exemple de code suivant utilise la configuration des données précédemment définie, ainsi qu’un élément
prompt_templatequi utilise les clésHumanetAssistant:eval_output = eval_algo.evaluate(model=bedrock_model_runner, dataset_config=config, prompt_template="Human: $feature\n\nAssistant:\n", save=True)Dans l’exemple de code précédent,
featurecontient l’invite au format attendu par le modèle Amazon Bedrock.
Visualisation de vos résultats d’analyse
-
Analysez un rapport d’évaluation à partir de l’objet
eval_outputrenvoyé par l’algorithme d’évaluation comme suit :# parse report print(json.dumps(eval_output, default=vars, indent=4))La commande précédente renvoie la sortie suivante :
[ { "eval_name": "summarization_accuracy", "dataset_name": "sample-dataset", "dataset_scores": [ { "name": "meteor", "value": 0.2048823008681274 }, { "name": "rouge", "value": 0.03557697913367101 }, { "name": "bertscore", "value": 0.5406564395678671 } ], "prompt_template": "Human: $feature\n\nAssistant:\n", "category_scores": null, "output_path": "/tmp/eval_results/summarization_accuracy_sample_dataset.jsonl", "error": null } ]L’exemple de sortie précédent affiche les trois scores d’exactitude : Meteor
, Rouge et BERTScore , l’élément prompt_templated’entrée, un élémentcategory_scoresi vous en avez demandé un, les erreurs éventuelles et l’élémentoutput_path. Vous allez utiliser l’élémentoutput_pathpour créer unPandas DataFrameà l’étape suivante. -
Importez vos résultats et lisez-les dans un
DataFrame, puis attachez les scores d’exactitude à l’entrée du modèle, à la sortie du modèle et à la sortie cible comme suit :import pandas as pd data = [] with open("/tmp/eval_results/summarization_accuracy_sample_dataset.jsonl", "r") as file: for line in file: data.append(json.loads(line)) df = pd.DataFrame(data) df['meteor_score'] = df['scores'].apply(lambda x: x[0]['value']) df['rouge_score'] = df['scores'].apply(lambda x: x[1]['value']) df['bert_score'] = df['scores'].apply(lambda x: x[2]['value']) dfDans cette invocation, l’exemple de code précédent renvoie la sortie suivante (contractée pour des raisons de concision) :
model_input model_output target_output prompt scores meteor_score rouge_score bert_score 0 John Edward Bates, formerly of Spalding, Linco... I cannot make any definitive judgments, as th... A former Lincolnshire Police officer carried o... Human: John Edward Bates, formerly of Spalding... [{'name': 'meteor', 'value': 0.112359550561797... 0.112360 0.000000 0.543234 ... 1 23 October 2015 Last updated at 17:44 BST\nIt'... Here are some key points about hurricane/trop... Hurricane Patricia has been rated as a categor... Human: 23 October 2015 Last updated at 17:44 B... [{'name': 'meteor', 'value': 0.139822692925566... 0.139823 0.017621 0.426529 ... 2 Ferrari appeared in a position to challenge un... Here are the key points from the article:\n\n... Lewis Hamilton stormed to pole position at the... Human: Ferrari appeared in a position to chall... [{'name': 'meteor', 'value': 0.283411142234671... 0.283411 0.064516 0.597001 ... 3 The Bath-born player, 28, has made 36 appearan... Okay, let me summarize the key points from th... Newport Gwent Dragons number eight Ed Jackson ... Human: The Bath-born player, 28, has made 36 a... [{'name': 'meteor', 'value': 0.089020771513353... 0.089021 0.000000 0.533514 ... ...La sortie de votre modèle peut être différente de l’exemple de sortie précédent.
Pour un bloc-notes contenant les exemples de code donnés dans cette section, voir bedrock-claude-summarization-accuracy.ipnyb
.