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
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.
-
Inicie sesión en su. Cuenta de AWS
-
Si no tienes una AWS cuenta, consulta Cómo crear una AWS cuenta en Configurar Amazon Bedrock.
-
-
Abra la consola de Amazon Bedrock
. -
En Welcome to Amazon Bedrock! En la sección que se abre, selecciona Administrar el acceso a los modelos.
-
En la sección Acceso a modelos que aparece, selecciona Administrar acceso a modelos.
-
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.
-
Selecciona Solicitar acceso al modelo.
-
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.
-
Es posible que tengas que volver Cuenta de AWS a iniciar sesión para poder acceder al modelo.
Instale las bibliotecas necesarias
-
En el código, instala las
boto3
bibliotecasfmeval
y de la siguiente manera:!pip install fmeval !pip3 install boto3==1.28.65
-
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 tiene100
invocaciones yPARALLELIZATION_FACTOR
está configurado en, su trabajo ejecutará las2
invocaciones.200
PuedePARALLELIZATION_FACTOR
aumentar o eliminar la10
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 Kinesisy DynamoDB.
-
-
Descargue el conjunto de datos de muestra,
JSON Lines
sample-dataset.jsonl, en su directorio de trabajo actual. -
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
-
Defina el modelo y el
MIME
tipo de solicitud. En el caso de un modelo de Anthropic Claude 2alojado 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.
-
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
siguientemax_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 altostemperature
indican al modelo que genere respuestas más aleatorias y diversas. Los valores más bajos generan respuestas más predecibles. Los rangos paratemperature
se encuentran entre0
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 altostopP
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 paratopP
son0
de1
0 a, con un valor predeterminado de1
. -
topK
— Limita las predicciones del modelo a las fichask
más probables. Los valores más altostopK
permiten respuestas más ingeniosas. Los valores más bajos generan respuestas más coherentes. Los rangos detopK
son0
de500
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 rangosmax_tokens_to_sample
son de0
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 hasta4
paradas.
Para obtener más información sobre los parámetros que puede especificar en una solicitud, consulte los modelos Anthropic Claude.
-
Configurar FMEval
-
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
-
Configure la configuración de datos para su conjunto de datos de entrada.
El siguiente ejemplo de entrada proviene de una línea de
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", }
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 lasummary
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.
-
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 para500
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 Anthropicutiliza 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
-
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.
-
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 lasAssistant
teclasHuman
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
-
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 entrada prompt_template
,category_score
si la ha solicitado, cualquier error y laoutput_path
. Utilizará eloutput_path
para crear unPandas DataFrame
en el siguiente paso. -
Importe sus resultados y léalos en una
DataFrame
, 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.