AutoML instellen om een verwerkingsmodel voor natuurlijke taal te trainen

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)Python SDK azure-ai-ml v2 (huidig)

In dit artikel leert u hoe u NLP-modellen (Natural Language Processing) traint met geautomatiseerde ML in Azure Machine Learning. U kunt NLP-modellen maken met geautomatiseerde ML via de Azure Machine Learning Python SDK v2 of de Azure Machine Learning CLI v2.

Geautomatiseerde ML ondersteunt NLP, waarmee ML-professionals en gegevenswetenschappers hun eigen tekstgegevens kunnen gebruiken en aangepaste modellen kunnen bouwen voor taken zoals tekstclassificatie met meerdere klassen, tekstclassificatie met meerdere labels en NER (Named Entity Recognition).

U kunt naadloos integreren met de azure Machine Learning-functie voor het labelen van gegevens om uw tekstgegevens te labelen of uw bestaande gelabelde gegevens mee te nemen. Geautomatiseerde ML biedt de optie om gedistribueerde training te gebruiken op rekenclusters met meerdere GPU's voor snellere modeltraining. Het resulterende model kan op schaal worden uitgevoerd door gebruik te maken van de MLOps-mogelijkheden van Azure ML.

Vereisten

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)

  • Azure-abonnement. Als u geen Azure-abonnement hebt, meldt u zich aan om de gratis of betaalde versie van Azure Machine Learning vandaag nog te proberen.

  • Een Azure Machine Learning-werkruimte met een GPU-trainingsreken. Zie Werkruimteresources maken om de werkruimte te maken. Zie Voor GPU geoptimaliseerde grootten van virtuele machines voor meer informatie over GPU-exemplaren die worden geleverd door Azure.

    Waarschuwing

    Ondersteuning voor meertalige modellen en het gebruik van modellen met een langere maximale reekslengte is nodig voor verschillende NLP-gebruiksvoorbeelden, zoals niet-Engelse gegevenssets en documenten met een langer bereik. Als gevolg hiervan hebben deze scenario's mogelijk meer GPU-geheugen nodig om modeltraining te laten slagen, zoals de NC_v3-serie of de ND-serie.

  • De Azure Machine Learning CLI v2 is geïnstalleerd. Zie Cli installeren en instellen (v2) voor hulp bij het bijwerken en installeren van de nieuwste versie.

  • In dit artikel wordt ervan uitgegaan dat u bekend bent met het instellen van een geautomatiseerd machine learning-experiment. Volg de instructies om de belangrijkste ontwerppatronen voor geautomatiseerde machine learning-experimenten te bekijken.

Selecteer uw NLP-taak

Bepaal welke NLP-taak u wilt uitvoeren. Op dit moment ondersteunt geautomatiseerde ML de volgende NLP-taken van het diepe neurale netwerk.

Taak AutoML-taaksyntaxis Beschrijving
Tekstclassificatie met meerdere klassen CLI v2: text_classification
SDK v2: text_classification()
Er zijn meerdere mogelijke klassen en elk voorbeeld kan worden geclassificeerd als precies één klasse. De taak bestaat uit het voorspellen van de juiste klasse voor elk voorbeeld.

Bijvoorbeeld door een filmscript te classificeren als 'Komedie' of 'Romantisch'.
Tekstclassificatie met meerdere labels CLI v2: text_classification_multilabel
SDK v2: text_classification_multilabel()
Er zijn meerdere mogelijke klassen en aan elk voorbeeld kan een willekeurig aantal klassen worden toegewezen. De taak bestaat uit het voorspellen van alle klassen voor elk voorbeeld

Bijvoorbeeld door een filmscript te classificeren als 'Komedie', 'Romantisch' of 'Komedie en romantisch'.
NER (Herkenning van benoemde entiteiten) CLI v2:text_ner
SDK v2: text_ner()
Er zijn meerdere mogelijke tags voor tokens in reeksen. De taak bestaat uit het voorspellen van de tags voor alle tokens voor elke reeks.

