Compreender os tipos de projetos de classificação

Concluído

A classificação de texto personalizada atribui etiquetas, que no serviço Azure Language é uma classe definida pelo programador, aos ficheiros de texto. Por exemplo, um resumo de videojogo pode ser classificado como "Aventura", "Estratégia", "Ação" ou "Desporto".

A classificação de texto personalizada se enquadra em dois tipos de projetos:

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

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

Projetos de rótulo único vs. múltiplo

Além da capacidade de colocar arquivos em várias classificações, as principais diferenças com vários projetos de classificação de rótulos são rotulagem, considerações para melhorar seu modelo e a carga útil da API para tarefas de classificação.

Dados de rotulagem

Em projetos de etiqueta única, cada ficheiro é atribuído a uma classe durante o processo de rotulagem; A atribuição de aulas no Azure Language só permite selecionar uma disciplina.

Ao rotular vários projetos de rótulo, você pode atribuir quantas classes quiser por arquivo. O impacto da complexidade adicional significa que seus dados devem permanecer claros e fornecer uma boa distribuição de possíveis entradas para seu modelo aprender.

Diagrama conceptual que mostra o mapeamento de documentos para rótulos em classificações de rótulo único e múltiplo.

Rotular dados corretamente, especialmente para projetos com múltiplos rótulos, correlaciona-se diretamente com o desempenho do seu modelo. Quanto maior for a qualidade, clareza e variação do seu conjunto de dados, mais preciso será o seu modelo.

Avaliar e melhorar o seu modelo

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

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

Estas métricas são traduzidas em três medidas fornecidas pela Azure Language:

  • Recall - De todos os rótulos reais, quantos foram identificados; a proporção de verdadeiros positivos para tudo o que foi rotulado.
  • Precisão - Quantas dos rótulos previstos estão corretos; a razão entre positivos verdadeiros e o total de positivos identificados.
  • F1 Score - Uma função de revocação e precisão, destinada a fornecer uma pontuação única que maximize o equilíbrio entre cada componente.

Sugestão

Saiba mais sobre as métricas de avaliação da Azure Language, incluindo exatamente como estas métricas são calculadas

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

Por exemplo, imagina que o teu modelo está classificando corretamente jogos de "Ação" e alguns jogos de "Ação e Estratégia", mas tem dificuldade em jogos de "Estratégia". Para melhorar seu modelo, você vai querer encontrar mais resumos variados e de alta qualidade para jogos de "Ação e Estratégia", bem como jogos de "Estratégia" para ensinar seu modelo a diferenciar os dois. Este desafio aumenta exponencialmente com mais classes possíveis em que o seu modelo está a classificar-se.

Carga útil da API

A Azure Language fornece uma API REST para construir e interagir com o seu modelo, usando um corpo JSON para especificar o pedido. Essa API é abstraída em vários SDKs específicos de idioma, no entanto, 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 conteúdo 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 single 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 modelos de classificação de rótulos 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"
          }
        ]
      }
    ]
  }
}