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 Mašinsko učenje. Du kan skapa NLP-modeller med automatiserad ML via Azure Mašinsko učenje Python SDK v2 eller Azure Mašinsko učenje 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-Mašinsko učenje dataetiketter 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 Funktionerna i Azure Mašinsko učenje MLOps.
Förutsättningar
GÄLLER FÖR: Azure CLI ml-tillägget 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 Mašinsko učenje i dag.
En Azure Mašinsko učenje-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 Mašinsko učenje 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.
Ett 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änslig - 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-tillägget v2 (aktuellt)
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-tillägget v2 (aktuellt)
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 på ett Azure Mašinsko učenje beräkningskluster.
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Skicka AutoML-jobbet
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
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
GÄLLER FÖR: Azure CLI ml-tillägget v2 (aktuellt)
Se följande YAML-exempelfiler för varje NLP-uppgift.
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 Mašinsko učenje 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 lista över modeller i Azure Mašinsko učenje modellregister 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-tillägget v2 (aktuellt)
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_minutes
limits
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_minutes
också , 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-tillägget v2 (aktuellt)
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 | Detalj |
---|---|
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! max_concurrent_trials är begränsad max_trials till internt. Om användaren till exempel anger max_concurrent_trials=4 , max_trials=2 uppdateras 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-tillägget v2 (aktuellt)
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.