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 Language

Diagrama que mostra um ciclo de vida com etapas para definir rótulos, marcar dados, treinar modelo, exibir modelo, melhorar o modelo, implantar modelo e classificar texto.

  • 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 de etiquetagem: Etiquete, ou rotule, os seus dados existentes, especificando a etiqueta ou etiquetas a que cada ficheiro pertence. 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, recomenda-se que seja cerca de 80% dos seus dados rotulados.
  • Teste - O conjunto de dados de teste é o conjunto de dados rotulado utilizado para verificar o seu modelo após o seu treino. 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 submetes o trabalho de treino, o serviço Azure Language indica-te a divisão entre o conjunto de dados e a 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 implantação

A Azure Language permite que cada projeto crie múltiplos modelos e múltiplas implementações, cada uma com o seu próprio nome único. 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

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, que 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 Azure Language permite o desenvolvimento de CLI de projetos Azure Language da mesma forma que o Language Studio fornece uma interface de utilizador para construir projetos. O Language Studio é mais explorado no laboratório deste módulo.

Padrão de uso da API

A API do serviço Azure 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:

Chave Valor
Ocp-Apim-Subscription-Key A chave para o seu recurso Azure Language

Submeter pedido inicial

O URL para submeter o pedido varia consoante o passo em que se encontra, mas todos têm o prefixo do endpoint fornecido pelo seu recurso Azure 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 a sua solicitação de API https://<your-custom-resource>.cognitiveservices.azure.com
<PROJECT-NAME> O nome do seu projeto (o valor é sensível a maiúsculas e minúsculas) myProject

O seguinte corpo de texto seria anexado ao pedido:

    {
        "modelLabel": "<MODEL-NAME>",
        "trainingConfigVersion": "<CONFIG-VERSION>",
        "evaluationOptions": {
            "kind": "percentage",
            "trainingSplitPercentage": 80,
            "testingSplitPercentage": 20
        }
    }
Chave 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 valor location dos cabeçalhos de resposta, que parecerá semelhante a uma das seguintes URLs:

<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Chave 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 estado do treino, use o URL do cabeçalho da resposta do pedido para enviar um pedido GET, usando o mesmo cabeçalho que fornece a chave do serviço de Linguagem Azure 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 o seu modelo, envie um POST para o endpoint 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 a 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>"
      }
    }
  ]
}
Chave Valor
<TASK-REQUIRED> Qual tarefa você está solicitando. A tarefa é CustomMultiLabelClassification para projetos com múltiplos rótulos ou CustomSingleLabelClassification para projetos com rótulo único
<LANGUAGE-CODE> O código de idioma, por exemplo, 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 valor operation-location nos cabeçalhos de resposta, que será semelhante ao seguinte URL:

<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Chave Valor
<YOUR-ENDPOINT> O ponto de extremidade para a 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 endpoint 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.