Evalúe un modelo de Amazon Bedrock para comprobar la precisión del resumen de texto - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Evalúe un modelo de Amazon Bedrock para comprobar la precisión del resumen de texto

Puede utilizar un ModelRunner contenedor de alto nivel para crear una evaluación personalizada basada en un modelo alojado fuera de él. JumpStart

Este tutorial muestra cómo cargar el modelo Anthropic Claude 2, que está disponible en Amazon Bedrock, y cómo pedirle a este modelo que resuma las instrucciones de texto. A continuación, en este tutorial se muestra cómo evaluar la precisión de la respuesta del modelo mediante el Rouge-L, Meteor, y BERTScoreMétricas de .

Los tutoriales muestran cómo hacer lo siguiente:

  • Configurar su entorno de

  • Ejecute la evaluación del modelo.

  • Vea los resultados de su análisis.

Configure su entorno

Requisitos previos
  • Utilice una base Python 3.10 entorno de kernel y una instancia de ml.m5.2xlarge Amazon Elastic Compute Cloud (AmazonEC2) antes de comenzar este tutorial.

    Para obtener información adicional sobre los tipos de instancias y sus casos de uso recomendados, consulteTipos de instancias disponibles para su uso con Studio Classic.

Configuración de Amazon Bedrock

Antes de poder utilizar un modelo de Amazon Bedrock, debe solicitar acceso a él.

  1. Inicie sesión en su. Cuenta de AWS

    1. Si no tienes una AWS cuenta, consulta Cómo crear una AWS cuenta en Configurar Amazon Bedrock.

  2. Abra la consola de Amazon Bedrock.

  3. En Welcome to Amazon Bedrock! En la sección que se abre, selecciona Administrar el acceso a los modelos.

  4. En la sección Acceso a modelos que aparece, selecciona Administrar acceso a modelos.

  5. En la sección Modelos básicos que aparece, marca la casilla situada junto a Claude que aparece en la subsección Antrópica de Modelos.

  6. Selecciona Solicitar acceso al modelo.

  7. Si la solicitud se ha realizado correctamente, aparecerá una marca de verificación que indique que se ha concedido el acceso en el estado del acceso, junto al modelo seleccionado.

  8. Es posible que tengas que volver Cuenta de AWS a iniciar sesión para poder acceder al modelo.

Instale las bibliotecas necesarias
  1. En el código, instala las boto3 bibliotecas fmeval y de la siguiente manera:

    !pip install fmeval !pip3 install boto3==1.28.65
  2. Importe bibliotecas, establezca un factor de paralelización e invoque un cliente de Amazon Bedrock de la siguiente manera:

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

    En el ejemplo de código anterior, se aplica lo siguiente:

    • PARALLELIZATION_FACTOR— Un multiplicador del número de lotes simultáneos enviados a la instancia de cómputo. Si tu hardware permite la paralelización, puedes configurar este número para multiplicar por el número de invocaciones de tu trabajo de evaluación. Por ejemplo, si tiene 100 invocaciones y PARALLELIZATION_FACTOR está configurado en, su trabajo ejecutará las 2 invocaciones. 200 Puede PARALLELIZATION_FACTOR aumentar o eliminar la 10 variable por completo. Para leer un blog sobre cómo utiliza AWS Lambda, PARALLELIZATION_FACTOR consulte Nuevos controles de escalado de Lambda para las fuentes de eventos de Kinesis y DynamoDB.

  3. Descargue el conjunto de datos de muestra, JSON Lines sample-dataset.jsonl, en su directorio de trabajo actual.

  4. Compruebe que su entorno contiene el archivo de entrada de muestra de la siguiente manera:

    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")
Envíe un ejemplo de solicitud de inferencia a su modelo
  1. Defina el modelo y el MIME tipo de solicitud. En el caso de un modelo de Anthropic Claude 2 alojado en Amazon Bedrock, el mensaje debe estar estructurado de la siguiente manera:

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

    Para obtener más información sobre cómo estructurar el cuerpo de su solicitud, consulte el campo Cuerpo de la solicitud de invocación de modelos. Es posible que otros modelos tengan formatos diferentes.

  2. Envíe una solicitud de muestra a su modelo. El cuerpo de la solicitud contiene el mensaje y cualquier parámetro adicional que desee configurar. Un ejemplo de solicitud con el 500 siguiente max_tokens_to_sample conjunto:

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

    En el ejemplo de código anterior, puedes configurar los siguientes parámetros:

    • temperature— Controla la aleatoriedad del texto generado y acepta valores positivos. Los valores más altos temperature indican al modelo que genere respuestas más aleatorias y diversas. Los valores más bajos generan respuestas más predecibles. Los rangos para temperature se encuentran entre 0 y1, con un valor predeterminado de 0,5.

    • topP— Controla la aleatoriedad limitando el conjunto de fichas a tener en cuenta al generar la siguiente ficha. Los valores más altos topP permiten un conjunto que contenga un vocabulario más amplio y los valores más bajos restringen el conjunto de fichas a palabras más probables. Los rangos para topP son 0 de 1 0 a, con un valor predeterminado de1.

    • topK— Limita las predicciones del modelo a las fichas k más probables. Los valores más altos topK permiten respuestas más ingeniosas. Los valores más bajos generan respuestas más coherentes. Los rangos de topK son 0 de 500 0 a, con un valor predeterminado de250.

    • max_tokens_to_sample— Limita la longitud de la respuesta al limitar la cantidad de fichas devueltas por el modelo. Los rangos max_tokens_to_sample son de 0 0 a4096, con un valor predeterminado de200.

    • stop_sequences— Especifica una lista de secuencias de caracteres que indican al modelo que deje de generar una respuesta. La salida del modelo se detiene la primera vez que se encuentra alguna de las cadenas de la lista en la salida. La respuesta no contiene la secuencia de parada. Por ejemplo, puede utilizar una secuencia de retorno de vagones para limitar la respuesta del modelo a una sola línea. Puede configurar secuencias de hasta 4 paradas.

    Para obtener más información sobre los parámetros que puede especificar en una solicitud, consulte los modelos Anthropic Claude.

