AutoML instellen om een model voor natuurlijke taalverwerking te trainen

VAN TOEPASSING OP:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (current)

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, waardoor ML-professionals en gegevenswetenschappers hun eigen tekstgegevens kunnen meenemen en aangepaste modellen kunnen bouwen voor NLP-taken. NLP-taken omvatten tekstclassificatie met meerdere klassen, tekstclassificatie met meerdere labels en HERKENNING van benoemde entiteiten (NER).

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

Vereisten

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

Selecteer uw NLP-taak

Bepaal welke NLP-taak u wilt uitvoeren. Op dit moment ondersteunt geautomatiseerde ML de volgende NLP-taken voor deep neural network.

Opdracht Syntaxis van AutoML-taak Beschrijving
Tekstclassificatie met meerdere klassen CLI v2: text_classification
SDK v2: text_classification()
Er zijn meerdere mogelijke klassen en elke steekproef kan worden geclassificeerd als precies één klasse. De taak is om de juiste klasse voor elk voorbeeld te voorspellen.

U kunt bijvoorbeeld een filmscript 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 elk voorbeeld kan een willekeurig aantal klassen worden toegewezen. De taak is om alle klassen voor elk voorbeeld te voorspellen

U kunt bijvoorbeeld een filmscript classificeren als 'Komedie' of '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 is om de tags voor alle tokens voor elke reeks te voorspellen.

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

Drempelwaarden

Drempelwaarden is de functie voor meerdere labels waarmee gebruikers de drempelwaarde kunnen kiezen die de voorspelde waarschijnlijkheden tot een positief label zullen leiden. Lagere waarden zorgen voor meer labels, wat beter is wanneer gebruikers meer om relevante overeenkomsten geven, maar deze optie kan leiden tot fout-positieven. Hogere waarden maken minder labels mogelijk 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 die een spatie gebruiken als scheidingsteken en voldoen aan de CoNLL-indeling ondersteund. De volgende secties bevatten details over de gegevensindeling die voor elke taak is geaccepteerd.

Meerdere klassen

Voor classificatie met meerdere klassen kan de gegevensset meerdere tekstkolommen en precies één labelkolom bevatten. Het volgende voorbeeld heeft 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 kolomopmaak labelen Meerdere labels Eén label Geen labels
Tekst zonder opmaak "label1, label2, label3" "label1" ""
Python-lijst met aanhalingstekens "['label1','label2','label3']" "['label1']" "[]"

Belangrijk

Verschillende parsers worden gebruikt om labels voor deze indelingen te lezen. Als u de notatie voor tekst zonder opmaak gebruikt, gebruikt u alleen alfabetisch, numeriek en '_' in uw etiketten. Alle andere tekens worden herkend als scheidingsteken voor labels.

Als uw label bijvoorbeeld is "cs.AI", wordt het gelezen als "cs" en "AI". Terwijl met de Indeling van de Python-lijst het label zou zijn "['cs.AI']", wat wordt gelezen als "cs.AI" .

Voorbeeldgegevens voor meerdere labels 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 de 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.","[]"

NER (Named Entity Recognition)

In tegenstelling tot meerdere klassen of meerdere labels, die indelingsgegevenssets gebruikt .csv , is coNLL-indeling vereist voor benoemde entiteitsherkenning. Het bestand moet exact twee kolommen bevatten en in elke rij moet het token en het label worden 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

Voordat een model wordt getraind, 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 doorgeven van gegevensvalidatiecontroles voor elke taak.

Notitie

Sommige controles voor gegevensvalidatie 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 doorgeven, betekent dit dat geautomatiseerde ML deze niet kan vastleggen en dat er een mogelijkheid is dat modeldeductie mislukt of dat de modelprestaties afnemen.

Opdracht Controle van gegevensvalidatie
Alle taken Minimaal 50 trainingsvoorbeelden zijn vereist
Meerdere klassen en meerdere labels De trainingsgegevens en validatiegegevens moeten over
- 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 hebben met de naam Leeftijd)
Alleen voor meerdere klassen Geen
Alleen voor 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 in str of int opmaken, zonder overlappende labels. U mag niet zowel het label als het label 1 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 tussen het token en het label is en geen witruimte na het label
- Alle labels moeten beginnen met I-, B-of precies Ozijn. Hoofdlettergevoelig
- Precies één lege regel 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 verzenden van geautomatiseerde ML-experimenten voor classificatie-, regressie- en prognosetaken. U stelt parameters in zoals u dat zou doen voor deze experimenten, zoals experiment_nameen compute_name 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 bevat, wordt dit beschouwd als een lang bereik.
    • Als u de functie voor tekst voor lange afstand wilt gebruiken, moet u een NC6 of hoger/betere SKU's gebruiken voor GPU, zoals: NCv3-serie of ND-serie .

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

Voor geautomatiseerde CLI v2-ml-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 DNN-modellen, zoals de BERT-serie modellen. Op dit moment wordt taalselectie standaard ingesteld op Engels.

De volgende tabel geeft een overzicht van welk model wordt toegepast op basis van het taaktype en de 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 uncased
Duits BERT
Meertalige BERT

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

Voor alle andere talen past geautomatiseerde ML meertalige BERT toe
NER (Named Entity Recognition) "eng"
"deu"
"mul"
Engelse BERT cased
Duits BERT
Meertalige BERT

Voor alle andere talen past geautomatiseerde ML meertalige BERT toe

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

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

featurization:
   dataset_language: "eng"

Gedistribueerde training

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

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

De AutoML-taak verzenden

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

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 hyperparameterafstemming (preview)

Belangrijk

Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview-versie wordt geleverd zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt.

