Evaluieren Sie ein Amazon Bedrock-Modell auf Genauigkeit bei der Textzusammenfassung - Amazon SageMaker

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 ein Amazon Bedrock-Modell auf Genauigkeit bei der Textzusammenfassung

Sie können einen ModelRunner Wrapper auf hoher Ebene verwenden, um eine benutzerdefinierte Bewertung auf der Grundlage eines Modells zu erstellen, das außerhalb von gehostet wird. JumpStart

Dieses Tutorial zeigt, wie Sie das Modell Anthropic Claude 2, das in Amazon Bedrock verfügbar ist, laden und dieses Modell bitten, Textanfragen zusammenzufassen. Anschließend wird in diesem Tutorial gezeigt, wie die Genauigkeit der Modellantwort anhand der Rouge-L, Meteor, und BERTScore-Metriken.

In den Tutorials wird gezeigt, wie Sie Folgendes tun können:

  • Einrichten Ihrer -Umgebung

  • Führen Sie Ihre Modellevaluierung durch.

  • Sehen Sie sich Ihre Analyseergebnisse an.

So richten Sie Ihre Umgebung ein

Voraussetzungen
Einrichten von Amazon Bedrock

Bevor Sie ein Amazon Bedrock-Modell verwenden können, müssen Sie den Zugriff darauf beantragen.

  1. Melden Sie sich bei Ihrem an AWS-Konto.

    1. Wenn Sie noch kein AWS Konto haben, finden Sie weitere Informationen unter Eröffnen eines AWS Kontos unter Amazon Bedrock einrichten.

  2. Öffnen Sie die Amazon Bedrock-Konsole.

  3. Im Willkommen bei Amazon Bedrock! Wählen Sie im sich öffnenden Bereich die Option Modellzugriff verwalten aus.

  4. Wählen Sie im daraufhin angezeigten Abschnitt Modellzugriff die Option Modellzugriff verwalten aus.

  5. Aktivieren Sie im daraufhin angezeigten Abschnitt Basismodelle das Kästchen neben Claude, das im Unterabschnitt Anthropic von Models aufgeführt ist.

  6. Wählen Sie Modellzugriff anfordern aus.

  7. Wenn Ihre Anfrage erfolgreich ist, sollte unter Zugriffsstatus neben dem ausgewählten Modell ein Häkchen mit der Aufschrift „Zugriff gewährt“ erscheinen.

  8. Möglicherweise müssen Sie sich erneut bei Ihrem anmelden AWS-Konto , um auf das Modell zugreifen zu können.

Installieren Sie die erforderlichen Bibliotheken
  1. Installieren Sie in Ihrem Code die boto3 Bibliotheken fmeval und wie folgt:

    !pip install fmeval !pip3 install boto3==1.28.65
  2. Importieren Sie Bibliotheken, legen Sie einen Parallelisierungsfaktor fest und rufen Sie einen Amazon Bedrock-Client wie folgt auf:

    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')

    Im vorherigen Codebeispiel gilt Folgendes:

    • PARALLELIZATION_FACTOR— Ein Multiplikator für die Anzahl der gleichzeitigen Batches, die an Ihre Compute-Instance gesendet werden. Wenn Ihre Hardware Parallelisierung zulässt, können Sie diese Zahl so einstellen, dass die Anzahl der Aufrufe für Ihren Evaluierungsjob mit multipliziert wird. Wenn Sie beispielsweise 100 Aufrufe haben und diese Option auf eingestellt PARALLELIZATION_FACTOR ist, führt Ihr Job Aufrufe aus. 2 200 Sie können die Variable PARALLELIZATION_FACTOR auf einen Wert erhöhen oder sie 10 ganz entfernen. Einen Blog zur Verwendung von AWS Lambda finden Sie PARALLELIZATION_FACTOR unter Neue Lambda-Skalierungssteuerungen für Kinesis- und DynamoDB-Ereignisquellen.

  3. Laden Sie den JSON Lines Beispieldatensatz sample-dataset.jsonl in Ihr aktuelles Arbeitsverzeichnis herunter.

  4. Überprüfen Sie wie folgt, ob Ihre Umgebung die Beispiel-Eingabedatei enthält:

    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")
