View a markdown version of this page

Evaluieren Sie mit voreingestellten und benutzerdefinierten Scorern - Amazon SageMaker KI

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Evaluieren Sie mit voreingestellten und benutzerdefinierten Scorern

Wenn Sie den Bewertungstyp Benutzerdefinierter Punktezähler verwenden, unterstützt SageMaker Evaluation zwei integrierte Punktezähler (auch als „Belohnungsfunktionen“ bezeichnet): Prime Math und Prime Code, die aus der volcengine/verl RL-Trainingsbibliothek stammen, oder Ihren eigenen benutzerdefinierten Scorer, der als Lambda-Funktion implementiert ist.

Built-in Punktezähler

Erstklassige Mathematik

Der Prime Math-Scorer erwartet einen benutzerdefinierten JSONL-Datensatz mit Einträgen, die eine mathematische Frage als Grundlage prompt/query und die richtige Antwort als Grundwahrheit enthalten. Bei dem Datensatz kann es sich um eines der unter genannten unterstützten Formate handeln. Unterstützte Datensatzformate für Bring-Your-Own-Dataset (BYOD-) Aufgaben

Beispiel für einen Datensatzeintrag (aus Gründen der Übersichtlichkeit erweitert):

{ "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 }

Primcode

Der Prime Code Scorer erwartet einen benutzerdefinierten JSONL-Datensatz mit Einträgen, die ein Codierungsproblem und die im Feld angegebenen Testfälle enthalten. metadata Strukturieren Sie die Testfälle mit dem erwarteten Funktionsnamen für jeden Eintrag, Beispieleingaben und erwarteten Ausgaben.

Beispiel für einen Datensatzeintrag (aus Gründen der Übersichtlichkeit erweitert):

{ "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]"] } }

Benutzerdefinierte Punktezähler (bringen Sie Ihre eigenen Kennzahlen mit)

Passen Sie Ihren Arbeitsablauf zur Modellbewertung mit einer benutzerdefinierten Nachbearbeitungslogik vollständig an, mit der Sie benutzerdefinierte Metriken berechnen können, die auf Ihre Bedürfnisse zugeschnitten sind. Sie müssen Ihren benutzerdefinierten Scorer als AWS Lambda-Funktion implementieren, die Modellantworten akzeptiert und Prämienwerte zurückgibt.

Beispiel für eine Lambda-Eingabe-Payload

Die Nutzlast, die Ihre benutzerdefinierte AWS Scorer-Lambda-Funktion erhält, spiegelt das Format Ihres Bewertungsdatensatzes wider. SageMaker Die KI erkennt Ihr Datensatzformat und sendet jede Stichprobe in der entsprechenden Form an Ihr Lambda, wobei die generierte Antwort des Modells angehängt wird. Ihr Lambda muss die Antwort aus den Feldern lesen, die dem von Ihnen verwendeten Datensatzformat entsprechen.

Der Container ruft Ihr Lambda einmal pro Stichprobe auf und übergibt eine Liste, die ein einzelnes Beispielobjekt enthält. Ihr Lambda muss die Liste iterieren, aber derzeit enthält sie genau ein Element pro Aufruf. Die folgenden Abschnitte zeigen die Nutzlast, die Ihr Lambda für jedes unterstützte Datensatzformat erhält.

OpenAI Chat-Format

[ { "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" } } ]

Hinweise zur OpenAI-Nutzlast:

  • Die Antwort des Modells ist die letzte assistant Nachricht. Der Container hängt die Antwort des Modells als neuen Assistenten an.

  • Wenn Ihr Datensatz bereits mit einer Assistentenmeldung endet (der Ground-Truth-Turn), enthält die Payload zwei nachfolgende Assistentenmeldungen — die ursprüngliche Ground-Truth-Turn, gefolgt von der Antwort des Modells.

  • Die Ground-Truth-Daten werden ebenfalls auf der obersten reference_answer.text Ebene bereitgestellt (die zur Laufzeit normalisierte Kopie).

  • idist ein vom Container generierter Bezeichner (für dieses Format vorhanden).

verl-Format

[ { "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" } } } ]

