Comprendre comment créer des projets de classification de texte

Effectué

Les projets de classification de texte personnalisée sont votre espace de travail pour générer, entraîner, améliorer et déployer votre modèle de classification. Vous pouvez travailler sur votre projet de deux façons : avec Language Studio ou l’API REST. Language Studio est l’interface graphique utilisateur utilisée dans le labo, mais l’API REST a la même fonctionnalité. Quelle que soit la méthode que vous choisissez, les étapes de développement de votre modèle sont identiques.

Cycle de vie d’un projet Azure AI Language

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

  • Définir des étiquettes : compréhension des données à classer, identifier les étiquettes possibles de classification. Dans notre exemple de jeu vidéo, nos étiquettes sont « Action », « Adventure », « Strategy », etc.
  • Étiqueter les données : étiquetez vos données existantes, en spécifiant la ou les étiquettes auxquelles correspond chaque fichier. L’étiquetage des données est important, car il détermine la façon dont votre modèle apprend à classifier les fichiers futurs. Une bonne pratique est d’avoir des étiquettes suffisamment différentes pour éviter l’ambiguïté et de fournir de bons exemples de chaque étiquette pour entraîner le modèle. Par exemple, nous utilisons l’étiquette « Adventure » pour le jeu « Quest for the Mine Brush » et « Action » pour « Flight Trainer ».
  • Entraîner le modèle : entraînez votre modèle avec les données étiquetées. L’entraînement enseigne à notre modèle les types de résumés de jeu vidéo qui doivent être étiquetés avec un genre particulier.
  • Voir le modèle : une fois votre modèle entraîné, consultez les résultats du modèle. Votre modèle reçoit un score entre 0 et 1, en fonction de la précision et du rappel des données testées. Notez le genre qui n’a pas un bon score.
  • Améliorer le modèle : améliorez votre modèle en notant les classifications qui n’ont pas correspondu à l’étiquette appropriée, regardez votre distribution d’étiquettes et déterminez les données à ajouter pour améliorer les performances. Par exemple, vous pouvez remarquer que votre modèle mélange des jeux « Adventure » et « Strategy ». Essayez de trouver plus d’exemples de chaque étiquette pour les ajouter à votre jeu de données afin de réentraîner votre modèle.
  • Déployer votre modèle : une fois que votre modèle fonctionne comme prévu, déployez-le pour le rendre disponible via l’API. Votre modèle peut être nommé « GameGenres » et peut être utilisé, une fois déployé, pour classifier des résumés de jeu.
  • Classifier du texte : utilisez votre modèle pour classifier du texte. Le labo explique comment utiliser l’API, et vous pouvez consulter la référence API

Comment diviser les jeux de données pour l’entraînement

Pendant l’étiquetage de vos données, vous pouvez spécifier le jeu de données de chaque fichier :

  • Entraînement : le jeu de données d’entraînement est utilisé pour entraîner le modèle. Les données et les étiquettes fournies sont transmises à l’algorithme Machine Learning pour montrer à votre modèle quelles données classifier sous quelle étiquette. Le jeu de données d’entraînement est le plus grand des deux jeux de données, il doit représenter environ 80 % de vos données étiquetées.
  • Test : le jeu de données de test contient des données étiquetées qui sont utilisées pour vérifier votre modèle après son entraînement. Azure prend les données du jeu de données de test, les envoie au modèle et compare la sortie à la façon dont vous avez étiqueté vos données afin de d’évaluer le fonctionnement du modèle. Le résultat de cette comparaison génère le score de votre modèle, et vous aide à savoir comment améliorer vos performances prédictives.

Pendant l’étape Entraîner le modèle, vous avez le choix entre deux options.

  • Division automatique : Azure prend toutes vos données, les répartit de manière aléatoire entre les pourcentages spécifiés et les applique dans l’entraînement du modèle. Choisissez cette option quand vous avez un grand jeu de données, que les données sont naturellement plus cohérentes ou que la distribution de vos données couvre largement vos classes.
  • Division manuelle : spécifiez manuellement les fichiers qui doivent se trouver dans chaque jeu de données. Quand vous envoyez le travail d’entraînement, le service Azure AI Language vous indique la répartition du jeu de données et la distribution. Cette division convient mieux aux jeux de données plus petits, car elle garantit une distribution appropriée des classes ainsi que des données suffisamment variées pour entraîner correctement votre modèle.

Pour utiliser la division automatique, placez tous les fichiers dans le jeu de données d’entraînement pendant l’étiquetage de vos données (cette option est la valeur par défaut). Pour utiliser la division manuelle, spécifiez les fichiers qui doivent être testés et ceux qui doivent être entraînés pendant l’étiquetage de vos données.

Options de déploiement

Avec Azure AI Language, chaque projet peut créer plusieurs modèles et plusieurs déploiements, chacun avec son propre nom unique. Les avantages sont la possibilité de :

  • Tester deux modèles côte à côte
  • Comparer l’impact de la répartition des jeux de données sur les performances
  • Déployer plusieurs versions de votre modèle

Notes

Chaque projet a une limite de dix noms de déploiement

Pendant le déploiement, vous pouvez choisir le nom du modèle déployé, qui peut ensuite être sélectionné pour l’envoi d’une tâche de classification :

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