Senden Sie eine Muster-Inferenzanfrage an Ihr Modell
  1. Definieren Sie das Modell und den MIME Typ Ihrer Aufforderung. Für ein Modell von Anthropic Claude 2, das auf Amazon Bedrock gehostet wird, muss Ihre Aufforderung wie folgt strukturiert sein:

    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: """

    Weitere Informationen zur Strukturierung des Hauptteils Ihrer Anfrage finden Sie unter Textfeld Modellaufrufanforderung. Andere Modelle haben möglicherweise andere Formate.

  2. Senden Sie eine Musteranfrage für Ihr Modell. Der Hauptteil Ihrer Anfrage enthält die Aufforderung und alle zusätzlichen Parameter, die Sie festlegen möchten. Eine Beispielanforderung mit 500 folgendem max_tokens_to_sample Satz:

    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"))

    Im vorherigen Codebeispiel können Sie die folgenden Parameter festlegen:

    • temperature— Steuert die Zufälligkeit des generierten Textes und akzeptiert positive Werte. Höhere Werte von temperature weisen das Modell an, mehr zufällige und vielfältigere Antworten zu generieren. Niedrigere Werte führen zu besser vorhersehbaren Antworten. Bereiche für temperature liegen zwischen 0 und1, mit einem Standardwert von 0,5.

    • topP— Steuert die Zufälligkeit, indem der Satz von Tokens begrenzt wird, der bei der Generierung des nächsten Tokens berücksichtigt werden soll. Höhere Werte von topP ermöglichen einen Satz, der ein breiteres Vokabular enthält, und niedrigere Werte beschränken den Tokensatz auf wahrscheinlichere Wörter. Die Wertebereiche für topP sind 0 bis1, der 1 Standardwert ist.

    • topK— Beschränkt die Modellvorhersagen auf die Tokens mit der k höchsten Wahrscheinlichkeit. Höhere Werte von topK ermöglichen einfallsreichere Antworten. Niedrigere Werte führen zu kohärenteren Antworten. Die Bereiche für topK sind 0 bis500, mit dem Standardwert250.

    • max_tokens_to_sample— Beschränkt die Länge der Antwort, indem die Anzahl der von Ihrem Modell zurückgegebenen Token begrenzt wird. Die Bereiche für max_tokens_to_sample sind 0 bis4096, mit dem Standardwert200.

    • stop_sequences— Gibt eine Liste von Zeichenfolgen an, die Ihr Modell anweisen, die Generierung einer Antwort zu beenden. Die Modellausgabe wird gestoppt, wenn eine der aufgelisteten Zeichenketten zum ersten Mal in der Ausgabe gefunden wird. Die Antwort enthält keine Stoppsequenz. Sie können beispielsweise eine Wagenrücklaufsequenz verwenden, um die Modellantwort auf eine einzige Zeile zu beschränken. Sie können Sequenzen bis zu einem 4 Stopp konfigurieren.

    Weitere Informationen zu den Parametern, die Sie in einer Anfrage angeben können, finden Sie unter Modelle von Anthropic Claude.

Richten Sie ein FMEval
  1. Laden Sie die erforderlichen Bibliotheken für die Ausführung FMEval wie folgt:

    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
  2. Richten Sie die Datenkonfiguration für Ihren Eingabedatensatz ein.

    Die folgende Beispieleingabe stammt aus einer Zeile vonsample-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", }

    Die vorherige Beispieleingabe enthält den Text, der im document Schlüssel zusammengefasst werden soll. Die Referenz, anhand derer Sie Ihre Modellantwort auswerten können, befindet sich im summary Schlüssel. Sie müssen diese Schlüssel in Ihrer Datenkonfiguration verwenden, um anzugeben, welche Spalten die Informationen enthalten, die für die Auswertung der Modellantwort FMEval benötigt werden.

    Ihre Datenkonfiguration muss den Text identifizieren, in model_input_location dem Ihr Modell zusammengefasst werden soll. Sie müssen den Referenzwert mit target_output_location identifizieren.

    Das folgende Beispiel für eine Datenkonfiguration bezieht sich auf das vorherige Eingabebeispiel, um die für eine Aufgabe zur Textzusammenfassung erforderlichen Spalten, den Namen, die Uniform Resource Identifier (URI) und den MIME Typ anzugeben:

    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" )

    Weitere Informationen zu den Spalteninformationen, die für andere Aufgaben erforderlich sind, finden Sie im Automatische Modellevaluierung Abschnitt Verwenden eines benutzerdefinierten Eingabedatensatzes unter.

  3. Richten Sie ein benutzerdefiniertes ein, ModelRunner wie im folgenden Codebeispiel gezeigt:

    bedrock_model_runner = BedrockModelRunner( model_id=model_id, output='completion', content_template='{"prompt": $prompt, "max_tokens_to_sample": 500}' )

    Das vorherige Codebeispiel spezifiziert Folgendes:

    • model_id— Die ID, die zur Angabe Ihres Modells verwendet wurde.

    • output— Erfasst die Ausgabe des Modells Anthropic Claude 2, das seine Antwort in einem completion Schlüssel zurückgibt.

    • content_template— Gibt an, wie Ihr Modell mit Anfragen interagiert. Die Beispielkonfigurationsvorlage wird im Folgenden lediglich zur Erläuterung des vorherigen Beispiels detailliert beschrieben und ist nicht erforderlich.

      • Im vorherigen content_template Beispiel gilt Folgendes:

        • Die Variable prompt gibt die Eingabeaufforderung an, die die vom Benutzer gestellte Anfrage erfasst.

        • Die Variable max_tokens_to_sample gibt die maximale Anzahl von Tokens an500, um die Länge der Antwort zu begrenzen.

          Weitere Informationen zu den Parametern, die Sie in Ihrer Anfrage angeben können, finden Sie unter Anthropic Claude-Modelle.

        Das Format des content_template Parameters hängt von den Eingaben und Parametern ab, die von Ihrem LLM unterstützt werden. In diesem Tutorial verwendet das Claude 2-Modell von Anthropic Folgendes: content_template

        "content_template": "{\"prompt\": $prompt, \"max_tokens_to_sample\": 500}"

        Als weiteres Beispiel kann das Falcon 7b-Modell Folgendes unterstützen: content_template

        "content_template": "{\"inputs\": $prompt, \"parameters\":{\"max_new_tokens\": \ 10, \"top_p\": 0.9, \"temperature\": 0.8}}"

Führen Sie Ihre Modellevaluierung durch

Definieren Sie Ihren Bewertungsalgorithmus und führen Sie ihn aus
  1. Definieren Sie Ihren Bewertungsalgorithmus. Das folgende Beispiel zeigt, wie Sie einen SummarizationAccuracy Algorithmus definieren, der verwendet wird, um die Genauigkeit von Aufgaben zur Textzusammenfassung zu bestimmen:

    eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig())

    Beispiele für Algorithmen, die Metriken für andere Bewertungsaufgaben berechnen, finden Sie unter Evaluieren Sie Ihr Modell inVerwenden Sie die fmeval Bibliothek, um eine automatische Bewertung durchzuführen.

  2. Führen Sie Ihren Bewertungsalgorithmus aus. Das folgende Codebeispiel verwendet die Datenkonfiguration, die zuvor definiert wurde, und eineprompt_template, die die Assistant Schlüssel Human und verwendet:

    eval_output = eval_algo.evaluate(model=bedrock_model_runner, dataset_config=config, prompt_template="Human: $feature\n\nAssistant:\n", save=True)

    featureEnthält im vorherigen Codebeispiel die Eingabeaufforderung in dem Format, das das Amazon Bedrock-Modell erwartet.

Sehen Sie sich Ihre Analyseergebnisse an

  1. Analysieren Sie einen Bewertungsbericht anhand des vom Bewertungsalgorithmus zurückgegebenen eval_output Objekts wie folgt:

    # parse report print(json.dumps(eval_output, default=vars, indent=4))

    Der vorherige Befehl gibt die folgende Ausgabe zurück:

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

    In der vorherigen Beispielausgabe werden die drei Genauigkeitswerte angezeigt: Meteor, Rouge, und BERTScore, die Eingabeprompt_template, ein, category_score ob Sie eine angefordert haben, etwaige Fehler und dieoutput_path. Sie verwenden dieoutput_path, um Pandas DataFrame im folgenden Schritt eine zu erstellen.

  2. Importieren Sie Ihre ErgebnisseDataFrame, lesen Sie sie in eine ein und fügen Sie die Genauigkeitswerte wie folgt der Modelleingabe, Modellausgabe und Zielausgabe hinzu:

    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']) df

    Bei diesem Aufruf gibt das vorherige Codebeispiel die folgende Ausgabe zurück (der Kürze halber gekürzt):

    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 ... ...

    Ihre Modellausgabe kann sich von der vorherigen Beispielausgabe unterscheiden.

    Ein Notizbuch, das die in diesem Abschnitt aufgeführten Codebeispiele enthält, finden Sie unter bedrock-claude-summarization-accuracy.ipnyb.