Hinweise zur Verl-Nutzlast:

  • Die Antwort des Modells ist da response (und wird auch als letzte assistant Kurve angehängt). prompt

  • Ground Truth wird immer bei extra_info.reference_answer.text ausgegeben. Dies ist der {"text": ""} Fall, wenn der Datensatz keine Grundwahrheit bietet. Lesen Sie die Fakten aus diesem Feld heraus.

  • data_sourcewird standardmäßig verwendet, "customized" wenn der Datensatzeintrag ihn nicht festlegt.

  • reward_modelund andere verl-spezifische Felder (id,,ability,difficulty) werden nur durchgereichtattributes, wenn sie im Datensatzeintrag vorhanden sind. Sie werden standardmäßig nicht hinzugefügt.

Format „Umarmendes Gesicht“ Prompt-Completion

[ { "id": "123", "prompt": "What is the capital of France?", "completion": "The capital of France is Paris.", "reference_answer": { "text": "Paris" } } ]

Hinweise zur Payload „Hugging Face“: Prompt-Completion

  • Die Antwort des Modells befindet sich in completion (der Container überschreibt die ursprüngliche Vervollständigung des Datensatzes mit der Modellantwort).

  • Ground Truth ist bei reference_answer.text (die ursprüngliche Fertigstellung des Datensatzes).

Umarmendes Gesicht (Präferenzformat)

[ { "id": "123", "prompt": "What is the capital of France?", "completion": "The capital of France is Paris.", "chosen": "Paris", "rejected": "London", "reference_answer": { "text": "Paris" } } ]

Hinweise zur Payload „Hugging Face Preference“:

  • Die Antwort des Models ist da. completion

  • Das Original chosen - und das rejected Präferenzpaar werden durchgegeben.

  • Die Grundwahrheit ist bei reference_answer.text (aufgelöst vonchosen).

SageMaker AI-Evaluierungsformat

[ { "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" } } ]

Hinweise zur Payload für die SageMaker AI-Evaluierung:

  • Die Antwort des Modells ist da. model_response Alle ursprünglichen Datensatzfelder werden unverändert (query, response systemcategory, undmetadata) übergeben.

  • Die Grundwahrheit erscheint in zwei Feldern der obersten Ebene mit demselben Wert: dem Original response undreference_answer.text. Lesen Sie eines der beiden.

Anmerkung

Dies sind die Payloads, die Ihr Lambda empfängt. SageMaker Die KI nimmt jeden Eintrag aus Ihrem Bewertungsdatensatz, hängt die generierte Antwort des Modells an und sendet sie an Ihren Scorer. Lesen SieUnterstützte Datensatzformate für Bring-Your-Own-Dataset (BYOD-) Aufgaben, wie Sie die einzelnen Datensatzformate erstellen. Schreiben Sie Ihr Lambda, um die Felder des Formats zu analysieren, das Ihr Datensatz verwendet.

Beispiel für eine Lambda-Ausgabe-Payload

Ihre AWS Lambda-Funktion muss ein Ergebnisobjekt pro Eingabestichprobe zurückgeben. Der SageMaker AI-Eval-Container akzeptiert einen von zwei Antwortumschlägen:

Option A — Rohliste (empfohlen)

