Informacje na temat tworzenia projektów klasyfikacji tekstu

Ukończone

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

Diagram that shows a life cycle with steps to define labels, tag data, train model, view model, improve model, deploy model, and classify text.

  • 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.