Configurer AutoML pour entraîner un modèle de traitement en langage naturel
S’APPLIQUE À :Extension Azure CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (version actuelle)
Dans cet article, vous apprendrez à former des modèles de traitement du langage naturel (NLP) avec le Machine Learning automatisé dans Azure Machine Learning. Vous pouvez créer des modèles NLP avec ML automatisé via le Kit de développement logiciel (SDK) Python Azure Machine Learning v2 ou l’interface CLI Azure Machine Learning v2.
Le ML automatisé prend en charge NLP qui permet aux professionnels et aux chercheurs de données ML d’apporter leurs propres données et de construire des modèles personnalisés pour les tâches NLP. Les tâches NLP incluent la classification de texte à plusieurs classes, la classification de texte multi-étiquettes et la reconnaissance d’entité nommée (NER).
Vous pouvez intégrer en toute transparence la fonctionnalité d’étiquetage des données Azure Machine Learning pour étiqueter vos données texte ou placer vos données étiquetées existantes. Le ML automatisé offre la possibilité d’utiliser la formation distribuée sur des clusters de calcul à plusieurs GPU pour accélérer l’apprentissage des modèles. Le modèle qui en résulte peut être rendu opérationnel à grande échelle à l’aide des fonctionnalités MLOps d’Azure Machine Learning.
Prérequis
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
Abonnement Azure. Si vous n’avez pas d’abonnement Azure, inscrivez-vous ou essayez la version gratuite ou payante d’Azure Machine Learning aujourd’hui.
Un espace de travail Azure Machine Learning avec un calculateur d’entraînement de GPU. Pour créer l’espace de travail, consultez Créer des ressources d’espace de travail. Pour plus d’informations, consultez Tailles de machine virtuelle optimisées par GPU pour plus de détails sur les instances GPU fournies par Azure.
Avertissement
La prise en charge des modèles multilingues et de l’utilisation de modèles avec une longueur de séquence maximale plus longue est nécessaire pour plusieurs cas d’usage de NLP, comme les jeux de données non anglais et les documents plus longs. Par conséquent, ces scénarios peuvent nécessiter une plus grande mémoire GPU pour que l’apprentissage du modèle aboutisse, par exemple la série NC_v3 ou la série ND.
L'interface CLI Azure Machine Learning v2 installée. Pour obtenir des conseils sur la mise à jour et l’installation de la dernière version, consultez Installer et configurer l’interface CLI (v2).
Cet article suppose une connaissance de base en matière de configuration d’une expérience de Machine Learning automatisé. Suivez le guide pratique pour connaître les principaux modèles de conception des expériences de Machine Learning automatisé.
Sélectionnez votre tâche de NLP
Déterminez la tâche de NLP que vous souhaitez accomplir. Actuellement, le ML automatisé prend en charge les tâches de NLP suivantes du réseau neuronal profond.
Tâche | Syntaxe du travail AutoML | Description |
---|---|---|
Classification d’images à plusieurs classes | CLI v2 : text_classification Kit de développement logiciel (SDK) v2 : text_classification() |
Il existe plusieurs classes possibles, et chaque exemple peut être classé comme exactement une classe. La tâche consiste à prédire la classe correcte pour chaque exemple. Par exemple, la classification d’un script de film en tant que « comédie » ou « romantique ». |
Classification de texte multiétiquette | CLI v2 : text_classification_multilabel Kit de développement logiciel (SDK) v2 : text_classification_multilabel() |
Il existe plusieurs classes possibles, et chaque exemple peut être affecté à un nombre quelconque de classes. La tâche consiste à prédire toutes les classes de chaque exemple Par exemple, la classification d’un script de film en tant que « comédie » ou « romantique », ou « comédie et romantique ». |
Reconnaissance d’entité nommée (NER) | CLI (v2) : text_ner Kit de développement logiciel (SDK) v2 : text_ner() |
Il existe plusieurs étiquettes possibles pour les jetons dans les séquences. La tâche consiste à prédire les étiquettes de tous les jetons pour chaque séquence. Par exemple, l’extraction d’entités spécifiques à un domaine à partir d’un texte non structuré, comme des contrats ou des documents financiers. |
Seuil
Le seuil est la fonctionnalité multi-étiquette qui permet aux utilisateurs de choisir le seuil auquel les probabilités prédites mèneront à une étiquette positive. Les valeurs inférieures permettent d’obtenir davantage d’étiquettes, ce qui est préférable lorsque les utilisateurs se soucient davantage du rappel, mais cette option peut entraîner des faux positifs. Les valeurs plus élevées autorisent moins d’étiquettes et, par conséquent, ce qui est meilleur pour les utilisateurs qui s’intéressent à la précision, mais cette option peut entraîner davantage de faux négatifs.
Préparation des données
Pour les expériences de NLP dans le ML automatisé, vous pouvez apporter vos données au format .csv
pour les tâches de classification multi-classe et multi-étiquette. Pour les tâches de NER, les fichiers .txt
à deux colonnes qui utilisent un espace comme séparateur et adhèrent au format CoNLL sont pris en charge. Les sections suivantes fournissent des détails sur le format de données accepté pour chaque tâche.
Multi-classe
Pour la classification multiclasse, le jeu de données peut contenir plusieurs colonnes de texte et exactement une colonne d’étiquette. L’exemple suivant n’a qu’une seule colonne de texte.
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"
Multi-étiquette
Dans le cas d’une classification en plusieurs étiquettes, les colonnes du jeu de données sont les mêmes que pour les classes multiples, mais il existe des exigences de format spéciales pour les données dans la colonne d’étiquette. Les deux formats et exemples acceptés sont répertoriés dans le tableau suivant.
Options de format de colonne d’étiquette | Étiquettes multiples | Une étiquette | Aucune étiquette |
---|---|---|---|
Texte brut | "label1, label2, label3" |
"label1" |
"" |
Liste Python avec guillemets | "['label1','label2','label3']" |
"['label1']" |
"[]" |
Important
Différents analyseurs sont utilisés pour lire les étiquettes pour ces formats. Si vous utilisez le format texte brut, utilisez uniquement des caractères alphabétiques, numériques et '_'
dans vos étiquettes. Tous les autres caractères sont reconnus comme séparateurs d’étiquettes.
Par exemple, si votre étiquette est "cs.AI"
, elle est lue en tant que "cs"
et "AI"
. Tandis qu’avec le format de liste Python, l’étiquette est "['cs.AI']"
, lue sous la forme "cs.AI"
.
Exemples de données pour plusieurs étiquettes au format texte brut.
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.",""
Exemple de données pour plusieurs étiquettes dans une liste Python avec des guillemets.
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.","[]"
La reconnaissance d’entités nommées (NER)
Contrairement aux cas multi-classe ou à étiquettes multiples, qui acceptent les jeux de données au format .csv
, la reconnaissance d’entité nommée requiert le format CoNLL. Le fichier doit contenir exactement deux colonnes et, dans chaque ligne, le jeton et l’étiquette sont séparés par un seul espace.
Par exemple,
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
Validation des données
Avant l’apprentissage par un modèle, le ML automatisé applique des vérifications de validation des données sur les données d’entrée pour s’assurer que celles-ci peuvent être prétraitées correctement. Si l’une de ces vérifications échoue, l’exécution échoue avec le message d’erreur approprié. Voici les conditions requises pour réussir les vérifications de validation des données pour chaque tâche.
Notes
Certaines vérifications de validation des données sont applicables à la fois à la formation et au jeu de validation, tandis que d’autres s’appliquent uniquement au jeu d’apprentissage. Si le jeu de données de test n’a pas pu passer la validation des données, cela signifie que le ML automatisé n’a pas pu le capturer et qu’il existe un risque d’échec de l’inférence de modèle ou d’une baisse des performances du modèle.
Tâche | Contrôle de validation des données |
---|---|
Toutes les tâches | Au moins 50 exemples d’apprentissage sont requis |
Multi-classe et multi-étiquette | Les données d’apprentissage et les données de validation doivent avoir - Le même ensemble de colonnes - Le même ordre de colonnes de gauche à droite - Le même type de données pour les colonnes portant le même nom - Au moins deux étiquettes uniques - Des noms de colonnes uniques au sein de chaque jeu de données (par exemple, le jeu d’apprentissage ne peut pas avoir plusieurs colonnes nommées Age) |
Multi-classe uniquement | None |
Étiquettes multiples uniquement | - Le format de la colonne d’étiquette doit être au format accepté - Au moins un échantillon doit avoir 0 ou 2+ étiquettes, sinon il doit s’agir d’une tâche multiclass - Toutes les étiquettes doivent être au format str ou int , sans chevauchement. Vous ne devez pas avoir à la fois l’étiquette 1 et l’étiquette '1' |
NER uniquement | - Le fichier ne doit pas commencer par une ligne vide - Chaque ligne doit être une ligne vide ou suivre le format {token} {label} , où il y a exactement un espace entre le jeton et l’étiquette et aucun espace blanc après l’étiquette - Toutes les étiquettes doivent commencer par I- , B- ou être exactement O . Respect de la casse - Exactement une ligne vide entre deux échantillons - Exactement une ligne vide à la fin du fichier |
Configurer une expérience
La fonctionnalité de NLP du ML est déclenchée via des travaux de type automl
spécifique d’une tache. Le flux de travail est le même que pour soumettre des expériences de ML automatisé pour des tâches de classification, de régression et de prévision. Vous devez définir des paramètres comme vous le feriez pour ces expériences, par exemple, experiment_name
, compute_name
et des entrées de données.
Cependant, il existe des différences clés :
- Vous pouvez ignorer
primary_metric
, car il ne concerne que la création de rapports. Actuellement, le ML automatisé ne forme qu’un modèle par exécution pour NLP et il n’y a pas de sélection de modèle. - Le paramètre
label_column_name
est uniquement requis pour les tâches de classification de texte multiclasse et à plusieurs étiquettes. - Si 10 % des échantillons de votre jeu de données comportent plus de 128 jetons, il est considéré comme étant de longue portée.
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
Pour les travaux ML automatisé de l’interface CLI v2, vous configurez votre expérience dans un fichier YAML comme suit.
Paramètres de langue
Dans le cadre de la fonctionnalité de NLP, le ML automatisé prend en charge les 104 langues qui tirent parti des modèles DNN de texte préformés et spécifiques aux langues, comme la famille de modèles BERT. Actuellement, la sélection de langue par défaut est l’anglais.
Le tableau suivant récapitule le modèle appliqué en fonction du type de tâche et de la langue. Consultez la liste complète des langages pris en charge et de leurs codes.
Type de tâche | Syntaxe pour dataset_language |
Algorithme du modèle de texte |
---|---|---|
Classification de texte multiétiquette | "eng" "deu" "mul" |
BERT anglais sans casse German BERT BERT multilingue Pour tous les autres langages, le Machine Learning automatisé applique BERT multilingue |
Classification d’images à plusieurs classes | "eng" "deu" "mul" |
BERT anglais avec casse BERT multilingue Pour tous les autres langages, le Machine Learning automatisé applique BERT multilingue |
La reconnaissance d’entités nommées (NER) | "eng" "deu" "mul" |
BERT anglais avec casse German BERT BERT multilingue Pour tous les autres langages, le Machine Learning automatisé applique BERT multilingue |
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
Vous pouvez spécifier la langue de votre jeu de données dans la section caractérisation de votre fichier YAML de configuration. L’architecture BERT est également utilisée dans le processus de caractérisation de l’apprentissage d’une expérience AutoML. Découvrez-en plus sur l’Intégration et la caractérisation de BERT dans AutoML (Kit de développement logiciel (SDK) v1).
featurization:
dataset_language: "eng"
Entraînement distribué
Vous pouvez également exécuter vos expériences NLP avec la formation distribuée sur un cluster de calcul Azure ML.
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
Envoyer le travail AutoML
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
Pour soumettre votre travail AutoML, vous pouvez exécuter la commande CLI v2 suivante avec le chemin d’accès à votre fichier .yml, le nom de l’espace de travail, le groupe de ressources et l’ID d’abonnement.
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]
Exemples de code
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
Consultez les exemples de fichiers YAML suivants pour chaque tâche NLP.
Réglage du balayage et des hyperparamètres de modèle (préversion)
Important
Cette fonctionnalité est actuellement disponible en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge.
Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.
AutoML NLP vous permet de fournir une liste de modèles et de combinaisons d’hyperparamètres, via l’espace de recherche des hyperparamètres dans la configuration. Hyperdrive génère plusieurs exécutions enfants, chacune d’elles étant une exécution de réglage précis pour un modèle NLP donné et un ensemble de valeurs d’hyperparamètres qui ont été choisies et balayées en fonction de l’espace de recherche fourni.
Algorithmes de modèle pris en charge
Tous les modèles DNN de texte préentraînés actuellement disponibles dans AutoML NLP pour le réglage précis sont répertoriés ci-dessous :
- 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
Notez que les grands modèles sont plus grands que leurs équivalents de base. Ils sont généralement plus performants, mais leur entraînement nécessite plus de mémoire GPU et de temps. Par conséquent, leurs exigences de référence SKU sont plus strictes : nous vous recommandons d’exécuter sur des machines virtuelles de série ND pour obtenir les meilleurs résultats.
Algorithmes de modèle pris en charge - HuggingFace (préversion)
Avec le nouveau serveur principal qui s’exécute sur des pipelines Azure Machine Learning, vous pouvez également utiliser n’importe quel modèle de classification de texte/jeton à partir du hub HuggingFace pour la Classification de texte, la Classification de jetons qui fait partie de la bibliothèque de transformateurs (par exemple, microsoft/deberta-large-mnli). Vous pouvez également trouver une liste organisée de modèles dans le registre de modèles Azure Machine Learning qui ont été validés avec les composants de pipeline.
L’utilisation d’un modèle HuggingFace déclenche des exécutions à l’aide de composants de pipeline. Si les deux modèles hérités et HuggingFace sont utilisés, toutes les exécutions/essais sont déclenchées à l’aide de composants.
Hyperparamètres pris en charge
Le tableau suivant décrit les hyperparamètres pris en charge par AutoML NLP.
Nom du paramètre | Description | Syntaxe |
---|---|---|
gradient_accumulation_steps | Nombre d’opérations descendantes dont les gradients doivent être totalisés avant d’effectuer une étape de descente de gradient en appelant la fonction d’étape de l’optimiseur. Il s’agit d’utiliser une taille de lot efficace qui est gradient_accumulation_steps fois supérieure à la taille maximale qui correspond au GPU. |
Cette valeur doit être un entier positif. |
learning_rate | Taux d’apprentissage initial. | Doit être un nombre à virgule flottante dans la plage [0, 1]. |
learning_rate_scheduler | Type de planificateur du taux d’apprentissage. | Doit choisir entre linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup . |
model_name | Nom de l’un des modèles pris en charge. | Doit choisir entre 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 | Nombre d’époques d’entraînement. | Cette valeur doit être un entier positif. |
training_batch_size | Taille du lot d’entraînement. | Cette valeur doit être un entier positif. |
validation_batch_size | Taille du lot de validation. | Cette valeur doit être un entier positif. |
warmup_ratio | Ratio des étapes de formation totales utilisées pour un préchauffement linéaire de 0 à learning_rate. | Doit être un nombre à virgule flottante dans la plage [0, 1]. |
weight_decay | Valeur de la perte de poids lorsque l’optimiseur est sgd, adam ou adamw. | Doit être un nombre à virgule flottante dans la plage [0, 1]. |
Tous les hyperparamètres discrets autorisent uniquement les distributions de choix, telles que les hyperparamètres de type entier training_batch_size
et les hyperparamètres typés model_name
par chaîne. Tous les hyperparamètres continus comme learning_rate
prennent en charge toutes les distributions.
Configurer vos paramètres de balayage
Vous pouvez configurer tous les paramètres liés au balayage. Plusieurs sous-espaces de modèle peuvent être construits avec des hyperparamètres conditionnels au modèle respectif, comme indiqué ci-dessous dans les exemples de réglage de chaque hyperparamètre.
Les mêmes options de distribution distincte et continue disponibles pour les travaux HyperDrive généraux sont prises en charge ici. Afficher les neuf options dans Hyperparamètre optimisant un modèle
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
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éthodes d’échantillonnage pour le balayage
Lors du balayage des hyperparamètres, vous devez spécifier la méthode d’échantillonnage à utiliser pour balayer l’espace de paramètres défini. Actuellement, les méthodes d’échantillonnage suivantes sont prises en charge avec le paramètre sampling_algorithm
:
Type d’échantillonnage | Syntaxe du travail AutoML |
---|---|
Échantillonnage aléatoire | random |
Échantillonnage par grille | grid |
Échantillonnage bayésien | bayesian |
Budget pour les expériences
Vous pouvez éventuellement spécifier le budget de l’expérience pour votre travail de formation AutoML NLP avec le paramètre timeout_minutes
dans limits
(la durée en minutes avant l’arrêt de l’expérience). Si aucune durée n’est spécifiée, le délai d’expiration par défaut de l’expérience est de sept jours (maximum 60 jours).
AutoML NLP prend également en charge trial_timeout_minutes
, le temps maximal en minutes pendant lequel une évaluation gratuite individuelle peut s’exécuter avant d’être terminée, et max_nodes
, le nombre maximal de nœuds du cluster de calcul de stockage à utiliser pour le travail. Ces paramètres appartiennent également à la section limits
.
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
limits:
timeout_minutes: 60
trial_timeout_minutes: 20
max_nodes: 2
Stratégies d’arrêt anticipé
Vous pouvez arrêter automatiquement les exécutions peu performantes avec une stratégie d’arrêt anticipé. Un arrêt anticipé améliore l’efficacité du calcul, en sauvant des ressources de calcul qui auraient autrement été consacrées à des configurations moins prometteuses. AutoML NLP prend en charge les stratégies de terminaison anticipée à l’aide du paramètre early_termination
. Si aucune stratégie d’arrêt n’est spécifiée, toutes les configurations sont exécutées jusqu’à la fin.
Découvrez plus en détail comment configurer la stratégie d’arrêt anticipé pour votre balayage d’hyperparamètres.
Ressources pour le balayage
Vous pouvez contrôler les ressources consacrées à votre balayage d’hyperparamètres en spécifiant max_trials
et max_concurrent_trials
pour le balayage.
Paramètre | Détail |
---|---|
max_trials |
Paramètre pour le nombre maximal de configurations à balayer. Doit être un entier compris entre 1 et 1000. Lorsque vous explorez juste les hyperparamètres par défaut d’un algorithme de modèle donné, affectez la valeur 1 à ce paramètre. La valeur par défaut est 1. |
max_concurrent_trials |
Nombre maximal d’exécutions pouvant se dérouler simultanément. En cas de spécification, doit être un entier compris entre 1 et 100. La valeur par défaut est 1. REMARQUE : max_concurrent_trials est limité à max_trials en interne. Par exemple, si l’utilisateur définit max_concurrent_trials=4 , max_trials=2 , les valeurs sont mises à jour en interne en tant que max_concurrent_trials=2 , max_trials=2 . |
Vous pouvez configurer tous les paramètres associés au balayage, comme illustré dans cet exemple.
S’APPLIQUE À : Extension ml Azure CLI v2 (actuelle)
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
Problèmes connus
Traiter des scores faibles ou des valeurs de perte plus élevées :
Pour certains jeux de données, quelle que soit la tâche NLP, les scores produits peuvent être très faibles, parfois même nuls. Ce score est accompagné de valeurs de perte plus élevées impliquant que le réseau neuronal n’a pas pu converger. Ces scores peuvent se produire plus fréquemment sur certaines références SKU du GPU.
Bien que ces cas soient rares, ils sont possibles et la meilleure façon de les gérer consiste à tirer parti du réglage des hyperparamètres et à fournir une plus large gamme de valeurs, en particulier pour des hyperparamètres comme les taux d’apprentissage. Jusqu’à ce que notre capacité de réglage des hyperparamètres soit disponible en production, nous recommandons aux utilisateurs qui rencontrent ces problèmes d’utiliser des clusters de calcul NC6 ou ND6. Ces clusters offrent généralement des résultats d’apprentissage assez stables.