Sdílet prostřednictvím


Nastavení AutoML pro trénování modelu zpracování přirozeného jazyka

PLATÍ PRO:Rozšíření Azure CLI ml v2 (aktuální)Python SDK azure-ai-ml v2 (aktuální)

V tomto článku se naučíte 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 přinést vlastní textová data a vytvářet vlastní modely pro úlohy NLP. Mezi úkoly NLP patří klasifikace textu s více třídami, klasifikace textu s více popisky a rozpoznávání pojmenovaných entit (NER).

Bezproblémovou integraci s možností popisování dat ve službě Azure Machine Learning můžete označit textová data nebo přenést existující označená data. Automatizované strojové učení poskytuje možnost používat distribuované 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 pomocí funkcí MLOps služby Azure Machine Learning.

Požadavky

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

  • Předplatné Azure. Pokud ještě nemáte předplatné Azure, zaregistrujte si bezplatnou nebo placenou verzi služby Azure Machine Learning ještě dnes.

  • Pracovní prostor Azure Machine Learning s trénovacími výpočetními prostředky GPU Pokud chcete vytvořit pracovní prostor, přečtěte si téma Vytvoření prostředků pracovního prostoru. Další informace najdete v tématu Velikosti virtuálních počítačů optimalizovaných pro GPU, kde najdete další podrobnosti o instancích GPU poskytovaných Azure.

    Upozorňující

    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 vyšší paměť GPU pro úspěšné trénování modelu, jako je například řada NC_v3 nebo řada 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 návodu a podívejte se na hlavní vzory návrhu experimentů automatizovaného strojového učení.

Výběr úkolu NLP

Určete, jakou úlohu NLP chcete provést. Automatizované strojové učení v současné době podporuje následující úlohy NLP hluboké neurální sítě.

Úloha Syntaxe úlohy AutoML Popis
Klasifikace textu s více třídami CLI v2: text_classification
SDK v2: text_classification()
Existuje několik 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ždou ukázku.

Například klasifikace filmového skriptu jako "Comedy" nebo "Romantic".
Klasifikace textu s více popisky CLI v2: text_classification_multilabel
SDK v2: text_classification_multilabel()
Existuje několik možných tříd a každý vzorek může být přiřazen libovolný počet tříd. Úkolem je předpovědět všechny třídy pro každou ukázku.

Například klasifikace filmového skriptu jako "Comedy" nebo "Romantic" nebo "Comedy and Romantic".
Rozpoznávání pojmenovaných entit (NER, Named Entity Recognition) CLI v2:text_ner
SDK v2: text_ner()
Tokeny mají několik možných značek 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 kontrakty nebo finanční dokumenty.

Prahová hodnota

Prahová hodnota je funkce s více popisky, která uživatelům umožňuje vybrat prahovou hodnotu, kterou predikované pravděpodobnosti povedou k kladnému popisku. Nižší hodnoty umožňují více popisků, což je lepší, když uživatelé zajímají více o úplnost, ale tato možnost by mohla vést k více falešně pozitivním výsledkům. Vyšší hodnoty umožňují méně popisků a lépe tak uživatelům, kteří se zajímají o přesnost, ale tato možnost by mohla vést k falešně negativním výsledkům.

Příprava dat

U experimentů NLP v automatizovaném strojovém učení můžete data přenést ve .csv formátu pro úlohy klasifikace s více třídami a více popisky. U úloh NER jsou podporovány soubory se dvěma sloupci .txt , které jako oddělovač používají mezeru a dodržují formát CoNLL. Následující části obsahují podrobnosti o formátu dat přijatém pro každý úkol.

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ů

U klasifikace s více popisky by sloupce datové sady byly stejné jako u více tříd, existují však zvláštní požadavky na formát pro data ve sloupci popisku. Dva přijaté formáty a příklady jsou v následující tabulce.

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é

Různé analyzátory se používají ke čtení popisků pro tyto formáty. Pokud používáte formát prostého textu, používejte pouze abecední, číselné a '_' v popiscích. Všechny ostatní znaky jsou rozpoznány jako oddělovač popisků.

Pokud je "cs.AI"například popisek , přečte se jako "cs" a "AI". Vzhledem k tomu, že s formátem 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.",""

Příklad dat pro více popisky 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ý přebírá .csv formát datových sad, vyžaduje rozpoznávání pojmenovaných entit formát CoNLL. Soubor musí obsahovat přesně dva sloupce a v každém řádku token a popisek jsou oddělené jedním mezerou.

Příklad:

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ěření dat

Před trénování modelu automatizované strojové učení použije na vstupní data kontroly ověření dat, aby bylo zajištěno, že je možné data předzpracovat správně. 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 předání kontrol ověření dat pro jednotlivé úlohy.

