Entender como criar projetos de classificação de texto

Concluído

Projetos de classificação de textos personalizada são seu workspace para criar, treinar, aprimorar e implantar seu modelo de classificação. Você pode trabalhar com o projeto de duas maneiras: usando o Language Studio ou a API REST. O Language Studio é a GUI que será usada no laboratório, mas a API REST tem a mesma funcionalidade. Qualquer que seja o método de sua escolha, as etapas para desenvolver o modelo são as mesmas.

Ciclo de vida do projeto da Linguagem de IA do Azure

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 rótulos: entenda os dados que deseja classificar e identifique os possíveis rótulos nos quais deseja categorizá-los. No exemplo de videogame, os rótulos seriam "Ação", "Aventura", "Estratégia" e assim por diante.
  • Marcar dados: marque ou rotule seus dados existentes, especificando os rótulos de cada arquivo. A rotulagem de dados é importante, pois é assim que o modelo aprende a classificar arquivos futuros. A melhor prática é ter diferenças claras entre os rótulos para evitar ambiguidades e fornecer bons exemplos de cada rótulo para o modelo aprender. Por exemplo, o jogo "Quest for the Mine Brush" foi rotulado como "Adventure" e o jogo "Flight Trainer" foi rotulado como "Action".
  • Treinar modelos: treine seu modelo com os dados rotulados. O treinamento ensinará ao modelo quais tipos de resumos de videogame devem ser rotulados com qual gênero.
  • Exibir o modelo: após o modelo ser treinado, exiba os resultados dele. O modelo é pontuado entre 0 e 1 com base na precisão e no recall dos dados testados. Observe qual gênero não teve um bom desempenho.
  • Aprimorar o modelo: aprimore o modelo vendo quais classificações falharam na avaliação do rótulo certo, veja a distribuição de rótulos e descubra quais dados adicionar para aprimorar o desempenho. Por exemplo, você pode descobrir que o modelo mistura jogos de "Aventura" e "Estratégia". Tente encontrar mais exemplos de cada rótulo para adicionar ao seu conjunto de dados para treinar o modelo novamente.
  • Implantar o modelo: quando o modelo tiver o desempenho desejado, implante-o para disponibilizá-lo por meio da API. O modelo pode ser chamado de "GameGenres" e, uma vez implantado, pode ser usado para classificar resumos de jogos.
  • Classificar texto: use o modelo para classificar texto. O laboratório descreve como usar a API, e você pode conferir a referência de API

Como dividir conjuntos de dados para treinamento

Ao rotular seus dados, é possível especificar qual é o conjunto de dados desejado para cada arquivo:

  • Treinamento ─ O conjunto de dados de treinamento é usado para realmente treinar o modelo. Os dados e rótulos fornecidos são inseridos no algoritmo de aprendizado de máquina para ensinar o modelo quais dados devem ser classificados com qual rótulo. O conjunto de dados de treinamento será o maior dos dois conjuntos de dados e a recomendação é que ele tenha cerca de 80% de seus dados rotulados.
  • Teste ─ O conjunto de dados de teste contém dados rotulados que são usados para verificar seu modelo após o treinamento. O Azure envia os dados do conjunto de dados de teste ao modelo e compara a saída com sua rotulagem de dados para determinar o desempenho do modelo. O resultado dessa comparação é como o modelo é pontuado e ajuda você a saber como aprimorar seu desempenho preditivo.

Durante a etapa Treinar modelo, há duas opções de como treinar o modelo.

  • Divisão automática – o Azure divide aleatoriamente todos os seus dados nos percentuais especificados e os aplica no treinamento do modelo. Essa é a melhor opção 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ê enviar o trabalho de treinamento, o serviço de Linguagem de IA do Azure informará a divisão do conjunto de dados e a distribuição. Essa divisão é melhor utilizada com conjuntos de dados menores para garantir a distribuição correta das classes e a variação dos dados para treinar corretamente o modelo.

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

Opções de implantação

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

  • Testar dois modelos lado a lado
  • Comparar como a divisão dos conjuntos de dados afeta o desempenho
  • Implantar várias versões do modelo

Observação

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

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

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

Usando a API REST

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

Padrão de uso da API

A API do serviço de Linguagem de IA do Azure opera de maneira assíncrona para a maioria das chamadas. Em cada etapa, uma solicitação é enviada primeiro ao serviço e, em seguida, ele é consultado novamente por meio de uma chamada subsequente para obter o status ou o resultado.

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

Chave Valor
Ocp-Apim-Subscription-Key A chave para o seu recurso da Linguagem de IA do Azure

Enviar solicitação inicial

A URL à qual a solicitação deve ser enviada varia de acordo com a etapa em que você está, mas todas são prefixadas com o ponto de extremidade fornecido pelo recurso Linguagem de IA do Azure.

Por exemplo, para treinar um modelo, você criaria um POST para a URL que seria semelhante ao seguinte:

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

O corpo a seguir seria anexado à solicitação:

    {
        "modelLabel": "<MODEL-NAME>",
        "trainingConfigVersion": "<CONFIG-VERSION>",
        "evaluationOptions": {
            "kind": "percentage",
            "trainingSplitPercentage": 80,
            "testingSplitPercentage": 20
        }
    }
Chave Valor
<YOUR-MODEL> O nome do modelo.
trainingConfigVersion A versão do modelo a ser usada para treinar seu modelo.
runValidation Valor booliano para execução da validação no conjunto de teste.
evaluationOptions Especifica as opções de avaliação.
kind Especifica o tipo de divisão de dados. Poderá ser percentage se você estiver usando uma divisão automática ou set se dividir manualmente o conjunto de dados
testingSplitPercentage Campo inteiro necessário apenas se type for percentual. Especifica a divisão de teste.
trainingSplitPercentage Campo inteiro necessário apenas se type for percentual. Especifica a divisão de treinamento.

A resposta à solicitação acima será um 202, o que significa que ela foi bem-sucedida. Procure o valor location nos cabeçalhos de resposta, que será semelhante à seguinte URL:

<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Chave Valor
<JOB-ID> Identificador da solicitação

Essa URL será usada na próxima etapa para obter o status de treinamento.

Obter Status de Treinamento

Para obter o status do 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 a chave do serviço de Linguagem de IA do Azure para autenticação. O corpo da resposta será parecido com o 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"
}

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

Consumindo um modelo implantado

Usar o modelo para classificar 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.

Enviar texto para classificação

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

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

Importante

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

A seguinte estrutura JSON seria anexada à solicitação:

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

A resposta à solicitação acima será um 202, o que significa que ela foi bem-sucedida. Procure o valor operation-location nos cabeçalhos de resposta, que será semelhante à seguinte URL:

<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Chave Valor
<YOUR-ENDPOINT> O ponto de extremidade de sua solicitação à API
<JOB-ID> Identificador da solicitação

Essa URL é usada para obter os resultados da tarefa.

Obter os resultados da 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á parecido com o 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 results da matriz de itens, para cada documento enviado.