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

GÄLLER FÖR:Azure CLI ml-tillägg v2 (aktuellt)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 uppgifter som 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 på beräkningskluster med flera GPU:n för snabbare modellträning. Den resulterande modellen kan operationaliseras i stor skala genom att utnyttja MlOps-funktionerna i Azure ML.

Förutsättningar

GÄLLER FÖR:Azure CLI ml-tillägg v2 (aktuellt)

  • 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 i dag.

  • En Azure Machine Learning-arbetsyta med en GPU-träningsberäkning. Information om hur du skapar arbetsytan finns i Skapa arbetsyteresurser. Se 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 att du är bekant med att konfigurera ett automatiserat maskininlärningsexperiment. Följ instruktionerna för att se de viktigaste 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 Description
Textklassificering med 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.

Du kan till exempel klassificera ett filmskript 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

Du kan till exempel klassificera ett filmskript som "Komedi" eller "Romantiskt" eller "Komedi och romantiskt".
Igenkänning av namngiven entitet (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ärden

Tröskelvärden är funktionen med flera etiketter som gör att användarna kan välja det tröskelvärde som de förutsagda sannolikheterna leder till en positiv etikett över. 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 identifieringar.

Förbereda data

För NLP-experiment i automatiserad ML kan du hämta dina data i .csv format för klassificeringsuppgifter med 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 ytterligare information om det dataformat som accepteras för varje uppgift.

Flera klasser

För klassificering med flera klasser kan datauppsättningen 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 datauppsättningskolumnerna 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 etikettkolumn Flera etiketter En etikett Inga etiketter
Oformaterad text "label1, label2, label3" "label1" ""
Python-lista med citattecken "['label1','label2','label3']" "['label1']" "[]"

Viktigt

Olika parser 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 citattecken.

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

Före träningen tillämpar automatiserad ML datavalideringskontroller 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 det relevanta felmeddelandet. Följande är kraven för att klara dataverifieringskontroller för varje uppgift.

Anteckning

Vissa datavalideringskontroller gäller för både tränings- och valideringsuppsättningen, medan andra endast gäller för träningsuppsättningen. Om testdatauppsättningen inte kunde klara datavalidering 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
Flera klasser och flera etiketter Träningsdata och valideringsdata måste ha
– Samma uppsättning kolumner
- Samma ordning på kolumner från vänster till höger
– Samma datatyp för kolumner med samma namn
- Minst två unika etiketter
– Unika kolumnnamn i varje datauppsättning (träningsuppsättningen kan till exempel inte ha flera kolumner med namnet Ålder)
Endast flera klasser Ingen
Endast flera etiketter – Kolumnformatet för etikett 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 ska inte börja med en tom rad
- Varje rad måste vara en tom rad, eller följa formatet {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änsligt
- Exakt en tom rad mellan två exempel
– Exakt en tom rad i slutet av filen

Konfigurera experiment

Automatisk 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 i rapporteringssyfte. 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.
    • Om du vill använda textfunktionen för långa intervall 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 CLI v2 AutoML-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 använder 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.

Aktivitetstyp Syntax för dataset_language Textmodellalgoritm
Textklassificering med flera etiketter "eng"
"deu"
"mul"
Engelska BERT uncased
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"
Engelska 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"
Engelska 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 funktionaliseringsavsnittet i YAML-konfigurationsfilen. BERT används också i funktionaliseringsprocessen för automatiserad ML-experimentträning, läs mer om BERT-integrering och funktionalisering i automatiserad ML.

featurization:
   dataset_language: "eng"

Distribuerad träning

Du kan också köra dina NLP-experiment med distribuerad träning i ett Azure ML-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 rekommenderas 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 tillhandahålla 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 har valts och svepts ö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
  • distilbert_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 betydligt 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.

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 optimerarens stegfunktion.

Detta används för att använda en effektiv batchstorlek som är gradient_accumulation_steps gånger större än den maximala storleken som passar GPU:n.
Måste vara ett positivt heltal.
learning_rate Inledande inlärningstakt. Måste vara en flottör 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 Batchstorlek för validering. 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 optimizern ä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 heltalstyp och training_batch_size 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, enligt nedan i varje exempel.

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 söker igenom hyperparametrar måste du ange den samplingsmetod som ska användas för att sopa ö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 autoML NLP-träningsjobbet 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 säkerhetskopierade beräkningsklustret 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 avslutning

Du kan automatiskt avsluta dåligt presterande körningar med en princip för tidig avslutning. Tidig avslutning förbättrar beräkningseffektiviteten, vilket 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 hyperparameterrensningen.

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 Detalj
max_trials Parameter för maximalt antal konfigurationer som ska rensas. Måste vara ett heltal mellan 1 och 1 000. 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 för 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 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 exemplet nedan.

    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 mycket 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. Detta åtföljs av högre förlustvärden som innebär att det neurala nätverket inte kunde konvergera. Detta 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 använda justering av hyperparametrar och tillhandahålla ett bredare värdeintervall, särskilt för hyperparametrar som inlärningshastigheter. Tills vår justeringsfunktion för hyperparametrar är tillgänglig i produktion rekommenderar vi användare, som har sådana problem, att utnyttja NC6- eller ND6-beräkningskluster, där vi har funnit att träningsresultaten är ganska stabila.

    Nästa steg