Entender como criar projetos de classificação de texto

Concluído

Projetos de classificação de texto personalizados são seu workspace para criar, treinar, melhorar e implantar seu modelo de classificação. Você pode trabalhar com seu projeto de duas maneiras: por meio do Language Studio e por meio da API REST. O Language Studio é a GUI que será usada no laboratório, mas a API REST tem a mesma funcionalidade. Independentemente de qual método você preferir, as etapas para desenvolver seu modelo são as mesmas.

Ciclo de vida do projeto de Linguagem do Azure

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

  • Definir rótulos: noções básicas sobre os dados que você deseja classificar, identifique os possíveis rótulos nos quais você deseja categorizar. Em nosso exemplo de videogame, nossos rótulos seriam "Ação", "Aventura", "Estratégia" e assim por diante.
  • Dados de Etiquetagem: Marque ou rotule seus dados existentes, especificando a etiqueta ou etiquetas em que 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, rotularíamos o jogo "Quest for the Mine Brush" como "Adventure" e "Flight Trainer" como "Ação".
  • Modelo de treinamento: treine seu modelo com os dados rotulados. O treinamento ensinará ao nosso modelo quais tipos de resumos de videogames devem ser rotulados como qual gênero.
  • Modelo de exibição: depois que o modelo for treinado, exiba os resultados do modelo. Seu modelo é pontuado entre 0 e 1, com base na precisão e no recall dos dados testados. Anote qual gênero não teve um bom desempenho.
  • Melhorar o modelo: Melhore seu modelo vendo quais classificações falharam na avaliação do rótulo correto, veja sua distribuição de rótulos e descubra quais dados devem ser adicionados para melhorar o desempenho. Por exemplo, você pode encontrar seu modelo misturando jogos de "Aventura" e "Estratégia". Tente encontrar mais exemplos de cada rótulo para adicionar ao seu conjunto de dados para treinar novamente seu modelo.
  • Modelo de implantação: depois que o modelo for executado conforme 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 de 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 modelo quais dados devem ser classificados para 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% dos 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 usará os dados no conjunto de dados de teste, os enviará ao 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 é como seu modelo é pontuado e ajuda você a saber como melhorar seu desempenho preditivo.

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

  • Divisão automática – o Azure usa todos os seus dados, divide-os nos percentuais especificados aleatoriamente e aplica-os no treinamento 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 de seus dados abrange extensivamente suas classes.
  • Divisão manual – especifique manualmente quais arquivos devem estar em cada conjunto de dados. Ao enviar o trabalho de treinamento, o serviço de Linguagem do Azure informará a divisão do 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 variação nos dados esteja presente 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 Linguagem 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:

  • Testar dois modelos lado a lado
  • Comparar como a divisão de conjuntos de dados afeta o desempenho
  • Implantar 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 de Linguagem do Azure permite o desenvolvimento da CLI de projetos de Linguagem 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 ainda mais no laboratório deste módulo.

Padrão de uso da API

A API para o serviço de Linguagem do Azure opera de forma assíncrona para a maioria das chamadas. Em cada etapa, enviamos uma solicitação ao serviço primeiro e, em seguida, verificamos novamente com o serviço por meio de uma chamada subsequente para obter o status ou o 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 recurso de Linguagem do Azure

Enviar solicitação inicial

A URL para enviar a solicitação varia dependendo da etapa em que você está, mas todas são prefixadas com o endpoint fornecido pelo recurso de linguagem do Azure.

Por exemplo, para treinar um modelo, você criaria um POST para a URL que se pareceria com o seguinte:

<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Espaço reservado Valor Exemplo
<YOUR-ENDPOINT> O endpoint para sua solicitação de 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 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 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 a solicitação 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 é 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 à solicitação para enviar uma solicitação GET, com o mesmo cabeçalho que fornece nossa chave de serviço de linguagem do 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"
}

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

Consumindo um modelo implantado

Usar o 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.

Enviar texto para classificação

Para usar seu modelo, envie um POST para o endpoint analisar na seguinte URL:

<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Espaço reservado Valor Exemplo
<YOUR-ENDPOINT> O endpoint 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 à 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> Qual tarefa você está solicitando. A tarefa é CustomMultiLabelClassification para os projetos de diversos rótulos ou CustomSingleLabelClassification para os 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 projeto.
<DEPLOYMENT-NAME> O nome da sua implantação.

A resposta à solicitação acima será um 202, o que significa que a solicitação 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 endpoint para sua solicitação de API
<JOB-ID> Identificador da solicitação

Essa URL é usada para obter os resultados da tarefa.

Obter resultados de classificação

Envie uma requisição GET para o "endpoint" da requisiçã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.