

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
<a name="clarify-foundation-model-evaluate-auto-tutorial-two"></a>

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

Dieses Tutorial zeigt, wie Sie das [Modell Anthropic Claude 2](https://www.anthropic.com/index/claude-2), das in Amazon Bedrock verfügbar ist, laden und dieses Modell bitten, Textanfragen zusammenzufassen. Anschließend zeigt dieses Tutorial, wie die Genauigkeit der Modellantwort anhand der Metriken [https://huggingface.co/spaces/evaluate-metric/rouge](https://huggingface.co/spaces/evaluate-metric/rouge), [https://huggingface.co/spaces/evaluate-metric/meteor](https://huggingface.co/spaces/evaluate-metric/meteor)und bewertet wird. [https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/bertscore) 

Die Tutorials zeigen, wie Sie Folgendes durchführen können:
+ Einrichten Ihrer Umgebung
+ Führen Sie Ihre Modellevaluierung durch.
+ Zeigen Sie Ihre Analyseergebnisse an.

## So richten Sie Ihre Umgebung ein
<a name="clarify-foundation-model-evaluate-auto-tutorial-two-setup"></a>

**Voraussetzungen**
+ Verwenden Sie eine Basis-Kernelumgebung Python 3.10 und eine `ml.m5.2xlarge` Amazon Elastic Compute Cloud (Amazon EC2) -Instance, bevor Sie dieses Tutorial starten.

  Weitere Informationen zu Instance-Typen und ihren empfohlenen Anwendungsfällen finden Sie unter [Instance-Typen, die für die Verwendung mit Amazon SageMaker Studio Classic-Notebooks verfügbar sind](notebooks-available-instance-types.md).

**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](https://docs.aws.amazon.com/bedrock/latest/userguide/setting-up.html#sign-up-for-aws) unter **Amazon Bedrock einrichten**.

1. Öffnen Sie die [Amazon-Bedrock-Konsole](https://console.aws.amazon.com/bedrock).

1. Im **Willkommen bei Amazon Bedrock**\$1 Wählen Sie im sich öffnenden Bereich die Option **Modellzugriff verwalten** aus.

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

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

1. Wählen Sie **Modellzugriff anfordern** aus.

1. Wenn Ihre Anfrage erfolgreich ist, sollte unter ****Zugriffsstatus neben dem ausgewählten Modell ein Häkchen mit der Aufschrift Zugriff** gewährt** angezeigt werden.

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

**Installieren erforderlicher Bibliotheken**

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

   ```
   !pip install fmeval
   !pip3 install boto3==1.28.65
   ```

1. 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](https://aws.amazon.com/blogs/compute/new-aws-lambda-scaling-controls-for-kinesis-and-dynamodb-event-sources/).

1. Laden Sie den `JSON Lines` Beispieldatensatz [sample-dataset.jsonl](https://github.com/aws/fmeval/blob/8da27af2f20369fd419c03d5bb0707ab24010b14/examples/xsum_sample.jsonl) in Ihr aktuelles Arbeitsverzeichnis herunter.

1. Ü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 für Ihr Modell**

1. Definieren Sie das Modell und den `MIME` Typ Ihrer Aufforderung. Für ein [Modell von Anthropic Claude 2](https://www.anthropic.com/index/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](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html#model-parameters-claude-request-body). Andere Modelle haben möglicherweise andere Formate.

1. Senden Sie eine Musteranfrage an 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 angeben:
   + `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` und`1`, 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` bis`1`, 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 Wertebereiche für `topK` sind `0` bis`500`, der `250` Standardwert ist.
   + `max_tokens_to_sample` – Beschränkt die Länge der Antwort, indem die Anzahl der von Ihrem Modell zurückgegebenen Token begrenzt wird. Die Wertebereiche für `max_tokens_to_sample` sind `0` bis`4096`, der `200` Standardwert ist.
   + `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.](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html)

**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
   ```

1. Richten Sie die Datenkonfiguration für Ihren Eingabedatensatz ein.

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

   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 zur Auswertung der Modellantwort FMEval benötigt werden.

   Ihre Datenkonfiguration muss den Text identifizieren, in `model_input_location` dem Ihr Modell zusammenfassen 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, den URI (Uniform Resource Identifier) 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 Modellbewertung](clarify-foundation-model-evaluate-auto.md) Abschnitt **Verwenden eines benutzerdefinierten Eingabedatensatzes** unter.

1. Richten Sie einen benutzerdefinierten `ModelRunner` ein, 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](https://www.anthropic.com/index/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 an`500`, 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.](https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-claude.html)

       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](https://www.anthropic.com/index/claude-2) Folgendes: `content_template`

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

       Als weiteres Beispiel kann das [Falcon 7b-Modell Folgendes](https://huggingface.co/tiiuae/falcon-7b) unterstützen: `content_template`

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

## Führen Sie Ihre Modellbewertung durch
<a name="clarify-foundation-model-evaluate-auto-tutorial-two-run"></a>

**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** in [Verwenden Sie die `fmeval` Bibliothek, um eine automatische Bewertung durchzuführen](clarify-foundation-model-evaluate-auto-lib.md).

1. Führen Sie Ihren Bewertungsalgorithmus aus. Das folgende Codebeispiel verwendet die Datenkonfiguration, die zuvor definiert wurde, und eine`prompt_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)
   ```

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

## Zeigen Sie Ihre Analyseergebnisse an
<a name="clarify-foundation-model-evaluate-auto-tutorial-two-view"></a>

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: [https://huggingface.co/spaces/evaluate-metric/meteor](https://huggingface.co/spaces/evaluate-metric/meteor),, und [https://huggingface.co/spaces/evaluate-metric/bertscore](https://huggingface.co/spaces/evaluate-metric/bertscore), die Eingabe`prompt_template`, a, `category_score` falls Sie eine angefordert haben, alle Fehler und die`output_path`. Im folgenden Schritt werden Sie die verwenden, `output_path` `Pandas DataFrame` um eine zu erstellen.

1. Importieren Sie Ihre Ergebnisse`DataFrame`, 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 angegebenen Codebeispiele enthält, finden Sie unter [bedrock-claude-summarization-accuracy.ipnyb.](https://github.com/aws/fmeval/blob/main/examples/bedrock-claude-summarization-accuracy.ipynb) 