Configuración de AutoML para entrenar un modelo de procesamiento de lenguaje natural

SE APLICA A:Extensión ML de la CLI de Azure v2 (actual)SDK de Python azure-ai-ml v2 (actual)

En este artículo, aprenderá a entrenar modelos de procesamiento del lenguaje natural (NLP) con ML automatizado en Azure Machine Learning. Puede crear modelos NLP con ML automatizado mediante el SDK v2 de Python para Azure Machine Learning o la CLI v2 de Azure Machine Learning.

Automated ML es compatible con NLP, lo que permite a los profesionales de ML y a los científicos de datos aportar sus propios datos de texto y crear modelos personalizados para tareas de NLP. Las tareas de NLP incluyen clasificación de texto de varias clases, clasificación de texto de varias etiquetas y reconocimiento de entidades con nombre (NER).

Puede integrar perfectamente con la funcionalidad de etiquetado de datos de Azure Machine Learning existente para etiquetar los datos de texto o traer los datos etiquetados existentes. Automated ML ofrece la opción de usar el entrenamiento distribuido en clústeres de proceso de varias GPU para un entrenamiento de modelos más rápido. El modelo resultante se puede operacionalizar a gran escala mediante las funcionalidades de MLOps de Azure Machine Learning.

Requisitos previos

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

  • Suscripción de Azure. Si no tiene una suscripción de Azure, regístrese para probar la versión gratuita o de pago de Azure Machine Learning hoy mismo.

  • Cree un área de trabajo de Azure Machine Learning con un clúster de entrenamiento de GPU. Para crear el área de trabajo, consulte Creación de recursos del área de trabajo. Para obtener más información, consulte Tamaños de máquinas virtuales optimizadas para GPU para más detalles de las instancias de GPU proporcionadas por Azure.

    Advertencia

    La compatibilidad con modelos multilingües y el uso de modelos con una longitud de secuencia máxima mayor es necesaria para varios casos de uso de NLP, como conjuntos de datos que no están en inglés y documentos de intervalos más largos. Como resultado, estos escenarios pueden requerir una mayor memoria de GPU para que el entrenamiento del modelo se haga correctamente, como la serie NC_v3 o la serie ND.

  • La CLI v2 de Azure Machine Learning instalada. Para obtener una guía para actualizar e instalar la versión más reciente, consulte Instalación y configuración de la CLI (v2).

  • En este artículo se presupone una familiarización con la configuración de un experimento de aprendizaje de automático automatizado. Siga el procedimiento para ver los principales modelos de diseño del experimento de aprendizaje automático automatizado.

Selección de su tarea NLP

Determine qué tarea NLP desea realizar. Actualmente, ML automatizado admite las siguientes tareas de NLP de red neuronal profunda.

Tarea Sintaxis de trabajo de AutoML Descripción
Clasificación de texto de varias clases CLI v2: text_classification
SDK v2: text_classification()
Hay varias clases posibles y cada muestra se puede clasificar exactamente como una clase. La tarea consiste en predecir la clase correcta para cada ejemplo.

Por ejemplo, la clasificación de un script de película como "Comedia" o "Romántico".
Clasificación de texto con varias etiquetas CLI v2: text_classification_multilabel
SDK v2: text_classification_multilabel()
Hay varias clases posibles y cada muestra se puede asignar a cualquier número de clases. La tarea consiste en predecir todas las clases de cada muestra

Por ejemplo, la clasificación de un script de película como "Comedia" o "Romántico" o "Comedia y romántico".
Reconocimiento de entidades con nombre (NER) CLI v2:text_ner
SDK v2: text_ner()
Hay varias etiquetas posibles para los tokens en secuencias. La tarea consiste en predecir las etiquetas de todos los tokens de cada secuencia.

Por ejemplo, la extracción de entidades específicas del dominio a partir de texto no estructurado, como contratos o documentos financieros.

Umbralización

La umbralización es la característica de varias etiquetas que permite a los usuarios elegir el umbral por el cual las probabilidades previstas darán lugar a una etiqueta positiva. Los valores más bajos permiten más etiquetas, lo que es mejor cuando a los usuarios les preocupa más la coincidencia, aunque esta opción podría dar lugar a más falsos positivos. Los valores más altos permiten menos etiquetas y, por tanto, son mejores para los usuarios a los que les preocupa la precisión, aunque esta opción podría dar lugar a más falsos negativos.

Preparación de los datos

