Konfigurera AutoML för att träna en bearbetningsmodell för naturligt språk

GÄLLER FÖR:Azure CLI ml extension v2 (current)Python SDK azure-ai-ml v2 (aktuell)

I den här artikeln får du lära dig hur du tränar NLP-modeller (natural language processing) med automatiserad ML i Azure Machine Learning. Du kan skapa NLP-modeller med automatiserad ML via Azure Machine Learning Python SDK v2 eller Azure Machine Learning CLI v2.

Automatiserad ML stöder NLP som gör det möjligt för ML-proffs och dataforskare att ta med egna textdata och skapa anpassade modeller för NLP-uppgifter. NLP-uppgifter omfattar textklassificering i flera klasser, textklassificering med flera etiketter och namngiven entitetsigenkänning (NER).

Du kan integrera sömlöst med Azure Machine Learning-dataetikettfunktionen för att märka dina textdata eller ta med dina befintliga etiketterade data. Automatiserad ML ger möjlighet att använda distribuerad träning i beräkningskluster med flera GPU:er för snabbare modellträning. Den resulterande modellen kan operationaliseras i stor skala med hjälp av MlOps-funktionerna i Azure Machine Learning.

Förutsättningar

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

  • En Azure-prenumeration. Om du inte har en Azure-prenumeration kan du registrera dig för att prova den kostnadsfria eller betalda versionen av Azure Machine Learning idag.

  • En Azure Machine Learning-arbetsyta med en GPU-träningsberäkning. Information om hur du skapar arbetsytan finns i Skapa arbetsyteresurser. Mer information finns i GPU-optimerade storlekar för virtuella datorer för mer information om GPU-instanser som tillhandahålls av Azure.

    Varning

    Stöd för flerspråkiga modeller och användning av modeller med längre maximal sekvenslängd är nödvändigt för flera NLP-användningsfall, till exempel icke-engelska datamängder och dokument med längre intervall. Därför kan dessa scenarier kräva högre GPU-minne för att modellträningen ska lyckas, till exempel NC_v3-serien eller ND-serien.

  • Azure Machine Learning CLI v2 installerat. Vägledning för att uppdatera och installera den senaste versionen finns i Installera och konfigurera CLI (v2).

  • Den här artikeln förutsätter viss kunskap om hur du konfigurerar ett automatiserat maskininlärningsexperiment. Följ instruktionerna för att se de huvudsakliga designmönstren för automatiserade maskininlärningsexperiment.

Välj din NLP-uppgift

Ta reda på vilken NLP-uppgift du vill utföra. För närvarande stöder automatiserad ML följande nlp-uppgifter för djupa neurala nätverk.

Uppgift AutoML-jobbsyntax beskrivning
Textklassificering i flera klasser CLI v2: text_classification
SDK v2: text_classification()
Det finns flera möjliga klasser och varje exempel kan klassificeras som exakt en klass. Uppgiften är att förutsäga rätt klass för varje exempel.

Till exempel klassificera ett filmmanus som "Komedi" eller "Romantiskt".
Textklassificering med flera etiketter CLI v2: text_classification_multilabel
SDK v2: text_classification_multilabel()
Det finns flera möjliga klasser och varje exempel kan tilldelas valfritt antal klasser. Uppgiften är att förutsäga alla klasser för varje exempel

Till exempel klassificera ett filmmanus som "Komedi" eller "Romantiskt" eller "Komedi och romantiskt".
Igenkänning av namngiven enhet (NER) CLI v2:text_ner
SDK v2: text_ner()
Det finns flera möjliga taggar för token i sekvenser. Uppgiften är att förutsäga taggarna för alla token för varje sekvens.

Till exempel extrahera domänspecifika entiteter från ostrukturerad text, till exempel kontrakt eller finansiella dokument.

Tröskelvärde

Tröskelvärde är funktionen med flera etiketter som gör att användarna kan välja det tröskelvärde som de förväntade sannolikheterna leder till en positiv etikett. Lägre värden ger fler etiketter, vilket är bättre när användarna bryr sig mer om återkallande, men det här alternativet kan leda till fler falska positiva identifieringar. Högre värden tillåter färre etiketter och därmed bättre för användare som bryr sig om precision, men det här alternativet kan leda till fler falska negativa värden.

Förbereda data

För NLP-experiment i automatiserad ML kan du ta med dina data i .csv format för klassificeringsuppgifter för flera klasser och flera etiketter. För NER-uppgifter stöds tvåkolumnsfiler .txt som använder ett blanksteg som avgränsare och följer CoNLL-formatet. Följande avsnitt innehåller information om det dataformat som godkänts för varje uppgift.

Flera klasser

