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.
Évaluez à l'aide de marqueurs prédéfinis et personnalisés
Lorsque vous utilisez le type d'évaluation Custom Scorer, SageMaker Evaluation prend en charge deux marqueurs intégrés (également appelés « fonctions de récompense ») Prime Math et Prime Code extraits de la bibliothèque d'entraînement volcengine/verl
Built-in Buteurs
Mathématiques principales
Le meilleur marqueur en mathématiques s'attend à un ensemble de données JSONL personnalisé contenant une question mathématique comme réponse prompt/query et la bonne réponse comme vérité fondamentale. L'ensemble de données peut être l'un des formats pris en charge mentionnés dansFormats de jeu de données pris en charge pour les tâches Bring-Your-Own-Dataset (BYOD).
Exemple d'entrée de jeu de données (développée pour plus de clarté) :
{ "system":"You are a math expert: ", "query":"How many vertical asymptotes does the graph of $y=\\frac{2}{x^2+x-6}$ have?", "response":"2" # Ground truth aka correct answer }
Code principal
Le marqueur de code principal attend un ensemble de données JSONL personnalisé contenant des entrées contenant un problème de codage et des cas de test spécifiés dans le champ. metadata Structurez les cas de test avec le nom de fonction attendu pour chaque entrée, les entrées d'échantillon et les sorties attendues.
Exemple d'entrée de jeu de données (développée pour plus de clarté) :
{ "system":"\\nWhen tackling complex reasoning tasks, you have access to the following actions. Use them as needed to progress through your thought process.\\n\\n[ASSESS]\\n\\n[ADVANCE]\\n\\n[VERIFY]\\n\\n[SIMPLIFY]\\n\\n[SYNTHESIZE]\\n\\n[PIVOT]\\n\\n[OUTPUT]\\n\\nYou should strictly follow the format below:\\n\\n[ACTION NAME]\\n\\n# Your action step 1\\n\\n# Your action step 2\\n\\n# Your action step 3\\n\\n...\\n\\nNext action: [NEXT ACTION NAME]\\n\\n", "query":"A number N is called a factorial number if it is the factorial of a positive integer. For example, the first few factorial numbers are 1, 2, 6, 24, 120,\\nGiven a number N, the task is to return the list/vector of the factorial numbers smaller than or equal to N.\\nExample 1:\\nInput: N = 3\\nOutput: 1 2\\nExplanation: The first factorial number is \\n1 which is less than equal to N. The second \\nnumber is 2 which is less than equal to N,\\nbut the third factorial number is 6 which \\nis greater than N. So we print only 1 and 2.\\nExample 2:\\nInput: N = 6\\nOutput: 1 2 6\\nExplanation: The first three factorial \\nnumbers are less than equal to N but \\nthe fourth factorial number 24 is \\ngreater than N. So we print only first \\nthree factorial numbers.\\nYour Task: \\nYou don't need to read input or print anything. Your task is to complete the function factorialNumbers() which takes an integer N as an input parameter and return the list/vector of the factorial numbers smaller than or equal to N.\\nExpected Time Complexity: O(K), Where K is the number of factorial numbers.\\nExpected Auxiliary Space: O(1)\\nConstraints:\\n1<=N<=10^{18}\\n\\nWrite Python code to solve the problem. Present the code in \\n```python\\nYour code\\n```\\nat the end.", "response": "", # Dummy string for ground truth. Provide a value if you want NLP metrics like ROUGE, BLEU, and F1. ### Define test cases in metadata field "metadata": { "fn_name": "factorialNumbers", "inputs": ["5"], "outputs": ["[1, 2]"] } }
Scorateurs personnalisés (apportez vos propres statistiques)
Personnalisez entièrement votre flux de travail d'évaluation de modèles grâce à une logique de post-traitement personnalisée qui vous permet de calculer des métriques personnalisées adaptées à vos besoins. Vous devez implémenter votre scorer personnalisé sous la forme d'une fonction AWS Lambda qui accepte les réponses des modèles et renvoie des scores de récompense.
Exemple de charge utile d'entrée Lambda
La charge utile que reçoit la fonction AWS Lambda de votre scoreur personnalisé reflète le format de votre jeu de données d'évaluation. SageMaker L'IA détecte le format de votre ensemble de données et envoie chaque échantillon à votre Lambda dans la forme correspondante, avec la réponse générée par le modèle en annexe. Votre Lambda doit lire la réponse des champs correspondant au format de jeu de données que vous utilisez.
Le conteneur invoque votre Lambda une fois par échantillon, en transmettant une liste contenant un seul objet d'échantillon. Votre Lambda doit itérer la liste, mais elle contient actuellement exactement un élément par appel. Les sections suivantes indiquent la charge utile que reçoit votre Lambda pour chaque format de jeu de données pris en charge.
Format OpenAI Chat
[ { "id": "123", "messages": [ { "role": "system", "content": "You are helpful." }, { "role": "user", "content": "What is the capital of France?" }, { "role": "assistant", "content": "Paris" }, { "role": "assistant", "content": "The capital of France is Paris." } ], "reference_answer": { "text": "Paris" } } ]
Remarques sur la charge utile d'OpenAI :
La réponse du mannequin est le dernier
assistantmessage. Le conteneur ajoute la réponse du modèle sous la forme d'un nouveau tour d'assistant.Si votre jeu de données se termine déjà par un message d'assistant (le virage de base), la charge utile contient deux messages d'assistant de fin : le tour de vérité initial suivi de la réponse du modèle.
La vérité de base est également fournie au niveau supérieur
reference_answer.text(la copie normalisée au temps d'exécution).idest un identifiant généré par le conteneur (présent pour ce format).
format verbal
[ { "data_source": "openai/gsm8k", "prompt": [ { "role": "user", "content": "What is the capital of France?" }, { "role": "assistant", "content": "The capital of France is Paris." } ], "response": "The capital of France is Paris.", "reward_model": { "style": "rule", "ground_truth": "Paris" }, "extra_info": { "reference_answer": { "text": "Paris" }, "processor_config": { "aggregation": "mean" } } } ]
Remarques sur la charge utile verl :
La réponse du modèle se trouve dans
response(et est également ajoutée en tant que dernierassistanttourprompt).La vérité du sol est toujours émise à
extra_info.reference_answer.text. C'est{"text": ""}lorsque l'ensemble de données ne fournit aucune vérité de base. Lisez la vérité de base dans ce domaine.data_sourceest défini par défaut"customized"lorsque l'entrée de l'ensemble de données ne le définit pas.reward_modelet les autres champs spécifiques à Verl (id,,abilityattributes,difficulty) ne sont transmis que s'ils sont présents dans l'entrée de l'ensemble de données. Ils ne sont pas ajoutés par défaut.
Format Hugging Face Prompt-Completion
[ { "id": "123", "prompt": "What is the capital of France?", "completion": "The capital of France is Paris.", "reference_answer": { "text": "Paris" } } ]
Remarques concernant la Prompt-Completion charge utile Hugging Face :
La réponse du modèle est saisie
completion(le conteneur remplace la complétion initiale de l'ensemble de données par la réponse du modèle).La vérité de base est atteinte
reference_answer.text(date d'achèvement initiale de l'ensemble de données).
Format de préférence pour Hugging Face
[ { "id": "123", "prompt": "What is the capital of France?", "completion": "The capital of France is Paris.", "chosen": "Paris", "rejected": "London", "reference_answer": { "text": "Paris" } } ]
Remarques concernant la charge utile Hugging Face Preference :
La réponse du modèle est là
completion.La paire d'origine
chosenet derejectedpréférence est transmise.La vérité sur le terrain est à
reference_answer.text(résolue à partir dechosen).
SageMaker Format d'évaluation de l'IA
[ { "id": "123", "model_response": "The capital of France is Paris.", "query": "What is the capital of France?", "response": "Paris", "system": "You are a helpful assistant.", "reference_answer": { "text": "Paris" } } ]
Remarques sur la charge utile d'évaluation de l' SageMaker IA :
La réponse du modèle est là
model_response. Tous les champs de l'ensemble de données d'origine sont transmis sans modification (queryresponsesystemcategory,, etmetadata).La vérité de base apparaît dans deux champs de premier niveau avec la même valeur : l'original
responseetreference_answer.text. Lisez l'un ou l'autre.
Note
Il s'agit des charges utiles que reçoit votre Lambda. SageMaker L'IA prend chaque entrée de votre ensemble de données d'évaluation, ajoute la réponse générée par le modèle et l'envoie à votre évaluateur. Découvrez Formats de jeu de données pris en charge pour les tâches Bring-Your-Own-Dataset (BYOD) comment créer chaque format de jeu de données. Écrivez votre Lambda pour analyser les champs du format utilisé par votre jeu de données.
Exemple de charge utile de sortie Lambda
Votre fonction AWS Lambda doit renvoyer un objet de résultat par échantillon d'entrée. Le conteneur SageMaker AI eval accepte l'une des deux enveloppes de réponse suivantes :
Option A — Liste brute (recommandée)
[ { "id": "123", "aggregate_reward_score": 0.85, "metrics_list": [ { "name": "factual_accuracy", "value": 0.9, "type": "Reward" }, { "name": "format_compliance", "value": 0.8, "type": "Metric" } ] } ]
Option B — Gateway-style Enveloppe d'API
Dans ce format, body se trouve la JSON-encoded chaîne de la liste de résultats. Il s'agit du format émis par le modèle « Create Reward Function » de Studio.
{ "statusCode": 200, "body": "[{\"id\": \"123\", \"aggregate_reward_score\": 0.85, \"metrics_list\": [...]}]" }
Les remarques suivantes s'appliquent aux deux enveloppes de réponse :
Dans l'option B,
bodyil doit s'agir d'une chaîne JSON (et non d'un objet JSON imbriqué), etstatusCodedoit l'être200. Un statut différent de 200 amène le conteneur d'évaluation à traiter cet échantillon comme un échec : il est comptabilisébyoc_failure_countet ses métriques personnalisées sont supprimées, mais la tâche d'évaluation globale est toujours terminée.metrics_listest facultatif ; lorsqu'il est présent, chaque entrée doit inclurenamevalue, ettype("Reward"ou"Metric").Chaque résultat
iddoit correspondre à celui de l'échantillon d'entréeid.
Définition Lambda personnalisée
Trouvez un exemple de scorer personnalisé entièrement implémenté avec un exemple d'entrée et le résultat attendu à l'adresse : https://docs.aws.amazon.com/sagemaker/latest/dg/nova-implementing-reward-functions.html #nova -reward-llm-judge-example
Utilisez le squelette suivant comme point de départ pour votre propre fonction.
def lambda_handler(event, context): return lambda_grader(event) def lambda_grader(samples: list[dict]) -> list[dict]: """ Args: Samples: List of dictionaries; each sample's shape mirrors your evaluation dataset format (OpenAI, verl, Hugging Face Prompt-Completion, Hugging Face Preference, or SageMaker Evaluation). See the Sample Lambda Input Payload section above for the per-format shape. # Example shown is the OpenAI format; other dataset formats use different fields. Example input: { "id": "123", "messages": [ { "role": "user", "content": "Do you have a dedicated security team?" }, { "role": "assistant", "content": "As an AI developed by Company, I do not have a dedicated security team..." } ], # reference_answer contents vary by dataset; reference_answer.text holds the normalized ground truth "reference_answer": { "text": "No, as an AI developed by Company, I do not have a dedicated security team." } } Returns: List of dictionaries with reward scores: { "id": str, # Same id as input sample "aggregate_reward_score": float, # Overall score for the sample "metrics_list": [ # OPTIONAL: Component scores { "name": str, # Name of the component score "value": float, # Value of the component score "type": str # "Reward" or "Metric" } ] } """
Champs d'entrée et de sortie
Champs de saisie
| Champ | Description | Informations complémentaires |
|---|---|---|
| id | Identifiant unique de l'échantillon | Repris en écho dans la sortie. String. Présent pour les formats OpenAI, Hugging Face et SageMaker AI Evaluation ; pour verl, il n'apparaît que s'il est défini dans l'entrée de l'ensemble de données. |
| reference_answer.text | Vérité de terrain normalisée pour l'échantillon | Présent dans tous les formats (en haut pour la plupart ; en bas extra_info pour le verl). La valeur correspond au "" moment où l'ensemble de données ne fournit aucune vérité de base. Lisez la vérité de base dans ce domaine. |
| messages | Historique des discussions ordonné (OpenAI-format ensembles de données uniquement) | Tableau d'objets de message. La réponse du modèle est le dernier assistant message. |
| messages [] .rôle | L'orateur du message | Valeurs courantes : « utilisateur », « assistant », « système » |
| messages [] .contenu | Contenu textuel du message | Chaîne de texte brut |
| invite | Invite de saisie (formats Hugging Face : chaîne ; verl : tableau de discussion) | Pour verl, la réponse du modèle est également ajoutée en tant que tour finalassistant. |
| completion | Réponse du modèle (formats Hugging Face Prompt-Completion et Preference) | Le conteneur remplace l'achèvement initial du jeu de données par la réponse du modèle. |
| choisi ou rejeté | Réponses préférées et rejetées (format de préférence Hugging Face) | Transmis à partir de l'ensemble de données. La vérité sur le terrain se résout à partir dechosen. |
| response | Réponse du modèle (verl) /réponse de base (évaluation de l'SageMaker IA) | Dans SageMaker AI Evaluation, cela contient la vérité de base initiale (même valeur quereference_answer.text). |
| modèle_réponse | Réponse générée par le modèle (format SageMaker AI Evaluation) | Chaîne |
| source de données, modèle_de récompense, informations supplémentaires | champs spécifiques à Verl | data_sourceLa valeur par défaut est « personnalisé ». reward_model et les autres champs verl ne sont transmis que s'ils sont présents dans l'entrée de l'ensemble de données. |
| metadata | Free-form informations pour faciliter le classement | Objet ; champs facultatifs transmis depuis votre ensemble de données |
Champs de sortie
| Champ | Description | Informations complémentaires |
|---|---|---|
| id | Identifiant identique à celui de l'échantillon d'entrée | Doit correspondre à l'entrée |
| score de récompense agrégé | Note globale pour l'échantillon | Float (par exemple, 0,0-1,0 ou plage définie par la tâche) |
| liste_métriques | Scores des composants qui constituent l'agrégat | Tableau d'objets métriques |
Autorisations nécessaires
Assurez-vous que le rôle SageMaker d'exécution que vous utilisez pour exécuter l'évaluation possède des autorisations AWS Lambda.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name" } ] }
Assurez-vous que le rôle d'exécution de votre fonction AWS Lambda dispose des autorisations d'exécution Lambda de base, ainsi que des autorisations supplémentaires dont vous pourriez avoir besoin pour tout appel en aval AWS .
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }