Konfigurowanie rozwiązania AutoML do trenowania modelu przetwarzania języka naturalnego przy użyciu języka Python (wersja zapoznawcza)

DOTYCZY:Zestaw SDK języka Python w wersji 1

Ważne

Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie zalecamy jej obsługi obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone.

Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.

W tym artykule dowiesz się, jak trenować modele przetwarzania języka naturalnego (NLP) za pomocą zautomatyzowanego uczenia maszynowego w zestawie SDK języka Python usługi Azure Machine Learning.

Zautomatyzowane uczenie maszynowe obsługuje funkcję NLP, która umożliwia specjalistom uczenia maszynowego i analitykom danych wprowadzanie własnych danych tekstowych i tworzenie niestandardowych modeli na potrzeby zadań, takich jak klasyfikacja tekstu wieloklasowa, klasyfikacja tekstu z wieloma etykietami i rozpoznawanie jednostek nazwanych (NER).

Możesz bezproblemowo zintegrować z funkcją etykietowania danych usługi Azure Machine Learning , aby oznaczyć dane tekstowe lub przenieść istniejące oznaczone dane. Zautomatyzowane uczenie maszynowe zapewnia możliwość korzystania z trenowania rozproszonego w klastrach obliczeniowych z wieloma procesorami GPU w celu szybszego trenowania modelu. Wynikowy model można zoperacjonalizować na dużą skalę, wykorzystując możliwości metodyki MLOps usługi Azure Machine Learning.

Wymagania wstępne

Wybieranie zadania NLP

Określ, jakie zadanie NLP chcesz wykonać. Obecnie zautomatyzowane uczenie maszynowe obsługuje następujące zadania głębokiej sieci neuronowej NLP.

Zadanie Składnia autoMLConfig Opis
Klasyfikacja tekstu wieloklasowego task = 'text-classification' Istnieje wiele możliwych klas, a każda próbka może być sklasyfikowana jako dokładnie jedna klasa. Zadanie polega na przewidywaniu poprawnej klasy dla każdej próbki.

Na przykład klasyfikowanie skryptu filmowego jako "Komedia" lub "Romantyczna".
Klasyfikacja tekstu z wieloma etykietami task = 'text-classification-multilabel' Istnieje wiele możliwych klas, a każda próbka może mieć przypisaną dowolną liczbę klas. Zadanie polega na przewidywaniu wszystkich klas dla każdej próbki

Na przykład klasyfikowanie skryptu filmowego jako "Komedia" lub "Romantyczna" lub "Komedia i romantyczna".
Rozpoznawanie nazwanych jednostek (NER) task = 'text-ner' Istnieje wiele możliwych tagów tokenów w sekwencjach. Zadaniem jest przewidywanie tagów dla wszystkich tokenów dla każdej sekwencji.

Na przykład wyodrębnianie jednostek specyficznych dla domeny z tekstu nieustrukturyzowanego, takiego jak kontrakty lub dokumenty finansowe

Przygotowywanie danych

W przypadku eksperymentów NLP w zautomatyzowanym uczeniu maszynowym można przenieść zestaw danych usługi Azure Machine Learning z formatem .csv dla zadań klasyfikacji wieloklasowej i wielu etykiet. W przypadku zadań NER obsługiwane są pliki dwukolumnowe .txt , które używają spacji jako separatora i są zgodne z formatem CoNLL. Poniższe sekcje zawierają dodatkowe szczegóły dotyczące formatu danych akceptowanego dla każdego zadania.

Wieloklasowa klasa

W przypadku klasyfikacji wieloklasowej zestaw danych może zawierać kilka kolumn tekstowych i dokładnie jedną kolumnę etykiety. W poniższym przykładzie jest tylko jedna kolumna tekstowa.


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"

Wiele etykiet

W przypadku klasyfikacji z wieloma etykietami kolumny zestawu danych będą takie same jak w przypadku wielu klas, jednak istnieją specjalne wymagania dotyczące formatu danych w kolumnie etykiety. Dwa zaakceptowane formaty i przykłady znajdują się w poniższej tabeli.

Opcje formatowania kolumn etykiet Wiele etykiet Jedna etykieta Brak etykiet
Zwykły tekst "label1, label2, label3" "label1" ""
Lista języka Python z cudzysłowami "['label1','label2','label3']" "['label1']" "[]"