Bijvoorbeeld het extraheren van domeinspecifieke entiteiten uit ongestructureerde tekst, zoals contracten of financiële documenten.

Drempelwaarde

Drempelwaarden is de functie voor meerdere labels waarmee gebruikers de drempelwaarde kunnen kiezen waarboven de voorspelde waarschijnlijkheid tot een positief label leidt. Lagere waarden zorgen voor meer labels, wat beter is als gebruikers meer belang hechten aan intrekken, maar deze optie kan leiden tot meer fout-positieven. Hogere waarden zorgen voor minder labels en dus beter voor gebruikers die om precisie geven, maar deze optie kan leiden tot meer fout-negatieven.

Gegevens voorbereiden

Voor NLP-experimenten in geautomatiseerde ML kunt u uw gegevens in .csv indeling brengen voor classificatietaken met meerdere klassen en meerdere labels. Voor NER-taken worden bestanden met twee kolommen .txt ondersteund die een spatie gebruiken als scheidingsteken en voldoen aan de CoNLL-indeling. De volgende secties bevatten aanvullende informatie over de gegevensindeling die voor elke taak wordt geaccepteerd.

Meerdere klassen

Voor classificatie met meerdere klassen kan de gegevensset meerdere tekstkolommen en precies één labelkolom bevatten. Het volgende voorbeeld bevat slechts één tekstkolom.

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"

Meerdere labels

Voor classificatie met meerdere labels zijn de gegevenssetkolommen hetzelfde als voor meerdere klassen, maar er zijn speciale indelingsvereisten voor gegevens in de labelkolom. De twee geaccepteerde indelingen en voorbeelden staan in de volgende tabel.

Opties voor opmaak van labelkolommen Meerdere labels Eén label Geen labels
Tekst zonder opmaak "label1, label2, label3" "label1" ""
Python-lijst met aanhalingstekens "['label1','label2','label3']" "['label1']" "[]"

Belangrijk

Er worden verschillende parsers gebruikt om labels voor deze indelingen te lezen. Als u tekst zonder opmaak gebruikt, gebruikt u alleen alfabetisch, numeriek en '_' in uw labels. Alle andere tekens worden herkend als het scheidingsteken van labels.

Als uw label bijvoorbeeld is, wordt "cs.AI"het gelezen als "cs" en "AI". Bij de Python-lijstindeling is "['cs.AI']"het label , dat wordt gelezen als "cs.AI" .

Voorbeeldgegevens voor multilabels in tekst zonder opmaak.

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.",""

Voorbeeldgegevens voor meerdere labels in python-lijst met aanhalingstekens.

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.","[]"

Herkenning van benoemde entiteiten (NER)

In tegenstelling tot multiklassen of meerdere labels, waarvoor .csv indelingsgegevenssets nodig zijn, vereist de herkenning van benoemde entiteiten de CoNLL-indeling. Het bestand moet precies twee kolommen bevatten en in elke rij worden het token en het label gescheiden door één spatie.

Bijvoorbeeld:

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

Gegevensvalidatie

Vóór de training past geautomatiseerde ML gegevensvalidatiecontroles toe op de invoergegevens om ervoor te zorgen dat de gegevens correct kunnen worden verwerkt. Als een van deze controles mislukt, mislukt de uitvoering met het relevante foutbericht. Hier volgen de vereisten voor het doorstaan van gegevensvalidatiecontroles voor elke taak.

Notitie

Sommige gegevensvalidatiecontroles zijn van toepassing op zowel de training als de validatieset, terwijl andere alleen van toepassing zijn op de trainingsset. Als de testgegevensset de gegevensvalidatie niet kan doorstaan, betekent dit dat geautomatiseerde ML deze niet kan vastleggen en dat er een fout optreedt in modeldeductie of dat de modelprestaties afnemen.