En el caso de los experimentos de NLP en ML automatizado, puede traer los datos con el formato .csv para tareas de clasificación de varias clases y etiquetas. Para las tareas NER, se admiten los archivos de dos .txt columnas que usan un espacio como separador y se adhieren al formato CoNLL. En las secciones siguientes se proporcionan detalles para el formato de datos aceptado para cada tarea.

Varias clases

Para la clasificación de varias clases, el conjunto de datos puede contener varias columnas de texto y exactamente una columna de etiqueta. En el ejemplo siguiente solo hay una columna de texto.

text,labels
"I love watching Chicago Bulls games.","NBA"
"Tom Brady is a great player.","NFL"
"There is a game between Yankees and Orioles tonight","MLB"
"Stephen Curry made the most number of 3-Pointers","NBA"

Varias etiquetas

Para la clasificación de varias etiquetas, las columnas del conjunto de datos serían las mismas que las de varias clases, pero hay requisitos de formato especiales para los datos de la columna de etiqueta. Los dos formatos y ejemplos aceptados se encuentran en la tabla siguiente.

Opciones de formato de columna de etiqueta Varias etiquetas Una etiqueta Sin etiquetas
Texto sin formato "label1, label2, label3" "label1" ""
Lista Python con comillas "['label1','label2','label3']" "['label1']" "[]"

Importante

Se usan distintos analizadores para leer etiquetas para estos formatos. Si usa el formato de texto sin formato, use solo caracteres alfabéticos, numéricos y '_' en sus etiquetas. Todos los demás caracteres se reconocen como separador de etiquetas.

Por ejemplo, si la etiqueta es "cs.AI", se lee como "cs" y "AI". Mientras que con el formato de lista de Python, la etiqueta sería "['cs.AI']", que se lee como "cs.AI" .

Datos de ejemplo para varias etiquetas en formato de texto sin formato.

text,labels
"I love watching Chicago Bulls games.","basketball"
"The four most popular leagues are NFL, MLB, NBA and NHL","football,baseball,basketball,hockey"
"I like drinking beer.",""

Datos de ejemplo para varias etiquetas en la lista de Python con formato de comillas.

text,labels
"I love watching Chicago Bulls games.","['basketball']"
"The four most popular leagues are NFL, MLB, NBA and NHL","['football','baseball','basketball','hockey']"
"I like drinking beer.","[]"

Reconocimiento de entidades con nombre (NER)

A diferencia de las clases múltiples o de varias etiquetas, que toman conjuntos de datos de formato .csv, el reconocimiento de entidades con nombre requiere formato CoNLL. El archivo debe contener exactamente dos columnas y, en cada fila, el token y la etiqueta están separados por un solo espacio.

Por ejemplo,

Hudson B-loc
Square I-loc
is O
a O
famous O
place O
in O
New B-loc
York I-loc
City I-loc

Stephen B-per
Curry I-per
got O
three O
championship O
rings O

Validación de datos

Antes de un entrenamiento de modelo, ML automatizado aplica comprobaciones de validación de datos en los datos de entrada para asegurarse de que los datos se pueden preprocesar correctamente. Si se produce un error en cualquiera de estas comprobaciones, se produce un error en la ejecución con el mensaje de error correspondiente. Estos son los requisitos para pasar comprobaciones de validación de datos para cada tarea.

Nota

Algunas comprobaciones de validación de datos son aplicables tanto al conjunto de entrenamiento como al conjunto de validación, mientras que otras solo son aplicables al conjunto de entrenamiento. Si el conjunto de datos de prueba no pudo superar la validación de datos, significa que ML automatizado no pudo capturarlo y existe la posibilidad de un error de inferencia del modelo o una disminución del rendimiento del modelo.

Tarea Comprobación de la validación de datos
Todas las tareas Se necesitan al menos 50 ejemplos de entrenamiento
Varias clases y varias etiquetas Los datos de entrenamiento y los datos de validación deben tener
- El mismo conjunto de columnas
- El mismo orden de columnas de izquierda a derecha
- El mismo tipo de datos para las columnas con el mismo nombre
- Al menos dos etiquetas únicas
- Nombres de columna únicos dentro de cada conjunto de datos (por ejemplo, el conjunto de entrenamiento no puede tener varias columnas denominadas Age)
Solo varias clases Ninguno
Solo varias etiquetas - El formato de columna de etiqueta debe estar en formato aceptado
- Al menos una muestra debe tener 0 o más de 2 etiquetas; de lo contrario, debe ser una multiclass tarea
- Todas las etiquetas deben estar en str formato o int, sin superposición. No debe tener etiquetas 1 ni etiquetas '1'
Solo NER - El archivo no debe comenzar con una línea vacía
- Cada línea debe ser una línea vacía o seguir el formato {token} {label}, donde hay exactamente un espacio entre el token y la etiqueta y ningún espacio en blanco después de la etiqueta
- Todas las etiquetas deben empezar por I-, B-o ser exactamente O. Distingue mayúsculas de minúsculas
- Exactamente una línea vacía entre dos ejemplos
- Exactamente una línea vacía al final del archivo