Poznámka:

Některé kontroly ověření dat platí pro trénovací i ověřovací sadu, zatímco jiné platí jenom pro trénovací sadu. Pokud testovací datová sada nemohla předat ověření dat, znamená to, že automatizované strojové učení ho nemohlo zachytit a existuje možnost selhání odvozování modelu nebo pokles výkonu modelu.

Úloha Kontrola ověření dat
Všechny úkoly Vyžaduje se alespoň 50 trénovacích ukázek.
Více tříd a více popisků Trénovací data 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 Věk)
Pouze více tříd Nic
Pouze více popisků - Formát sloupce popisku musí být v přijatém formátu.
- Nejméně jeden vzorek by měl mít popisky 0 nebo 2+, jinak by se mělo jednat o multiclass úkol.
- Všechny popisky by měly být ve formátu nebo int bez str překrývání. Neměli byste mít popisek ani popisek 1 . '1'
Pouze NER - Soubor by neměl začínat prázdným řádkem.
- Každý řádek musí být prázdný řádek nebo musí následovat formát {token} {label}, kde je mezi tokenem a popiskem přesně jedna mezera a za popiskem není prázdné znaky.
- Všechny popisky musí začínat I-na , B-nebo musí být přesně O. Rozlišovat malá a velká písmena
- 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 určitého automl typu úkolu, což je stejný pracovní postup pro odesílání experimentů automatizovaného strojového učení pro úlohy klasifikace, regrese a prognózování. Parametry byste nastavili stejně jako u těchto experimentů, například experiment_namecompute_name a datových vstupů.

Existují však klíčové rozdíly:

  • Můžete ignorovat primary_metric, protože se jedná pouze o účely vytváření sestav. Automatizované strojové učení v současné době trénuje pouze jeden model na 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 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 textovou funkci dlouhého rozsahu, měli byste pro GPU použít skladové položky NC6 nebo vyšší/lepší, například řady NCv3 nebo ŘADY ND .

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

V případě automatizovaných úloh ML cli v2 nakonfigurujete experiment v souboru YAML následujícím způsobem.

Nastavení jazyka

Automatizované strojové učení podporuje jako součást funkcí NLP 104 jazyků, které využívají specifické jazyky a vícejazyčné předem natrénované modely DNN textu, jako je řada modelů BERT. V současné době je výběr jazyka ve výchozím nastavení angličtina.

Následující tabulka shrnuje, jaký model se používá na základě typu a jazyka úlohy. 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"
Angličtina BERT bezcased
Němčina BERT
Vícejazyčný BERT

Pro všechny ostatní jazyky používá automatizované strojové učení vícejazyčný systém 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ý systém BERT.
Rozpoznávání pojmenovaných entit (NER) "eng"
"deu"
"mul"
Anglický BERT cased
Němčina BERT
Vícejazyčný BERT

Pro všechny ostatní jazyky používá automatizované strojové učení vícejazyčný systém BERT.

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

Jazyk datové sady můžete zadat v části featurizace konfiguračního souboru YAML. BERT se také používá v procesu featurizace automatizovaného strojového experimentu trénování, přečtěte si další informace o integraci a featurizaci BERT v automatizovaném strojovém učení (SDK v1).

featurization:
   dataset_language: "eng"

Distribuované trénování

Experimenty NLP můžete také spouštět s distribuovaným trénováním ve 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 verze 2 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 prohlédnou následující ukázkové soubory YAML.

Úklid modelů a ladění hyperparametrů (Preview)

Důležité

Tato funkce je v současné době ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji 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 vyhledávacího prostoru hyperparametrů v konfiguraci. Hyperdrive generuje několik podřízených běhů, z nichž každý je vyladěný pro daný model NLP a sadu hodnot hyperparametrů, které byly vybrány a přemísťovány na základě zadaného vyhledávacího prostoru.

Podporované algoritmy modelů

Všechny předem natrénované modely DNN textu, 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ě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í. Jejich požadavky na skladovou položku jsou přísnější: doporučujeme, abyste na virtuálních počítačích řady ND spustili ty nejlepší výsledky.

Podporované algoritmy modelů – HuggingFace (Preview)

S novým back-endem, který běží v kanálech Služby Azure Machine Learning, můžete navíc použít jakýkoli model klasifikace textu nebo tokenu z centra HuggingFace pro klasifikaci textu, klasifikaci tokenů, která je součástí knihovny transformátorů (například microsoft/deberta-large-mnli). Můžete také najít kurátorovaný seznam modelů v registru modelů služby Azure Machine Learning, který byl ověřen pomocí součástí kanálu.

