Informacje na temat tworzenia projektów klasyfikacji tekstu
Niestandardowe projekty klasyfikacji tekstu to obszar roboczy umożliwiający tworzenie, trenowanie, ulepszanie i wdrażanie modelu klasyfikacji. Możesz pracować z projektem na dwa sposoby: za pomocą programu Language Studio i interfejsu API REST. Language Studio to graficzny interfejs użytkownika, który będzie używany w laboratorium, ale interfejs API REST ma tę samą funkcjonalność. Niezależnie od preferowanej metody kroki tworzenia modelu są takie same.
Cykl życia projektu języka sztucznej inteligencji platformy Azure
- Definiowanie etykiet: opis danych, które chcesz sklasyfikować, zidentyfikuj możliwe etykiety, do których chcesz podzielić kategorie. W naszym przykładzie gry wideo nasze etykiety to "Action", "Adventure", "Strategy" itd.
- Dane tagu: Tag lub etykieta istniejące dane, określając etykietę lub etykiety, w których znajduje się każdy plik. Etykietowanie danych jest ważne, ponieważ w ten sposób model dowiesz się, jak klasyfikować przyszłe pliki. Najlepszym rozwiązaniem jest posiadanie wyraźnych różnic między etykietami, aby uniknąć niejednoznaczności, i udostępnić dobre przykłady każdej etykiety dla modelu, z których można się uczyć. Na przykład oznaczymy grę "Quest for the Mine Brush" jako "Adventure" i "Flight Trainer" jako "Action".
- Trenowanie modelu: trenowanie modelu przy użyciu danych oznaczonych etykietą. Szkolenie nauczy naszego modelu, jakiego rodzaju podsumowania gier wideo powinny być oznaczone, który gatunek.
- Wyświetlanie modelu: po wytrenowanym modelu wyświetl wyniki modelu. Model jest oceniany z zakresu od 0 do 1 na podstawie dokładności i kompletności przetestowanych danych. Zanotuj, który gatunek nie radził sobie dobrze.
- Ulepszanie modelu: Popraw model, sprawdzając, które klasyfikacje nie powiodły się w odpowiedniej etykiecie, zobacz dystrybucję etykiet i dowiedz się, jakie dane mają zostać dodane, aby zwiększyć wydajność. Na przykład model może mieszać gry "Przygoda" i "Strategia". Spróbuj znaleźć więcej przykładów każdej etykiety, aby dodać ją do zestawu danych w celu ponownego trenowania modelu.
- Wdrażanie modelu: po wykonaniu odpowiedniego działania modelu wdróż go, aby udostępnić go za pośrednictwem interfejsu API. Model może mieć nazwę "GameGenres", a po wdrożeniu można go użyć do klasyfikowania podsumowań gier.
- Klasyfikowanie tekstu: użyj modelu do klasyfikowania tekstu. Laboratorium obejmuje sposób korzystania z interfejsu API i można wyświetlić dokumentację interfejsu API
Jak podzielić zestawy danych na potrzeby trenowania
Podczas etykietowania danych możesz określić zestaw danych, który ma być każdym plikiem:
- Trenowanie — zestaw danych trenowania służy do faktycznego trenowania modelu. Podane dane i etykiety są przekazywane do algorytmu uczenia maszynowego, aby nauczyć model, jakie dane powinny być klasyfikowane do której etykiety. Zestaw danych trenowania będzie większy od dwóch zestawów danych, zalecanych do około 80% danych oznaczonych etykietami.
- Testowanie — zestaw danych testowych ma etykietę danych używanych do weryfikowania modelu po jego wytrenowanym. Platforma Azure przejmie dane z zestawu danych testowych, prześle je do modelu i porówna dane wyjściowe z danymi, aby określić, jak dobrze działa model. Wynikiem tego porównania jest sposób oceniania modelu i pomaga ci dowiedzieć się, jak poprawić wydajność predykcyjną.
W kroku Trenowanie modelu dostępne są dwie opcje trenowania modelu.
- Podział automatyczny — platforma Azure pobiera wszystkie dane, dzieli je na określone wartości procentowe losowo i stosuje je w trenowaniu modelu. Ta opcja jest najlepsza, gdy masz większy zestaw danych, dane są naturalnie bardziej spójne lub rozkład danych szeroko obejmuje klasy.
- Podział ręczny — ręcznie określ pliki, które powinny znajdować się w każdym zestawie danych. Po przesłaniu zadania szkoleniowego usługa językowa Azure AI poinformuje Cię o podziale zestawu danych i dystrybucji. Ten podział najlepiej używać z mniejszymi zestawami danych w celu zapewnienia prawidłowego rozkładu klas i odmian danych w celu poprawnego wytrenowania modelu.
Aby użyć automatycznego podziału, umieść wszystkie pliki w zestawie danych trenowania podczas etykietowania danych (ta opcja jest domyślna). Aby użyć podziału ręcznego, określ, które pliki powinny być w testowaniu i trenowaniu podczas etykietowania danych.
Opcje wdrażania
Język AI platformy Azure umożliwia każdemu projektowi tworzenie zarówno wielu modeli, jak i wielu wdrożeń, z których każdy ma własną unikatową nazwę. Zalety obejmują:
- Testowanie dwóch modeli obok siebie
- Porównanie wpływu podziału zestawów danych na wydajność
- Wdrażanie wielu wersji modelu
Uwaga
Każdy projekt ma limit dziesięciu nazw wdrożeń
Podczas wdrażania można wybrać nazwę wdrożonego modelu, który następnie można wybrać podczas przesyłania zadania klasyfikacji:
<...>
"tasks": [
{
"kind": "CustomSingleLabelClassification",
"taskName": "MyTaskName",
"parameters": {
"projectName": "MyProject",
"deploymentName": "MyDeployment"
}
}
]
<...>
Korzystanie z interfejsu API REST
Interfejs API REST dostępny dla usługi językowej Azure AI umożliwia tworzenie projektów języka AI platformy Azure za pomocą interfejsu wiersza polecenia w taki sam sposób, jak program Language Studio udostępnia interfejs użytkownika do kompilowania projektów. Program Language Studio jest dokładniej eksplorowany w laboratorium tego modułu.
Wzorzec korzystania z interfejsu API
Interfejs API dla usługi językowej azure AI działa asynchronicznie dla większości wywołań. W każdym kroku najpierw przesyłamy żądanie do usługi, a następnie ponownie skontaktujemy się z usługą za pośrednictwem kolejnego wywołania, aby uzyskać stan lub wynik.
W przypadku każdego żądania nagłówek jest wymagany do uwierzytelnienia żądania:
Key | Wartość |
---|---|
Ocp-Apim-Subscription-Key |
Klucz zasobu języka sztucznej inteligencji platformy Azure |
Prześlij początkowe żądanie
Adres URL do przesłania żądania różni się w zależności od kroku, ale wszystkie są poprzedzone punktem końcowym dostarczonym przez zasób języka AI platformy Azure.
Aby na przykład wytrenować model, należy utworzyć post pod adresem URL, który będzie wyglądać podobnie do następującego:
<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Symbol zastępczy | Wartość | Przykład |
---|---|---|
<YOUR-ENDPOINT> |
Punkt końcowy żądania interfejsu API | https://<your-custom-resource>.cognitiveservices.azure.com |
<PROJECT-NAME> |
Nazwa projektu (wartość uwzględnia wielkość liter) | myProject |
Następująca treść zostanie dołączona do żądania:
{
"modelLabel": "<MODEL-NAME>",
"trainingConfigVersion": "<CONFIG-VERSION>",
"evaluationOptions": {
"kind": "percentage",
"trainingSplitPercentage": 80,
"testingSplitPercentage": 20
}
}
Key | Wartość |
---|---|
<YOUR-MODEL> |
Nazwa modelu. |
trainingConfigVersion |
Wersja modelu używana do trenowania modelu. |
runValidation |
Wartość logiczna do uruchomienia walidacji w zestawie testowym. |
evaluationOptions |
Określa opcje oceny. |
kind |
Określa typ podziału danych. Może to być percentage , jeśli używasz automatycznego podziału lub set jeśli ręcznie podzielisz zestaw danych |
testingSplitPercentage |
Wymagane pole liczby całkowitej tylko wtedy, gdy type jest wartością procentową. Określa podział testów. |
trainingSplitPercentage |
Wymagane pole liczby całkowitej tylko wtedy, gdy type jest wartością procentową. Określa podział trenowania. |
Odpowiedź na powyższe żądanie będzie wartością 202
, co oznacza, że żądanie zakończyło się pomyślnie. location
Pobierz wartość z nagłówków odpowiedzi, która będzie wyglądać podobnie do następującego adresu URL:
<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Key | Wartość |
---|---|
<JOB-ID> |
Identyfikator żądania |
Ten adres URL jest używany w następnym kroku, aby uzyskać stan trenowania.
Uzyskiwanie stanu szkolenia
Aby uzyskać stan szkolenia, użyj adresu URL z nagłówka odpowiedzi żądania, aby przesłać żądanie GET , z tym samym nagłówkiem, który udostępnia klucz usługi językowej azure AI na potrzeby uwierzytelniania. Treść odpowiedzi będzie podobna do następującego kodu JSON:
{
"result": {
"modelLabel": "<MODEL-NAME>",
"trainingConfigVersion": "<CONFIG-VERSION>",
"estimatedEndDateTime": "2023-05-18T15:47:58.8190649Z",
"trainingStatus": {
"percentComplete": 3,
"startDateTime": "2023-05-18T15:45:06.8190649Z",
"status": "running"
},
"evaluationStatus": {
"percentComplete": 0,
"status": "notStarted"
}
},
"jobId": "<JOB-ID>",
"createdDateTime": "2023-05-18T15:44:44Z",
"lastUpdatedDateTime": "2023-05-18T15:45:48Z",
"expirationDateTime": "2023-05-25T15:44:44Z",
"status": "running"
}
Trenowanie modelu może zająć trochę czasu, dlatego okresowo sprawdzaj ponownie ten adres URL stanu, dopóki odpowiedź status
nie zwróci wartości succeeded
. Po pomyślnych szkoleniach można wyświetlić, zweryfikować i wdrożyć model.
Korzystanie z wdrożonego modelu
Użycie modelu do klasyfikowania tekstu jest zgodne z tym samym wzorcem, co opisane powyżej, z żądaniem POST przesyłając zadanie i żądanie GET w celu pobrania wyników.
Przesyłanie tekstu do klasyfikacji
Aby użyć modelu, prześlij post do punktu końcowego analizy pod następującym adresem URL:
<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Symbol zastępczy | Wartość | Przykład |
---|---|---|
<YOUR-ENDPOINT> |
Punkt końcowy żądania interfejsu API | https://<your-custom-resource>.cognitiveservices.azure.com |
Ważne
Pamiętaj, aby uwzględnić klucz zasobu w nagłówku Ocp-Apim-Subscription-Key
Do żądania zostanie dołączona następująca struktura JSON:
{
"displayName": "Classifying documents",
"analysisInput": {
"documents": [
{
"id": "1",
"language": "<LANGUAGE-CODE>",
"text": "Text1"
},
{
"id": "2",
"language": "<LANGUAGE-CODE>",
"text": "Text2"
}
]
},
"tasks": [
{
"kind": "<TASK-REQUIRED>",
"taskName": "<TASK-NAME>",
"parameters": {
"projectName": "<PROJECT-NAME>",
"deploymentName": "<DEPLOYMENT-NAME>"
}
}
]
}
Key | Wartość |
---|---|
<TASK-REQUIRED> |
Które zadanie żądasz. Zadanie dotyczy CustomMultiLabelClassification wielu projektów etykiet lub CustomSingleLabelClassification projektów z pojedynczą etykietą |
<LANGUAGE-CODE> |
Kod języka, taki jak en-us . |
<TASK-NAME> |
Nazwa zadania. |
<PROJECT-NAME> |
Nazwa projektu. |
<DEPLOYMENT-NAME> |
Nazwa wdrożenia. |
Odpowiedź na powyższe żądanie będzie wartością 202
, co oznacza, że żądanie zakończyło się pomyślnie. operation-location
Wyszukaj wartość w nagłówkach odpowiedzi, która będzie wyglądać podobnie do następującego adresu URL:
<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Key | Wartość |
---|---|
<YOUR-ENDPOINT> |
Punkt końcowy żądania interfejsu API |
<JOB-ID> |
Identyfikator żądania |
Ten adres URL służy do uzyskiwania wyników zadania.
Pobieranie wyników klasyfikacji
Prześlij żądanie GET do punktu końcowego z poprzedniego żądania z tego samego nagłówka na potrzeby uwierzytelniania. Treść odpowiedzi będzie podobna do następującego kodu JSON:
{
"createdDateTime": "2023-05-19T14:32:25.578Z",
"displayName": "MyJobName",
"expirationDateTime": "2023-05-19T14:32:25.578Z",
"jobId": "xxxx-xxxxxx-xxxxx-xxxx",
"lastUpdateDateTime": "2023-05-19T14:32:25.578Z",
"status": "succeeded",
"tasks": {
"completed": 1,
"failed": 0,
"inProgress": 0,
"total": 1,
"items": [
{
"kind": "customSingleClassificationTasks",
"taskName": "Classify documents",
"lastUpdateDateTime": "2022-10-01T15:01:03Z",
"status": "succeeded",
"results": {
"documents": [
{
"id": "<DOC-ID>",
"class": [
{
"category": "Class_1",
"confidenceScore": 0.0551877357
}
],
"warnings": []
}
],
"errors": [],
"modelVersion": "2022-04-01"
}
}
]
}
}
Wynik klasyfikacji znajduje się w obiekcie tablicy results
elementów dla każdego przesłanego dokumentu.