Transferir aprendizaje para modelos de clasificación de texto de TensorFlow en Amazon SageMaker

Amazon SageMaker proporciona un conjunto de algoritmos incorporados, modelos pre-entrenadosy plantillas de solución preconstruidas para ayudar a los científicos de datos y a los profesionales del aprendizaje automático (ML) a comenzar a entrenar e implementar modelos de ML rápidamente. Puede usar estos algoritmos y modelos para el aprendizaje supervisado y no supervisado. Pueden procesar varios tipos de datos de entrada, incluidos tabulares, imágenes y texto.

Esta publicación es la tercera de una serie sobre los nuevos algoritmos integrados en SageMaker. En el Primer comentario, mostramos cómo SageMaker proporciona un algoritmo integrado para la clasificación de imágenes. En el segunda publicación, mostramos cómo SageMaker proporciona un algoritmo integrado para la detección de objetos. Hoy anunciamos que SageMaker proporciona un nuevo algoritmo integrado para la clasificación de texto mediante TensorFlow. Este algoritmo de aprendizaje supervisado admite el aprendizaje por transferencia para muchos modelos preentrenados disponibles en Centro TensorFlow. Toma un fragmento de texto como entrada y genera la probabilidad para cada una de las etiquetas de clase. Puede ajustar estos modelos previamente entrenados mediante el aprendizaje por transferencia, incluso cuando no se dispone de un gran corpus de texto. Está disponible a través de SageMaker. algoritmos incorporados, así como a través de la Interfaz de usuario JumpStart de SageMaker in Estudio Amazon SageMaker. Para obtener más información, consulte Clasificación de texto y el cuaderno de ejemplo Introducción a JumpStart: clasificación de texto.

La clasificación de texto con TensorFlow en SageMaker proporciona transferencia de aprendizaje en muchos modelos previamente entrenados disponibles en TensorFlow Hub. De acuerdo con la cantidad de etiquetas de clase en los datos de entrenamiento, se adjunta una capa de clasificación al modelo de concentrador de TensorFlow entrenado previamente. La capa de clasificación consta de una capa de abandono y una capa densa, capa totalmente conectada, con regularizador de 2 normas, que se inicializa con pesos aleatorios. El entrenamiento del modelo tiene hiperparámetros para la tasa de abandono de la capa de abandono y el factor de regularización L2 para la capa densa. Luego, se puede ajustar toda la red, incluido el modelo preentrenado, o solo la capa de clasificación superior con los nuevos datos de entrenamiento. En este modo de transferencia de aprendizaje, el entrenamiento se puede lograr incluso con un conjunto de datos más pequeño.

Cómo usar el nuevo algoritmo de clasificación de texto de TensorFlow

Esta sección describe cómo usar el algoritmo de clasificación de texto TensorFlow con el SDK de SageMaker Python. Para obtener información sobre cómo usarlo desde la interfaz de usuario de Studio, consulte Inicio rápido de SageMaker.

El algoritmo admite el aprendizaje por transferencia para los modelos preentrenados que se enumeran en Modelos de flujo de tensor. Cada modelo está identificado por un único model_id. El siguiente código muestra cómo ajustar el modelo base BERT identificado por model_id tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2 en un conjunto de datos de entrenamiento personalizado. Para cada model_id, para iniciar un trabajo de capacitación de SageMaker a través del Estimador del SDK de Python de SageMaker, debe obtener el URI de la imagen de Docker, el URI del script de entrenamiento y el URI del modelo previamente entrenado a través de las funciones de utilidad proporcionadas en SageMaker. El URI del script de entrenamiento contiene todo el código necesario para el procesamiento de datos, la carga del modelo previamente entrenado, el entrenamiento del modelo y el almacenamiento del modelo entrenado para la inferencia. El URI del modelo preentrenado contiene la definición de la arquitectura del modelo preentrenado y los parámetros del modelo. El URI del modelo preentrenado es específico para el modelo en particular. Los tarballs de modelos preentrenados se han descargado previamente de TensorFlow y se han guardado con la firma de modelo adecuada en Servicio de almacenamiento simple de Amazon (Amazon S3), para que el trabajo de entrenamiento se ejecute en aislamiento de red. Ver el siguiente código:

from sagemaker import image_uris, model_uris, script_urisfrom sagemaker.estimator import Estimator

model_id, model_version = "tensorflow-tc-bert-en-uncased-L-12-H-768-A-12-2", "*"
training_instance_type = "ml.p3.2xlarge"
# Retrieve the docker image
train_image_uri = image_uris.retrieve(model_id=model_id,model_version=model_version,image_scope="training",instance_type=training_instance_type,region=None,framework=None)# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="training")# Retrieve the pre-trained model tarball for transfer learning
train_model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="training")

output_bucket = sess.default_bucket()
output_prefix = "jumpstart-example-tensorflow-tc-training"
s3_output_location = f"s3://{output_bucket}/{output_prefix}/output"

Con estos artefactos de entrenamiento específicos del modelo, puede construir un objeto del Estimador clase:

# Create SageMaker Estimator instance
tf_tc_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
    output_path=s3_output_location,)

A continuación, para transferir el aprendizaje en su conjunto de datos personalizado, es posible que deba cambiar los valores predeterminados de los hiperparámetros de entrenamiento, que se enumeran en Hiperparámetros. Puede obtener un diccionario de 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 Estimator. Tenga en cuenta que los valores predeterminados de algunos de los hiperparámetros son diferentes para diferentes modelos. Para modelos grandes, el tamaño de lote predeterminado es más pequeño y el train_only_top_layer hiperparámetro se establece en True. El hiperparámetro Train_only_top_layer define qué parámetros del modelo cambian durante el proceso de ajuste. Si train_only_top_layer is True, luego los parámetros de las capas de clasificación cambian y el resto de los parámetros permanecen constantes durante el proceso de ajuste fino. Por otro lado, si train_only_top_layer is False, luego se ajustan todos los parámetros del modelo. Ver 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"

