Meer informatie over het bouwen van tekstclassificatieprojecten

Voltooid

Aangepaste tekstclassificatieprojecten zijn uw werkruimte voor het bouwen, trainen, verbeteren en implementeren van uw classificatiemodel. U kunt op twee manieren met uw project werken: via Language Studio en via de REST API. Language Studio is de GUI die wordt gebruikt in het lab, maar de REST API heeft dezelfde functionaliteit. Ongeacht welke methode u wilt, zijn de stappen voor het ontwikkelen van uw model hetzelfde.

Levenscyclus van Azure AI Language-project

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

  • Labels definiëren: inzicht in de gegevens die u wilt classificeren, identificeer de mogelijke labels die u wilt categoriseren. In ons voorbeeld van het videospel zijn onze labels "Action", "Adventure", "Strategy", enzovoort.
  • Taggegevens: Tag, of label, uw bestaande gegevens, waarbij u het label of de labels opgeeft die elk bestand bevat. Het labelen van gegevens is belangrijk omdat het model leert hoe u toekomstige bestanden kunt classificeren. Best practice is om duidelijke verschillen tussen labels te hebben om dubbelzinnigheid te voorkomen en goede voorbeelden te bieden van elk label waar het model van kan leren. We labelen bijvoorbeeld het spel "Quest for the Mine Brush" als "Adventure" en "Flight Trainer" als "Action".
  • Model trainen: Train uw model met de gelabelde gegevens. Training leert ons model welke soorten samenvattingen van videogames moeten worden gelabeld met welk genre.
  • Model weergeven: Nadat uw model is getraind, bekijkt u de resultaten van het model. Uw model wordt gescoord tussen 0 en 1, op basis van de precisie en relevante overeenkomsten van de geteste gegevens. Noteer welk genre niet goed presteerde.
  • Model verbeteren: Verbeter uw model door te zien welke classificaties niet naar het juiste label kunnen evalueren, uw labeldistributie kunnen zien en erachter komen welke gegevens moeten worden toegevoegd om de prestaties te verbeteren. U kunt bijvoorbeeld zien dat uw model 'Adventure' en 'Strategy' games combineert. Probeer meer voorbeelden te vinden van elk label dat u aan uw gegevensset toevoegt voor het opnieuw trainen van uw model.
  • Model implementeren: zodra uw model naar wens wordt uitgevoerd, implementeert u uw model om het beschikbaar te maken via de API. Uw model heeft mogelijk de naam GameGenres en zodra dit is geïmplementeerd, kan deze worden gebruikt om speloverzichten te classificeren.
  • Tekst classificeren: gebruik uw model voor het classificeren van tekst. In het lab wordt beschreven hoe u de API gebruikt en kunt u de API-verwijzing bekijken

Gegevenssets splitsen voor training

Wanneer u uw gegevens labelt, kunt u opgeven welke gegevensset u voor elk bestand wilt gebruiken:

  • Training : de trainingsgegevensset wordt gebruikt om het model daadwerkelijk te trainen. De verstrekte gegevens en labels worden ingevoerd in het machine learning-algoritme om uw model te leren welke gegevens moeten worden geclassificeerd op welk label. De trainingsgegevensset is de grootste van de twee gegevenssets. Het wordt aanbevolen om ongeveer 80% van uw gelabelde gegevens te zijn.
  • Testen : de testgegevensset bevat gelabelde gegevens die worden gebruikt om het model te verifiëren nadat deze zijn getraind. Azure neemt de gegevens in de testgegevensset, verzendt deze naar het model en vergelijkt de uitvoer met de wijze waarop u uw gegevens hebt gelabeld om te bepalen hoe goed het model heeft gepresteerd. Het resultaat van die vergelijking is hoe uw model wordt beoordeeld en u helpt u te weten hoe u uw voorspellende prestaties kunt verbeteren.

Tijdens de stap Model trainen zijn er twee opties voor het trainen van uw model.

  • Automatisch splitsen : Azure neemt al uw gegevens op, splitst deze willekeurig in de opgegeven percentages en past deze toe bij het trainen van het model. Deze optie is het beste wanneer u een grotere gegevensset hebt, gegevens natuurlijk consistenter zijn of als de distributie van uw gegevens uw lessen uitgebreid omvat.
  • Handmatig splitsen : geef handmatig op welke bestanden in elke gegevensset moeten staan. Wanneer u de trainingstaak verzendt, vertelt de Azure AI Language-service u de splitsing van de gegevensset en de distributie. Deze splitsing wordt het beste gebruikt met kleinere gegevenssets om ervoor te zorgen dat de juiste verdeling van klassen en variatie in gegevens aanwezig is om uw model correct te trainen.

Als u de automatische splitsing wilt gebruiken, plaatst u alle bestanden in de trainingsgegevensset bij het labelen van uw gegevens (deze optie is de standaardoptie). Als u de handmatige splitsing wilt gebruiken, geeft u op welke bestanden tijdens het labelen van uw gegevens moeten worden getest of getraind.

Implementatieopties

Met Azure AI Language kan elk project zowel meerdere modellen als meerdere implementaties maken, elk met een eigen unieke naam. Voordelen zijn onder andere de mogelijkheid om:

  • Twee modellen naast elkaar testen
  • Vergelijken hoe de verdeling van gegevenssets van invloed is op de prestaties
  • Meerdere versies van uw model implementeren

Notitie

Elk project heeft een limiet van tien implementatienamen

Tijdens de implementatie kunt u de naam voor het geïmplementeerde model kiezen, die vervolgens kan worden geselecteerd bij het verzenden van een classificatietaak:

<...>
  "tasks": [
    {
      "kind": "CustomSingleLabelClassification",
      "taskName": "MyTaskName",
      "parameters": {
        "projectName": "MyProject",
        "deploymentName": "MyDeployment"
      }
    }
  ]