För klassificering med flera klasser kan datamängden innehålla flera textkolumner och exakt en etikettkolumn. I följande exempel finns bara en textkolumn.

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"

Flera etiketter

För klassificering med flera etiketter skulle datamängdskolumnerna vara samma som flera klasser, men det finns särskilda formatkrav för data i etikettkolumnen. De två godkända formaten och exemplen finns i följande tabell.

Formatalternativ för etikettkolumner Flera etiketter En etikett Inga etiketter
Oformaterad text "label1, label2, label3" "label1" ""
Python-lista med citattecken "['label1','label2','label3']" "['label1']" "[]"

Viktigt!

Olika parsers används för att läsa etiketter för dessa format. Om du använder formatet oformaterad text använder du bara alfabetiskt, numeriskt och '_' i etiketterna. Alla andra tecken identifieras som avgränsare för etiketter.

Om etiketten till exempel är "cs.AI", läss den som "cs" och "AI". Med Python-listformatet skulle etiketten vara "['cs.AI']", som läses som "cs.AI" .

Exempeldata för flera etiketter i oformaterad textformat.

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

Exempeldata för flera etiketter i Python-listan med citatteckenformat.

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

Namngiven entitetsigenkänning (NER)

Till skillnad från flera klasser eller flera etiketter, som tar .csv formatdatauppsättningar, kräver namngiven entitetsigenkänning CoNLL-format. Filen måste innehålla exakt två kolumner och i varje rad avgränsas token och etikett med ett enda blanksteg.

Exempel:

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

Datavalidering

Innan en modell tränar tillämpar automatiserad ML dataverifieringskontroller på indata för att säkerställa att data kan förbearbetas korrekt. Om någon av dessa kontroller misslyckas misslyckas körningen med relevant felmeddelande. Följande är kraven för att klara dataverifieringskontroller för varje uppgift.

Kommentar

Vissa dataverifieringskontroller gäller både tränings- och valideringsuppsättningen, medan andra endast gäller för träningsuppsättningen. Om testdatauppsättningen inte kunde klara dataverifieringen innebär det att automatiserad ML inte kunde samla in den och det finns en risk för modellinferensfel eller en minskning av modellens prestanda.

Uppgift Kontroll av dataverifiering
Alla uppgifter Minst 50 träningsexempel krävs
Multi-class och Multi-label Träningsdata och valideringsdata måste ha
– Samma uppsättning kolumner
- Samma kolumnordning från vänster till höger
– Samma datatyp för kolumner med samma namn
– Minst två unika etiketter
– Unika kolumnnamn inom varje datauppsättning (träningsuppsättningen kan till exempel inte ha flera kolumner med namnet Ålder)
Endast flera klasser Ingen
Endast flera etiketter – Etikettkolumnformatet måste vara i godkänt format
- Minst ett exempel ska ha 0 eller 2+ etiketter, annars bör det vara en multiclass uppgift
– Alla etiketter ska vara i str eller int format, utan överlappande. Du bör inte ha både etikett 1 och etikett '1'
Endast NER - Filen får inte börja med en tom rad
- Varje rad måste vara en tom rad, eller följa format {token} {label}, där det finns exakt ett blanksteg mellan token och etiketten och inget tomt utrymme efter etiketten
– Alla etiketter måste börja med I-, B-eller vara exakt O. Skiftlägeskänsliga
- Exakt en tom rad mellan två exempel
– Exakt en tom rad i slutet av filen

Konfigurera experiment

Automatiserad ML:s NLP-funktion utlöses via aktivitetsspecifika automl typjobb, vilket är samma arbetsflöde för att skicka automatiserade ML-experiment för klassificerings-, regressions- och prognosuppgifter. Du skulle ange parametrar som du skulle göra för dessa experiment, till exempel experiment_name, compute_name och dataindata.

Det finns dock viktiga skillnader:

  • Du kan ignorera primary_metric, eftersom det bara är för rapporteringsändamål. För närvarande tränar automatiserad ML bara en modell per körning för NLP och det finns inget modellval.
  • Parametern label_column_name krävs endast för textklassificeringsuppgifter med flera klasser och flera etiketter.
  • Om mer än 10 % av exemplen i datamängden innehåller fler än 128 token anses det vara ett långt intervall.
    • För att kunna använda funktionen för långväga text bör du använda en NC6 eller högre/bättre SKU:er för GPU: NCv3-serien eller ND-serien .

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

För automatiserade CLI v2-ml-jobb konfigurerar du experimentet i en YAML-fil som följande.

Språkinställningar

Som en del av NLP-funktionen stöder automatiserad ML 104 språk som utnyttjar språkspecifika och flerspråkiga förtränade DNN-modeller, till exempel BERT-serien med modeller. För närvarande är språkvalet som standard engelska.

