Grundlegendes zum Erstellen von Textklassifizierungsprojekten
Benutzerdefinierte Textklassifizierungsprojekte sind Ihr Arbeitsbereich, um Ihr Klassifizierungsmodell zu erstellen, zu trainieren, zu verbessern und bereitzustellen. Sie können mit Ihrem Projekt auf zwei Arten arbeiten: über Language Studio und über die REST-API. Language Studio ist die GUI, die in der Übung verwendet wird, aber die REST-API verfügt über die gleiche Funktionalität. Unabhängig davon, welche Methode Sie bevorzugen, sind die Schritte für die Entwicklung Ihres Modells identisch.
Lebenszyklus von Azure Language-Projekten
- Bezeichnungen definieren: Verstehen Sie die Daten, die Sie klassifizieren möchten, und identifizieren Sie die möglichen Bezeichnungen, in die Sie diese kategorisieren könnten. In unserem Videospielbeispiel wären unsere Bezeichnungen "Action", "Adventure", "Strategy" usw.
- Tagdaten: Tag oder Bezeichnung, Ihre vorhandenen Daten, angeben die Bezeichnung oder Bezeichnungen, unter die jede Datei fällt. Das Bezeichnen von Daten ist wichtig, da ihr Modell erfahren wird, wie zukünftige Dateien klassifiziert werden. Bewährte Methode besteht darin, klare Unterschiede zwischen Bezeichnungen zu haben, um Mehrdeutigkeit zu vermeiden, und gute Beispiele für jedes Etikett für das Modell bereitzustellen, aus dem sie lernen können. Beispielsweise bezeichnen wir das Spiel "Quest for the Mine Brush" als "Adventure" und "Flight Trainer" als "Action".
- Trainmodell: Trainieren Sie Ihr Modell mit den bezeichneten Daten. Das Training wird unserem Modell beibringen, welche Arten von Videospielzusammenfassungen welchem Genre zugeordnet werden sollten.
- Modell anzeigen: Nachdem das Modell trainiert wurde, zeigen Sie die Ergebnisse des Modells an. Ihr Modell wird zwischen 0 und 1 bewertet, basierend auf der Genauigkeit und dem Rückruf der getesteten Daten. Beachten Sie, welches Genre nicht gut funktioniert hat.
- Modell verbessern: Verbessern Sie Ihr Modell, indem Sie sehen, welche Klassifizierungen nicht auf die richtige Bezeichnung ausgewertet werden konnten, sehen Sie ihre Bezeichnungsverteilung, und finden Sie heraus, welche Daten hinzugefügt werden sollen, um die Leistung zu verbessern. Sie können beispielsweise feststellen, dass Ihr Modell "Adventure" und "Strategie" Spiele kombiniert. Versuchen Sie, weitere Beispiele für jede Bezeichnung zu finden, die Sie ihrem Dataset für die Umschulung Ihres Modells hinzufügen möchten.
- Bereitstellen des Modells: Sobald ihr Modell wie gewünscht ausgeführt wird, stellen Sie ihr Modell bereit, um es über die API verfügbar zu machen. Ihr Modell kann als "GameGenres" bezeichnet werden, und sobald es bereitgestellt wurde, kann es verwendet werden, um Spielzusammenfassungen zu klassifizieren.
- Klassifizieren von Text: Verwenden Sie Ihr Modell zum Klassifizieren von Text. Im Labor wird erläutert, wie die API verwendet wird, und Sie können die API-Dokumentation einsehen.
So teilen Sie Datasets für Schulungen auf
Beim Bezeichnen Ihrer Daten können Sie angeben, welches Dataset jede Datei sein soll:
- Schulung – Das Schulungsdatenset wird verwendet, um das Modell tatsächlich zu trainieren; die bereitgestellten Daten und Bezeichnungen werden in den Maschinellen Lernalgorithmus eingespeist, um Ihrem Modell zu vermitteln, welche Daten in welche Bezeichnung klassifiziert werden sollen. Das Trainingsdataset ist das größere der beiden Datasets und sollte ungefähr 80 % der getaggten Daten enthalten.
- Tests: Das Testdataset enthält bezeichnete Daten, die dazu verwendet werden, das Modell nach dem Training zu überprüfen. Azure verwendet die Daten im Testdatensatz, sendet sie an das Modell und vergleicht die Ausgabe mit der Bezeichnung Ihrer Daten, um zu bestimmen, wie gut das Modell ausgeführt wurde. Das Ergebnis dieses Vergleichs ist, wie Ihr Modell bewertet wird, und hilft Ihnen zu wissen, wie Sie Ihre Vorhersageleistung verbessern können.
Während des Modell-Trainingsschritts gibt es zwei Möglichkeiten, wie Sie Ihr Modell trainieren können.
- Automatische Aufteilung – Azure übernimmt alle Ihre Daten, teilt sie zufällig in die angegebenen Prozentsätze auf und wendet sie beim Trainieren des Modells an. Diese Option ist am besten geeignet, wenn Sie über ein größeres Dataset verfügen, Daten natürlich konsistenter sind oder die Verteilung Ihrer Daten Ihre Klassen umfassend abdeckt.
- Manuelles Teilen – Geben Sie manuell an, welche Dateien in den einzelnen Datasets enthalten sein sollen. Wenn Sie den Schulungsauftrag übermitteln, teilt Ihnen der Azure-Sprachdienst die Aufteilung des Datasets und der Verteilung mit. Diese Aufteilung wird am besten mit kleineren Datasets verwendet, um sicherzustellen, dass die richtige Verteilung von Klassen und Variationen in Daten vorhanden ist, um Ihr Modell ordnungsgemäß zu trainieren.
Um die automatische Aufteilung zu verwenden, fügen Sie alle Dateien beim Bezeichnen Ihrer Daten in das Schulungsdatenset ein (diese Option ist die Standardeinstellung). Wenn Sie eine 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 Language kann jedes Projekt sowohl mehrere Modelle als auch mehrere Bereitstellungen erstellen, jeweils mit einem eigenen eindeutigen Namen. Zu den Vorteilen gehören folgende Möglichkeiten:
- Zwei Modelle nebeneinander testen
- Vergleichen, wie sich die Aufteilung von Datasets auf die Leistung auswirkt
- Bereitstellen mehrerer Versionen Ihres Modells
Hinweis
Jedes Projekt kann maximal zehn Bereitstellungsnamen enthalten.
Während der Bereitstellung können Sie den 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-Sprachdienst verfügbare REST-API ermöglicht die CLI-Entwicklung von Azure-Sprachprojekten auf die gleiche Weise wie Language Studio eine Benutzeroberfläche zum Erstellen von Projekten. Language Studio wird im Labor dieses Moduls weiter untersucht.
Muster der Verwendung der API
Die API für den Azure-Sprachdienst funktioniert asynchron für die meisten Aufrufe. In jedem Schritt senden wir zuerst eine Anfrage an den Dienst und prüfen dann in einem nachfolgenden Aufruf den Status oder das Ergebnis.
Bei jeder Anforderung ist ein Header erforderlich, um Ihre Anforderung zu authentifizieren:
| Schlüssel | Wert |
|---|---|
Ocp-Apim-Subscription-Key |
Der Schlüssel zu Ihrer Azure Language-Ressource |
Ersten Antrag einreichen
Die URL, an die die Anforderung gesendet werden soll, variiert je nach Schritt, für den Sie sich befinden, aber allen wird der von Ihrer Azure Language-Ressource bereitgestellte Endpunkt vorangestellt.
Um beispielsweise ein Modell zu trainieren, erstellen Sie eine POST-Datei mit der 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 für Ihre 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 würde an die Anforderung angefügt:
{
"modelLabel": "<MODEL-NAME>",
"trainingConfigVersion": "<CONFIG-VERSION>",
"evaluationOptions": {
"kind": "percentage",
"trainingSplitPercentage": 80,
"testingSplitPercentage": 20
}
}
| Schlüssel | Wert |
|---|---|
<YOUR-MODEL> |
Der Name Ihres Modells. |
trainingConfigVersion |
Die Modellversion, die zum Trainieren Ihres Modells verwendet werden soll. |
runValidation |
Boolescher Wert zum Ausführen der Überprüfung für den Testsatz. |
evaluationOptions |
Gibt Auswertungsoptionen an. |
kind |
Gibt den Typ der Datenteilung an. Kann sein percentage , wenn Sie eine automatische Aufteilung verwenden oder set wenn Sie Ihr Dataset manuell aufteilen |
testingSplitPercentage |
Erforderliches ganzzahliges Feld nur, wenn type ein Prozentsatz ist. Gibt die Testaufteilung an. |
trainingSplitPercentage |
Erforderliches ganzzahliges Feld nur, wenn type ein Prozentsatz ist. Gibt die Schulungsunterbrechung an. |
Die Antwort auf die oben genannte Anforderung ist eine 202, was bedeutet, dass die Anforderung erfolgreich war. Rufen Sie den location Wert aus den Antwortheadern ab, 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 Anfrage |
Diese URL wird im nächsten Schritt verwendet, um den Schulungsstatus abzurufen.
Abrufen des Trainingsstatus
Um den Schulungsstatus abzurufen, verwenden Sie die URL aus dem Header der Anforderungsantwort, um eine GET-Anforderung mit demselben Header zu senden, der unseren Azure Language-Dienstschlüssel für die Authentifizierung bereitstellt. Der Antwortinhalt wird ähnlich dem folgenden JSON sein:
{
"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 die Antwort status zurückgegeben wird succeeded. Nachdem die Schulung erfolgreich war, können Sie Ihr Modell anzeigen, überprüfen und bereitstellen.
Verwenden eines bereitgestellten Modells
Die Verwendung des Modells zum Klassifizieren von Text folgt demselben Muster wie oben beschrieben, mit einer POST-Anforderung, die den Auftrag übermittelt, und einer GET-Anforderung zum Abrufen der Ergebnisse.
Übermitteln von Text für die Klassifizierung
Um Ihr Modell zu verwenden, senden Sie einen POST an den Analyseendpunkt unter der folgenden URL:
<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
| Platzhalter | Wert | Beispiel |
|---|---|---|
<YOUR-ENDPOINT> |
Der Endpunkt für Ihre API-Anforderung | https://<your-custom-resource>.cognitiveservices.azure.com |
Von Bedeutung
Denken Sie daran, Ihren Ressourcenschlüssel in den Header einzuschließen für Ocp-Apim-Subscription-Key
Die folgende JSON-Struktur würde 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> |
Welche Aufgabe Sie anfordern. 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> |
Ihr Projektname. |
<DEPLOYMENT-NAME> |
Ihr Bereitstellungsname. |
Die Antwort auf die oben genannte Anforderung ist eine 202, was bedeutet, dass die Anforderung erfolgreich war. Suchen Sie nach dem operation-location Wert in den Antwortheadern, der ungefähr wie die folgende URL aussieht:
<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
| Schlüssel | Wert |
|---|---|
<YOUR-ENDPOINT> |
Der Endpunkt für Ihre API-Anforderung |
<JOB-ID> |
Bezeichner für Ihre Anfrage |
Diese URL wird verwendet, um Ihre Aufgabenergebnisse abzurufen.
Abrufen von Klassifizierungsergebnissen
Senden Sie eine GET-Anforderung von der vorherigen Anforderung an den Endpunkt mit demselben Header für die Authentifizierung. Der Antwortinhalt wird ähnlich dem folgenden JSON sein:
{
"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 Klassifizierungsergebnis befindet sich im Objekt des Elementarrays results für jedes übermittelte Dokument.