Clasificación de texto sin entrenamiento previo con Amazon SageMaker JumpStart

Clasificación de texto sin entrenamiento previo con SageMaker JumpStart

El procesamiento del lenguaje natural (NLP, por sus siglas en inglés) es el campo del aprendizaje automático (ML) que se ocupa de dar a las computadoras la capacidad de entender el texto y las palabras habladas de la misma manera que los seres humanos pueden hacerlo. Recientemente, se utilizan arquitecturas de vanguardia como la arquitectura del transformer para lograr un rendimiento cercano al humano en tareas derivadas de NLP, como la resumenización de texto, la clasificación de texto, el reconocimiento de entidades, y más.

Los modelos de lenguaje grandes (LLM, por sus siglas en inglés) son modelos basados en transformers entrenados con una gran cantidad de texto no etiquetado que tienen cientos de millones (BERT) hasta más de un billón de parámetros (MiCS), y cuyo tamaño hace que el entrenamiento en una sola GPU sea impráctico. Debido a su complejidad inherente, entrenar un LLM desde cero es una tarea muy desafiante que muy pocas organizaciones pueden permitirse. Una práctica común para las tareas derivadas de NLP es tomar un LLM pre-entrenado y ajustarlo. Para obtener más información sobre el ajuste fino, consulte la Adaptación de dominio y ajuste fino de modelos base en Amazon SageMaker JumpStart en datos financieros y Ajuste fino de modelos de lenguaje transformer para diversidad lingüística con Hugging Face en Amazon SageMaker.

El aprendizaje de cero disparo en NLP permite que un LLM pre-entrenado genere respuestas a tareas para las que no ha sido entrenado explícitamente (incluso sin ajuste fino). Hablando específicamente de la clasificación de texto, la clasificación de texto de cero disparo es una tarea en el procesamiento del lenguaje natural en la que se utiliza un modelo de NLP para clasificar texto de clases no vistas, en contraste con la clasificación supervisada, donde los modelos de NLP solo pueden clasificar texto que pertenezca a clases en los datos de entrenamiento.

Recientemente, lanzamos el soporte para modelos de clasificación de cero disparo en Amazon SageMaker JumpStart. SageMaker JumpStart es el centro de aprendizaje automático de Amazon SageMaker que proporciona acceso a modelos base pre-entrenados (FMs, por sus siglas en inglés), LLMs, algoritmos integrados y plantillas de solución para ayudarlo a comenzar rápidamente con el aprendizaje automático. En esta publicación, mostramos cómo puede realizar la clasificación de cero disparo utilizando modelos pre-entrenados en SageMaker JumpStart. Aprenderá cómo usar la interfaz de usuario de SageMaker JumpStart y el SDK de Python de SageMaker para implementar la solución y realizar inferencias utilizando los modelos disponibles.

Aprendizaje de cero disparo

La clasificación de cero disparo es un paradigma en el que un modelo puede clasificar nuevos ejemplos no vistos que pertenecen a clases que no estaban presentes en los datos de entrenamiento. Por ejemplo, un modelo de lenguaje que ha sido entrenado para entender el lenguaje humano puede utilizarse para clasificar tweets de resoluciones de Año Nuevo en múltiples clases como career, health y finance, sin que el modelo de lenguaje haya sido entrenado explícitamente en la tarea de clasificación de texto. Esto contrasta con el ajuste fino del modelo, ya que este último implica volver a entrenar el modelo (a través del aprendizaje por transferencia), mientras que el aprendizaje de cero disparo no requiere entrenamiento adicional.

El siguiente diagrama ilustra las diferencias entre el aprendizaje por transferencia (izquierda) y el aprendizaje de cero disparo (derecha).

Yin et al. propusieron un marco de trabajo para crear clasificadores de cero disparo utilizando la inferencia de lenguaje natural (NLI, por sus siglas en inglés). El marco de trabajo funciona al considerar la secuencia a clasificar como una premisa de NLI y construir una hipótesis a partir de cada etiqueta candidata. Por ejemplo, si queremos evaluar si una secuencia pertenece a la clase politics, podríamos construir una hipótesis de “Este texto trata sobre política”. Las probabilidades de inferencia y contradicción se convierten entonces en probabilidades de etiqueta. Como revisión rápida, NLI considera dos oraciones: una premisa y una hipótesis. La tarea es determinar si la hipótesis es verdadera (inferencia) o falsa (contradicción) dada la premisa. La siguiente tabla proporciona algunos ejemplos.

