Udostępnij za pośrednictwem


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 korzystania z niej w przypadku 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.

Z tego artykułu 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 nlp, który umożliwia specjalistom uczenia maszynowego i analitykom danych wprowadzanie własnych danych tekstowych i tworzenie niestandardowych modeli dla zadań, takich jak klasyfikacja tekstu wieloklasowa, klasyfikacja tekstu wieloeptykowego i rozpoznawanie nazwanych jednostek (NER).

Możesz bezproblemowo zintegrować z funkcją etykietowania danych usługi Azure Machine Learning, aby oznaczyć dane tekstowe lub przenieść istniejące dane z etykietami. 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ę, korzystając z możliwości metodyki MLOps usługi Azure Machine Learning.

Wymagania wstępne

  • Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, zarejestruj się, aby wypróbować bezpłatną lub płatną wersję usługi Azure Machine Learning już dziś.

  • Obszar roboczy usługi Azure Machine Learning z obliczeniami trenowania procesora GPU. Aby utworzyć obszar roboczy, zobacz Tworzenie zasobów obszaru roboczego. Zobacz Rozmiary maszyn wirtualnych zoptymalizowanych pod kątem procesora GPU, aby uzyskać więcej szczegółów dotyczących wystąpień procesora GPU udostępnianych przez platformę Azure.

    Ostrzeżenie

    Obsługa modeli wielojęzycznych i korzystanie z modeli o dłuższej maksymalnej długości sekwencji jest niezbędna w przypadku kilku przypadków użycia nlp, takich jak zestawy danych innych niż angielskie i dokumenty o dłuższym zakresie. W związku z tym te scenariusze mogą wymagać większej ilości pamięci procesora GPU, aby trenowanie modelu powiodło się, takie jak seria NC_v3 lub seria ND.

  • Zainstalowany zestaw SDK języka Python usługi Azure Machine Learning.

    Aby zainstalować zestaw SDK, możesz wykonać jedną z następujących czynności:

    • Utwórz wystąpienie obliczeniowe, które automatycznie instaluje zestaw SDK i jest wstępnie skonfigurowane dla przepływów pracy uczenia maszynowego. Aby uzyskać więcej informacji, zobacz Tworzenie wystąpienia obliczeniowego usługi Azure Machine Learning i zarządzanie nim.

    • Zainstaluj pakiet automl samodzielnie, który obejmuje domyślną instalację zestawu SDK.

    Ważne

    Polecenia języka Python w tym artykule wymagają najnowszej azureml-train-automl wersji pakietu.

  • W tym artykule założono, że znasz konfigurowanie eksperymentu zautomatyzowanego uczenia maszynowego. Postępuj zgodnie z samouczkiem lub instrukcjami, aby zobaczyć główne wzorce projektowania eksperymentów zautomatyzowanego uczenia maszynowego.

Wybierz zadanie 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ć klasyfikowana jako dokładnie jedna klasa. Zadanie polega na przewidywaniu poprawnej klasy dla każdej próbki.

Na przykład klasyfikowanie skryptu filmu jako "Komedia" lub "Romantyczny".
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 "Romantyk" lub "Komedia i romantyczny".
Rozpoznawanie jednostek nazwanych task = 'text-ner' Istnieje wiele możliwych tagów tokenów w sekwencjach. Zadanie polega na przewidywaniu tagów dla wszystkich tokenów dla każdej sekwencji.

Na przykład wyodrębnianie jednostek specyficznych dla domeny z tekstu bez struktury, takiego jak umowy lub dokumenty finansowe

Przygotowywanie danych

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

Wiele klas

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 alfabetycznych, liczbowych 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". Mając format listy języka Python, etykieta będzie miała "['cs.AI']"wartość , 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 wielu klas lub wielu etykiet, które mają .csv format zestawów danych, rozpoznawanie nazwanych jednostek wymaga formatu CoNLL. Plik musi zawierać dokładnie dwie kolumny, a w każdym wierszu token i etykietę są oddzielone pojedynczą spacją.

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

Sprawdzanie poprawności 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 testów poprawności danych dla każdego zadania.

Uwaga

Niektóre testy sprawdzania poprawności danych mają zastosowanie zarówno do trenowania, jak i zestawu weryfikacji, 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 szkoleniowe, jak i weryfikacyjne
— Wymagane jest co najmniej 50 próbek szkoleniowych
Wiele klas i wiele etykiet Dane szkoleniowe i dane weryfikacji muszą mieć
- Ten sam zestaw kolumn
— Taka 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 wiele klas 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 postępować zgodnie z formatem {token} {label}, gdzie istnieje 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ędniana wielkość 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 w celu przesyłania zautomatyzowanych eksperymentów uczenia maszynowego na potrzeby zadań klasyfikacji, regresji i prognozowania. Większość parametrów można ustawić tak, jak w przypadku tych eksperymentów, takich jak task, compute_target i dane wejściowe.

Istnieją jednak kluczowe różnice:

  • Możesz zignorować primary_metricparametr , ponieważ jest przeznaczony tylko do celów 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 wieloetekstowej.
  • Jeśli większość przykładów w zestawie danych zawiera więcej niż 128 słów, jest uważana za zakres długi. W tym scenariuszu można włączyć opcję tekstu o długim zakresie z parametrem enable_long_range_text=True w pliku AutoMLConfig. W ten sposób pomaga poprawić 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, taki jak 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ęzykowe

W ramach funkcji NLP zautomatyzowane uczenie maszynowe obsługuje 104 języki wykorzystujące wstępnie wytrenowane modele nazw DNN specyficzne dla języka i wielojęzyczne, takie jak rodzina modeli. Obecnie wybór języka jest domyślnie domyślny dla języka angielskiego.

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 bez liter
Niemiecki
Wielojęzyczny

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

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

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

Język zestawu danych można określić w pliku FeaturizationConfig. jest również używany w procesie cechowania zautomatyzowanego trenowania eksperymentu ML, dowiedz się więcej o integracji i cechowaniu 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)

Szkolenie rozproszone

Możesz również uruchomić eksperymenty NLP z rozproszonym szkoleniem 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 podczas AutoMLConfig 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