Ważne

Różne analizatory służą do odczytywania etykiet dla tych formatów. Jeśli używasz formatu zwykłego tekstu, użyj tylko alfabetycznej, numerycznej i '_' w etykietach. Wszystkie inne znaki są rozpoznawane jako separator etykiet.

Jeśli na przykład etykieta to "cs.AI", jest ona odczytywana jako "cs" i "AI". Podczas gdy w formacie listy języka Python etykieta to "['cs.AI']", która jest odczytywana jako "cs.AI" .

Przykładowe dane dla wielu etykiet w formacie zwykłego tekstu.

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.",""

Przykładowe dane dla wielu etykiet na liście języka Python z formatem cudzysłowów.

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.","[]"

Rozpoznawanie nazwanych jednostek (NER)

W przeciwieństwie do wieloklasowej lub wieloetkowej, która przyjmuje .csv format zestawów danych, rozpoznawanie jednostek nazwanych wymaga formatu CoNLL. Plik musi zawierać dokładnie dwie kolumny, a w każdym wierszu token i etykietę są oddzielone pojedynczą spacją.

Na przykład

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

Walidacja danych

Przed rozpoczęciem trenowania zautomatyzowane uczenie maszynowe stosuje sprawdzanie poprawności danych wejściowych, aby upewnić się, że dane można wstępnie przetworzyć. Jeśli którykolwiek z tych testów zakończy się niepowodzeniem, przebieg zakończy się niepowodzeniem z odpowiednim komunikatem o błędzie. Poniżej przedstawiono wymagania dotyczące przekazywania kontroli poprawności danych dla każdego zadania.

Uwaga

Niektóre testy sprawdzania poprawności danych mają zastosowanie zarówno do trenowania, jak i zestawu walidacji, natomiast inne mają zastosowanie tylko do zestawu treningowego. Jeśli testowy zestaw danych nie może przejść weryfikacji danych, oznacza to, że zautomatyzowane uczenie maszynowe nie może go przechwycić i istnieje możliwość niepowodzenia wnioskowania modelu lub spadku wydajności modelu.

Zadanie Sprawdzanie poprawności danych
Wszystkie zadania - Należy podać zarówno zestawy treningowe, jak i weryfikacyjne
- Wymagane są co najmniej 50 próbek treningowych
Wieloklasowa i wieloklasowa etykieta Dane szkoleniowe i dane weryfikacji muszą mieć
— Ten sam zestaw kolumn
- Ta sama kolejność kolumn od lewej do prawej
— ten sam typ danych dla kolumn o tej samej nazwie
- Co najmniej dwie unikatowe etykiety
- Unikatowe nazwy kolumn w każdym zestawie danych (na przykład zestaw treningowy nie może mieć wielu kolumn o nazwie Age)
Tylko wieloklasowa Brak
Tylko wiele etykiet - Format kolumny etykiety musi być w akceptowanym formacie
- Co najmniej jedna próbka powinna mieć etykiety 0 lub 2+, w przeciwnym razie powinno to być multiclass zadanie
— Wszystkie etykiety powinny być w str formacie lub int bez nakładania się. Etykieta i etykieta nie powinna być widoczna 1'1'
Tylko NER - Plik nie powinien zaczynać się od pustego wiersza
— Każdy wiersz musi być pustym wierszem lub zgodnym z formatem {token} {label}, gdzie znajduje się dokładnie jedno miejsce między tokenem a etykietą i bez odstępu po etykiecie
- Wszystkie etykiety muszą zaczynać się od I-, B-lub być dokładnie O. Uwzględnianie wielkości liter
- Dokładnie jeden pusty wiersz między dwoma próbkami
- Dokładnie jeden pusty wiersz na końcu pliku

Konfigurowanie eksperymentu

Funkcja NLP zautomatyzowanego uczenia maszynowego jest wyzwalana za pośrednictwem AutoMLConfigprogramu , który jest tym samym przepływem pracy do przesyłania zautomatyzowanych eksperymentów uczenia maszynowego na potrzeby zadań klasyfikacji, regresji i prognozowania. Większość parametrów należy ustawić tak, jak w przypadku tych eksperymentów, takich jak task, compute_target i dane wejściowe.

