Grundlegendes zum Erstellen von Textklassifizierungsprojekten
In Projekten zur benutzerdefinierten Textklassifizierung können Sie Ihr Klassifizierungsmodell erstellen, trainieren, verbessern und bereitstellen. Sie können auf zwei Arten an Ihrem Projekt arbeiten: in Language Studio und über die REST-API. Language Studio ist die GUI, die im Lab verwendet wird, die REST-API bietet jedoch dieselbe Funktionalität. Unabhängig davon, welche Methode Sie bevorzugen, bleiben die Schritte zur Entwicklung Ihres Modells die gleichen.
Projektlebenszyklus von Azure KI Language
- Definieren von Bezeichnungen: Bestimmen Sie die Daten, die Sie klassifizieren möchten, und die möglichen Bezeichnungen, nach denen Sie diese kategorisieren möchten. In unseren Videospielbeispiel würden unsere Bezeichnungen „Action“, „Abenteuer“, „Strategie“ usw. lauten.
- Taggen von Daten: Taggen oder markieren Sie die vorhandenen Daten, und geben Sie die Bezeichnungen an, denen jede Datei zugeordnet ist. Das Taggen von Daten ist wichtig, da Ihr Modell auf diese Weise lernt, wie es Dateien in Zukunft klassifizieren soll. Hier besteht die bewährte Methode darin, die Bezeichnungen klar voneinander zu unterscheiden, um Unklarheiten zu vermeiden, und für jede Bezeichnung gute Beispiele zu finden, aus denen das Modell lernen kann. Beispielsweise würden wir das Spiel „Quest for the Mine Brush“ als „Adventure“ und „Flight Trainer“ als „Action“ taggen.
- Trainieren des Modells: Trainieren Sie Ihr Modell mit den getaggten Daten. Durch das Training wird unseren Modell vermittelt, welche Arten von Videospielzusammenfassungen welchen Genre zugeordnet werden sollen.
- Anzeigen des Modells: Zeigen Sie die Ergebnisse des Modells an, nachdem es trainiert wurde. Abhängig von der Präzision und dem Abruf der getesteten Daten erhält Ihr Modell eine Bewertung zwischen 0 und 1. Achten Sie darauf, welches Genre nicht gut abgeschnitten hat.
- Verbessern des Modells: Verbessern Sie Ihr Modell, indem Sie überprüfen, welche Klassifizierungen nicht die richtige Bezeichnung ergeben haben. Überprüfen Sie die Verteilung der Bezeichnungen, und ermitteln Sie, welche Daten Sie hinzufügen müssen, um die Leistung zu verbessern. Ihr Modell könnte beispielsweise Spiele der Genres „Abenteuer“ und Strategiespiele verwechseln. Suchen Sie nach weiteren Beispielen für jede Bezeichnung, die Sie Ihrem Dataset hinzufügen können, um das Modell neu zu trainieren.
- Bereitstellen des Modells: Sobald Ihr Modell wie gewünscht funktioniert, können Sie es über die API bereitstellen. Der Name Ihres Modells könnte „GameGenres“ (Spielgenres) lauten. Sobald es bereitgestellt wurde, kann es zum Klassifizieren von Spielzusammenfassungen verwendet werden.
- Klassifizieren von Text: Verwenden Sie Ihr Modell zur Klassifizierung von Text. In diesem Lab wird behandelt, wie Sie die API verwenden können, und Sie können die Referenz zur API anzeigen.
Aufteilen von Datasets für das Training
Sie können beim Taggen Ihrer Daten angeben, welchem Dataset jede Datei zugeordnet werden soll:
- Training: Das Trainingsdataset wird zum Trainieren des Modells verwendet. Die bereitgestellten Daten und Tags werden in den Machine Learning-Algorithmus eingespeist und vermitteln Ihrem Modell, welche Daten mit welcher Bezeichnung klassifiziert werden sollten. Das Trainingsdataset ist das größere der beiden Datasets und sollte ungefähr 80 % der getaggten Daten enthalten.
- Tests: Das Testdataset enthält getaggte Daten, die dazu verwendet werden, das Modell nach dem Training zu überprüfen. Azure übermittelt die Daten im Testdatensatz an das Modell und vergleicht die Ausgabe mit den von Ihnen getaggten Daten, um die Leistung des Modells zu ermitteln. Das Ergebnis dieses Vergleichs gibt an, wie Ihr Modell bewertet wird, und zeigt an, wie Sie Ihre Vorhersageleistung verbessern können.
Während des Modelltrainings können Sie Ihr Modell auf zwei Arten trainieren.
- Automatische Aufteilung: Azure teilt Ihre gesamten Daten nach dem Zufallsprinzip in die angegebenen Prozentsätze auf und verwendet sie beim Training des Modells. Diese Option ist am besten geeignet, wenn Sie über ein größeres Dataset verfügen, die Daten von Natur aus konsistenter sind oder die Verteilung Ihrer Daten Ihre Klassen weitgehend abdeckt.
- Manuelle Aufteilung: Geben Sie manuell an, welche Dateien in jedem Dataset enthalten sein sollen. Wenn Sie den Trainingsauftrag übermitteln, teilt der Azure KI Language-Dienst Ihnen die Aufteilung des Datasets und die Verteilung mit. Diese Aufteilung eignet sich am besten für kleinere Datasets, damit die richtige Verteilung der Klassen und Variationen in den Daten gewährleistet sind, sodass Ihr Modell richtig trainiert werden kann.
Wenn Sie die automatische Aufteilung verwenden möchten, fügen Sie alle Dateien beim Taggen Ihrer Daten dem Trainingsdataset hinzu (diese Option wird standardmäßig verwendet). Wenn Sie die manuelle Aufteilung verwenden möchten, geben Sie beim Taggen Ihrer Daten die Dateien an, die zu Test- bzw. Trainingszwecken verwendet werden sollen.
Bereitstellungsoptionen
Mit Azure KI Language können in jedem Projekt mehrere Modelle sowie mehrere Bereitstellungen erstellt werden, die jeweils einen eindeutigen Namen erhalten. Dadurch können Sie Folgendes tun:
- Zwei Modelle parallel testen
- Vergleichen, wie sich die Aufteilung der Datasets auf die Leistung auswirkt
- Mehrere Versionen Ihres Modells bereitstellen
Hinweis
Jedes Projekt kann maximal zehn Bereitstellungsnamen enthalten.
Während der Bereitstellung können Sie einen Namen für das bereitgestellte Modell auswählen, der dann beim Übermitteln einer Klassifizierungsaufgabe ausgewählt werden kann:
<...>
"tasks": [
{
"kind": "CustomSingleLabelClassification",
"taskName": "MyTaskName",
"parameters": {
"projectName": "MyProject",
"deploymentName": "MyDeployment"
}
}
]
<...>
Verwenden der REST-API
Die für den Azure KI Language-Dienst verfügbare REST-API ermöglicht die CLI-Entwicklung von Azure KI Language-Projekten auf die gleiche Weise, wie Language Studio eine Benutzeroberfläche zum Erstellen von Projekten bietet. Language Studio wird im Lab dieses Moduls ausführlicher behandelt.
Muster der Verwendung der API
Die API für den Azure KI Language-Dienst funktioniert bei den meisten Aufrufen asynchron. In jedem Schritt wird zunächst eine Anforderung an den Dienst übermittelt und dann durch einen weiteren Aufruf der Status oder das Ergebnis abgefragt.
Bei jeder Anforderung muss ein Header verwendet werden, um sie zu authentifizieren:
Schlüssel | Wert |
---|---|
Ocp-Apim-Subscription-Key |
Der Schlüssel für Ihre Azure KI Language-Ressource |
Übermitteln der ersten Anforderung
Die URL, an die die Anforderung übermittelt wird, hängt davon ab, in welchem Schritt Sie sich befinden, aber allen URLs ist der Endpunkt als Präfix vorangestellt, der von Ihrer Azure KI Language-Ressource bereitgestellt wird.
Wenn Sie beispielsweise ein Modell trainieren, erstellen Sie eine POST-Anforderung an die URL, die etwa wie folgt aussieht:
<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Platzhalter | Wert | Beispiel |
---|---|---|
<YOUR-ENDPOINT> |
Der Endpunkt Ihrer API-Anforderung | https://<your-custom-resource>.cognitiveservices.azure.com |
<PROJECT-NAME> |
Der Name Ihres Projekts (beim Wert wird die Groß- und Kleinschreibung beachtet) | myProject |
Der folgende Textkörper wird an die Anforderung angefügt:
{
"modelLabel": "<MODEL-NAME>",
"trainingConfigVersion": "<CONFIG-VERSION>",
"evaluationOptions": {
"kind": "percentage",
"trainingSplitPercentage": 80,
"testingSplitPercentage": 20
}
}
Schlüssel | Wert |
---|---|
<YOUR-MODEL> |
Der Modellname |
trainingConfigVersion |
Die Modellversion, die zum Trainieren Ihres Modells verwendet werden soll |
runValidation |
Boolescher Wert zum Ausführen der Validierung für den Testsatz. |
evaluationOptions |
Gibt Auswertungsoptionen an. |
kind |
Gibt den Datenaufteilungstyp an. Kann percentage lauten, wenn Sie die automatische Aufteilung verwenden, oder set , wenn Sie Ihr Dataset manuell aufteilen. |
testingSplitPercentage |
Erfordert ein ganzzahliges Feld, wenn type ein Prozentsatz ist. Gibt die Testaufteilung an. |
trainingSplitPercentage |
Erfordert ein ganzzahliges Feld, wenn type ein Prozentsatz ist. Gibt die Trainingsaufteilung an. |
Die Antwort auf die obige Anforderung lautet 202
, was bedeutet, dass die Anforderung erfolgreich war. Verwenden Sie den location
-Wert aus den Antwortheadern, der der folgenden URL ähnelt:
<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Schlüssel | Wert |
---|---|
<JOB-ID> |
Bezeichner für Ihre Anforderung |
Die URL wird im nächsten Schritt verwendet, um den Trainingsstatus abzurufen.
Abrufen des Trainingsstatus
Wenn Sie den Trainingsstatus abrufen möchten, verwenden Sie die URL aus dem Header der Anforderungsantwort, um eine GET-Anforderung zu übermitteln. Verwenden Sie dabei den gleichen Header, der den Azure KI Language-Dienstschlüssel für die Authentifizierung enthält. Der Antworttext ähnelt der folgenden JSON-Struktur:
{
"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"
}
Das Trainieren eines Modells kann einige Zeit in Anspruch nehmen. Überprüfen Sie daher regelmäßig diese Status-URL, bis der status
der Antwort succeeded
zurückgibt. Nach dem Training können Sie Ihr Modell anzeigen, überprüfen und bereitstellen.
Verwenden eines bereitgestellten Modells
Die Verwendung des Modells zur Klassifizierung von Text erfolgt nach dem gleichen Muster wie oben beschrieben, mit einer POST-Anforderung zum Übermitteln des Auftrags und einer GET-Anforderung zum Abrufen der Ergebnisse.
Übermitteln von Text zur Klassifizierung
Übermitteln Sie eine POST-Anforderung an den Endpunkt analyze an der folgenden URL:
<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Platzhalter | Wert | Beispiel |
---|---|---|
<YOUR-ENDPOINT> |
Der Endpunkt Ihrer API-Anforderung | https://<your-custom-resource>.cognitiveservices.azure.com |
Wichtig
Denken Sie daran, Ihren Schlüssel in den Header für Ocp-Apim-Subscription-Key
einzuschließen.
Die folgende JSON-Struktur wird an die Anforderung angefügt:
{
"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>"
}
}
]
}
Schlüssel | Wert |
---|---|
<TASK-REQUIRED> |
Hierbei handelt es sich um die angeforderte Aufgabe. Bei Projekten mit mehreren Bezeichnungen lautet der Task CustomMultiLabelClassification und bei Projekten mit einer einzelnen Bezeichnung CustomSingleLabelClassification . |
<LANGUAGE-CODE> |
Der Sprachcode (z. B. en-us ) |
<TASK-NAME> |
Ihr Aufgabenname |
<PROJECT-NAME> |
Der Name Ihres Projekts. |
<DEPLOYMENT-NAME> |
Ihr Bereitstellungsname |
Die Antwort auf die obige Anforderung lautet 202
, was bedeutet, dass die Anforderung erfolgreich war. Suchen Sie in den Antwortheadern nach dem operation-location
-Wert, der der folgenden URL ähnelt:
<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Schlüssel | Wert |
---|---|
<YOUR-ENDPOINT> |
Der Endpunkt Ihrer API-Anforderung |
<JOB-ID> |
Bezeichner für Ihre Anforderung |
Diese URL wird dazu verwendet, die Ergebnisse der Aufgabe abzurufen.
Abrufen von Klassifizierungsergebnissen
Übermitteln Sie eine GET-Anforderung an den Endpunkt aus der vorherigen Anforderung. Verwenden Sie dabei den gleichen Header für die Authentifizierung. Der Antworttext ähnelt der folgenden JSON-Struktur:
{
"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"
}
}
]
}
}
Das Ergebnis der Klassifizierung befindet sich für jedes übermittelte Dokument in dem results
-Objekt des Elementarrays.