Configurar FMEval
  1. Cargue las bibliotecas necesarias para que se ejecuten de la FMEval siguiente manera:

    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. Configure la configuración de datos para su conjunto de datos de entrada.

    El siguiente ejemplo de entrada proviene de una línea desample-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", }

    La entrada de ejemplo anterior contiene el texto que se debe resumir dentro de la document clave. La referencia con la que evaluar la respuesta del modelo está en la summary clave. Debe usar estas claves en la configuración de datos para especificar qué columnas contienen la información FMEval necesaria para evaluar la respuesta del modelo.

    La configuración de datos debe identificar el texto en el que debe resumirse el model_input_location modelo. Debe identificar el valor de referencia contarget_output_location.

    El siguiente ejemplo de configuración de datos hace referencia al ejemplo de entrada anterior para especificar las columnas necesarias para una tarea de resumen de texto, el nombre, el identificador uniforme de recursos (URI) y el MIME tipo:

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

    Para obtener más información sobre la información de las columnas necesaria para otras tareas, consulte la sección Utilizar un conjunto de datos de entrada personalizado enEvaluación automática del modelo.

  3. Configura una personalizada ModelRunner como se muestra en el siguiente ejemplo de código:

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

    El ejemplo de código anterior especifica lo siguiente:

    • model_id— El identificador utilizado para especificar el modelo.

    • output— Captura el resultado del modelo Anthropic Claude 2, que devuelve su respuesta en completion clave.

    • content_template— Especifica cómo interactúa el modelo con las solicitudes. La plantilla de configuración del ejemplo se detalla a continuación únicamente para explicar el ejemplo anterior, y no es obligatoria.

      • En el content_template ejemplo anterior, se aplica lo siguiente:

        • La variable prompt especifica la solicitud de entrada, que captura la solicitud realizada por el usuario.

        • La variable max_tokens_to_sample especifica el número máximo de fichas para 500 limitar la longitud de la respuesta.

          Para obtener más información sobre los parámetros que puede especificar en su solicitud, consulte los modelos Anthropic Claude.

        El formato del content_template parámetro depende de las entradas y los parámetros admitidos por ustedLLM. En este tutorial, el modelo Claude 2 de Anthropic utiliza lo siguiente: content_template

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

        Como otro ejemplo, el modelo Falcon 7b puede admitir lo siguiente: content_template

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

Ejecute la evaluación de su modelo

Defina y ejecute su algoritmo de evaluación
  1. Defina su algoritmo de evaluación. El siguiente ejemplo muestra cómo definir un SummarizationAccuracy algoritmo, que se utiliza para determinar la precisión de las tareas de resumen de texto:

    eval_algo = SummarizationAccuracy(SummarizationAccuracyConfig())

    Para ver ejemplos de algoritmos que calculan métricas para otras tareas de evaluación, consulte Evalúe su modelo enUtilice la fmeval biblioteca para ejecutar una evaluación automática.

  2. Ejecute su algoritmo de evaluación. El siguiente ejemplo de código usa la configuración de datos que se definió previamente y una prompt_template que usa las Assistant teclas Human y:

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

    En el ejemplo de código anterior, feature contiene el mensaje en el formato que espera el modelo Amazon Bedrock.

Vea los resultados de su análisis

  1. Analice un informe de evaluación a partir del eval_output objeto devuelto por el algoritmo de evaluación de la siguiente manera:

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

    El comando anterior devuelve el siguiente resultado:

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

    El resultado del ejemplo anterior muestra las tres puntuaciones de precisión: Meteor, Rouge, y BERTScore, la entradaprompt_template, category_score si la ha solicitado, cualquier error y laoutput_path. Utilizará el output_path para crear un Pandas DataFrame en el siguiente paso.

  2. Importe sus resultados y léalos en unaDataFrame, y adjunte las puntuaciones de precisión a la entrada del modelo, a la salida del modelo y a la salida objetivo de la siguiente manera:

    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

    En esta invocación, el ejemplo de código anterior devuelve el siguiente resultado (reducido por motivos de brevedad):

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

    El resultado de su modelo puede ser diferente al resultado de la muestra anterior.

    Para ver un cuaderno que contenga los ejemplos de código que se proporcionan en esta sección, consulte bedrock-claude-summarization-accuracy.ipnyb.