Istnieją jednak kluczowe różnice:

  • Można zignorować primary_metricparametr , ponieważ służy tylko do raportowania. Obecnie zautomatyzowane uczenie maszynowe trenuje tylko jeden model na przebieg dla nlp i nie ma wyboru modelu.
  • Parametr label_column_name jest wymagany tylko w przypadku zadań klasyfikacji tekstu wieloklasowej i wieloklasowej.
  • Jeśli większość próbek w zestawie danych zawiera więcej niż 128 słów, jest uważana za długi zakres. W tym scenariuszu można włączyć opcję tekstu o długim zakresie z parametrem enable_long_range_text=True w pliku AutoMLConfig. Pozwala to zwiększyć wydajność modelu, ale wymaga dłuższych czasów trenowania.
    • Jeśli włączysz tekst o długim zakresie, wymagany jest procesor GPU z większą ilością pamięci, na przykład seria NCv3 lub seria ND .
    • Parametr enable_long_range_text jest dostępny tylko dla zadań klasyfikacji wieloklasowej.
automl_settings = {
    "verbosity": logging.INFO,
    "enable_long_range_text": True, # # You only need to set this parameter if you want to enable the long-range text setting
}

automl_config = AutoMLConfig(
    task="text-classification",
    debug_log="automl_errors.log",
    compute_target=compute_target,
    training_data=train_dataset,
    validation_data=val_dataset,
    label_column_name=target_column_name,
    **automl_settings
)

Ustawienia języka

W ramach funkcji NLP zautomatyzowane uczenie maszynowe obsługuje 104 języki, wykorzystując specyficzne dla języka i wielojęzyczne wstępnie wytrenowane modele sieci DNN tekstu, takie jak rodzina modeli BERT. Obecnie wybór języka jest domyślnie używany w języku angielskim.

W poniższej tabeli podsumowano, jaki model jest stosowany na podstawie typu i języka zadań. Zobacz pełną listę obsługiwanych języków i ich kodów.

Typ zadania Składnia dla dataset_language Algorytm modelu tekstu
Klasyfikacja tekstu z wieloma etykietami 'eng'
'deu'
'mul'
Angielski BERT bez liter
Niemiecki BERT
Wielojęzyczny BERT

W przypadku wszystkich innych języków zautomatyzowane uczenie maszynowe stosuje wielojęzyczne BERT
Klasyfikacja tekstu wieloklasowego 'eng'
'deu'
'mul'
Angielski przypadek BERT
Wielojęzyczny BERT

W przypadku wszystkich innych języków zautomatyzowane uczenie maszynowe stosuje wielojęzyczne BERT
Rozpoznawanie nazwanych jednostek (NER) 'eng'
'deu'
'mul'
Angielski przypadek BERT
Niemiecki BERT
Wielojęzyczny BERT

W przypadku wszystkich innych języków zautomatyzowane uczenie maszynowe stosuje wielojęzyczne BERT

Język zestawu danych można określić w pliku FeaturizationConfig. BERT jest również używany w procesie cechowania zautomatyzowanego trenowania eksperymentów uczenia maszynowego, dowiedz się więcej o integracji i cechowaniu BERT w zautomatyzowanym uczeniu maszynowym.

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='{your language code}')
automl_config = AutomlConfig("featurization": featurization_config)

Trenowanie rozproszone

Eksperymenty NLP można również uruchamiać przy użyciu trenowania rozproszonego w klastrze obliczeniowym usługi Azure Machine Learning. Jest to obsługiwane automatycznie przez zautomatyzowane uczenie maszynowe, gdy parametry max_concurrent_iterations = number_of_vms i enable_distributed_dnn_training = True są udostępniane w AutoMLConfig trakcie konfigurowania eksperymentu.

max_concurrent_iterations = number_of_vms
enable_distributed_dnn_training = True

Umożliwia to zaplanowanie rozproszonego trenowania modeli NLP i automatyczne skalowanie do każdego procesora GPU na maszynie wirtualnej lub klastrze maszyn wirtualnych. Maksymalna dozwolona liczba maszyn wirtualnych wynosi 32. Trenowanie jest zaplanowane z liczbą maszyn wirtualnych, które są w uprawnieniach dwóch.

Przykładowe notesy

Zobacz przykładowe notesy, aby uzyskać szczegółowe przykłady kodu dla każdego zadania NLP.

Następne kroki