Když použijete jakýkoli model HuggingFace, spustí se spuštění pomocí komponent kanálu. Pokud se použijí starší modely i modely HuggingFace, aktivují se všechna spuštění/zkušební verze pomocí komponent.

Podporované hyperparametry

Následující tabulka popisuje hyperparametry, které autoML NLP podporuje.

Název parametru Popis Syntaxe
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 zavoláním funkce kroku optimalizátoru.

Toto je použití efektivní velikosti dávky, což je gradient_accumulation_steps krát větší než maximální velikost, která odpovídá GPU.
Musí to být kladné celé číslo.
learning_rate Počáteční rychlost učení. Musí to být plovák v rozsahu (0, 1).
learning_rate_scheduler Typ plánovače rychlosti učení Je nutné vybrat z linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup.
model_name Název jednoho z podporovaných modelů Je nutné 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í to být kladné celé číslo.
training_batch_size Trénovací velikost dávky. Musí to být kladné celé číslo.
validation_batch_size Velikost dávky ověření. Musí to být kladné celé číslo.
warmup_ratio Poměr celkových trénovacích kroků používaných pro lineární teplo od 0 do learning_rate Musí to být plovák v rozsahu [0, 1].
weight_decay Hodnota hmotnosti se rozpadne, když je optimalizátor sgd, adam nebo adamw. Musí to být plovák v rozsahu [0, 1].

Všechny diskrétní hyperparametry umožňují pouze rozdělení voleb, jako jsou celočíselné typy training_batch_size a hyperparametry typu model_name string. Všechny nepřetržité hyperparametry, jako je learning_rate podpora všech distribucí.

Konfigurace nastavení úklidu

Můžete nakonfigurovat všechny parametry související s úklidem. Více podprostorů modelu lze vytvořit pomocí hyperparametrů podmíněných pro příslušný model, jak je vidět v každém příkladu ladění hyperparametrů.

Tady jsou podporované stejné diskrétní a průběžné distribuce, které jsou k dispozici pro obecné úlohy HyperDrivu. Zobrazení všech devíti možností v 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 úklidu hyperparametrů je potřeba zadat metodu vzorkování, která se má použít k úklidu nad definovaným prostorem parametrů. V současné době jsou s parametrem sampling_algorithm podporovány následující metody vzorkování:

Typ vzorkování Syntaxe úlohy AutoML
Náhodné vybrání vzorků random
Vzorkování mřížky grid
Bayesský vzorkování bayesian

Rozpočet experimentu

Volitelně můžete zadat rozpočet experimentu pro trénovací úlohu AutoML NLP pomocí parametru timeout_minutes v limits minutách před ukončením experimentu. Pokud není zadaný žádný, výchozí časový limit experimentu je sedm dnů (maximálně 60 dnů).

AutoML NLP také podporuje trial_timeout_minutesmaximální dobu v minutách, po kterou může jednotlivá zkušební verze běžet před ukončením, a max_nodesmaximální počet uzlů z backingového výpočetního clusteru, který se má pro úlohu použí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í

Můžete automaticky ukončit špatně výkonné spuštění pomocí zásad předčasného ukončení. 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. AutoML NLP podporuje zásady předčasného ukončení s využitím parametru early_termination . Pokud není zadána žádná zásada ukončení, všechny konfigurace se spustí 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 úklid hyperparametrů můžete řídit tak, že zadáte a max_trials zametáte max_concurrent_trials .

Parametr Podrobnosti
max_trials Parametr pro maximální počet konfigurací, které se mají uklidit. Musí 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 souběžně. Pokud je zadáno, musí být celé číslo od 1 do 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ílový výpočetní objekt má dostupné prostředky pro požadovanou souběžnost.
  • max_concurrent_trials je omezen interně max_trials . Pokud by například uživatelské sady max_concurrent_trials=4, max_trials=2hodnoty by se interně aktualizovaly jako max_concurrent_trials=2, max_trials=2.
  • Můžete nakonfigurovat všechny parametry související s úklidem, jak je znázorněno v tomto 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 nízkým skóre nebo vyššími hodnotami ztráty:

    U některých datových sad bez ohledu na úlohu NLP mohou být výsledná skóre velmi nízká, někdy i nula. Toto skóre doprovází vyšší hodnoty ztráty, které naznačují, že neurální síť se nepodařilo konvergovat. K těmto skóre může dojít častěji u určitých skladových položek GPU.

    I když jsou takové případy neobvyklé, jsou možné a nejlepší způsob, jak ho zpracovat, je využít ladění hyperparametrů a poskytnout širší rozsah hodnot, zejména u hyperparametrů, 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ří mají tyto problémy, používat výpočetní clustery NC6 nebo ND6. Tyto clustery obvykle mají výsledky trénování, které jsou poměrně stabilní.

    Další kroky