Hugging Face Classifier.jpg

Inicio rápido de Amazon SageMaker proporciona un conjunto de algoritmos incorporados, modelos previamente entrenadosy plantillas de soluciones prediseñadas para ayudar a los científicos de datos y profesionales del aprendizaje automático (ML) a comenzar a entrenar e implementar modelos de ML rápidamente. Puede utilizar estos algoritmos y modelos para el aprendizaje tanto supervisado como no supervisado. Pueden procesar varios tipos de datos de entrada, incluidos imágenes, texto y tabulares.

Esta publicación presenta el uso de clasificación de texto y máscara de relleno Modelos disponibles en Hugging Face en SageMaker JumpStart para clasificación de texto en un conjunto de datos personalizado. También demostramos cómo realizar inferencias por lotes y en tiempo real para estos modelos. Este algoritmo de aprendizaje supervisado admite el aprendizaje por transferencia para todos los modelos previamente entrenados disponibles en Hugging Face. Toma un fragmento de texto como entrada y genera la probabilidad de cada una de las etiquetas de clase. Puede ajustar estos modelos previamente entrenados mediante el aprendizaje por transferencia incluso cuando no haya un gran corpus de texto disponible. Está disponible en el Interfaz de usuario JumpStart de SageMaker en Amazon SageMaker Estudio. También puede usarlo a través del SDK de Python de SageMaker, como se demuestra en el cuaderno de ejemplo. Introducción a SageMaker HuggingFace: clasificación de texto.

Descripción general de la solución

La clasificación de texto con Hugging Face en SageMaker proporciona aprendizaje por transferencia en todos los modelos previamente entrenados disponibles en Hugging Face. Según la cantidad de etiquetas de clase en los datos de entrenamiento, se adjunta una capa de clasificación al modelo Hugging Face previamente entrenado. Luego, se puede ajustar toda la red, incluido el modelo previamente entrenado, o solo la capa de clasificación superior en los datos de entrenamiento personalizados. En este modo de aprendizaje por transferencia, la capacitación se puede lograr incluso con un conjunto de datos más pequeño.

En esta publicación, demostramos cómo hacer lo siguiente:

  • Utilice el nuevo algoritmo de clasificación de texto de Hugging Face
  • Realizar inferencias con el algoritmo de clasificación de texto de Hugging Face
  • Ajuste el modelo previamente entrenado en un conjunto de datos personalizado
  • Realice inferencia por lotes con el algoritmo de clasificación de texto Hugging Face

Requisitos previos

Antes de ejecutar el portátil, debe completar algunos pasos de configuración iniciales. Configuremos el rol de ejecución de SageMaker para que tenga permisos para ejecutar servicios de AWS en su nombre:

!pip install sagemaker --upgrade --quiet

import sagemaker, boto3, json
from sagemaker.session import Session
sagemaker_session = Session()
aws_role = sagemaker_session.get_caller_identity_arn()
aws_region = boto3.Session().region_name
sess = sagemaker.Session()

Ejecutar inferencia en el modelo previamente entrenado

SageMaker JumpStart admite la inferencia para cualquier modelo de clasificación de texto disponible a través de Hugging Face. El modelo se puede alojar para inferencia y texto de soporte como tipo de contenido de aplicación/x-text. Esto no solo le permitirá utilizar un conjunto de modelos previamente entrenados, sino que también le permitirá elegir otras tareas de clasificación.

La salida contiene los valores de probabilidad, las etiquetas de clase para todas las clases y la etiqueta prevista correspondiente al índice de clase con la probabilidad más alta codificada en formato JSON. El modelo procesa una sola cadena por solicitud y genera solo una línea. El siguiente es un ejemplo de una respuesta en formato JSON:

accept: application/json;verbose
{"probabilities": [prob_0, prob_1, prob_2, ...],
"labels": [label_0, label_1, label_2, ...],
"predicted_label": predicted_label}

Si accept se establece en application/json, entonces el modelo solo genera probabilidades. Para obtener más detalles sobre entrenamiento e inferencia, consulte el ejemplo. computadora portátil.

