Configurare AutoML per eseguire il training di un modello di elaborazione del linguaggio naturale
SI APPLICA A:Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)Python SDK azure-ai-ml v2 (corrente)
In questo articolo viene illustrato come eseguire il training di modelli di elaborazione del linguaggio naturale con ML automatizzato in Azure Machine Learning. È possibile creare modelli di elaborazione del linguaggio naturale con ML automatizzato tramite Azure Machine Learning Python SDK v2 o l'interfaccia della riga di comando v2 di Azure Machine Learning.
ML automatizzato supporta l'elaborazione del linguaggio naturale che consente a professionisti e scienziati dei dati di ML di usare dati di testo personali e creare modelli personalizzati per le attività di elaborazione del linguaggio naturale. Le attività di elaborazione del linguaggio naturale includono la classificazione di testo multi-classe, la classificazione di testo con più etichette e Riconoscimento entità denominata.
È possibile eseguire facilmente l'integrazione con la funzionalità di etichettatura dei dati di Azure Machine Learning per etichettare i dati di testo o importare i dati con etichetta esistenti. ML automatizzato consente di scegliere se usare il training distribuito in cluster di elaborazione con più GPU per un training più rapido del modello. Il modello risultante può essere reso operativo su larga scala usando le funzionalità MLOps di Azure Machine Learning.
Prerequisiti
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Abbonamento di Azure. Se non si ha una sottoscrizione di Azure, è possibile iscriversi per provare oggi stesso la versione gratuita o a pagamento di Azure Machine Learning.
Un'area di lavoro di Azure Machine Learning con un'istanza di ambiente di calcolo di training della GPU. Per creare l'area di lavoro, vedere Creare risorse dell'area di lavoro. Per altre informazioni, vedere Dimensioni delle macchine virtuali ottimizzate per la GPU per maggiori dettagli sulle istanze di GPU fornite da Azure.
Avviso
Il supporto per modelli multilingue e l'uso di modelli con una lunghezza massima della sequenza più lunga è necessario per diversi casi d'uso di elaborazione del linguaggio naturale, ad esempio set di dati non in lingua inglese e documenti di intervallo più lunghi. Di conseguenza, questi scenari possono richiedere una maggiore quantità di memoria GPU per completare correttamente il training del modello, ad esempio la serie NC_v3 o le serie ND.
Interfaccia della riga di comando v2 di Azure Machine Learning installata. Per indicazioni su come aggiornare e installare la versione più recente, vedere Installare e configurare l'interfaccia della riga di comando (v2).
Questo articolo presuppone una certa conoscenza della configurazione di un esperimento di Machine Learning automatizzato. Seguire la procedura per visualizzare gli schemi progettuali principali dell'esperimento di Machine Learning automatizzato.
Selezionare l'attività di elaborazione del linguaggio naturale
Determinare l'attività di elaborazione del linguaggio naturale che si vuole eseguire. Attualmente, ML automatizzato supporta le attività di elaborazione del linguaggio naturale della rete neurale profonda.
Attività | Sintassi del processo di AutoML | Descrizione |
---|---|---|
Classificazione di testo multi-classe | Interfaccia della riga di comando v2: text_classification SDK v2: text_classification() |
Esistono diverse classi possibili e ogni campione può essere classificato come un'unica classe. L'attività consiste nel prevedere la classe corretta per ogni campione, ad esempio classificare un copione cinematografico come "Commedia" o "Romantico". |
Classificazione di testo con più etichette | Interfaccia della riga di comando v2: text_classification_multilabel SDK v2: text_classification_multilabel() |
Sono presenti più classi possibili e a ogni campione può essere assegnato un numero qualsiasi di classi. L'attività consiste nel prevedere tutte le classi per ogni campione, ad esempio classificare un copione cinematografico come "Commedia" o "Romantico" oppure "Commedia e romantico". |
Riconoscimento delle entità denominate (NER) | Interfaccia della riga di comando v2: text_ner SDK v2: text_ner() |
Esistono più tag possibili per i token nelle sequenze. L'attività consiste nel prevedere i tag di tutti i token per ogni sequenza, ad esempio, l'estrazione di entità specifiche del dominio da testo non strutturato, come contratti o documenti finanziari. |
Definizione della soglia
La definizione della soglia è la funzionalità con più etichette che consente agli utenti di selezionare la soglia in base alla quale le probabilità previste determineranno un'etichetta positiva. Valori inferiori consentono di ottenere più etichette e questo è preferibile quando gli utenti si preoccupano maggiormente del richiamo, ma questa opzione potrebbe portare a un maggior numero di falsi positivi. Valori maggiori consentono di ottenere meno etichette ed è preferibile per gli utenti più interessati alla precisione, ma questa opzione potrebbe portare a un maggior numero di falsi negativi.
Preparazione dei dati
Per gli esperimenti di elaborazione del linguaggio naturale in ML automatizzato, è possibile importare i dati nel formato .csv
per le attività di classificazione multi-classe e con più etichette. Per le attività Riconoscimento entità denominata, sono supportati file .txt
a due colonne che usano uno spazio come separatore e rispettano il formato CoNLL. Nelle sezioni seguenti vengono forniti maggiori dettagli sul formato di dati accettato per ogni attività.
Multi-classe
Per la classificazione multiclasse il set di dati può contenere diverse colonne di testo e solo una colonna di etichetta. Nell'esempio seguente è presente una sola colonna di testo.
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"
Più etichette
Per la classificazione con più etichette, le colonne del set di dati corrispondono a quelle multiclasse, ma sono previsti requisiti di formato speciali per i dati nella colonna di etichetta. I due formati accettati e gli esempi sono riportati nella tabella seguente.
Opzioni di formato per colonne di etichetta | Più etichette | Una sola etichetta | Nessuna etichetta |
---|---|---|---|
Testo normale | "label1, label2, label3" |
"label1" |
"" |
Elenco Python con virgolette | "['label1','label2','label3']" |
"['label1']" |
"[]" |
Importante
Per leggere le etichette per questi formati, vengono usati parser diversi. Se si usa il formato testo normale, usare solo caratteri alfabetici, numerici e '_'
nelle etichette. Tutti gli altri caratteri vengono riconosciuti come separatori delle etichette.
Ad esempio, se l'etichetta è "cs.AI"
, viene letta come "cs"
e "AI"
. Mentre con il formato elenco di Python, l'etichetta sarà "['cs.AI']"
, che viene letta come "cs.AI"
.
Dati di esempio per più etichette in formato testo normale.
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.",""
Dati di esempio per più etichette nel formato elenco Python con virgolette.
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.","[]"
Riconoscimento entità denominata
A differenza dei casi multiclasse o con più etichette, che accettano set di dati in formato .csv
, con Riconoscimento entità denominata è richiesto il formato CoNLL. Il file deve contenere esattamente due colonne e, in ogni riga, il token e l'etichetta sono separati da uno spazio singolo.
ad esempio:
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
Convalida dei dati
Prima del training di un modello, ML automatizzato applica i controlli di convalida dei dati sui dati di input per assicurarsi che i dati possano essere pre-elaborati correttamente. Se uno di questi controlli ha esito negativo, l'esecuzione non riesce e viene visualizzato il messaggio di errore pertinente. Di seguito sono riportati i requisiti per il superamento dei controlli di convalida dei dati per ogni attività.
Nota
Alcuni controlli di convalida dei dati sono applicabili sia al set di training che a quello di convalida, mentre altri sono applicabili solo al set di training. Se il set di dati di test non ha superato la convalida dei dati, ML automatizzato non è riuscito a acquisirlo ed è possibile un errore di inferenza del modello o un calo delle prestazioni del modello.
Attività | Controllo di convalida dei dati |
---|---|
Tutte le attività | Sono necessari almeno 50 campioni di training. |
Multi-classe e con più etichette | I dati di training e la convalida dei dati devono presentare: - Lo stesso set di colonne - Lo stesso ordine di colonne da sinistra a destra - Lo stesso tipo di dati per le colonne con lo stesso nome - Almeno due etichette univoche - Nomi di colonna univoci in ogni set di dati (ad esempio, il set di training non può avere più colonne denominate Age) |
Solo multiclasse | None |
Solo più etichette | - La colonna di etichetta deve essere specificata nel formato accettato - Almeno un campione deve avere 0 o più di due etichette; in caso contrario, deve essere un'attività multiclass - Tutte le etichette devono essere in formato str o int , senza sovrapposizioni. Non è consigliabile avere sia l'etichetta 1 che l'etichetta '1' |
Solo Riconoscimento entità denominata | - Il file non deve iniziare con una riga vuota - Ogni riga deve essere una riga vuota o rispettare il formato {token} {label} , in cui è previsto esattamente uno spazio tra il token e l'etichetta e nessun spazio vuoto dopo l'etichetta - Tutte le etichette devono iniziare con I- , B- o devono essere esattamente O . Fa distinzione tra maiuscole e minuscole. - Esattamente una riga vuota tra due campioni - Esattamente una riga vuota alla fine del file |
Configurare l'esperimento
La funzionalità di elaborazione del linguaggio naturale di ML automatizzato viene attivata tramite processi di tipo di automl
specifici dell'attività e questo corrisponde allo stesso flusso di lavoro per l'invio di esperimenti di ML automatizzato per le attività di classificazione, regressione e previsione. Si impostano parametri in modo analogo a quanto avviene per tali esperimenti, ad esempio experiment_name
, compute_name
e input di dati.
Esistono tuttavia differenze principali:
- È possibile ignorare
primary_metric
, perché viene usato solo per la creazione di report. Attualmente, ML automatizzato esegue il training di un solo modello per ogni esecuzione nell'elaborazione del linguaggio naturale e non è prevista alcuna selezione del modello. - Il parametro
label_column_name
è necessario solo per le attività di classificazione di testo multi-classe e con più etichette. - Se più del 10% dei campioni nel set di dati contiene più di 128 token, viene considerato a intervallo lungo.
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Per i processi di ML automatizzato dell'interfaccia della riga di comando v2, l'esperimento viene configurato in un file YAML simile al seguente.
Impostazioni lingua
Nell'ambito della funzionalità di elaborazione del linguaggio naturale, ML automatizzato supporta 104 lingue che sfruttano modelli DNN di testo specifici e multilingue con training preliminare, come la famiglia di modelli BERT. Attualmente, la lingua selezionata per impostazione predefinita è l'inglese.
Nella tabella seguente sono riepilogati i modelli applicati in base al tipo di attività e alla lingua. Consultare l'elenco completo di lingue e codici supportati.
Tipo di attività | Sintassi per dataset_language |
Algoritmo del modello di testo |
---|---|---|
Classificazione di testo con più etichette | "eng" "deu" "mul" |
BERT inglese senza distinzione tra maiuscole e minuscole BERT tedesco BERT multilingue Per tutte le altre lingue ML automatizzato applica BERT multilingue |
Classificazione di testo multiclasse | "eng" "deu" "mul" |
BERT inglese con distinzione tra maiuscole e minuscole BERT multilingue Per tutte le altre lingue ML automatizzato applica BERT multilingue |
Riconoscimento entità denominata | "eng" "deu" "mul" |
BERT inglese con distinzione tra maiuscole e minuscole BERT tedesco BERT multilingue Per tutte le altre lingue ML automatizzato applica BERT multilingue |
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
È possibile specificare la lingua del set di dati nella sezione di definizione delle funzionalità del file YAML di configurazione. BERT viene usato anche nel processo di definizione delle funzionalità del training dell'esperimento di ML automatizzato. Altre informazioni su integrazione e definizione delle funzionalità di BERT in ML automatizzato (SDK v1).
featurization:
dataset_language: "eng"
Training distribuito
È anche possibile eseguire gli esperimenti di elaborazione del linguaggio naturale con il training distribuito in un cluster di elaborazione di Azure Machine Learning.
Inviare il processo di AutoML
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Per inviare il processo di AutoML, è possibile eseguire il comando dell'interfaccia della riga di comando v2 seguente con il percorso del file .yml, il nome dell'area di lavoro, il gruppo di risorse e l'ID sottoscrizione.
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]
Esempi di codice
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
Vedere i file YAML di esempio seguenti per le singole attività di elaborazione del linguaggio naturale.
Sweep dei modelli e ottimizzazione degli iperparametri (anteprima)
Importante
Questa funzionalità è attualmente in anteprima pubblica. Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero presentare funzionalità limitate.
Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
L'elaborazione del linguaggio naturale di AutoML consente di fornire un elenco di modelli e combinazioni di iperparametri, tramite lo spazio di ricerca degli iperparametri nella configurazione. Hyperdrive genera diverse esecuzioni figlio, ognuna delle quali è un'esecuzione di ottimizzazione per un determinato modello di elaborazione del linguaggio naturale e un set di valori di iperparametri scelti e cancellati in base allo spazio di ricerca fornito.
Algoritmi supportati per i modelli
Di seguito sono elencati tutti i modelli DNN con training preliminare attualmente disponibili nell'elaborazione del linguaggio naturale di AutoML per l'ottimizzazione:
- 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
Tenere presente che i modelli di grandi dimensioni sono più grandi delle rispettive controparti di base. In genere sono più efficienti, ma richiedono una quantità di memoria maggiore per la GPU e più tempo per il training. Di conseguenza, i requisiti degli SKU sono più rigorosi e per risultati ottimali è consigliabile eseguirli in macchine virtuali serie ND.
Algoritmi supportati per i modelli - HuggingFace (anteprima)
Con il nuovo back-end eseguito in pipeline di Azure Machine Learning, è anche possibile usare qualsiasi modello di classificazione di testo/token dall'hub HuggingFace per Text Classification, Token Classification che fa parte della libreria dei trasformer, ad esempio microsoft/deberta-large-mnli. È anche possibile trovare un elenco curato di modelli nel registro dei modelli di Azure Machine Learning convalidati con i componenti della pipeline.
Con qualsiasi modello HuggingFace verranno attivate esecuzioni con i componenti della pipeline. Se si usano entrambi i modelli legacy e HuggingFace, tutte le esecuzioni o le versioni di valutazione verranno attivate usando i componenti.
Iperparametri supportati
La tabella seguente descrive gli iperparametri supportati dall'elaborazione del linguaggio naturale di AutoML.
Nome parametro | Descrizione | Sintassi |
---|---|---|
gradient_accumulation_steps | Il numero di operazioni di versioni precedenti i cui gradienti devono essere sommati prima di eseguire un passaggio di discesa del gradiente chiamando la funzione di passaggio dell'ottimizzatore. Questo significa usare una dimensione effettiva del batch, il cui valore è pari al numero di passaggi indicato da gradient_accumulation_steps e superiore alla dimensione massima adatta alla GPU. |
Deve essere un intero positivo. |
learning_rate | Velocità di apprendimento iniziale. | Deve essere un valore float compreso nell'intervallo (0, 1). |
learning_rate_scheduler | Tipo dell'utilità di pianificazione della velocità di apprendimento. | Deve essere scelto tra linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup . |
model_name | Nome di uno dei modelli supportati. | Deve essere scelto tra 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 | Numero di periodi di training. | Deve essere un intero positivo. |
training_batch_size | Dimensioni del batch di training. | Deve essere un intero positivo. |
validation_batch_size | Dimensioni del batch di convalida. | Deve essere un intero positivo. |
warmup_ratio | Rapporto tra i passaggi di training usati per un riscaldamento lineare da 0 a learning_rate. | Deve essere un valore float compreso nell'intervallo [0, 1]. |
weight_decay | Valore del decadimento del peso quando l'ottimizzatore è sgd, adam o adamw. | Deve essere un valore float compreso nell'intervallo [0, 1]. |
Tutti gli iperparametri discreti consentono solo distribuzioni a scelta, ad esempio gli iperparametri training_batch_size
di tipo integer e model_name
di tipo stringa. Tutti gli iperparametri continui come learning_rate
supportano tutte le distribuzioni.
Configurare le impostazioni di sweeping
È possibile configurare tutti i parametri correlati allo sweeping. È possibile costruire più sottospazi del modello con iperparametri condizionali al rispettivo modello, come illustrato in ogni esempio di ottimizzazione degli iperparametri.
In questo caso sono supportate le stesse opzioni di distribuzione discreta e continua disponibili per i processi HyperDrive generici. Per conoscere tutte e nove le opzioni disponibili, vedere Ottimizzazione di un modello con iperparametri
SI APPLICA A: Estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
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
Metodi di campionamento per lo sweeping
Quando si esegue lo sweep degli iperparametri, è necessario specificare il metodo di campionamento da usare nello spazio dei parametri definito. Attualmente, con il parametro sampling_algorithm
sono supportati i metodi di campionamento seguenti:
Tipo di campionamento | Sintassi del processo di AutoML |
---|---|
Campionamento casuale | random |
Campionamento a griglia | grid |
Campionamento bayesiano | bayesian |
Budget dell'esperimento
Facoltativamente, è possibile specificare il budget dell'esperimento per il processo di training di elaborazione del linguaggio naturale di AutoML usando il parametro timeout_minutes
in limits
, ovvero il tempo in minuti prima del termine dell'esperimento. Se non è specificato, il timeout dell'esperimento predefinito è di sette giorni (massimo 60 giorni).
L'elaborazione del linguaggio naturale di AutoML supporta anche trial_timeout_minutes
, ovvero il tempo massimo in minuti che una singola versione di valutazione può essere eseguita prima di essere terminata e max_nodes
, ovvero il numero massimo di nodi del cluster di elaborazione di backup da usare per il processo. Questi parametri appartengono anche alla sezione limits
.
SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
limits:
timeout_minutes: 60
trial_timeout_minutes: 20
max_nodes: 2
Criteri di interruzione anticipata
È possibile interrompere automaticamente le esecuzioni con prestazioni insufficienti con un criterio di interruzione anticipata. L'interruzione anticipata migliora l'efficienza di calcolo, facendo risparmiare risorse di calcolo che sarebbero state altrimenti spese per configurazioni meno promettenti. L'elaborazione del linguaggio naturale di AutoML supporta i criteri di interruzione anticipata con il parametro early_termination
. Se non viene specificato alcun criterio di interruzione, tutte le configurazioni vengono eseguite fino al completamento.
Altre informazioni su come configurare i criteri di interruzione anticipata per lo sweeping degli iperparametri.
Risorse per lo sweep
È possibile controllare le risorse usate per lo sweep degli iperparametri specificando max_trials
e max_concurrent_trials
per lo sweep.
Parametro | Dettagli |
---|---|
max_trials |
Parametro per il numero massimo di configurazioni su cui eseguire lo sweeping. Deve essere un numero intero compreso tra 1 e 1.000. Quando si esplorano solo gli iperparametri predefiniti per un algoritmo del modello specificato, impostare questo parametro su 1. Il valore predefinito è 1. |
max_concurrent_trials |
Numero massimo di esecuzioni simultanee. Se specificato, deve essere un numero intero compreso tra 1 e 100. Il valore predefinito è 1. NOTA: max_concurrent_trials è limitato al valore di max_trials internamente. Ad esempio, se l'utente imposta max_concurrent_trials=4 , max_trials=2 , i valori verranno aggiornati internamente come max_concurrent_trials=2 , max_trials=2 . |
È possibile configurare tutti i parametri correlati allo sweeping come illustrato in questo esempio.
SI APPLICA A: estensione ML dell'interfaccia della riga di comando di Azure v2 (corrente)
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
Problemi noti
Gestione dei punteggi bassi o valori di perdita più elevati:
Per determinati set di dati, indipendentemente dall'attività di elaborazione del linguaggio naturale, i punteggi prodotti possono essere molto bassi, a volte anche pari a zero. Questo punteggio è accompagnato da valori di perdita più elevati, che implicano una mancata convergenza della rete neurale. Questi punteggi possono essere riscontrati più frequentemente in determinati SKU di GPU.
Anche se questi casi sono insoliti, possono verificarsi e il modo migliore per gestirli è sfruttare l'ottimizzazione degli iperparametri e fornire una gamma più ampia di valori, soprattutto per gli iperparametri come le velocità di apprendimento. Fino a quando la funzionalità di ottimizzazione degli iperparametri non è disponibile nell'ambiente di produzione, si consiglia agli utenti che riscontrano questi problemi di usare i cluster di elaborazione NC6 o ND6. Questi cluster offrono in genere risultati di training abbastanza stabili.