Proporcionamos el SST2 como un conjunto de datos predeterminado para ajustar los modelos. El conjunto de datos contiene reseñas de películas positivas y negativas. Ha sido descargado de TensorFlow bajo 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/SST2/"

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

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

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

Para obtener más información sobre cómo usar el nuevo algoritmo de clasificación de texto SageMaker TensorFlow para transferir el aprendizaje en un conjunto de datos personalizado, implementar el modelo ajustado, ejecutar inferencias en el modelo implementado e implementar el modelo previamente entrenado tal como está sin un ajuste fino previo en un conjunto de datos personalizado, consulte el siguiente cuaderno de ejemplo: Introducción a JumpStart: clasificación de texto.

Interfaz de entrada/salida para el algoritmo de clasificación de texto TensorFlow

Puede ajustar cada uno de los modelos preentrenados que se enumeran en Modelos TensorFlow a cualquier conjunto de datos formado por oraciones de texto con cualquier número de clases. El modelo preentrenado adjunta una capa de clasificación al modelo de incrustación de texto e inicializa los parámetros de la capa en 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. El modelo devuelto por el ajuste fino se puede implementar aún más para la inferencia.

Las siguientes instrucciones describen cómo deben formatearse los datos de entrenamiento para la entrada al modelo:

  • Entrada: un directorio que contiene un archivo data.csv. Cada fila de la primera columna debe tener etiquetas de clase enteras entre 0 y el número de clases. Cada fila de la segunda columna debe tener los datos de texto correspondientes.
  • Salida: un modelo ajustado que se puede implementar para la inferencia o entrenarse más mediante el entrenamiento incremental. Un archivo de asignación de índices de clase a etiquetas de clase se guarda junto con los modelos.

El siguiente es un ejemplo de un archivo CSV de entrada. Tenga en cuenta que el archivo no debe tener ningún encabezado. El archivo debe estar alojado en un depósito S3 con una ruta similar a la siguiente: s3://bucket_name/input_directory/. Tenga en cuenta que 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|
|...|...|

Inferencia con el algoritmo de clasificación de texto TensorFlow

Los modelos generados se pueden alojar para la inferencia y el texto de apoyo como el application/x-text tipo de contenido. La salida contiene los valores de probabilidad, las etiquetas de clase para todas las clases y la etiqueta predicha 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}

If accept se establece a application/json, entonces el modelo solo genera probabilidades. Para obtener más detalles sobre el entrenamiento y la inferencia, consulte el cuaderno de muestra Introducción a Introducción a JumpStart: clasificación de texto.

Use los algoritmos integrados de SageMaker a través de la interfaz de usuario de JumpStart

También puede usar la clasificación de texto SageMaker TensorFlow y cualquiera de los otros algoritmos integrados con unos pocos clics a través de la interfaz de usuario de JumpStart. JumpStart es una característica de SageMaker que le permite entrenar e implementar algoritmos integrados y modelos previamente entrenados desde varios marcos de ML y centros de modelos a través de una interfaz gráfica. Además, le permite implementar soluciones de ML completas que unen modelos de ML y varios otros servicios de AWS para resolver un caso de uso específico.

Los siguientes son dos videos que muestran cómo puede replicar el mismo proceso de ajuste e implementación que acabamos de realizar con unos pocos clics a través de la interfaz de usuario de JumpStart.

Afinar el modelo pre-entrenado

Este es el proceso para ajustar el mismo modelo de clasificación de texto previamente entrenado.

Implementar el modelo ajustado

Una vez que finaliza el entrenamiento del modelo, puede implementar directamente el modelo en un punto final persistente en tiempo real con un solo clic.

Conclusión

En esta publicación, anunciamos el lanzamiento del algoritmo integrado de clasificación de texto SageMaker TensorFlow. Brindamos un código de ejemplo sobre cómo transferir el aprendizaje en un conjunto de datos personalizado usando un modelo previamente entrenado de TensorFlow Hub usando este algoritmo.

Para obtener más información, consulte el documentación y el cuaderno de ejemplo Introducción a JumpStart: clasificación de texto.


Sobre los autores

Transferir el aprendizaje para los modelos de clasificación de texto de TensorFlow en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Dr. Vivek Madan es un científico aplicado con el Equipo JumpStart de Amazon SageMaker. Obtuvo su doctorado en la Universidad de Illinois en Urbana-Champaign y fue investigador posdoctoral en Georgia Tech. Es un investigador activo en aprendizaje automático y diseño de algoritmos y ha publicado artículos en conferencias EMNLP, ICLR, COLT, FOCS y SODA.

Transferir el aprendizaje para los modelos de clasificación de texto de TensorFlow en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.joão moura es un arquitecto de soluciones especializado en IA/ML en Amazon Web Services. Se centra principalmente en los casos de uso de NLP y en ayudar a los clientes a optimizar el entrenamiento y la implementación del modelo de aprendizaje profundo. También es un defensor activo de las soluciones de aprendizaje automático de código bajo y el hardware especializado en aprendizaje automático.

Transferir el aprendizaje para los modelos de clasificación de texto de TensorFlow en Amazon SageMaker PlatoBlockchain Data Intelligence. Búsqueda vertical. Ai.Dr. Ashish Khetan es un científico senior aplicado 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 muchos artículos en conferencias NeurIPS, ICML, ICLR, JMLR, ACL y EMNLP.

Sello de tiempo:

Mas de Aprendizaje automático de AWS