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.
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
GÄLLER FÖR:Azure CLI ml extension v2 (aktuell)
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 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_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 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! max_concurrent_trials är begränsad max_trials 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 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.