I följande tabell sammanfattas vilken modell som tillämpas baserat på aktivitetstyp och språk. Se den fullständiga listan över språk som stöds och deras koder.

Uppgiftstyp Syntax för dataset_language Textmodellalgoritm
Textklassificering med flera etiketter "eng"
"deu"
"mul"
Engelska BERT utan inkapslade
Tyska BERT
Flerspråkig BERT

För alla andra språk tillämpar automatiserad ML flerspråkig BERT
Textklassificering i flera klasser "eng"
"deu"
"mul"
Engelskt BERT-skiftläge
Flerspråkig BERT

För alla andra språk tillämpar automatiserad ML flerspråkig BERT
Namngiven entitetsigenkänning (NER) "eng"
"deu"
"mul"
Engelskt BERT-skiftläge
Tyska BERT
Flerspråkig BERT

För alla andra språk tillämpar automatiserad ML flerspråkig BERT

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

Du kan ange ditt datauppsättningsspråk i avsnittet featurization i din YAML-konfigurationsfil. BERT används också i funktionaliseringsprocessen för automatiserad ML-experimentträning, läs mer om BERT-integrering och funktionalisering i automatiserad ML (SDK v1).

featurization:
   dataset_language: "eng"

Distribuerad träning

Du kan också köra dina NLP-experiment med distribuerad träning i ett Azure Machine Learning-beräkningskluster.

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

Skicka AutoML-jobbet

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

Om du vill skicka ditt AutoML-jobb kan du köra följande CLI v2-kommando med sökvägen till din .yml-fil, arbetsytans namn, resursgrupp och prenumerations-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]

Kodexempel

Modellsopning och justering av hyperparametrar (förhandsversion)

Viktigt!

Den här funktionen är för närvarande i allmänt tillgänglig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade.

Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Med AutoML NLP kan du ange en lista över modeller och kombinationer av hyperparametrar via hyperparameterns sökutrymme i konfigurationen. Hyperdrive genererar flera underordnade körningar, som var och en är en finjusteringskörning för en viss NLP-modell och en uppsättning hyperparametervärden som valdes och sveptes över baserat på det angivna sökutrymmet.

Modellalgoritmer som stöds

Alla förtränade DNN-modeller för text som för närvarande är tillgängliga i AutoML NLP för finjustering visas nedan:

  • bert-base-cased
  • bert-large-uncased
  • bert-base-multilingual-cased
  • bert-base-german-cased
  • bert-large-cased
  • destilbert-base-cased
  • distilbert-base-uncased
  • roberta-base
  • roberta-large
  • distilroberta-base
  • xlm-roberta-base
  • xlm-roberta-large
  • xlnet-base-cased
  • xlnet-large-cased

Observera att de stora modellerna är större än deras basmotsvarigheter. De är vanligtvis mer högpresterande, men de tar upp mer GPU-minne och tid för träning. Därför är deras SKU-krav strängare: vi rekommenderar att du kör på virtuella datorer i ND-serien för bästa resultat.

Modellalgoritmer som stöds – HuggingFace (förhandsversion)

Med den nya serverdelen som körs på Azure Machine Learning-pipelines kan du dessutom använda valfri klassificeringsmodell för text/token från HuggingFace Hub för textklassificering, tokenklassificering som ingår i transformeringsbiblioteket (till exempel microsoft/deberta-large-mnli). Du kan också hitta en kuraterad lista över modeller i Azure Machine Learning-modellregistret som har verifierats med pipelinekomponenterna.

Om du använder en HuggingFace-modell utlöses körningar med hjälp av pipelinekomponenter. Om både äldre modeller och HuggingFace-modeller används utlöses alla körningar/utvärderingsversioner med hjälp av komponenter.

Hyperparametrar som stöds

I följande tabell beskrivs de hyperparametrar som AutoML NLP stöder.

Parameternamn beskrivning Syntax
gradient_accumulation_steps Antalet bakåtåtgärder vars toningar ska summeras innan du utför ett steg av gradient descent genom att anropa optimeringens stegfunktion.

Detta är att använda en effektiv batchstorlek, som är gradient_accumulation_steps gånger större än den maximala storlek som passar GPU:n.
Måste vara ett positivt heltal.
learning_rate Inledande inlärningsfrekvens. Måste vara en float i intervallet (0, 1).
learning_rate_scheduler Typ av schemaläggare för inlärningsfrekvens. Måste välja mellan linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup.
model_name Namnet på en av de modeller som stöds. Måste välja mellan 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 Antal träningsepoker. Måste vara ett positivt heltal.
training_batch_size Träningsbatchstorlek. Måste vara ett positivt heltal.
validation_batch_size Valideringsbatchstorlek. Måste vara ett positivt heltal.
warmup_ratio Förhållandet mellan totalt antal träningssteg som används för en linjär uppvärmning från 0 till learning_rate. Måste vara en flottör i intervallet [0, 1].
weight_decay Värdet för viktförfall när optimeraren är sgd, adam eller adamw. Måste vara en flottör i intervallet [0, 1].

