Configurer AutoML pour entraîner un modèle de traitement en langage naturel

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (préversion)

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 Azure ML 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.
    • Pour utiliser la fonctionnalité de texte à longue portée, vous devez utiliser un NC6 ou des références SKU supérieures/meilleures pour le GPU, telles que la série NCv3 ou la série ND.

S’APPLIQUE À :Extension Azure ML 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 Azure ML 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 Azure ML CLI v2 (actuelle)

Envoyer le travail AutoML

S’APPLIQUE À :Extension Azure ML 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

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 Azure ML 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 Azure CLI ml v2 (actuel)

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 :
  • Le nombre d’exécutions simultanées est limité par les ressources disponibles dans la cible de calcul spécifiée. Vérifiez que la cible de calcul dispose des ressources nécessaires à l’accès concurrentiel souhaité.
  • max_concurrent_trials est limité à max_trialsen 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 Azure CLI ml v2 (actuel)

    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.

    Étapes suivantes