Taak Controle van gegevensvalidatie
Alle taken Er zijn ten minste 50 trainingsvoorbeelden vereist
Meerdere klassen en meerdere labels De trainingsgegevens en validatiegegevens moeten
- Dezelfde set kolommen
- Dezelfde volgorde van kolommen van links naar rechts
- Hetzelfde gegevenstype voor kolommen met dezelfde naam
- Ten minste twee unieke labels
- Unieke kolomnamen binnen elke gegevensset (de trainingsset kan bijvoorbeeld niet meerdere kolommen met de naam Leeftijd bevatten)
Alleen meerdere klassen Geen
Alleen meerdere labels - De indeling van de labelkolom moet de geaccepteerde indeling hebben
- Ten minste één voorbeeld moet 0 of 2+ labels hebben, anders moet het een multiclass taak zijn
- Alle labels moeten de notatie of int de str notatie hebben, zonder overlapping. U mag niet zowel het label 1 als het label hebben '1'
Alleen NER - Het bestand mag niet beginnen met een lege regel
- Elke regel moet een lege regel zijn, of de notatie {token} {label}volgen, waarbij er precies één spatie is tussen het token en het label en geen witruimte na het label
- Alle labels moeten beginnen met I-, B-of precies Ozijn. Hoofdlettergevoelig
- Precies één lege lijn tussen twee steekproeven
- Precies één lege regel aan het einde van het bestand

Experiment configureren

De NLP-functie van Geautomatiseerde ML wordt geactiveerd via taakspecifieke automl taken. Dit is dezelfde werkstroom voor het indienen van geautomatiseerde ML-experimenten voor classificatie-, regressie- en prognosetaken. U stelt parameters in zoals voor deze experimenten, zoals experiment_name, compute_name en gegevensinvoer.

Er zijn echter belangrijke verschillen:

  • U kunt negeren primary_metric, omdat dit alleen voor rapportagedoeleinden is. Op dit moment traint geautomatiseerde ML slechts één model per uitvoering voor NLP en is er geen modelselectie.
  • De label_column_name parameter is alleen vereist voor tekstclassificatietaken met meerdere klassen en meerdere labels.
  • Als meer dan 10% van de voorbeelden in uw gegevensset meer dan 128 tokens bevatten, wordt dit beschouwd als een groot bereik.
    • Als u de functie voor tekst met lange afstand wilt gebruiken, moet u een NC6- of hogere/betere SKU's voor GPU gebruiken, zoals: NCv3-serie of ND-serie .

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)

Voor CLI v2 AutoML-taken configureert u uw experiment in een YAML-bestand zoals hieronder.

Taalinstellingen

Als onderdeel van de NLP-functionaliteit ondersteunt geautomatiseerde ML 104 talen die gebruikmaken van taalspecifieke en meertalige vooraf getrainde tekst-DNN-modellen, zoals de BERT-serie modellen. Op dit moment is de taalselectie standaard ingesteld op Engels.

In de volgende tabel ziet u een overzicht van het model dat wordt toegepast op basis van taaktype en taal. Bekijk de volledige lijst met ondersteunde talen en de bijbehorende codes.

Taaktype Syntaxis voor dataset_language Algoritme voor tekstmodel
Tekstclassificatie met meerdere labels "eng"
"deu"
"mul"
Engels BERT ongekapt
Duits BERT
Meertalige BERT

Voor alle andere talen past geautomatiseerde ML meertalige BERT toe
Tekstclassificatie met meerdere klassen "eng"
"deu"
"mul"
Engels BERT cased
Meertalige BERT

Voor alle andere talen past geautomatiseerde ML meertalige BERT toe
Herkenning van benoemde entiteiten (NER) "eng"
"deu"
"mul"
Engels BERT cased
Duits BERT
Meertalige BERT

Voor alle andere talen past geautomatiseerde ML meertalige BERT toe

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)

U kunt de taal van uw gegevensset opgeven in de sectie featurization van het YAML-configuratiebestand. BERT wordt ook gebruikt in het featurization-proces van geautomatiseerde ML-experimenttraining, meer informatie over BERT-integratie en -featurization in geautomatiseerde ML.

featurization:
   dataset_language: "eng"

Gedistribueerde training

U kunt uw NLP-experimenten ook uitvoeren met gedistribueerde training op een Azure ML-rekencluster.

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)

