Compreender como criar projetos de classificação de texto

Concluído

Projetos de classificação de texto personalizados são seu espaço de trabalho para criar, treinar, melhorar e implantar seu modelo de classificação. Você pode trabalhar com seu projeto de duas maneiras: através do Language Studio e através da API REST. Language Studio é a GUI que será usada no laboratório, mas a API REST tem a mesma funcionalidade. Independentemente do método que preferir, os passos para desenvolver o seu modelo são os mesmos.

Ciclo de vida do projeto 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.

  • Definir etiquetas: compreender os dados que pretende classificar, identificar as possíveis etiquetas em que pretende categorizar. No nosso exemplo de videogame, nossos rótulos seriam "Ação", "Aventura", "Estratégia" e assim por diante.
  • Dados da marca: marque ou rotule seus dados existentes, especificando o rótulo ou rótulos nos quais cada arquivo se enquadra. Rotular dados é importante, pois é como seu modelo aprenderá a classificar arquivos futuros. A melhor prática é ter diferenças claras entre rótulos para evitar ambiguidade e fornecer bons exemplos de cada rótulo para o modelo aprender. Por exemplo, rotulamos o jogo "Quest for the Mine Brush" como "Aventura" e "Flight Trainer" como "Ação".
  • Modelo de trem: Treine seu modelo com os dados rotulados. O treinamento ensinará ao nosso modelo quais tipos de resumos de videogames devem ser rotulados em qual gênero.
  • Ver modelo: Depois que o modelo for treinado, exiba os resultados do modelo. Seu modelo é pontuado entre 0 e 1, com base na precisão e recuperação dos dados testados. Tome nota de qual gênero não teve um bom desempenho.
  • Melhorar o modelo: melhore seu modelo vendo quais classificações não conseguiram avaliar o rótulo correto, veja a distribuição do rótulo e descubra quais dados adicionar para melhorar o desempenho. Por exemplo, você pode achar que seu modelo mistura jogos de "Aventura" e "Estratégia". Tente encontrar mais exemplos de cada rótulo para adicionar ao seu conjunto de dados para retreinar seu modelo.
  • Implantar modelo: Quando o modelo tiver o desempenho desejado, implante o modelo para disponibilizá-lo por meio da API. Seu modelo pode ser chamado de "GameGenres" e, uma vez implantado, pode ser usado para classificar resumos de jogos.
  • Classificar texto: use seu modelo para classificar texto. O laboratório aborda como usar a API, e você pode exibir a referência da API

Como dividir conjuntos de dados para treinamento

Ao rotular seus dados, você pode especificar qual conjunto de dados deseja que cada arquivo seja:

  • Treinamento - O conjunto de dados de treinamento é usado para realmente treinar o modelo, os dados e rótulos fornecidos são alimentados no algoritmo de aprendizado de máquina para ensinar ao seu modelo quais dados devem ser classificados para qual rótulo. O conjunto de dados de treinamento será o maior dos dois conjuntos de dados, recomendado para ser cerca de 80% dos seus dados rotulados.
  • Teste - O conjunto de dados de teste é rotulado como dados usados para verificar seu modelo depois de treinado. O Azure pegará os dados no conjunto de dados de teste, enviá-los-á para o modelo e comparará a saída com a forma como você rotulou seus dados para determinar o desempenho do modelo. O resultado dessa comparação é a forma como o seu modelo é pontuado e ajuda-o a saber como melhorar o seu desempenho preditivo.

Durante a etapa do modelo de trem, há duas opções de como treinar seu modelo .

  • Divisão automática - o Azure obtém todos os seus dados, divide-os nas percentagens especificadas aleatoriamente e aplica-os no treino do modelo. Essa opção é melhor quando você tem um conjunto de dados maior, os dados são naturalmente mais consistentes ou a distribuição dos dados abrange extensivamente suas classes.
  • Divisão manual - Especifique manualmente quais arquivos devem estar em cada conjunto de dados. Quando você envia o trabalho de treinamento, o serviço Azure AI Language informará a divisão do conjunto de dados e da distribuição. Essa divisão é melhor usada com conjuntos de dados menores para garantir que a distribuição correta de classes e a variação nos dados estejam presentes para treinar corretamente seu modelo.

Para usar a divisão automática, coloque todos os arquivos no conjunto de dados de treinamento ao rotular seus dados (essa opção é o padrão). Para usar a divisão manual, especifique quais arquivos devem estar em teste versus treinamento durante a rotulagem de seus dados.

Opções de implementação

A Linguagem de IA do Azure permite que cada projeto crie vários modelos e várias implantações, cada uma com seu próprio nome exclusivo. Os benefícios incluem a capacidade de:

  • Teste dois modelos lado a lado
  • Compare como a divisão de conjuntos de dados afeta o desempenho
  • Implante várias versões do seu modelo

Nota

Cada projeto tem um limite de dez nomes de implantação

Durante a implantação, você pode escolher o nome do modelo implantado, que pode ser selecionado ao enviar uma tarefa de classificação:

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

Utilizar a API REST

