Entender os tipos de projetos de classificação

Concluído

A classificação de textos personalizada atribui rótulos, que no serviço de Linguagem de IA do Azure são uma classe que o desenvolvedor define, a arquivos de texto. Por exemplo, um resumo de videogame poderia ser classificado como "Aventura", "Estratégia", "Ação" ou "Esportes".

A classificação de textos personalizada se encaixa em dois tipos de projetos:

  • Classificação de rótulo único – você só pode atribuir uma classe a cada arquivo. Seguindo o exemplo acima, um resumo de videogame só poderia ser classificado como "Aventura" ou "Estratégia".
  • Classificação de vários rótulos– você pode atribuir diversas classes a cada arquivo. Esse tipo de projeto permitiria classificar um resumo de videogame como "Aventura" ou "Aventura e Estratégia".

Ao criar seu projeto de classificação de textos personalizada, você pode especificar qual projeto deseja criar.

Projetos de rótulo único e de vários rótulos

Além da capacidade de colocar arquivos em várias classificações, as principais diferenças com os projetos de classificação de vários rótulos a rotulagem, as considerações sobre como aprimorar o modelo e o conteúdo da API para tarefas de classificação.

Rotulando dados

Em projetos de rótulo único, cada arquivo recebe uma classe durante o processo de rotulagem. A atribuição de classe na Linguagem de IA do Azure só permite selecionar uma classe.

Ao rotular projetos de vários rótulos, será possível atribuir quantas classes você desejar por arquivo. O impacto da complexidade adicional significa que seus dados precisam ser claros e fornecer uma boa distribuição de possíveis entradas para o modelo aprender.

Diagrama conceitual que mostra o mapeamento de documentos para rótulos no caso de classificações de rótulo único e de vários rótulos.

A rotulagem correta de dados, especialmente para projetos de vários rótulos, está diretamente correlacionada ao desempenho do modelo. Quanto maior a qualidade, a clareza e a variação do conjunto de dados, mais preciso será o modelo.

Avaliando e aprimorando o modelo

Medir o desempenho preditivo de seu modelo vai além de quantas previsões estavam corretas. Classificações corretas são quando o rótulo real é x e o modelo prevê um rótulo x. No mundo real, os documentos geram diferentes tipos de erros quando uma classificação não está correta:

  • Falso positivo – o modelo prevê x, mas o arquivo não está rotulado como x.
  • Falso negativo – o modelo não prevê o rótulo x, mas o arquivo na verdade está rotulado como x.

Essas métricas são traduzidas em três medidas fornecidas pela Linguagem de IA do Azure:

  • Recall – de todos os rótulos reais, quantos foram identificados; a taxa de verdadeiros positivos em relação a tudo o que foi rotulado.
  • Precisão – quantos dos rótulos previstos estão corretos; a taxa de verdadeiros positivos com relação a todos os positivos identificados.
  • Pontuação F1 – uma função de recall e precisão destinada a fornecer uma só pontuação para maximizar o equilíbrio de cada componente

Dica

Saiba mais sobre as Métricas de avaliação da Linguagem de IA do Azure, incluindo exatamente como essas métricas são calculadas

Com um projeto de rótulo único, você pode identificar quais classes não são classificadas tão bem quanto outras e encontrar mais dados de qualidade para usar no treinamento do modelo. Para projetos de vários rótulos, descobrir dados de qualidade torna-se mais complexo devido à matriz de possíveis permutações de rótulos combinados.

Por exemplo, digamos que seu módulo esteja classificando corretamente os jogos de "Ação" e alguns jogos de "Ação e Estratégia", mas falhando nos jogos de "Estratégia". Para aprimorar o modelo, é recomendável encontrar resumos mais variados e de alta qualidade para jogos de “Ação e Estratégia”, bem como para jogos de “Estratégia”, para ensinar o modelo a diferenciar os dois. Esse desafio aumenta exponencialmente com as possíveis classes em que seu modelo está classificando.

Conteúdo da API

A Linguagem de IA do Azure fornece uma API REST para compilar e interagir com seu modelo, usando um corpo JSON para especificar a solicitação. Essa API é derivada em vários SDKs específicos à linguagem, mas para este módulo concentraremos nossos exemplos na API REST base.

Para enviar uma tarefa de classificação, a API requer que o corpo JSON especifique qual tarefa executar. Você aprenderá mais sobre a API REST na próxima unidade, mas vale a pena se familiarizar com partes do corpo necessário.

Os modelos de classificação de rótulo único especificam um tipo de projeto de customSingleLabelClassification:

{
  "projectFileVersion": "<API-VERSION>",
  "stringIndexType": "Utf16CodeUnit",
  "metadata": {
    "projectName": "<PROJECT-NAME>",
    "storageInputContainerName": "<CONTAINER-NAME>",
    "projectKind": "customSingleLabelClassification",
    "description": "Trying out custom multi label text classification",
    "language": "<LANGUAGE-CODE>",
    "multilingual": true,
    "settings": {}
  },
  "assets": {
    "projectKind": "customSingleLabelClassification",
        "classes": [
            {
                "category": "Class1"
            },
            {
                "category": "Class2"
            }
        ],
        "documents": [
            {
                "location": "<DOCUMENT-NAME>",
                "language": "<LANGUAGE-CODE>",
                "dataset": "<DATASET>",
                "class": {
                    "category": "Class2"
                }
            },
            {
                "location": "<DOCUMENT-NAME>",
                "language": "<LANGUAGE-CODE>",
                "dataset": "<DATASET>",
                "class": {
                    "category": "Class1"
                }
            }
        ]
    }
}

Vários os modelos de classificação de rótulo especificam um tipo de projeto de CustomMultiLabelClassification

{
  "projectFileVersion": "<API-VERSION>",
  "stringIndexType": "Utf16CodeUnit",
  "metadata": {
    "projectName": "<PROJECT-NAME>",
    "storageInputContainerName": "<CONTAINER-NAME>",
    "projectKind": "customMultiLabelClassification",
    "description": "Trying out custom multi label text classification",
    "language": "<LANGUAGE-CODE>",
    "multilingual": true,
    "settings": {}
  },
  "assets": {
    "projectKind": "customMultiLabelClassification",
    "classes": [
      {
        "category": "Class1"
      },
      {
        "category": "Class2"
      }
    ],
    "documents": [
      {
        "location": "<DOCUMENT-NAME>",
        "language": "<LANGUAGE-CODE>",
        "dataset": "<DATASET>",
        "classes": [
          {
            "category": "Class1"
          },
          {
            "category": "Class2"
          }
        ]
      },
      {
        "location": "<DOCUMENT-NAME>",
        "language": "<LANGUAGE-CODE>",
        "dataset": "<DATASET>",
        "classes": [
          {
            "category": "Class2"
          }
        ]
      }
    ]
  }
}