Compartir a través de


Configuración de AutoML para entrenar un modelo de procesamiento de lenguaje natural con Python (versión preliminar)

SE APLICA A: SDK de Python azureml v1

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.

En este artículo, aprenderá a entrenar modelos procesamiento del lenguaje natural (NLP) con ML automatizado en el SDK de Python de Azure Machine Learning.

Automated ML admite NLP, que permite a los profesionales y científicos de datos traer sus propios datos de texto y crear modelos personalizados para tareas como la clasificación de texto de varias clases, la clasificación de texto con varias etiquetas y el 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 aprovechando las funcionalidades de MLOps de Azure Machine Learning.

Requisitos previos

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 AutoMLConfig syntax Descripción
Clasificación de texto de varias clases task = '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 «Clip».
Clasificación de texto con varias etiquetas task = '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) task = '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

Preparación de los datos

En el caso de los experimentos de NLP ML, puede traer un conjunto de datos Azure Machine Learning con .csvformato 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 adicionales 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 del entrenamiento, 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 deben proporcionar los conjuntos de entrenamiento y validación
- 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 de ML NLP de Automated ML se desencadena a través de AutoMLConfig, que es el mismo flujo de trabajo para enviar experimentos ML automatizados para tareas de clasificación, regresión y previsión. Establecería la mayoría de los parámetros como lo haría para esos experimentos, como task, compute_target y las 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 la mayoría de los ejemplos del conjunto de datos contienen más de 128 palabras, se considera un intervalo largo. En este escenario, puede habilitar la opción de texto de intervalo largo con el parámetro enable_long_range_text=True en su AutoMLConfig. Esto ayuda a mejorar el rendimiento del modelo, pero requiere tiempos de entrenamiento más largos.
    • Si habilita texto de intervalo largo, se requiere una GPU con mayor memoria, como la serie NCv3 o la serie ND.
    • El parámetro enable_long_range_text solo está disponible para las tareas de clasificación multiclase.
automl_settings = {
    "verbosity": logging.INFO,
    "enable_long_range_text": True, # # You only need to set this parameter if you want to enable the long-range text setting
}

automl_config = AutoMLConfig(
    task="text-classification",
    debug_log="automl_errors.log",
    compute_target=compute_target,
    training_data=train_dataset,
    validation_data=val_dataset,
    label_column_name=target_column_name,
    **automl_settings
)

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

Puede especificar el idioma del conjunto de datos en su FeaturizationConfig. BERT también se usa en el proceso de caracterización del entrenamiento automatizado de experimentos ML, más información sobre la integración y caracterización de BERT en el ML automatizado .

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='{your language code}')
automl_config = AutomlConfig("featurization": featurization_config)

Entrenamiento distribuido

También puede ejecutar los experimentos de NLP con entrenamiento distribuido en un clúster de proceso de Azure Machine Learning. Esto se controla automáticamente mediante el ML automatizado cuando los parámetros max_concurrent_iterations = number_of_vms y enable_distributed_dnn_training = True se proporcionan en su AutoMLConfig durante la configuración del experimento.

max_concurrent_iterations = number_of_vms
enable_distributed_dnn_training = True

Al hacerlo, programa el entrenamiento distribuido de los modelos NLP y se escala automáticamente a cada GPU de la máquina virtual o clúster de máquinas virtuales. El número máximo de máquinas virtuales permitidas es 32. El entrenamiento se programa con el número de máquinas virtuales que tienen potencias de dos.

Cuadernos de ejemplo

Consulte los cuadernos de ejemplo para obtener ejemplos de código detallados para cada tarea NLP.

Pasos siguientes