Zie 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 fine-tuning run voor een bepaald NLP-model en set hyperparameterwaarden zijn gekozen en die zijn overgeveegd op basis van de opgegeven zoekruimte.

Ondersteunde modelalgoritmen

Hieronder vindt u alle vooraf getrainde DNN-modellen die momenteel beschikbaar zijn in AutoML NLP voor afstemming:

  • bert-base-cased
  • bert-large-uncased
  • bert-base-meertalige-cased
  • bert-base-german-cased
  • bert-large-cased
  • distilbert-base-cased
  • gedetilbert-base-uncased
  • roberta-base
  • roberta-large
  • distilroberta-basis
  • xlm-roberta-base
  • xlm-roberta-large
  • xlnet-base-cased
  • xlnet-large-cased

Houd er rekening mee dat de grote modellen groter zijn dan hun basis tegenhangers. Ze zijn doorgaans beter presterend, 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 modelalgoritmen - HuggingFace (preview)

Met de nieuwe back-end die wordt uitgevoerd op Azure Machine Learning-pijplijnen, kunt u ook elk tekst-/tokenclassificatiemodel van huggingFace Hub voor tekstclassificatie gebruiken, tokenclassificatie die deel uitmaakt van de transformatorbibliotheek (zoals microsoft/deberta-large-mnli). Mogelijk vindt u ook een gecureerde lijst met modellen in het Azure Machine Learning-modelregister die zijn gevalideerd met de pijplijnonderdelen.

Als u een HuggingFace-model gebruikt, worden uitvoeringen geactiveerd met behulp van pijplijnonderdelen. Als zowel verouderde als HuggingFace-modellen worden gebruikt, worden alle uitvoeringen/proefversies geactiveerd met behulp van onderdelen.

Ondersteunde hyperparameters

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

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

Dit is het gebruik van een effectieve batchgrootte, die gradient_accumulation_steps keer groter is dan de maximale grootte die past bij de GPU.
Moet een positief geheel getal zijn.
learning_rate Eerste 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 trainingsbatch. Moet een positief geheel getal zijn.
validation_batch_size Grootte van validatiebatch. Moet een positief geheel getal zijn.
warmup_ratio Verhouding van de totale trainingsstappen die worden gebruikt voor een lineaire opwarming 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 het geheel getal en training_batch_size de door tekenreeks getypte model_name hyperparameters. Alle continue hyperparameters, zoals learning_rate ondersteuning voor alle distributies.

Uw opruimen-instellingen configureren

U kunt alle opschoningsparameters configureren. Meerdere modelsubruimten kunnen worden samengesteld met hyperparameters die voorwaardelijk zijn voor het respectieve model, zoals te zien is in elk voorbeeld van hyperparameterafstemming.

Dezelfde discrete en continue distributieopties die beschikbaar zijn voor algemene HyperDrive-taken, worden hier ondersteund. Alle negen opties in Hyperparameter-afstemming van een model bekijken

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

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 opruimen

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

Steekproeftype Syntaxis van AutoML-taak
Willekeurige steekproeven random
Rastersampling grid
Bayesiaanse steekproeven bayesian

Experimentbudget

U kunt eventueel het experimentbudget voor uw AutoML NLP-trainingstaak 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 voor 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 max_nodeshet maximum aantal knooppunten van het back-up-rekencluster dat voor de taak moet worden gebruikt. Deze parameters behoren ook tot de limits sectie.

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

limits: 
  timeout_minutes: 60 
  trial_timeout_minutes: 20 
  max_nodes: 2 

Beleid voor vroegtijdige beëindiging

U kunt automatisch slecht presterende uitvoeringen beëindigen met een beleid voor vroegtijdige beëindiging. Vroegtijdige beëindiging verbetert de rekenefficiëntie, waardoor rekenresources worden bespaard die anders zouden zijn besteed aan minder veelbelovende configuraties. AutoML NLP ondersteunt beleidsregels 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 opruimen

U kunt de resources beheren die zijn besteed aan uw hyperparameterveiling door de max_trials en de max_concurrent_trials voor de opruimen op te geven.

Parameter Details
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 standaardhyperparameters voor een bepaald modelalgoritmen 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 tot de resources die beschikbaar zijn in het opgegeven rekendoel. Zorg ervoor dat het rekendoel de beschikbare resources heeft voor de gewenste gelijktijdigheid.
  • max_concurrent_trials wordt intern beperkt max_trials . Als gebruikerssets max_concurrent_trials=4bijvoorbeeld , max_trials=2worden waarden intern bijgewerkt als max_concurrent_trials=2, max_trials=2.
  • U kunt alle gerelateerde parameters voor opruimen configureren, zoals wordt weergegeven in dit voorbeeld.

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

    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 lage scores of hogere verlieswaarden:

    Voor bepaalde gegevenssets, ongeacht de NLP-taak, kunnen de gegenereerde scores zeer laag zijn, soms zelfs nul. Deze score gaat gepaard met hogere verlieswaarden die impliceren dat het neurale netwerk niet kon worden geconvergeerd. Deze scores kunnen vaker optreden op bepaalde GPU-SKU's.

    Hoewel dergelijke gevallen ongebruikelijk zijn, zijn ze mogelijk en de beste manier om het te verwerken is om hyperparameterafstemming te gebruiken en een breder scala aan waarden te bieden, met name voor hyperparameters zoals leersnelheden. Totdat onze hyperparameterafstemming beschikbaar is in productie, raden we gebruikers aan deze problemen te ervaren, om de NC6- of ND6-rekenclusters te gebruiken. Deze clusters hebben doorgaans trainingsresultaten die redelijk stabiel zijn.

    Volgende stappen