En utilisant l’API REST

L’API REST disponible pour le service Azure AI Language permet de développer des projets Azure AI Language avec une interface CLI de la même façon que Language Studio fournit une interface utilisateur pour la création de projets. Language Studio est exploré plus loin dans le labo de ce module.

Modèle d’utilisation de l’API

L’API du service Azure AI Language fonctionne de façon asynchrone pour la plupart des appels. Dans chaque étape, nous envoyons d’abord une demande au service, puis renvoyons un appel au service pour obtenir l’état ou le résultat.

Chaque demande doit avoir un en-tête pour l’authentification :

Clé Valeur
Ocp-Apim-Subscription-Key Clé de votre ressource Azure AI Language

Envoyer une demande initiale

L’URL permettant d’envoyer la demande varie selon l’étape en cours, mais toutes ont pour préfixe le point de terminaison fourni par votre ressource Azure AI Language.

Par exemple, pour entraîner un modèle, vous créez une demande POST sur l’URL de type :

<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Espace réservé Valeur Exemple
<YOUR-ENDPOINT> Point de terminaison de votre demande d’API https://<your-custom-resource>.cognitiveservices.azure.com
<PROJECT-NAME> Nom de votre projet (valeur sensible à la casse) myProject

Le corps suivant est attaché à la demande :

    {
        "modelLabel": "<MODEL-NAME>",
        "trainingConfigVersion": "<CONFIG-VERSION>",
        "evaluationOptions": {
            "kind": "percentage",
            "trainingSplitPercentage": 80,
            "testingSplitPercentage": 20
        }
    }
Clé Valeur
<YOUR-MODEL> Nom de votre modèle.
trainingConfigVersion Version du modèle à utiliser pour entraîner votre modèle.
runValidation Valeur booléenne pour exécuter la validation sur le jeu de test.
evaluationOptions Spécifie les options d’évaluation.
kind Spécifie le type de répartition des données. Peut être percentage si vous utilisez une division automatique, ou set si vous divisez manuellement votre jeu de données
testingSplitPercentage Champ d’entier obligatoire si type est pourcentage. Spécifie le fractionnement de test.
trainingSplitPercentage Champ d’entier obligatoire si le type est défini sur pourcentage. Spécifie le fractionnement d’entraînement.

La réponse à la demande ci-dessus est un code 202, signifiant que la demande a réussi. Récupérez la valeur de location dans les en-têtes de réponse, qui ressemblent à l’URL suivante :

<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Clé Valeur
<JOB-ID> Identificateur de votre demande

Cette URL est utilisée à l’étape suivante pour obtenir l’état de l’entraînement.

Obtenir l’état de l’entraînement

Pour obtenir l’état de l’apprentissage, utilisez l’URL dans l’en-tête de la réponse de la demande afin d’envoyer une demande GET, avec le même en-tête qui contient notre clé de service Azure AI Language pour l’authentification. Le corps de la réponse est similaire au JSON suivant :

{
  "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"
}

L’entraînement d’un modèle pouvant prendre un certain temps, vérifiez régulièrement cette URL d’état jusqu’à ce que la réponse status retourne succeeded. Une fois l’entraînement réussi, vous pouvez voir, vérifier et déployer votre modèle.

Consommation d’un modèle déployé

L’utilisation du modèle pour classifier du texte suit le même modèle que celui décrit ci-dessus, avec une demande POST qui envoie le travail et une demande GET qui récupère les résultats.

Envoyer du texte à classifier

Pour utiliser votre modèle, envoyez une demande POST au point de terminaison d’analyse sur l’URL suivante :

<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Espace réservé Valeur Exemple
<YOUR-ENDPOINT> Point de terminaison de votre demande d’API https://<your-custom-resource>.cognitiveservices.azure.com

Important

N’oubliez pas d’ajouter votre clé de ressource dans l’en-tête pour Ocp-Apim-Subscription-Key

La structure JSON suivante est attachée à la demande :

{
  "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>"
      }
    }
  ]
}
Clé Valeur
<TASK-REQUIRED> Tâche que vous demandez. La tâche est CustomMultiLabelClassification pour les projets multi-étiquettes ou CustomSingleLabelClassification pour les projets mono-étiquettes
<LANGUAGE-CODE> Code de langage tel que en-us.
<TASK-NAME> Nom de votre tâche.
<PROJECT-NAME> Nom de votre projet.
<DEPLOYMENT-NAME> Nom de votre déploiement.

La réponse à la demande ci-dessus est un code 202, signifiant que la demande a réussi. Recherchez la valeur de operation-location dans les en-têtes de réponse, qui ressemblent à l’URL suivante :

<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Clé Valeur
<YOUR-ENDPOINT> Point de terminaison de votre demande d’API
<JOB-ID> Identificateur de votre demande

Cette URL est utilisée pour obtenir les résultats de votre tâche.

Obtenir les résultats de classification

Envoyez une demande GET au point de terminaison de la demande précédente, avec le même en-tête pour l’authentification. Le corps de la réponse est similaire au JSON suivant :

{
  "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"
        }
      }
    ]
  }
}

Le résultat de la classification se trouve dans l’objet results du tableau d’éléments, pour chaque document envoyé.