Configuración del experimento

La capacidad NLP de ML automatizado se desencadena a través de trabajos de tipo automl específicos de la tarea, que es el mismo flujo de trabajo que para enviar experimentos de ML automatizado para tareas de clasificación, regresión y previsión. La mayoría de los parámetros se establecen igual que se hace en esos experimentos, como experiment_name, compute_name y entradas de datos.

Sin embargo, hay diferencias clave:

  • Puede omitir primary_metric, ya que solo es para fines informativos. Actualmente, las ML automatizadas solo entrenan un modelo por ejecución para NLP y no hay ninguna selección de modelos.
  • El parámetro label_column_name solo es necesario para las tareas de clasificación de texto de varias clases y etiquetas.
  • Si más del 10 % de los ejemplos del conjunto de datos contienen más de 128 tokens, se considera un intervalo largo.
    • Para usar la característica de texto de intervalo largo, debe emplear una SKU NC6 o superior/mejor para GPU como: la serie NCv3 o la serie ND.

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Para los trabajos de ML automatizado de la CLI v2, configure el experimento en un archivo YAML como el siguiente.

Configuración de idioma

Como parte de la funcionalidad NLP, el ML automatizado admite 104 idiomas que aprovechan modelos DNN de texto previamente entrenados multilingües y específicos del lenguaje, como la familia de modelos BERT. Actualmente, la selección de idioma tiene como valor predeterminado inglés.

En la tabla siguiente se resume qué modelo se aplica en función del tipo de tarea y el idioma. Vea la lista completa de idiomas admitidos y sus códigos.

Tipo de tarea Sintaxis para dataset_language Algoritmo de modelo de texto
Clasificación de texto con varias etiquetas "eng"
"deu"
"mul"
Inglés BERT uncased
BERT alemán
BERT multilingüe

Para todos los demás idiomas, el ML automatizado aplica BERT multilingüe
Clasificación de texto de varias clases "eng"
"deu"
"mul"
Inglés BERT cased
BERT multilingüe

Para todos los demás idiomas, el ML automatizado aplica BERT multilingüe
Reconocimiento de entidades con nombre (NER) "eng"
"deu"
"mul"
Inglés BERT cased
BERT alemán
BERT multilingüe

Para todos los demás idiomas, el ML automatizado aplica BERT multilingüe

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Puede especificar el idioma del conjunto de datos en la sección de caracterización del archivo YAML de configuración. BERT también se usa en el proceso de caracterización del entrenamiento automatizado de experimentos ML. Obtenga más información sobre la integración y caracterización de BERT en el ML automatizado (SDK v1).

featurization:
   dataset_language: "eng"

Entrenamiento distribuido

También puede ejecutar los experimentos de NLP con entrenamiento distribuido en un clúster de proceso de Azure Machine Learning.

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Envío del trabajo de AutoML

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

Para enviar el trabajo de AutoML, puede ejecutar el siguiente comando de la CLI v2 con la ruta de acceso del archivo .yml, el nombre del área de trabajo, el grupo de recursos y el id. de suscripción.


az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Ejemplos de código

Ajuste de hiperparámetros y barrido de modelos (versión preliminar)

Importante

Esta característica actualmente está en su versión preliminar pública. Esta versión preliminar se ofrece sin un Acuerdo de Nivel de Servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o que tengan sus funcionalidades limitadas.

Para más información, consulte Términos de uso complementarios de las Versiones Preliminares de Microsoft Azure.

AutoML NLP permite proporcionar una lista de modelos y combinaciones de hiperparámetros, a través del espacio de búsqueda de hiperparámetros en la configuración. Hyperdrive genera varias ejecuciones secundarias, cada una de las cuales es una ejecución de ajuste para un modelo NLP determinado y un conjunto de valores de hiperparámetros que se eligieron y barrieron en función del espacio de búsqueda proporcionado.

Algoritmos de modelo admitidos