Premisa Etiqueta Hipótesis
Un hombre inspecciona el uniforme de una figura en algún país del este asiático. Contradicción El hombre está durmiendo.
Un hombre mayor y un hombre más joven sonriendo. Neutral Dos hombres están sonriendo y riendo mientras los gatos juegan en el suelo.
Un juego de fútbol con varios hombres jugando. Inferencia Algunos hombres están jugando un deporte.

Resumen de la solución

En esta publicación, discutimos lo siguiente:

  • Cómo implementar modelos de clasificación de texto de cero disparo pre-entrenados utilizando la interfaz de usuario de SageMaker JumpStart y realizar inferencia en el modelo implementado utilizando datos de texto corto
  • Cómo utilizar el SDK de Python de SageMaker para acceder a los modelos de clasificación de texto de cero disparo pre-entrenados en SageMaker JumpStart y utilizar el script de inferencia para implementar el modelo en un punto final de SageMaker para un caso de uso de clasificación de texto en tiempo real
  • Cómo utilizar el SDK de Python de SageMaker para acceder a modelos de clasificación de texto de cero disparo pre-entrenados y utilizar la transformación por lotes de SageMaker para un caso de uso de clasificación de texto por lotes

SageMaker JumpStart ofrece afinación y implementación con un solo clic para una amplia variedad de modelos pre-entrenados en tareas populares de aprendizaje automático, así como una selección de soluciones de extremo a extremo que resuelven problemas empresariales comunes. Estas características eliminan el trabajo pesado de cada paso del proceso de aprendizaje automático, simplificando el desarrollo de modelos de alta calidad y reduciendo el tiempo de implementación. Las API de JumpStart le permiten implementar y afinar de manera programática una amplia selección de modelos pre-entrenados en sus propios conjuntos de datos.

El centro de modelos de JumpStart proporciona acceso a una gran cantidad de modelos de procesamiento del lenguaje natural (NLP) que permiten el aprendizaje por transferencia y la afinación en conjuntos de datos personalizados. Hasta la fecha de esta escritura, el centro de modelos de JumpStart contiene más de 300 modelos de texto de varios modelos populares, como Stable Diffusion, Flan T5, Alexa TM, Bloom y más.

Tenga en cuenta que al seguir los pasos de esta sección, implementará infraestructura en su cuenta de AWS que puede generar costos.

Implementar un modelo de clasificación de texto de cero disparo independiente

En esta sección, demostramos cómo implementar un modelo de clasificación de cero disparo utilizando SageMaker JumpStart. Puede acceder a los modelos pre-entrenados a través de la página de inicio de JumpStart en Amazon SageMaker Studio. Complete los siguientes pasos:

  1. En SageMaker Studio, abra la página de inicio de JumpStart. Consulte Abrir y usar JumpStart para obtener más detalles sobre cómo navegar hasta SageMaker JumpStart.
  2. En el carrusel de Modelos de texto, ubique la tarjeta del modelo “Clasificación de texto de cero disparo”.
  3. Elija Ver modelo para acceder al modelo facebook-bart-large-mnli. Alternativamente, puede buscar el modelo de clasificación de cero disparo en la barra de búsqueda y acceder al modelo en SageMaker JumpStart.
  4. Especifique una configuración de implementación, tipo de instancia de alojamiento de SageMaker, nombre del punto final, nombre del bucket de Amazon Simple Storage Service (Amazon S3) y otros parámetros requeridos.
  5. Opcionalmente, puede especificar configuraciones de seguridad como el rol de AWS Identity and Access Management (IAM), la configuración de VPC y las claves de cifrado de AWS Key Management Service (AWS KMS).
  6. Elija Implementar para crear un punto final de SageMaker.

Este paso tarda unos minutos en completarse. Cuando esté completo, puede realizar inferencia en el punto final de SageMaker que aloja el modelo de clasificación de cero disparo.

En el siguiente video, mostramos una guía paso a paso de los pasos de esta sección.

Utilizar JumpStart de forma programática con el SDK de SageMaker

En la sección de SageMaker JumpStart de SageMaker Studio, bajo Soluciones de inicio rápido, puede encontrar las plantillas de solución. Las plantillas de solución de SageMaker JumpStart son soluciones de extremo a extremo con un solo clic para muchos casos de uso comunes de aprendizaje automático. Hasta la fecha de esta escritura, hay más de 20 soluciones disponibles para múltiples casos de uso, como pronóstico de demanda, detección de fraudes y recomendaciones personalizadas, entre otros.

