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)
Azure-abonnement. Als u geen Azure-abonnement hebt, meldt u zich vandaag nog aan om de gratis of betaalde versie van Azure Machine Learning te proberen.
Een Azure Machine Learning-werkruimte met een GPU-trainingsrekenproces. Zie Werkruimtebronnen maken om de werkruimte te maken. Zie voor meer informatie de grootten van voor GPU geoptimaliseerde virtuele machines voor meer informatie over GPU-exemplaren die door Azure worden geleverd.
Waarschuwing
Ondersteuning voor meertalige modellen en het gebruik van modellen met een langere maximale reekslengte is nodig voor verschillende NLP-gebruiksvoorbeelden, zoals niet-Engelse gegevenssets en documenten met een langer bereik. Als gevolg hiervan is voor deze scenario's mogelijk een hoger GPU-geheugen nodig om modeltraining te laten slagen, zoals de NC_v3-serie of de ND-serie.
De Azure Machine Learning CLI v2 is geïnstalleerd. Zie de CLI (v2) installeren en instellen voor hulp bij het bijwerken en installeren van de nieuwste versie.
In dit artikel wordt ervan uitgegaan dat u bekend bent met het instellen van een geautomatiseerd machine learning-experiment. Volg de instructies om de belangrijkste ontwerppatronen voor geautomatiseerde machine learning-experimenten te bekijken.
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 O zijn. 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_name
en 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
VAN TOEPASSING OP:Azure CLI ml-extensie v2 (huidige)
Zie de volgende YAML-voorbeeldbestanden voor elke NLP-taak.
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_minutes
ook, de maximale hoeveelheid tijd in minuten die een afzonderlijke proefversie kan uitvoeren voordat deze wordt beëindigd, en max_nodes
het 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: max_concurrent_trials wordt intern beperkt max_trials . Als gebruikerssets max_concurrent_trials=4 bijvoorbeeld , max_trials=2 worden 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.