[ { "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 API-Wrapper

In diesem Format body ist die JSON-encoded Zeichenfolge der Ergebnisliste. Dies ist das Format, das von der Studio-Vorlage „Create Reward Function“ ausgegeben wird.

{ "statusCode": 200, "body": "[{\"id\": \"123\", \"aggregate_reward_score\": 0.85, \"metrics_list\": [...]}]" }

Die folgenden Hinweise gelten für beide Antwortumschläge:

  • In Option B body muss es sich um eine JSON-Zeichenfolge (kein verschachteltes JSON-Objekt) handeln, und statusCode zwar 200 Ein Status ungleich 200 veranlasst den Eval-Container, diese Probe als Fehler zu behandeln: Sie wird mitgezählt byoc_failure_count und ihre benutzerdefinierten Metriken werden gelöscht, aber die gesamte Evaluierungsaufgabe ist trotzdem abgeschlossen.

  • metrics_listist optional; falls vorhanden, muss jeder Eintrag namevalue, und type ("Reward"oder"Metric") enthalten.

  • Alle Ergebnisse id müssen mit denen der Eingabestichproben übereinstimmenid.

Benutzerdefinierte Lambda-Definition

Ein Beispiel für einen vollständig implementierten benutzerdefinierten Scorer mit Beispieleingabe und erwarteter Ausgabe finden Sie unter: #nova -reward-llm-judge-example https://docs.aws.amazon.com/sagemaker/latest/dg/nova-implementing-reward-functions.html

Verwenden Sie das folgende Skelett als Ausgangspunkt für Ihre eigene Funktion.

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" } ] } """

Eingabe- und Ausgabefelder

Eingabefelder

Feld Description Weitere Hinweise
id Eindeutige Kennung für die Probe Wird in der Ausgabe wiedergegeben. Zeichenfolge. Vorhanden für die Formate OpenAI, Hugging Face und SageMaker AI Evaluation; für verl erscheint es nur, wenn es im Datensatzeintrag festgelegt ist.
reference_answer.text Normalisierte Grundwahrheit für die Stichprobe In jedem Format vorhanden (für die meisten auf oberster Ebene, extra_info für Verl unter). Ein Wert liegt vor"", wenn der Datensatz keine Grundwahrheit bietet. Lesen Sie die Fakten aus diesem Feld ab.
messages Geordneter Chatverlauf (nur OpenAI-format Datensätze) Reihe von Nachrichtenobjekten. Die Antwort des Modells ist die letzte assistant Nachricht.
nachrichten [] .role Sprecher der Nachricht Allgemeine Werte: „Benutzer“, „Assistent“, „System“
nachrichten [] .content Textinhalt der Nachricht Einfache Zeichenfolge
Prompt Eingabeaufforderung (Hugging Face Formate: Zeichenfolge; verl: Chat-Array) Bei Verl wird die Modellantwort ebenfalls als letzte Kurve angehängt. assistant
completion Antwort des Modells (Formate Hugging Face Prompt-Completion und Preference) Der Container überschreibt die ursprüngliche Vervollständigung des Datensatzes mit der Modellantwort.
ausgewählt oder abgelehnt Bevorzugte und abgelehnte Antworten (Format „Hugging Face Preference“) Aus dem Datensatz übernommen. Ground Truth löst auf vonchosen.
response Reaktion des Modells (verl)/Ground-Truth-Reaktion (SageMaker KI-Bewertung) Bei der SageMaker KI-Bewertung entspricht dies der ursprünglichen Grundwahrheit (derselbe Wert wiereference_answer.text).
model_response Generierte Antwort des Modells (SageMaker AI-Evaluierungsformat) Zeichenfolge
Datenquelle, Belohnungsmodell, extra_info verl-spezifische Felder data_sourcestandardmäßig auf „benutzerdefiniert“ eingestellt. reward_model und andere Verl-Felder werden nur durchgereicht, wenn sie im Datensatzeintrag vorhanden sind.
Metadaten Free-form Informationen zur Unterstützung der Benotung Objekt; optionale Felder, die aus Ihrem Datensatz übernommen wurden

Ausgabefelder

Ausgabefelder
Feld Description Weitere Hinweise
id Gleiche Kennung wie die Eingabeprobe Muss mit der Eingabe übereinstimmen
aggregate_reward_score Gesamtpunktzahl für die Stichprobe Float (z. B. 0,0—1,0 oder aufgabendefinierter Bereich)
metrics_list Die Werte der Komponenten, aus denen sich das Aggregat zusammensetzt Reihe metrischer Objekte

Erforderliche Berechtigungen

Stellen Sie sicher, dass die SageMaker Ausführungsrolle, die Sie für die Evaluierung verwenden, über AWS Lambda-Berechtigungen verfügt.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:region:account-id:function:function-name" } ] }

Stellen Sie sicher, dass die Ausführungsrolle Ihrer AWS Lambda-Funktion über grundlegende Lambda-Ausführungsberechtigungen sowie über zusätzliche Berechtigungen verfügt, die Sie möglicherweise für nachgelagerte Aufrufe benötigen. AWS

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" } ] }