Alla diskreta hyperparametrar tillåter endast valfördelningar, till exempel heltalstypade training_batch_size och strängtypade model_name hyperparametrar. Alla kontinuerliga hyperparametrar som learning_rate stöder alla distributioner.

Konfigurera dina svepinställningar

Du kan konfigurera alla sveprelaterade parametrar. Flera modellunderrymder kan konstrueras med hyperparametrar som är villkorade för respektive modell, vilket visas i varje hyperparameterjusteringsexempel.

Samma diskreta och kontinuerliga distributionsalternativ som är tillgängliga för allmänna HyperDrive-jobb stöds här. Se alla nio alternativen i Hyperparameter som justerar en modell

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

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 

Provtagningsmetoder för svepet

När du sveper hyperparametrar måste du ange den samplingsmetod som ska användas för att svepa över det definierade parameterutrymmet. För närvarande stöds följande samplingsmetoder med parametern sampling_algorithm :

Samplingstyp AutoML-jobbsyntax
Stickprov random
Rutnätssampling grid
Bayesiansk sampling bayesian

Experimentbudget

Du kan också ange experimentbudgeten för ditt AutoML NLP-träningsjobb med hjälp av parametern timeout_minuteslimits i - hur lång tid i minuter innan experimentet avslutas. Om ingen anges är standardtidsgränsen för experiment sju dagar (högst 60 dagar).

AutoML NLP stöder trial_timeout_minutesockså , den maximala tiden i minuter som en enskild utvärderingsversion kan köras innan den avslutas, och max_nodes, det maximala antalet noder från det beräkningskluster som ska användas för jobbet. Dessa parametrar tillhör också avsnittet limits .

GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

limits: 
  timeout_minutes: 60 
  trial_timeout_minutes: 20 
  max_nodes: 2 

Principer för tidig uppsägning

Du kan automatiskt avsluta dåligt presterande körningar med en princip för tidig avslutning. Tidig avslutning förbättrar beräkningseffektiviteten och sparar beräkningsresurser som annars skulle ha spenderats på mindre lovande konfigurationer. AutoML NLP stöder principer för tidig avslutning med hjälp av parametern early_termination . Om ingen avslutningsprincip har angetts körs alla konfigurationer för att slutföras.

Läs mer om hur du konfigurerar principen för tidig avslutning för hyperparametersvepningen.

Resurser för svepet

Du kan styra de resurser som spenderas på hyperparametersvepningen max_trials genom att ange och max_concurrent_trials för svepet.

Parameter Information
max_trials Parameter för maximalt antal konfigurationer som ska rensas. Måste vara ett heltal mellan 1 och 1000. När du bara utforskar standardhyperparametrar för en viss modellalgoritm anger du den här parametern till 1. Standardvärdet är 1.
max_concurrent_trials Maximalt antal körningar som kan köras samtidigt. Om det anges måste det vara ett heltal mellan 1 och 100. Standardvärdet är 1.

OBS!
  • Antalet samtidiga körningar är gated på de resurser som är tillgängliga i det angivna beräkningsmålet. Kontrollera att beräkningsmålet har tillgängliga resurser för önskad samtidighet.
  • max_concurrent_trials är begränsad max_trials till internt. Om användaren till exempel anger max_concurrent_trials=4, max_trials=2uppdateras värdena internt som max_concurrent_trials=2, max_trials=2.
  • Du kan konfigurera alla sveprelaterade parametrar enligt det här exemplet.

    GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)

    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
    

    Kända problem

    Hantera låga poäng eller högre förlustvärden:

    För vissa datauppsättningar, oavsett NLP-uppgift, kan de poäng som genereras vara mycket låga, ibland till och med noll. Den här poängen åtföljs av högre förlustvärden som innebär att det neurala nätverket inte kunde konvergera. Dessa poäng kan inträffa oftare på vissa GPU-SKU:er.

    Även om sådana fall är ovanliga är de möjliga och det bästa sättet att hantera det är att utnyttja hyperparameterjustering och tillhandahålla ett bredare värdeintervall, särskilt för hyperparametrar som inlärningsfrekvenser. Tills vår justeringsfunktion för hyperparametrar är tillgänglig i produktion rekommenderar vi användare som har dessa problem att använda NC6- eller ND6-beräkningskluster. Dessa kluster har vanligtvis träningsresultat som är ganska stabila.

    Nästa steg