<...>

De REST API gebruiken

Met de REST API die beschikbaar is voor de Azure AI Language-service, kan DE CLI-ontwikkeling van Azure AI Language-projecten op dezelfde manier worden uitgevoerd als Language Studio een gebruikersinterface biedt voor het bouwen van projecten. Language Studio wordt verder verkend in het lab van deze module.

Patroon van het gebruik van de API

De API voor de Azure AI Language-service werkt asynchroon voor de meeste aanroepen. In elke stap verzenden we eerst een aanvraag naar de service en check vervolgens opnieuw met de service via een volgende aanroep om de status of het resultaat op te halen.

Bij elke aanvraag is een header vereist om uw aanvraag te verifiëren:

Sleutel Weergegeven als
Ocp-Apim-Subscription-Key De sleutel voor uw Azure AI-taalresource

Eerste aanvraag indienen

De URL voor het verzenden van de aanvraag varieert van de stap waarin u zich bevindt, maar alle worden voorafgegaan door het eindpunt dat wordt geleverd door uw Azure AI Language-resource.

Als u bijvoorbeeld een model wilt trainen, maakt u een POST naar de URL die er ongeveer als volgt uitziet:

<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Tijdelijke aanduiding Weergegeven als Opmerking
<YOUR-ENDPOINT> Het eindpunt voor uw API-aanvraag https://<your-custom-resource>.cognitiveservices.azure.com
<PROJECT-NAME> De naam voor uw project (waarde is hoofdlettergevoelig) myProject

De volgende hoofdtekst wordt toegevoegd aan de aanvraag:

    {
        "modelLabel": "<MODEL-NAME>",
        "trainingConfigVersion": "<CONFIG-VERSION>",
        "evaluationOptions": {
            "kind": "percentage",
            "trainingSplitPercentage": 80,
            "testingSplitPercentage": 20
        }
    }
Sleutel Weergegeven als
<YOUR-MODEL> De naam van uw model.
trainingConfigVersion De modelversie die moet worden gebruikt om uw model te trainen.
runValidation Booleaanse waarde om validatie uit te voeren voor de testset.
evaluationOptions Hiermee geeft u evaluatieopties.
kind Hiermee geeft u het type gegevenssplitsing op. Dit kan zijn percentage als u een automatische splitsing gebruikt of set als u uw gegevensset handmatig splitst
testingSplitPercentage Vereist geheel getalveld alleen als type dit percentage is. Hiermee geeft u testsplitsing op.
trainingSplitPercentage Vereist geheel getalveld alleen als type dit percentage is. Hiermee geeft u trainingssplitsing op.

Het antwoord op de bovenstaande aanvraag is een 202, wat betekent dat de aanvraag is geslaagd. Pak de location waarde uit de antwoordheaders, die er ongeveer als volgt uitzien:

<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Sleutel Weergegeven als
<JOB-ID> Id voor uw aanvraag

Deze URL wordt gebruikt in de volgende stap om de trainingsstatus op te halen.

Trainingsstatus ophalen

Als u de trainingsstatus wilt ophalen, gebruikt u de URL van de header van het aanvraagantwoord om een GET-aanvraag in te dienen, met dezelfde header die de Azure AI Language-servicesleutel voor verificatie biedt. De hoofdtekst van het antwoord is vergelijkbaar met de volgende 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"
}

Het trainen van een model kan enige tijd duren, dus controleer regelmatig op deze status-URL totdat het antwoord status wordt geretourneerd succeeded. Zodra de training is voltooid, kunt u uw model bekijken, verifiëren en implementeren.

Een geïmplementeerd model gebruiken

Het model gebruiken om tekst te classificeren volgt hetzelfde patroon als hierboven beschreven, waarbij een POST-aanvraag de taak verzendt en een GET-aanvraag om de resultaten op te halen.

Tekst verzenden voor classificatie

Als u uw model wilt gebruiken, dient u een POST in bij het analyse-eindpunt op de volgende URL:

<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Tijdelijke aanduiding Weergegeven als Opmerking
<YOUR-ENDPOINT> Het eindpunt voor uw API-aanvraag https://<your-custom-resource>.cognitiveservices.azure.com

Belangrijk

Vergeet niet om uw resourcesleutel op te nemen in de header voor Ocp-Apim-Subscription-Key

De volgende JSON-structuur wordt gekoppeld aan de aanvraag:

{
  "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>"
      }
    }
  ]
}
Sleutel Weergegeven als
<TASK-REQUIRED> Welke taak u aanvraagt. De taak is CustomMultiLabelClassification voor meerdere labelprojecten of CustomSingleLabelClassification voor projecten met één label
<LANGUAGE-CODE> De taalcode zoals en-us.
<TASK-NAME> De naam van uw taak.
<PROJECT-NAME> Uw projectnaam.
<DEPLOYMENT-NAME> De naam van uw implementatie.

Het antwoord op de bovenstaande aanvraag is een 202, wat betekent dat de aanvraag is geslaagd. Zoek de operation-location waarde in de antwoordheaders, die er ongeveer als volgt uitzien:

<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Sleutel Weergegeven als
<YOUR-ENDPOINT> Het eindpunt voor uw API-aanvraag
<JOB-ID> Id voor uw aanvraag

Deze URL wordt gebruikt om de taakresultaten op te halen.

Classificatieresultaten ophalen

Dien een GET-aanvraag in bij het eindpunt van de vorige aanvraag, met dezelfde header voor verificatie. De hoofdtekst van het antwoord is vergelijkbaar met de volgende 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"
        }
      }
    ]
  }
}

Het classificatieresultaat bevindt zich binnen het object van results de itemsmatrix voor elk verzonden document.