La solución “Clasificación de texto de cero disparo con Hugging Face” proporciona una forma de clasificar texto sin la necesidad de entrenar un modelo para etiquetas específicas (clasificación de cero disparo) utilizando un clasificador de texto pre-entrenado. El modelo de clasificación de cero disparo predeterminado para esta solución es el modelo facebook-bart-large-mnli (BART). Para esta solución, utilizamos el conjunto de datos de Resoluciones de Año Nuevo 2015 para clasificar resoluciones. Se incluye una subconjunto del conjunto de datos original que solo contiene las columnas Resolution_Category (etiqueta de verdad fundamental) y text en los activos de la solución.

Los datos de entrada incluyen cadenas de texto, una lista de categorías deseadas para la clasificación y si la clasificación es multi-etiqueta o no para la inferencia síncrona (en tiempo real). Para la inferencia asíncrona (por lotes), proporcionamos una lista de cadenas de texto, la lista de categorías para cada cadena y si la clasificación es multi-etiqueta o no en un archivo de texto con formato JSON.

El resultado de la inferencia es un objeto JSON que se parece a la siguiente captura de pantalla.

Tenemos el texto original en el campo sequence, las etiquetas utilizadas para la clasificación de texto en el campo labels y la probabilidad asignada a cada etiqueta (en el mismo orden de aparición) en el campo scores.

Para implementar la clasificación de texto sin etiquetas con Hugging Face, complete los siguientes pasos:

  1. En la página de inicio de SageMaker JumpStart, elija Modelos, cuadernos, soluciones en el panel de navegación.
  2. En la sección Soluciones, elija Explorar todas las soluciones.
  3. En la página Soluciones, elija la tarjeta del modelo de clasificación de texto sin etiquetas con Hugging Face.
  4. Revise los detalles de implementación y, si está de acuerdo, elija Lanzar.

La implementación creará un punto de enlace en tiempo real de SageMaker para la inferencia en tiempo real y un bucket de S3 para almacenar los resultados de la transformación por lotes.

El siguiente diagrama ilustra la arquitectura de este método.

Realizar inferencia en tiempo real utilizando un modelo de clasificación sin etiquetas

En esta sección, revisaremos cómo usar el SDK de Python para ejecutar la clasificación de texto sin etiquetas en tiempo real utilizando un punto de enlace de SageMaker.

  1. Primero, configuramos la solicitud de carga útil de inferencia para el modelo. Esto depende del modelo, pero para el modelo BART, la entrada es un objeto JSON con la siguiente estructura:

    {
    “inputs”: # El texto que se va a clasificar
    “parameters”: {
    “candidate_labels”: # Una lista de las etiquetas que queremos usar para la clasificación de texto
    “multi_label”: True | False
    }
    }
  2. Tenga en cuenta que el modelo BART no está entrenado explícitamente en las candidate_labels. Utilizaremos la técnica de clasificación sin etiquetas para clasificar la secuencia de texto en clases no vistas. El siguiente código es un ejemplo que utiliza texto del conjunto de datos de resoluciones de Año Nuevo y las clases definidas:

    classification_categories = ['Salud', 'Humor', 'Crecimiento Personal', 'Filantropía', 'Ocio', 'Carrera', 'Finanzas', 'Educación', 'Gestión del Tiempo']
    data_zero_shot = {
    "inputs": "#resoluciondeañonuevo :: leer más libros, no revisar fb/ver correo antes del desayuno, dedicarse al ejercicio/yoga para aliviar el dolor de espalda",
    "parameters": {
    "candidate_labels": classification_categories,
    "multi_label": False
    }
    }
  3. A continuación, puede invocar un punto de enlace de SageMaker con la carga útil de clasificación sin etiquetas. El punto de enlace de SageMaker se implementa como parte de la solución SageMaker JumpStart.

    response = runtime.invoke_endpoint(EndpointName=sagemaker_endpoint_name,
    ContentType='application/json',
    Body=json.dumps(payload))
    
    parsed_response = json.loads(response['Body'].read())
  4. El objeto de respuesta de inferencia contiene la secuencia original, las etiquetas ordenadas por puntuación de mayor a menor y las puntuaciones por etiqueta:

    {'sequence': "#resoluciondeañonuevo :: leer más libros, no revisar fb/ver correo antes del desayuno, dedicarse al ejercicio/yoga para aliviar el dolor de espalda",
    'labels': ['Crecimiento Personal',
    'Salud',
    'Gestión del Tiempo',
    'Ocio',
    'Educación',
    'Humor',
    'Carrera',
    'Filantropía',
    'Finanzas'],
    'scores': [0.4198768436908722,
    0.2169460505247116,
    0.16591140627861023,
    0.09742163866758347,
    0.031757451593875885,
    0.027988269925117493,
    0.015974704176187515,
    0.015464971773326397,
    0.008658630773425102]}