A API REST disponível para o serviço Azure AI Language permite o desenvolvimento CLI de projetos do Azure AI Language da mesma forma que o Language Studio fornece uma interface de usuário para criar projetos. O Language Studio é mais explorado no laboratório deste módulo.

Padrão de uso da API

A API do serviço Azure AI Language opera de forma assíncrona para a maioria das chamadas. Em cada etapa, enviamos uma solicitação ao serviço primeiro, depois voltamos com o serviço por meio de uma chamada subsequente para obter o status ou resultado.

Com cada solicitação, um cabeçalho é necessário para autenticar sua solicitação:

Key valor
Ocp-Apim-Subscription-Key A chave para o seu recurso de linguagem de IA do Azure

Submeter pedido inicial

A URL para enviar a solicitação varia em qual etapa você está, mas todas são prefixadas com o ponto de extremidade fornecido pelo seu recurso Azure AI Language.

Por exemplo, para treinar um modelo, você criaria um POST para a URL que teria a seguinte aparência:

<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Marcador de Posição valor Exemplo
<YOUR-ENDPOINT> O ponto de extremidade para sua solicitação de API https://<your-custom-resource>.cognitiveservices.azure.com
<PROJECT-NAME> O nome do seu projeto (o valor diferencia maiúsculas de minúsculas) myProject

O pedido será anexado ao seguinte organismo:

    {
        "modelLabel": "<MODEL-NAME>",
        "trainingConfigVersion": "<CONFIG-VERSION>",
        "evaluationOptions": {
            "kind": "percentage",
            "trainingSplitPercentage": 80,
            "testingSplitPercentage": 20
        }
    }
Key valor
<YOUR-MODEL> O nome do seu modelo.
trainingConfigVersion A versão do modelo a ser usada para treinar seu modelo.
runValidation Valor booleano para executar a validação no conjunto de testes.
evaluationOptions Especifica as opções de avaliação.
kind Especifica o tipo de divisão de dados. Pode ser percentage se você estiver usando uma divisão automática ou set se dividir manualmente seu conjunto de dados
testingSplitPercentage Campo inteiro obrigatório somente se type for porcentagem. Especifica a divisão de testes.
trainingSplitPercentage Campo inteiro obrigatório somente se type for porcentagem. Especifica a divisão de treinamento.

A resposta ao pedido acima será um 202, o que significa que o pedido foi bem-sucedido. Pegue o location valor dos cabeçalhos de resposta, que serão semelhantes ao seguinte URL:

<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Key valor
<JOB-ID> Identificador do seu pedido

Esse URL é usado na próxima etapa para obter o status do treinamento.

Obter status de treinamento

Para obter o status de treinamento, use a URL do cabeçalho da resposta da solicitação para enviar uma solicitação GET , com o mesmo cabeçalho que fornece nossa chave de serviço Azure AI Language para autenticação. O corpo da resposta será semelhante ao seguinte 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"
}

O treinamento de um modelo pode levar algum tempo, portanto, verifique periodicamente esse URL de status até que a resposta status retorne succeeded. Depois que o treinamento for bem-sucedido, você poderá visualizar, verificar e implantar seu modelo.

Consumindo um modelo implantado

O uso do modelo para classificar o texto segue o mesmo padrão descrito acima, com uma solicitação POST enviando o trabalho e uma solicitação GET para recuperar os resultados.

Submeter texto para classificação

Para usar seu modelo, envie um POST para o ponto de extremidade de análise no seguinte URL:

<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Marcador de Posição valor Exemplo
<YOUR-ENDPOINT> O ponto de extremidade para sua solicitação de API https://<your-custom-resource>.cognitiveservices.azure.com

Importante

Lembre-se de incluir sua chave de recurso no cabeçalho para Ocp-Apim-Subscription-Key

A seguinte estrutura JSON seria anexada ao pedido:

{
  "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>"
      }
    }
  ]
}
Key valor
<TASK-REQUIRED> Qual tarefa você está solicitando. A tarefa é CustomMultiLabelClassification para vários projetos de rótulo ou CustomSingleLabelClassification para projetos de rótulo único
<LANGUAGE-CODE> O código de idioma, como en-us.
<TASK-NAME> O nome da tarefa.
<PROJECT-NAME> O nome do seu projeto.
<DEPLOYMENT-NAME> Seu nome de implantação.

A resposta ao pedido acima será um 202, o que significa que o pedido foi bem-sucedido. Procure o operation-location valor nos cabeçalhos de resposta, que se parecerá com o seguinte URL:

<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Key valor
<YOUR-ENDPOINT> O ponto de extremidade para sua solicitação de API
<JOB-ID> Identificador do seu pedido

Este URL é utilizado para obter os resultados da sua tarefa.

Obter resultados de classificação

Envie uma solicitação GET para o ponto de extremidade da solicitação anterior, com o mesmo cabeçalho para autenticação. O corpo da resposta será semelhante ao seguinte 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"
        }
      }
    ]
  }
}

O resultado da classificação está dentro do objeto da matriz de results itens, para cada documento enviado.