Nastavení Automatizovaného strojového učení pro trénování modelu zpracování přirozeného jazyka
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
Azure-ai-ml v2 sady Python SDK (aktuální)
V tomto článku se dozvíte, jak trénovat modely zpracování přirozeného jazyka (NLP) pomocí automatizovaného strojového učení ve službě Azure Machine Learning. Modely NLP můžete vytvářet pomocí automatizovaného strojového učení prostřednictvím sady Azure Machine Learning Python SDK v2 nebo Azure Machine Learning CLI v2.
Automatizované strojové učení podporuje NLP, což umožňuje odborníkům na strojové učení a datovým vědcům používat vlastní textová data a vytvářet vlastní modely pro úlohy, jako je klasifikace textu s více třídami, klasifikace textu s více popisky a rozpoznávání pojmenovaných entit (NER).
Můžete bezproblémovou integraci s funkcí popisování dat služby Azure Machine Learning a označovat textová data nebo přenést stávající označená data. Automatizované strojové učení nabízí možnost použití distribuovaného trénování na výpočetních clusterech s více GPU pro rychlejší trénování modelů. Výsledný model je možné zprovoznit ve velkém měřítku s využitím funkcí MLOps služby Azure Machine Learning.
Předpoklady
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
Předplatné Azure. Pokud ještě nemáte předplatné Azure, zaregistrujte se a vyzkoušejte bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes.
Pracovní prostor Azure Machine Learning s výpočetními prostředky pro trénování GPU. Informace o vytvoření pracovního prostoru najdete v tématu Vytvoření prostředků pracovního prostoru. Další podrobnosti o instancích GPU poskytovaných Azure najdete v tématu Velikosti virtuálních počítačů optimalizovaných pro GPU.
Upozornění
Podpora vícejazyčných modelů a použití modelů s delší maximální délkou sekvence je nezbytná pro několik případů použití NLP, jako jsou neanglické datové sady a dokumenty s delším rozsahem. V důsledku toho můžou tyto scénáře vyžadovat větší paměť GPU pro úspěšné trénování modelu, například řady NC_v3 nebo ND.
Nainstalované rozhraní příkazového řádku služby Azure Machine Learning v2. Pokyny k aktualizaci a instalaci nejnovější verze najdete v tématu Instalace a nastavení rozhraní příkazového řádku (v2).
Tento článek předpokládá určitou znalost nastavení experimentu automatizovaného strojového učení. Postupujte podle pokynů k zobrazení hlavních vzorů návrhu experimentů automatizovaného strojového učení.
Vyberte úkol NLP.
Určete, jakou úlohu NLP chcete provést. Automatizované strojové učení v současné době podporuje následující úlohy hloubkové neurální sítě NLP.
Úkol | Syntaxe úloh Automatizovaného strojového učení | Description |
---|---|---|
Klasifikace textu s více třídami | ROZHRANÍ PŘÍKAZOVÉHO ŘÁDKU v2: text_classification SDK v2: text_classification() |
Existuje více možných tříd a každý vzorek lze klasifikovat jako přesně jednu třídu. Úkolem je předpovědět správnou třídu pro každý vzorek. Například filmový scénář klasifikuje jako "Komedie" nebo "Romantický". |
Klasifikace textu s více popisky | ROZHRANÍ PŘÍKAZOVÉHO ŘÁDKU v2: text_classification_multilabel SDK v2: text_classification_multilabel() |
Existuje více možných tříd a každému vzorku lze přiřadit libovolný počet tříd. Úkolem je předpovědět všechny třídy pro každý vzorek. Například filmový scénář klasifikuje jako "Komedie", "Romantické" nebo "Komedie a romantika". |
Rozpoznávání pojmenovaných entit (NER) | ROZHRANÍ PŘÍKAZOVÉHO ŘÁDKU v2:text_ner SDK v2: text_ner() |
Existuje několik možných značek pro tokeny v sekvencích. Úkolem je předpovědět značky pro všechny tokeny pro každou sekvenci. Například extrahování entit specifických pro doménu z nestrukturovaného textu, jako jsou smlouvy nebo finanční dokumenty. |
Prahování
Prahové hodnoty je funkce s více popisky, která uživatelům umožňuje vybrat prahovou hodnotu, nad kterou predikované pravděpodobnosti povedou k pozitivnímu popisku. Nižší hodnoty umožňují více popisků, což je lepší, když se uživatelé více zajímají o úplnost, ale tato možnost může vést k více falešně pozitivním výsledkům. Vyšší hodnoty umožňují méně popisků a tím lépe pro uživatele, kteří se zajímají o přesnost, ale tato možnost může vést k většímu počtu falešně negativních výsledků.
Příprava dat
V případě experimentů NLP v automatizovaném strojovém učení můžete přenést data ve .csv
formátu pro úlohy klasifikace s více třídami a s více popisky. U úloh NER se podporují soubory se dvěma sloupci .txt
, které jako oddělovač používají mezeru a odpovídají formátu CoNLL. Následující části obsahují další podrobnosti o formátu dat akceptovaných pro jednotlivé úlohy.
Více tříd
U klasifikace s více třídami může datová sada obsahovat několik textových sloupců a přesně jeden sloupec popisku. Následující příklad obsahuje pouze jeden textový sloupec.
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"
Více popisků
V případě klasifikace s více popisky by sloupce datové sady byly stejné jako sloupce s více třídami, existují však speciální požadavky na formát pro data ve sloupci popisku. Následující tabulka obsahuje dva akceptované formáty a příklady.
Možnosti formátování sloupce popisku | Více popisků | Jeden popisek | Žádné popisky |
---|---|---|---|
Prostý text | "label1, label2, label3" |
"label1" |
"" |
Seznam Pythonu s uvozovkami | "['label1','label2','label3']" |
"['label1']" |
"[]" |
Důležité
Ke čtení popisků pro tyto formáty se používají různé analyzátory. Pokud používáte formát prostého textu, používejte v popiscích jenom abecední, číselné a '_'
abecední. Všechny ostatní znaky jsou rozpoznány jako oddělovač popisků.
Pokud je "cs.AI"
například popisek , čte se jako "cs"
a "AI"
. Zatímco v případě formátu seznamu Pythonu by popisek byl "['cs.AI']"
, který se čte jako "cs.AI"
.
Příklad dat pro více popisků ve formátu prostého textu.
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.",""
Ukázková data pro více popisků v seznamu Pythonu s formátem uvozovek
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.","[]"
Rozpoznávání pojmenovaných entit (NER)
Na rozdíl od více tříd nebo více popisků, které formátují .csv
datové sady, vyžaduje rozpoznávání pojmenovaných entit formát CoNLL. Soubor musí obsahovat přesně dva sloupce a v každém řádku je token a popisek oddělený jedinou mezerou.
Třeba
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
Ověřování dat
Před trénováním automatizované strojové učení provádí kontroly ověření dat u vstupních dat, aby se zajistilo, že se data dají správně předzpracovat. Pokud některá z těchto kontrol selže, spuštění selže s příslušnou chybovou zprávou. Níže jsou uvedené požadavky na úspěšné ověření dat pro jednotlivé úlohy.
Poznámka
Některé kontroly ověření dat se vztahují na trénovací i ověřovací sadu, zatímco jiné se vztahují pouze na trénovací sadu. Pokud testovací datová sada nemůže projít ověřením dat, znamená to, že automatizované strojové učení ji nemůže zachytit a existuje možnost selhání odvozování modelu nebo snížení výkonu modelu.
Úkol | Kontrola ověření dat |
---|---|
Všechny úkoly | Vyžaduje se alespoň 50 trénovacích ukázek. |
Vícetřídní a vícenásobný popisek | Trénovací a ověřovací data musí obsahovat – Stejná sada sloupců - Stejné pořadí sloupců zleva doprava – Stejný datový typ pro sloupce se stejným názvem - Alespoň dva jedinečné popisky – Jedinečné názvy sloupců v rámci každé datové sady (například trénovací sada nemůže mít více sloupců s názvem Age) |
Pouze pro více tříd | Žádné |
Pouze s více popisky | - Formát sloupce popisku musí být v přijatém formátu. - Alespoň jeden vzorek by měl mít popisky 0 nebo 2+ , jinak by to měl být multiclass úkol.- Všechny popisky by měly být ve str formátu nebo int bez překrývání. Neměli byste mít popisek 1 ani popisek. '1' |
Pouze NER | - Soubor by neměl začínat prázdným řádkem. - Každý řádek musí být prázdný nebo musí být ve formátu {token} {label} , kde mezi tokenem a popiskem je přesně jedna mezera a za popiskem žádné prázdné znaky.- Všechny popisky musí začínat na I- , B- nebo musí být přesně O . Malá a velká písmena se rozlišují.- Přesně jedna prázdná čára mezi dvěma vzorky - Přesně jeden prázdný řádek na konci souboru |
Konfigurace experimentu
Funkce NLP automatizovaného strojového učení se aktivuje prostřednictvím úloh specifických automl
pro konkrétní úlohy, což je stejný pracovní postup pro odesílání automatizovaných experimentů ML pro úlohy klasifikace, regrese a prognózování. Parametry byste nastavili stejně jako pro tyto experimenty, například experiment_name
a compute_name
datové vstupy.
Existují však klíčové rozdíly:
- Můžete ignorovat
primary_metric
, protože je to jenom pro účely generování sestav. Automatizované strojové učení v současné době trénuje pouze jeden model na jedno spuštění pro NLP a neexistuje žádný výběr modelu. - Parametr
label_column_name
se vyžaduje pouze pro úlohy klasifikace textu s více třídami a s více popisky. - Pokud více než 10 % vzorků v datové sadě obsahuje více než 128 tokenů, považuje se to za dlouhý rozsah.
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
Pro úlohy automatického strojového učení cli v2 nakonfigurujte experiment v souboru YAML, jako je následující.
Nastavení jazyka
V rámci funkcí NLP podporuje automatizované strojové učení 104 jazyků, které využívají předtrénované modely DNN pro konkrétní jazyk a více jazyků, jako je řada modelů BERT. V současné době je výchozí pro výběr jazyka angličtina.
Následující tabulka shrnuje, jaký model se používá na základě typu úlohy a jazyka. Podívejte se na úplný seznam podporovaných jazyků a jejich kódů.
Typ úkolu | Syntaxe pro dataset_language |
Algoritmus textového modelu |
---|---|---|
Klasifikace textu s více popisky | "eng" "deu" "mul" |
English BERT uncased Německý BERT Vícejazyčný BERT Pro všechny ostatní jazyky používá automatizované strojové učení vícejazyčný BERT. |
Klasifikace textu s více třídami | "eng" "deu" "mul" |
Anglické BERT cased Vícejazyčný BERT Pro všechny ostatní jazyky používá automatizované strojové učení vícejazyčný BERT. |
Rozpoznávání pojmenovaných entit (NER) | "eng" "deu" "mul" |
Anglické BERT cased Německý BERT Vícejazyčný BERT Pro všechny ostatní jazyky používá automatizované strojové učení vícejazyčný BERT. |
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
Jazyk datové sady můžete zadat v části o funkciaturizace konfiguračního souboru YAML. BERT se také používá v procesu procesuaturizace automatizovaného trénování experimentů ML, kde se dozvíte více o integraci a funkciaturizaci BERT v automatizovaném strojovém učení.
featurization:
dataset_language: "eng"
Distribuované trénování
Můžete také spouštět experimenty NLP s distribuovaným trénováním na výpočetním clusteru Azure Machine Learning.
Odeslání úlohy AutoML
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
Pokud chcete odeslat úlohu AutoML, můžete spustit následující příkaz rozhraní příkazového řádku v2 s cestou k souboru .yml, názvu pracovního prostoru, skupině prostředků a ID předplatného.
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]
Příklady kódu
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
Pro každou úlohu NLP si projděte následující ukázkové soubory YAML.
Zametání modelů a ladění hyperparametrů (Preview)
Důležité
Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview se poskytuje bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.
AutoML NLP umožňuje poskytnout seznam modelů a kombinací hyperparametrů prostřednictvím prostoru pro vyhledávání hyperparametrů v konfiguraci. Hyperdrive generuje několik podřízených spuštění, z nichž každé je doladěním pro daný model NLP a sadou hodnot hyperparametrů, které byly vybrány a přemety na základě zadaného vyhledávacího prostoru.
Podporované algoritmy modelu
Všechny předem natrénované textové modely DNN, které jsou aktuálně k dispozici v autoML NLP pro vyladění, jsou uvedené níže:
- 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
Všimněte si, že velké modely jsou výrazně větší než jejich základní protějšky. Obvykle jsou výkonnější, ale zabírají více paměti GPU a času na trénování. Požadavky na skladovou položku jsou proto přísnější: pro zajištění nejlepších výsledků doporučujeme spouštět na virtuálních počítačích řady ND.
Podporované hyperparametry
Následující tabulka popisuje hyperparametry, které autoML NLP podporuje.
Název parametru | Description | Syntax |
---|---|---|
gradient_accumulation_steps | Počet zpětných operací, jejichž přechody se mají sečíst před provedením jednoho kroku gradientního sestupu voláním krokové funkce optimalizátoru. To se využívá k použití efektivní velikosti dávky, která je gradient_accumulation_steps krát větší než maximální velikost, která se hodí pro GPU. |
Musí být kladné celé číslo. |
learning_rate | Počáteční rychlost učení. | Musí se jednat o float v rozsahu (0, 1). |
learning_rate_scheduler | Typ plánovače rychlosti učení | Musíte si vybrat z .linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup |
model_name | Název jednoho z podporovaných modelů | Musíte si vybrat z .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 | Počet epoch trénování | Musí být kladné celé číslo. |
training_batch_size | Velikost trénovací dávky. | Musí být kladné celé číslo. |
validation_batch_size | Velikost ověřovací dávky. | Musí být kladné celé číslo. |
warmup_ratio | Poměr celkového trénovacího postupu použitého pro lineární zahřátí od 0 do learning_rate. | Musí se jednat o float v rozsahu [0, 1]. |
weight_decay | Hodnota hmotnosti se rozpadne, když optimalizátor je sgd, adam nebo adamw. | Musí se jednat o float v rozsahu [0, 1]. |
Všechny diskrétní hyperparametry umožňují pouze distribuce voleb, například celočíselné training_batch_size
a řetězcové model_name
hyperparametry. Všechny spojité hyperparametry, jako je, learning_rate
podporují všechna rozdělení.
Konfigurace nastavení úklidu
Můžete nakonfigurovat všechny parametry související s úklidem. Více podprostorů modelu lze vytvořit s hyperparametry podmíněnými příslušným modelem, jak je vidět níže v každém příkladu.
Tady jsou podporované stejné možnosti diskrétní a průběžné distribuce, které jsou k dispozici pro obecné úlohy HyperDrive. Zobrazení všech devíti možností v tématu Ladění modelu hyperparametrem
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
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
Metody vzorkování pro úklid
Při zametání hyperparametrů je potřeba zadat metodu vzorkování, která se má použít k úklidu definovaného prostoru parametrů. V současné době se s parametrem sampling_algorithm
podporují následující metody vzorkování:
Typ vzorkování | Syntaxe úloh Automatizovaného strojového učení |
---|---|
Náhodné vzorkování | random |
Vzorkování mřížky | grid |
Bayesovské vzorkování | bayesian |
Rozpočet experimentu
Volitelně můžete zadat rozpočet experimentu pro úlohu trénování NLP automatizovaného strojového učení pomocí parametru timeout_minutes
v limits
hodnotě – doba v minutách před ukončením experimentu. Pokud není žádný zadaný, výchozí časový limit experimentu je sedm dnů (maximálně 60 dnů).
AutoML NLP také podporuje trial_timeout_minutes
, maximální dobu v minutách, po kterou může jednotlivá zkušební verze běžet před ukončením, a max_nodes
, maximální počet uzlů z záložního výpočetního clusteru, které se mají pro úlohu využít. Tyto parametry také patří do oddílu limits
.
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
limits:
timeout_minutes: 60
trial_timeout_minutes: 20
max_nodes: 2
Zásady předčasného ukončení
Se zásadami předčasného ukončení můžete automaticky ukončit špatně fungující spuštění. Předčasné ukončení zlepšuje výpočetní efektivitu a šetří výpočetní prostředky, které by jinak byly vynaloženy na méně slibné konfigurace. Funkce Automatického strojového učení podporuje zásady předčasného ukončení pomocí parametru early_termination
. Pokud nejsou zadané žádné zásady ukončení, spustí se všechny konfigurace až do dokončení.
Přečtěte si další informace o tom, jak nakonfigurovat zásady předčasného ukončení pro úklid hyperparametrů.
Zdroje pro úklid
Prostředky vynaložené na zametání hyperparametrů můžete řídit zadáním max_trials
parametrů a max_concurrent_trials
pro úklid.
Parametr | Podrobnosti |
---|---|
max_trials |
Parametr pro maximální počet konfigurací, které se mají uklidit. Musí to být celé číslo od 1 do 1000. Při zkoumání pouze výchozích hyperparametrů pro daný algoritmus modelu nastavte tento parametr na hodnotu 1. Výchozí hodnota je 1. |
max_concurrent_trials |
Maximální počet spuštění, která se dají spustit současně. Pokud je zadáno, musí být celé číslo mezi 1 a 100. Výchozí hodnota je 1. POZNÁMKA: max_concurrent_trials je interně omezena na .max_trials Pokud například uživatel nastaví max_concurrent_trials=4 , max_trials=2 hodnoty se interně aktualizují jako max_concurrent_trials=2 , . max_trials=2 |
Můžete nakonfigurovat všechny parametry související s úklidem, jak je znázorněno v následujícím příkladu.
PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)
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
Známé problémy
Práce s velmi nízkým skóre nebo vyššími hodnotami ztráty:
U některých datových sad bez ohledu na úkol NLP můžou být vytvořená skóre velmi nízká, někdy dokonce nulová. To by bylo doprovázeno vyššími hodnotami ztrát, které by znamenaly, že neurální síť se nepodařilo konvergovat. K tomu může docházet častěji u určitých skladových položek GPU.
I když jsou takové případy neobvyklé, jsou možné a nejlepším způsobem, jak to zvládnout, je využít ladění hyperparametrů a poskytnout širší rozsah hodnot, zejména pro hyperparametry, jako je rychlost učení. Dokud nebude naše funkce ladění hyperparametrů dostupná v produkčním prostředí, doporučujeme uživatelům, kteří se s těmito problémy setkávají, využít výpočetní clustery NC6 nebo ND6, kde jsme zjistili, že výsledky trénování jsou poměrně stabilní.