Ejecutar un trabajo de transformación por lotes de SageMaker utilizando el SDK de Python

Esta sección describe cómo ejecutar una inferencia por lotes con el modelo de clasificación sin entrenamiento facebook-bart-large-mnli utilizando el SDK de Python de SageMaker. Completa los siguientes pasos:

  1. Formatea los datos de entrada en formato de líneas JSON y carga el archivo en Amazon S3. SageMaker transformará por lotes los puntos de datos cargados en el archivo de S3.

  2. Configura los artefactos de implementación del modelo con los siguientes parámetros:

    1. model_id – Utiliza huggingface-zstc-facebook-bart-large-mnli.

    2. deploy_image_uri – Utiliza la función image_uris del SDK de Python para obtener la imagen Docker precompilada de SageMaker para el model_id. La función devuelve la URI del Registro de Contenedores Elásticos de Amazon (Amazon ECR).

    3. deploy_source_uri – Utiliza la API de utilidad script_uris para recuperar la URI de S3 que contiene los scripts para ejecutar la inferencia del modelo preentrenado. Especificamos el script_scope como inference.

    4. model_uri – Utiliza model_uri para obtener los artefactos del modelo de Amazon S3 para el model_id especificado.

      #imports
      from sagemaker import image_uris, model_uris, script_uris, hyperparameters
      
      #set model id and version
      model_id, model_version, = (
      "huggingface-zstc-facebook-bart-large-mnli",
      "*",
      )
      
      # Recupera la URI del contenedor Docker de inferencia. Esta es la imagen de contenedor base de Hugging Face para el modelo predeterminado anterior.
      deploy_image_uri = image_uris.retrieve(
      region=None,
      framework=None, # Se infiere automáticamente a partir de model_id
      image_scope="inference",
      model_id=model_id,
      model_version=model_version,
      instance_type="ml.g4dn.xlarge",
      )
      
      # Recupera la URI del script de inferencia. Esto incluye todas las dependencias y scripts para la carga del modelo, el manejo de la inferencia, y más.
      deploy_source_uri = script_uris.retrieve(model_id=model_id, model_version=model_version, script_scope="inference")
      
      # Recupera la URI del modelo. Esto incluye el modelo preentrenado y los parámetros.
      model_uri = model_uris.retrieve(model_id=model_id, model_version=model_version, model_scope="inference")
      
  3. Utiliza HF_TASK para definir la tarea para el pipeline de transformadores de Hugging Face y HF_MODEL_ID para definir el modelo utilizado para clasificar el texto:

    # Configuración del modelo del hub <https://huggingface.co/models>
    hub = {
    'HF_MODEL_ID':'facebook/bart-large-mnli', # El model_id del Hub de Hugging Face
    'HF_TASK':'zero-shot-classification' # La tarea de PNL que deseas utilizar para las predicciones
    }

    Para obtener una lista completa de tareas, consulta los Pipelines en la documentación de Hugging Face.

  4. Crea un objeto modelo de Hugging Face para implementarlo con el trabajo de transformación por lotes de SageMaker:

    # Crea la clase HuggingFaceModel
    huggingface_model_zero_shot = HuggingFaceModel(
    model_data=model_uri, # ruta a tu modelo de sagemaker entrenado
    env=hub, # configuración para cargar el modelo desde el Hub
    role=role, # rol de IAM con permisos para crear un punto de conexión
    transformers_version="4.17", # versión de Transformers utilizada
    pytorch_version="1.10", # versión de PyTorch utilizada
    py_version='py38', # versión de Python utilizada
    )
  5. Crea una transformación para ejecutar un trabajo por lotes:

    # Crea la transformación para ejecutar un trabajo por lotes
    batch_job = huggingface_model_zero_shot.transformer(
    instance_count=1,
    instance_type='ml.m5.xlarge',
    strategy='SingleRecord',
    assemble_with='Line',
    output_path=s3_path_join("s3://",sagemaker_config['S3Bucket'],"zero_shot_text_clf", "results"), # estamos utilizando la misma ruta de S3 para guardar la salida con la entrada
    )
  6. Inicia un trabajo de transformación por lotes y utiliza los datos de S3 como entrada:

    batch_job.transform(
    data=data_upload_path,
    content_type='application/json',
    split_type='Line',
    logs=False,
    wait=True
    )