A continuación, se enumeran todos los modelos DNN de texto previamente entrenados disponibles actualmente en AutoML NLP para ajustarlos:

  • bert-base-cased
  • bert-large-uncased
  • bert-base-multilingual-cased
  • bert-base-german-cased
  • bert-large-cased
  • distilbert-base-cased
  • distilbert-base-uncased
  • roberta-base
  • roberta-large
  • distilroberta-base
  • xlm-roberta-base
  • xlm-roberta-large
  • xlnet-base-cased
  • xlnet-large-cased

Tenga en cuenta que los modelos grandes son mayores que sus homólogos base. Normalmente son más eficaces, pero ocupan más memoria de GPU y llevan más tiempo de entrenamiento. Por lo tanto, sus requisitos de SKU son más estrictos: se recomienda trabajar en máquinas virtuales de la serie ND para obtener los mejores resultados.

Algoritmos de modelo admitidos: HuggingFace (versión preliminar)

Con el nuevo back-end que se ejecuta en canalizaciones de Azure Machine Learning, también puede usar cualquier modelo de clasificación de texto o token desde el centro de huggingFace para la clasificación de texto, clasificación de tokens que forma parte de la biblioteca de transformadores (como microsoft/deberta-large-mnli). También puede encontrar una lista seleccionada de modelos en el registro de modelos de Azure Machine Learning que se han validado con los componentes de canalización.

El uso de cualquier modelo HuggingFace desencadenará ejecuciones mediante componentes de canalización. Si se usan modelos heredados y HuggingFace, todas las ejecuciones o pruebas se desencadenarán mediante componentes.

Hiperparámetros admitidos

En la tabla siguiente se describen los hiperparámetros que admite AutoML NPL.

Nombre de parámetro Descripción Sintaxis
gradient_accumulation_steps Número de operaciones hacia atrás cuyos degradados se van a resumir antes de realizar un paso de descenso de degradado mediante una llamada a la función de paso del optimizador.

Esto es para usar un tamaño de lote efectivo que es gradient_accumulation_steps veces mayor que el tamaño máximo que se ajusta a la GPU.
Debe ser un entero positivo.
learning_rate Velocidad de aprendizaje inicial. Debe ser un valor flotante en el intervalo [0, 1].
learning_rate_scheduler Tipo de programador de velocidad de aprendizaje. Debe elegirlo en linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup.
model_name Nombre de uno de los modelos admitidos. Debe elegirlo en bert_base_cased, bert_base_uncased, bert_base_multilingual_cased, bert_base_german_cased, bert_large_cased, bert_large_uncased, distilbert_base_cased, distilbert_base_uncased, roberta_base, roberta_large, distilroberta_base, xlm_roberta_base, xlm_roberta_large, xlnet_base_cased, xlnet_large_cased.
number_of_epochs Número de épocas de entrenamiento. Debe ser un entero positivo.
training_batch_size Tamaño del lote de entrenamiento. Debe ser un entero positivo.
validation_batch_size Tamaño del lote de validación. Debe ser un entero positivo.
warmup_ratio Proporción de los pasos de entrenamiento totales usados para un calentamiento lineal de 0 a learning_rate. Debe ser un valor float en el intervalo [0, 1].
weight_decay Valor de decadencia de peso cuando el optimizador es sgd, adam o adamw. Debe ser un valor float en el intervalo [0, 1].

Todos los hiperparámetros discretos solo permiten distribuciones de elección, como los hiperparámetros training_batch_size con tipo entero y los hiperparámetros model_name con tipo de cadena. Todos los hiperparámetros continuos como learning_rate admiten todas las distribuciones.

Configuración de las opciones de barrido

Puede configurar todos los parámetros relacionados con el barrido. Se pueden construir varios subespacios de modelo con hiperparámetros condicionales para el modelo respectivo, como se muestra a continuación en cada ajuste de hiperparámetros de ejemplo.

Aquí se admiten las mismas opciones de distribución discretas y continuas que están disponibles para trabajos generales de HyperDrive. Consulte las nueve opciones en Ajuste de hiperparámetros de un modelo.

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

limits: 
  timeout_minutes: 120  
  max_trials: 4 
  max_concurrent_trials: 2 

sweep: 
  sampling_algorithm: grid 
  early_termination: 
    type: bandit 
    evaluation_interval: 10 
    slack_factor: 0.2 

search_space: 
  - model_name: 
      type: choice 
      values: [bert_base_cased, roberta_base] 
    number_of_epochs: 
      type: choice 
      values: [3, 4] 
  - model_name: 
      type: choice 
      values: [distilbert_base_cased] 
    learning_rate: 
      type: uniform 
      min_value: 0.000005 
      max_value: 0.00005 

