Comprendre comment créer des projets de classification de texte

Effectué

Les projets de classification de texte personnalisés sont votre espace de travail pour générer, entraîner, améliorer et déployer votre modèle de classification. Vous pouvez utiliser votre projet de deux façons : via Language Studio et via l’API REST. Language Studio est l’interface utilisateur graphique qui sera utilisée dans le labo, mais l’API REST dispose des mêmes fonctionnalités. Quelle que soit la méthode que vous préférez, les étapes de développement de votre modèle sont les mêmes.

Cycle de vie du projet Azure AI Language

Diagramme montrant un cycle de vie avec des étapes permettant de définir des étiquettes, des données de balise, d’entraîner un modèle, d’afficher un modèle, d’améliorer le modèle, de déployer un modèle et de classer du texte.

  • Définir des étiquettes : Comprendre les données que vous souhaitez classifier, identifier les étiquettes possibles dans lesquelles vous souhaitez classer. Dans notre exemple de jeu vidéo, nos étiquettes seraient « Action », « Aventure », « Stratégie », et ainsi de suite.
  • Données de balise : Étiquetez vos données existantes, en spécifiant la ou les étiquettes auxquelles correspond chaque fichier. L’étiquetage des données est importante, car il s’agit de la façon dont votre modèle apprend à classifier les fichiers futurs. La meilleure pratique consiste à avoir des différences claires entre les étiquettes pour éviter l’ambiguïté et fournir de bons exemples de chaque étiquette pour que le modèle apprenne à partir de. Par exemple, nous allons étiqueter le jeu « Quest for the Mine Brush » comme « Adventure » et « Flight Trainer » comme « Action ».
  • Entraîner le modèle : entraîner votre modèle avec les données étiquetées. L'entraînement enseignera à notre modèle quels types de résumés de jeux vidéo devraient être étiquetés à quel genre.
  • Afficher le modèle : une fois votre modèle entraîné, affichez les résultats du modèle. Votre modèle est évalué entre 0 et 1, en fonction de la précision et du rappel des données testées. Prenez note du genre qui n’a pas eu de bons résultats.
  • Améliorer le modèle : améliorez votre modèle en voyant les classifications qui n’ont pas pu évaluer l’étiquette appropriée, voir votre distribution d’étiquettes et découvrir les données à ajouter pour améliorer les performances. Par exemple, vous pouvez trouver votre modèle mélange des jeux « Adventure » et « Strategy ». Essayez de trouver d’autres exemples de chaque étiquette à ajouter à votre jeu de données pour réentraîner votre modèle.
  • Déployer le modèle : une fois que votre modèle est effectué comme vous le souhaitez, déployez votre modèle pour le rendre disponible via l’API. Votre modèle peut être nommé « GameGenres », et une fois déployé, vous pouvez l’utiliser pour classifier les résumés de jeu.
  • Classifier le texte : utilisez votre modèle pour classifier du texte. Le labo explique comment utiliser l’API, et vous pouvez afficher la référence de l’API

Comment fractionner des jeux de données pour l’entraînement

Lorsque vous étiquetez vos données, vous pouvez spécifier le jeu de données que vous souhaitez que chaque fichier soit :

  • Formation : le jeu de données d’entraînement est utilisé pour entraîner réellement le modèle ; les données et les étiquettes fournies sont transmises à l’algorithme Machine Learning pour enseigner à votre modèle les données à classer dans 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 est constitué de données étiquetées utilisées pour vérifier votre modèle une fois qu'il a été entraîné. Azure prend les données dans le jeu de données de test, l’envoie au modèle et compare la sortie à la façon dont vous avez étiqueté vos données pour déterminer le niveau de performance du modèle. Le résultat de cette comparaison est la façon dont votre modèle est évalué et vous aide à savoir comment améliorer vos performances prédictives.

Au cours de l’étape Entraîner le modèle , il existe deux options pour l’apprentissage de votre modèle.

  • Fractionnement automatique : Azure prend toutes vos données, les fractionne en pourcentages spécifiés de manière aléatoire et les applique lors de l’apprentissage du modèle. Cette option est optimale lorsque vous disposez d’un jeu de données plus volumineux, que les données sont naturellement plus cohérentes ou que la distribution de vos données couvre largement vos classes.
  • Fractionnement manuel : spécifiez manuellement les fichiers qui doivent se trouver dans chaque jeu de données. Lorsque vous envoyez le travail d’entraînement, le service Azure AI Language vous indique le fractionnement du jeu de données et de la distribution. Ce fractionnement est mieux utilisé avec des jeux de données plus petits pour vous assurer que la distribution correcte des classes et des variantes de données est présente pour entraîner correctement votre modèle.

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

Options de déploiement

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

  • Tester deux modèles côte à côte
  • Comparer la façon dont le fractionnement des jeux de données impacte les performances
  • Déployer plusieurs versions de votre modèle

Remarque

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é lors de l’envoi d’une tâche de classification :

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

Utilisation de l’API REST

L’API REST disponible pour le service Azure AI Language permet le développement CLI de projets Azure AI Language 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 laboratoire de ce module.

Modèle d’utilisation de l’API

L’API pour le service Azure AI Language fonctionne de manière asynchrone pour la plupart des appels. Dans chaque étape, nous envoyons d’abord une demande au service, puis revenez au service via un appel suivant pour obtenir l’état ou le résultat.

Avec chaque requête, un en-tête est requis pour authentifier votre demande :

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

Envoyer une demande initiale

L'URL pour soumettre la demande varie selon l'étape à laquelle vous vous trouvez, mais elles sont toutes préfixées par le point de terminaison fourni par votre ressource Azure AI Language.

Par exemple, pour effectuer l’apprentissage d’un modèle, vous devez créer un post vers l’URL qui ressemblerait à ce qui suit :

<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 tests.
evaluationOptions Spécifie les options d’évaluation.
kind Spécifie le type de fractionnement des données. Peut être percentage si vous utilisez un fractionnement automatique ou set si vous fractionnez manuellement votre jeu de données
testingSplitPercentage Champ entier obligatoire uniquement s’il type s’agit d’un pourcentage. Spécifie le fractionnement de test.
trainingSplitPercentage Champ entier obligatoire uniquement s’il type s’agit d’un pourcentage. Spécifie le fractionnement d’entraînement.

La réponse à la demande ci-dessus sera un 202, ce qui signifie que la requête a réussi. Récupérez la valeur location des en-têtes de réponse, qui ressemble à 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’entraînement, utilisez l’URL située dans l’en-tête de la réponse à la demande pour soumettre une requête GET, en gardant le même en-tête qui fournit notre clé de service Azure AI Language pour l’authentification. Le corps de la réponse est similaire au code 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 afficher, vérifier et déployer votre modèle.

Consommation d’un modèle déployé

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

Envoyer du texte pour la classification

Pour utiliser votre modèle, envoyez un post au point de terminaison d’analyse à 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’inclure votre clé de ressource dans l’en-tête pour Ocp-Apim-Subscription-Key

La structure JSON suivante est attachée à la requête :

{
  "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> Quelle tâche demandez-vous ? La tâche est CustomMultiLabelClassification pour les projets multi-étiquettes ou CustomSingleLabelClassification pour les projets mono-étiquettes
<LANGUAGE-CODE> Code de langue 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 sera un 202, ce qui signifie que la requête a réussi. Recherchez la operation-location valeur 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 requête GET au point de terminaison à partir 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 code 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 classification se trouve dans l’objet du results tableau d’éléments, pour chaque document envoyé.