De AutoML-taak verzenden

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)

Als u uw AutoML-taak wilt verzenden, kunt u de volgende CLI v2-opdracht uitvoeren met het pad naar uw .yml-bestand, werkruimtenaam, resourcegroep en abonnements-id.


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]

Codevoorbeelden

Model opruimen en hyperparameter afstemmen (preview)

Belangrijk

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt aangeboden zonder Service Level Agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.

Met AutoML NLP kunt u een lijst met modellen en combinaties van hyperparameters opgeven via de zoekruimte hyperparameter in de configuratie. Hyperdrive genereert verschillende onderliggende uitvoeringen, die elk een verfijningsuitvoering zijn voor een bepaald NLP-model en een set hyperparameterwaarden die zijn gekozen en overgezet op basis van de opgegeven zoekruimte.

Ondersteunde modelalgoritmen

Alle vooraf getrainde DNN-modellen voor tekst die momenteel beschikbaar zijn in AutoML NLP voor het afstemmen, worden hieronder vermeld:

  • 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

Houd er rekening mee dat de grote modellen aanzienlijk groter zijn dan hun basis tegenhangers. Ze presteren doorgaans beter, maar ze nemen meer GPU-geheugen en tijd in beslag voor training. Daarom zijn hun SKU-vereisten strenger: we raden u aan om te worden uitgevoerd op VM's uit de ND-serie voor de beste resultaten.

Ondersteunde hyperparameters

In de volgende tabel worden de hyperparameters beschreven die door AutoML NLP worden ondersteund.

Parameternaam Beschrijving Syntax
gradient_accumulation_steps Het aantal achterwaartse bewerkingen waarvan de kleurovergangen moeten worden opgeteld voordat u één stap van gradiëntafname uitvoert door de stapfunctie van het optimalisatieprogramma aan te roepen.

Dit wordt gebruikt om een effectieve batchgrootte te gebruiken die gradient_accumulation_steps keer groter is dan de maximale grootte die bij de GPU past.
Moet een positief geheel getal zijn.
learning_rate Initiële leersnelheid. Moet een float in het bereik zijn (0, 1).
learning_rate_scheduler Type leerfrequentieplanner. Moet kiezen uit linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup.
model_name Naam van een van de ondersteunde modellen. Moet kiezen uit 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 Aantal trainingstijdvakken. Moet een positief geheel getal zijn.
training_batch_size Grootte van de trainingsbatch. Moet een positief geheel getal zijn.
validation_batch_size Grootte van validatiebatch. Moet een positief geheel getal zijn.
warmup_ratio Verhouding van het totale aantal trainingsstappen dat wordt gebruikt voor een lineaire warming-up van 0 tot learning_rate. Moet een float in het bereik [0, 1] zijn.
weight_decay Waarde van gewichtsverval wanneer optimizer sgd, adam of adamw is. Moet een float in het bereik [0, 1] zijn.

Alle discrete hyperparameters staan alleen keuzedistributies toe, zoals de hyperparameters met het type training_batch_size integer en de tekenreeks model_name . Alle continue hyperparameters zoals learning_rate ondersteunen alle distributies.

Instellingen voor opruimen configureren

U kunt alle sweep-gerelateerde parameters configureren. Meerdere modelsubruimten kunnen worden gemaakt met hyperparameters die afhankelijk zijn van het respectieve model, zoals hieronder in elk voorbeeld wordt weergegeven.

Hier worden dezelfde discrete en continue distributieopties ondersteund die beschikbaar zijn voor algemene HyperDrive-taken. Bekijk alle negen opties in Hyperparameter die een model afstemmen

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)

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 

Samplingmethoden voor de sweep

Bij het opruimen van hyperparameters moet u de steekproefmethode opgeven die moet worden gebruikt voor het opruimen van de gedefinieerde parameterruimte. Momenteel worden de volgende steekproefmethoden ondersteund met de sampling_algorithm parameter :

Steekproeftype AutoML-taaksyntaxis
Willekeurige steekproeven random
Rastersampling grid
Bayesiaanse steekproeven bayesian