Métodos de muestreo para el barrido

Al realizar el barrido de hiperparámetros, debe especificar el método de muestreo que se usará para el barrido en el espacio de parámetros definido. Actualmente, se admiten los siguientes métodos de muestreo con el parámetro sampling_algorithm:

Tipo de muestreo Sintaxis de trabajo de AutoML
Muestreo aleatorio random
Muestreo de cuadrícula grid
Muestreo bayesiano bayesian

Presupuesto del experimento

Opcionalmente, puede especificar el presupuesto del experimento para el trabajo de entrenamiento de AutoML NPL mediante el parámetro timeout_minutes en limits, que es la cantidad de tiempo en minutos antes de que finalice el experimento. Si no se especifica ninguno, el tiempo de espera predeterminado del experimento es de siete días (60 días como máximo).

AutoML NLP también admite trial_timeout_minutes, la cantidad máxima de tiempo en minutos que se puede ejecutar una prueba individual antes de finalizar y max_nodes, el número máximo de nodos del clúster de proceso de respaldo que se puede usar para el trabajo. Estos parámetros también pertenecen a la sección limits.

SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

limits: 
  timeout_minutes: 60 
  trial_timeout_minutes: 20 
  max_nodes: 2 

Directivas de terminación anticipada

Puede terminar de forma automática las series con un bajo rendimiento con la ayuda de una directiva de terminación anticipada. La terminación anticipada mejora la eficacia computacional, lo que ahorra recursos de proceso que, de lo contrario, se habrían invertido en configuraciones menos prometedoras. AutoML NPL admite directivas de terminación anticipada mediante el parámetro early_termination. Si no se especifica ninguna directiva de terminación, todas las configuraciones se ejecutan hasta su finalización.

Más información sobre cómo configurar la directiva de terminación anticipada para el barrido de hiperparámetros.

Recursos para el barrido

Puede controlar los recursos invertidos en el barrido de hiperparámetros especificando max_trials y max_concurrent_trials para el barrido.

Parámetro Detalle
max_trials Parámetro para el número máximo de configuraciones que se deben barrer. Debe ser un entero entre 1 y 1000. Al explorar solo los hiperparámetros predeterminados para un algoritmo de modelo determinado, establezca este parámetro en 1. El valor predeterminado es 1.
max_concurrent_trials Número máximo de series que se pueden ejecutar simultáneamente. Si se especifica, el tiempo de espera debe ser un entero comprendido entre 1 y 100. El valor predeterminado es 1.

NOTA:
  • El número de ejecuciones simultáneas viene determinado por los recursos disponibles en el destino de proceso especificado. Asegúrese de que el destino de proceso tenga los recursos disponibles para la simultaneidad deseada.
  • max_concurrent_trials está limitado internamente a max_trials. Por ejemplo, si el usuario establece max_concurrent_trials=4 y max_trials=2, los valores se actualizarían internamente como max_concurrent_trials=2 y max_trials=2.
  • Puede configurar todos los parámetros relacionados con el barrido, como se muestra en este ejemplo.

    SE APLICA A:Extensión de ML de la CLI de Azure v2 (actual)

    sweep:
      limits:
        max_trials: 10
        max_concurrent_trials: 2
      sampling_algorithm: random
      early_termination:
        type: bandit
        evaluation_interval: 2
        slack_factor: 0.2
        delay_evaluation: 6
    

    Problemas conocidos

    Tratar con puntuaciones bajas o valores de pérdida superiores:

    Para determinados conjuntos de datos, independientemente de la tarea NLP, las puntuaciones generadas pueden ser muy bajas, a veces incluso cero. Esta puntuación iría acompañada de valores de pérdida más elevados, lo que implicaría que la red neuronal no ha conseguido converger. Estas puntuaciones pueden ocurrir con más frecuencia en determinadas SKU de GPU.

    Aunque estos casos son poco frecuentes, son posibles y la mejor manera de gestionarlos es aprovechar el ajuste de hiperparámetros y proporcionar una gama más amplia de valores, especialmente para los hiperparámetros como las tasas de aprendizaje. Hasta que nuestra capacidad de ajuste de hiperparámetros esté disponible en producción, recomendamos a los usuarios que experimenten estos problemas que utilicen los clústeres de proceso NC6 o ND6. Normalmente, estos clústeres tienen resultados de entrenamiento que son bastante estables.

    Pasos siguientes