Puede monitorear su trabajo de procesamiento por lotes en la consola de SageMaker (seleccione Trabajos de transformación por lotes bajo Inferencia en el panel de navegación). Cuando el trabajo esté completo, puede verificar la salida de predicción del modelo en el archivo S3 especificado en output_path.

Para obtener una lista de todos los modelos pre-entrenados disponibles en SageMaker JumpStart, consulte la tabla de Modelos pre-entrenados con algoritmos incorporados. Utilice la palabra clave “zstc” (abreviatura de clasificación de texto de cero disparo) en la barra de búsqueda para localizar todos los modelos capaces de realizar clasificación de texto de cero disparo.

Limpieza

Después de finalizar la ejecución del cuaderno, asegúrese de eliminar todos los recursos creados en el proceso para garantizar que se detengan los costos incurridos por los activos implementados en esta guía. El código para limpiar los recursos implementados se proporciona en los cuadernos asociados con la solución y el modelo de clasificación de texto de cero disparo.

Configuraciones de seguridad predeterminadas

Los modelos de SageMaker JumpStart se implementan utilizando las siguientes configuraciones de seguridad predeterminadas:

  • Los modelos se implementan con un rol de ejecución predeterminado de SageMaker. Puede especificar su propio rol o utilizar uno existente. Para obtener más información, consulte Roles de SageMaker.
  • El modelo no se conectará a una VPC y no se aprovisionará ninguna VPC para su modelo. Puede especificar la configuración de VPC para conectarse a su modelo desde las opciones de seguridad. Para obtener más información, consulte Proporcione a los puntos de conexión alojados de SageMaker acceso a recursos en su VPC de Amazon.
  • Se utilizarán claves KMS predeterminadas para cifrar los artefactos de su modelo. Puede especificar sus propias claves KMS o utilizar una existente. Para obtener más información, consulte Uso de cifrado en el lado del servidor con claves AWS KMS (SSE-KMS).

Para obtener más información sobre temas relacionados con la seguridad de SageMaker, consulte Configurar la seguridad en Amazon SageMaker.

Conclusión

En esta publicación, le mostramos cómo implementar un modelo de clasificación de cero disparo utilizando la interfaz de usuario de SageMaker JumpStart y realizar inferencias utilizando el punto de conexión implementado. Utilizamos la solución de resoluciones de Año Nuevo de SageMaker JumpStart para mostrar cómo puede utilizar el SDK de Python de SageMaker para construir una solución de principio a fin e implementar una aplicación de clasificación de cero disparo. SageMaker JumpStart proporciona acceso a cientos de modelos y soluciones pre-entrenados para tareas como visión por computadora, procesamiento del lenguaje natural, sistemas de recomendación y más. Pruebe la solución por sí mismo y háganos saber sus opiniones.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Herramientas/Plataformas principales para la Optimización de Hiperparámetros 2023

Los hiperparámetros son parámetros utilizados para regular el comportamiento del algoritmo mientras crea el modelo. E...

Inteligencia Artificial

ChatGPT ahora puede responder con palabras habladas

Una versión recién lanzada del chatbot ChatGPT de OpenAI puede interactuar con los usuarios de forma vocal, además de...

Inteligencia Artificial

Implementa modelos de ML construidos en Amazon SageMaker Canvas en los puntos finales de tiempo real de Amazon SageMaker.

Amazon SageMaker Canvas ahora admite implementar modelos de aprendizaje automático (ML) en puntos finales de inferenc...

Ciencia de Datos

10 Preguntas más frecuentes sobre listas en Python en Stack Overflow

Stack Overflow es una mina de oro de información donde puedes encontrar miles de preguntas y respuestas en software, ...

Inteligencia Artificial

Presentamos OpenLLM Biblioteca de código abierto para LLMs

Una plataforma fácil de usar para operar modelos de lenguaje grandes (LLMs) en producción, con características como a...

Inteligencia Artificial

Este documento de IA explora la comprensión del espacio latente de los modelos de difusión a través de la geometría de Riemann.

Con la creciente popularidad de la Inteligencia Artificial y el Aprendizaje Automático, sus principales subcampos, co...