Experimentbudget

U kunt eventueel het experimentbudget voor uw NLP-trainingstaak voor AutoML opgeven met behulp van de timeout_minutes parameter in de limits - de hoeveelheid tijd in minuten voordat het experiment wordt beëindigd. Als er geen is opgegeven, is de standaardtime-out van het experiment zeven dagen (maximaal 60 dagen).

AutoML NLP ondersteunt trial_timeout_minutesook , de maximale hoeveelheid tijd in minuten die een afzonderlijke proefversie kan uitvoeren voordat deze wordt beëindigd, en , het max_nodesmaximum aantal knooppunten van het back-up-rekencluster dat voor de taak kan worden gebruikt. Deze parameters behoren ook tot de limits sectie.

VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)

limits: 
  timeout_minutes: 60 
  trial_timeout_minutes: 20 
  max_nodes: 2 

Beleid voor vroegtijdige beëindiging

U kunt slecht presterende uitvoeringen automatisch beëindigen met een beleid voor vroegtijdige beëindiging. Vroegtijdige beëindiging verbetert de rekenefficiëntie en bespaart rekenresources die anders zouden zijn besteed aan minder veelbelovende configuraties. AutoML NLP ondersteunt beleid voor vroegtijdige beëindiging met behulp van de early_termination parameter . Als er geen beëindigingsbeleid is opgegeven, worden alle configuraties uitgevoerd tot voltooiing.

Meer informatie over het configureren van het beleid voor vroegtijdige beëindiging voor uw hyperparameter opruimen.

Resources voor de sweep

U kunt de resources beheren die zijn besteed aan uw hyperparameter-sweep door de max_trials en op max_concurrent_trials te geven voor de sweep.

Parameter Detail
max_trials Parameter voor het maximum aantal configuraties dat moet worden geveegd. Moet een geheel getal tussen 1 en 1000 zijn. Wanneer u alleen de standaard hyperparameters voor een bepaald model-algoritme verkent, stelt u deze parameter in op 1. De standaardwaarde is 1.
max_concurrent_trials Maximum aantal uitvoeringen dat gelijktijdig kan worden uitgevoerd. Indien opgegeven, moet een geheel getal tussen 1 en 100 zijn. De standaardwaarde is 1.

OPMERKING:
  • Het aantal gelijktijdige uitvoeringen wordt beperkt voor de resources die beschikbaar zijn in het opgegeven rekendoel. Zorg ervoor dat het rekendoel de beschikbare resources voor de gewenste gelijktijdigheid heeft.
  • max_concurrent_trials is intern beperkt max_trials tot. Als de gebruiker max_concurrent_trials=4bijvoorbeeld , instelt, max_trials=2worden de waarden intern bijgewerkt als max_concurrent_trials=2, max_trials=2.
  • U kunt alle gerelateerde parameters voor opruimen configureren, zoals wordt weergegeven in het onderstaande voorbeeld.

    VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidig)

    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
    

    Bekende problemen

    Omgaan met zeer lage scores of hogere verlieswaarden:

    Voor bepaalde gegevenssets, ongeacht de NLP-taak, kunnen de gegenereerde scores erg laag zijn, soms zelfs nul. Dit zou gepaard gaan met hogere verlieswaarden, wat impliceert dat het neurale netwerk niet kan worden geconvergeerd. Dit kan vaker gebeuren op bepaalde GPU-SKU's.

    Hoewel dergelijke gevallen ongebruikelijk zijn, zijn ze mogelijk en de beste manier om dit aan te pakken is door hyperparameterafstemming te gebruiken en een breder bereik van waarden te bieden, met name voor hyperparameters zoals leersnelheden. Totdat onze mogelijkheid voor het afstemmen van hyperparameters beschikbaar is in productie, raden we gebruikers die dergelijke problemen ondervinden, aan gebruik te maken van de NC6- of ND6-rekenclusters, waar we hebben vastgesteld dat de trainingsresultaten redelijk stabiel zijn.

    Volgende stappen