Puede ejecutar inferencias en el modelo de clasificación de texto pasando el model_id en la variable de entorno mientras se crea el objeto del Modelo clase. Vea el siguiente código:

from sagemaker.jumpstart.model import JumpStartModel

hub = {}
HF_MODEL_ID = 'distilbert-base-uncased-finetuned-sst-2-english' # Pass any other HF_MODEL_ID from - https://huggingface.co/models?pipeline_tag=text-classification&sort=downloads
hub['HF_MODEL_ID'] = HF_MODEL_ID
hub['HF_TASK'] = 'text-classification'

model = JumpStartModel(model_id=infer_model_id, env =hub, enable_network_isolation=False

Ajuste el modelo previamente entrenado en un conjunto de datos personalizado

Puedes ajustar cada uno de los programas previamente entrenados. máscara de relleno o clasificación de texto modelos a cualquier conjunto de datos dado compuesto por oraciones de texto con cualquier número de clases. El modelo previamente entrenado adjunta una capa de clasificación al modelo de incrustación de texto e inicializa los parámetros de la capa con valores aleatorios. La dimensión de salida de la capa de clasificación se determina en función del número de clases detectadas en los datos de entrada. El objetivo es minimizar los errores de clasificación en los datos de entrada. Luego puede implementar el modelo ajustado para realizar inferencias.

Las siguientes son las instrucciones sobre cómo se deben formatear los datos de entrenamiento para ingresarlos al modelo:

  • Aporte – Un directorio que contiene un data.csv archivo. Cada fila de la primera columna debe tener una etiqueta de clase entera entre 0 y el número de clases. Cada fila de la segunda columna debe tener los datos de texto correspondientes.
  • Producción – Un modelo ajustado que se puede implementar para inferencia o entrenar más mediante entrenamiento incremental.

El siguiente es un ejemplo de un archivo CSV de entrada. El archivo no debe tener ningún encabezado. El archivo debe estar alojado en un Servicio de almacenamiento simple de Amazon (Amazon S3) con una ruta similar a la siguiente: s3://bucket_name/input_directory/. el seguimiento / se requiere.

|0 |hide new secretions from the parental units|
|0 |contains no wit , only labored gags|
|1 |that loves its characters and communicates something rather beautiful about human nature|
|...|...|

El algoritmo también admite el aprendizaje por transferencia para Hugging Face modelos previamente entrenados. Cada modelo está identificado por un único model_id. El siguiente ejemplo muestra cómo ajustar un modelo base BERT identificado por model_id=huggingface-tc-bert-base-cased en un conjunto de datos de entrenamiento personalizado. Los archivos tar del modelo previamente entrenado se descargaron previamente de Hugging Face y se guardaron con la firma del modelo adecuada en depósitos de S3, de modo que el trabajo de entrenamiento se ejecute en aislamiento de red.

Para transferir el aprendizaje en su conjunto de datos personalizado, es posible que deba cambiar los valores predeterminados de los hiperparámetros de entrenamiento. Puede obtener un diccionario Python de estos hiperparámetros con sus valores predeterminados llamando hyperparameters.retrieve_default, actualícelos según sea necesario y luego páselos a la clase Estimador. El hiperparámetro Train_only_top_layer Define qué parámetros del modelo cambian durante el proceso de ajuste. Si train_only_top_layer es True, los parámetros de las capas de clasificación cambian y el resto de los parámetros permanecen constantes durante el proceso de ajuste. Si train_only_top_layer es False, todos los parámetros del modelo están ajustados. Vea el siguiente código:

from sagemaker import hyperparameters# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=model_id, model_version=model_version)# [Optional] Override default hyperparameters with custom values
hyperparameters["epochs"] = "5"

Para este caso de uso, proporcionamos SST2 como conjunto de datos predeterminado para ajustar los modelos. El conjunto de datos contiene críticas de películas positivas y negativas. Ha sido descargado de TensorFlow bajo la Licencia Apache 2.0. El siguiente código proporciona el conjunto de datos de entrenamiento predeterminado alojado en depósitos de S3:

# Sample training data is available in this bucket
training_data_bucket = f"jumpstart-cache-prod-{aws_region}"
training_data_prefix = "training-datasets/SST/"

training_dataset_s3_path = f"s3://{training_data_bucket}/{training_data_prefix}"

Creamos un objeto Estimador proporcionando el model_id y valores de hiperparámetros de la siguiente manera:

# Create SageMaker Estimator instance
tc_estimator = JumpStartEstimator(
hyperparameters=hyperparameters,
model_id=dropdown.value,
instance_type=training_instance_type,
metric_definitions=training_metric_definitions,
output_path=s3_output_location,
enable_network_isolation=False if model_id == "huggingface-tc-models" else True
)

Para iniciar el trabajo de capacitación de SageMaker para ajustar el modelo, llame .fit en el objeto de la clase Estimator, mientras pasa la ubicación S3 del conjunto de datos de entrenamiento:

# Launch a SageMaker Training job by passing s3 path of the training data
tc_estimator.fit({"training": training_dataset_s3_path}, logs=True)

Puede ver métricas de rendimiento, como la pérdida de entrenamiento y la precisión/pérdida de validación, a través de Amazon CloudWatch mientras entrenas. También puede obtener estas métricas y analizarlas usando CapacitaciónAnálisis de Trabajo:

df = TrainingJobAnalytics(training_job_name=training_job_name).dataframe() #It will produce a dataframe with different metrics
df.head(10)

El siguiente gráfico muestra diferentes métricas recopiladas del registro de CloudWatch usando TrainingJobAnalytics.

Para obtener más información sobre cómo utilizar el nuevo algoritmo de clasificación de texto SageMaker Hugging Face para transferir el aprendizaje en un conjunto de datos personalizado, implementar el modelo ajustado, ejecutar inferencia en el modelo implementado e implementar el modelo previamente entrenado tal como está sin primero realizar inferencias. sintonizando un conjunto de datos personalizado, vea el siguiente ejemplo computadora portátil.

Ajuste cualquier modelo de clasificación de texto o máscara de relleno de Hugging Face

SageMaker JumpStart admite el ajuste fino de cualquier máscara de relleno previamente entrenada o modelo de clasificación de texto Hugging Face. Puede descargar el modelo requerido desde el centro Hugging Face y realizar el ajuste. Para utilizar estos modelos, el model_id se proporciona en los hiperparámetros como hub_key. Vea el siguiente código:

HF_MODEL_ID = "distilbert-base-uncased" # Specify the HF_MODEL_ID here from https://huggingface.co/models?pipeline_tag=fill-mask&sort=downloads or https://huggingface.co/models?pipeline_tag=text-classification&sort=downloads
hyperparameters["hub_key"] = HF_MODEL_ID

Ahora puedes construir un objeto de la Estimador clase pasando los hiperparámetros actualizados. Llama .fit en el objeto de la clase Estimator mientras pasa la ubicación S3 del conjunto de datos de entrenamiento para realizar el trabajo de entrenamiento de SageMaker para ajustar el modelo.

Ajustar un modelo con ajuste automático de modelo

fabricante de salvia ajuste automático del modelo (ATM), también conocido como ajuste de hiperparámetros, encuentra la mejor versión de un modelo ejecutando muchos trabajos de entrenamiento en su conjunto de datos utilizando el algoritmo y los rangos de hiperparámetros que usted especifica. Luego elige los valores de hiperparámetros que dan como resultado un modelo que funciona mejor, según lo medido por una métrica que usted elija. En el siguiente código, utiliza un objeto HyperparameterTuner para interactuar con las API de ajuste de hiperparámetros de SageMaker:

from sagemaker.tuner import ContinuousParameter
# Define objective metric based on which the best model will be selected.
amt_metric_definitions = {
"metrics": [{"Name": "val_accuracy", "Regex": "'eval_accuracy': ([0-9\\.]+)"}],
"type": "Maximize",
}
# You can select from the hyperparameters supported by the model, and configure ranges of values to be searched for training the optimal model.(https://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html)
hyperparameter_ranges = {
"learning_rate": ContinuousParameter(0.00001, 0.0001, scaling_type="Logarithmic")
}
# Increase the total number of training jobs run by AMT, for increased accuracy (and training time).
max_jobs = 6
# Change parallel training jobs run by AMT to reduce total training time, constrained by your account limits.
# if max_jobs=max_parallel_jobs then Bayesian search turns to Random.
max_parallel_jobs = 2

Después de haber definido los argumentos para el HyperparameterTuner objeto, le pasas el Estimador y comienzas el entrenamiento. Esto encontrará el modelo de mejor rendimiento.

Realice inferencia por lotes con el algoritmo de clasificación de texto Hugging Face

Si el objetivo de la inferencia es generar predicciones a partir de un modelo entrenado en un gran conjunto de datos donde minimizar la latencia no es una preocupación, entonces el inferencia por lotes La funcionalidad puede ser más sencilla, más escalable y más apropiada.

La inferencia por lotes es útil en los siguientes escenarios:

  • Preprocesar conjuntos de datos para eliminar el ruido o el sesgo que interfiere con el entrenamiento o la inferencia de su conjunto de datos.
  • Obtenga inferencias de grandes conjuntos de datos
  • Ejecute inferencia cuando no necesite un punto final persistente
  • Asociar registros de entrada con inferencias para ayudar en la interpretación de los resultados.

Para ejecutar la inferencia por lotes en este caso de uso, primero descargue el SST2 conjunto de datos localmente. Elimine la etiqueta de clase y cárguela en Amazon S3 para realizar inferencias por lotes. Creas el objeto de Modelo clase sin proporcionar el punto final y crear el objeto transformador por lotes a partir de él. Utilice este objeto para proporcionar predicciones por lotes sobre los datos de entrada. Vea el siguiente código:

batch_transformer = model.transformer(
instance_count=1,
instance_type=inference_instance_type,
output_path=output_path,
assemble_with="Line",
accept="text/csv"
)

batch_transformer.transform(
input_path, content_type="text/csv", split_type="Line"
)

batch_transformer.wait()

Después de ejecutar la inferencia por lotes, puede comparar la precisión de la predicción en el conjunto de datos SST2.

Conclusión

En esta publicación, analizamos el algoritmo de clasificación de texto de SageMaker Hugging Face. Proporcionamos un código de ejemplo para realizar el aprendizaje por transferencia en un conjunto de datos personalizado utilizando un modelo previamente entrenado en aislamiento de red utilizando este algoritmo. También proporcionamos la funcionalidad para utilizar cualquier máscara de relleno de Hugging Face o modelo de clasificación de texto para inferencia y transferencia de aprendizaje. Por último, utilizamos la inferencia por lotes para ejecutar la inferencia en grandes conjuntos de datos. Para obtener más información, consulte el ejemplo. computadora portátil.


Sobre los autores

Hemant Singh es un Científico Aplicado con experiencia en Amazon SageMaker JumpStart. Obtuvo su maestría del Instituto Courant de Ciencias Matemáticas y su B.Tech del IIT Delhi. Tiene experiencia trabajando en una amplia gama de problemas de aprendizaje automático dentro del dominio del procesamiento del lenguaje natural, la visión por computadora y el análisis de series temporales.

Rachna Chadha es arquitecto principal de soluciones AI/ML en Cuentas Estratégicas en AWS. Rachna es una optimista que cree que el uso ético y responsable de la IA puede mejorar la sociedad en el futuro y generar prosperidad económica y social. En su tiempo libre, a Rachna le gusta pasar tiempo con su familia, hacer senderismo y escuchar música.

Dr. Ashish Khetan es un científico aplicado senior con algoritmos integrados de Amazon SageMaker y ayuda a desarrollar algoritmos de aprendizaje automático. Obtuvo su doctorado en la Universidad de Illinois Urbana-Champaign. Es un investigador activo en aprendizaje automático e inferencia estadística, y ha publicado numerosos artículos en conferencias NeurIPS, ICML, ICLR, JMLR, ACL y EMNLP.