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
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. Consulte Tamaños de máquinas virtuales optimizadas para GPU para obtener 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.
El SDK de Azure Machine Learning para Python instalado.
Para instalar el SDK, puede:
Crear una instancia de proceso, que instala automáticamente el SDK y está preconfigurada para flujos de trabajo de aprendizaje automático. Consulte Creación y administración de una instancia de proceso de Azure Machine Learning para obtener más información.
Instale el paquete
automl
, que incluye la instalación predeterminada del SDK.
Importante
Los comandos de Python de este artículo requieren la versión más reciente del paquete
azureml-train-automl
.- Instale el paquete
azureml-train-automl
más reciente en el entorno local. - Para obtener información sobre la última versión del paquete
azureml-train-automl
, consulta las notas de la versión.
En este artículo se presupone una familiarización con la configuración de un experimento de aprendizaje de automático automatizado. Siga el tutorial o los procedimientos 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 | 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 .csv
formato 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 suAutoMLConfig
. Esto ayuda a mejorar el rendimiento del modelo, pero requiere tiempos de entrenamiento más largos.
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.
- Clasificación de texto de varias clases
- Clasificación de texto con varias etiquetas
- Reconocimiento de entidades con nombre
Pasos siguientes
- Obtenga más información sobre cómo y dónde implementar un modelo.
- Solución de problemas de experimentos de aprendizaje automático automatizado.