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_namea 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.
    • Pokud chcete použít funkci dlouhého rozsahu textu, měli byste pro GPU použít skladové položky NC6 nebo vyšší/lepší, například: řady NCv3 nebo ND .

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.

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)

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:
  • Počet souběžných spuštění se hradí u prostředků dostupných v zadaném cílovém výpočetním objektu. Ujistěte se, že cíl výpočetních prostředků má dostupné prostředky pro požadovanou souběžnost.
  • max_concurrent_trialsje interně omezena na .max_trials Pokud například uživatel nastaví max_concurrent_trials=4, max_trials=2hodnoty 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í.

    Další kroky