Habilidade de classificação de texto personalizado

Concluído

A classificação de texto personalizada permite mapear uma passagem de texto para diferentes classes definidas pelo usuário. Por exemplo, você pode treinar um modelo na sinopse na contracapa de livros para identificar automaticamente um gênero de livros. Em seguida, você usa esse gênero identificado para enriquecer seu mecanismo de pesquisa de loja on-line com uma faceta de gênero.

Diagrama mostrando as etapas necessárias para enriquecer um índice de pesquisa.

Aqui, você verá o que precisa considerar para enriquecer um índice de pesquisa usando um modelo de classificação de texto personalizado:

  • Armazene seus documentos para que eles possam ser acessados pelos indexadores do Language Studio e do Azure AI Search.
  • Crie um projeto de classificação de texto personalizado.
  • Treine e teste o seu modelo.
  • Crie um índice de pesquisa com base nos documentos armazenados.
  • Crie um aplicativo de função que use seu modelo treinado implantado.
  • Atualize sua solução de pesquisa, seu índice, indexador e conjunto de habilidades personalizado.

Armazene os seus dados

O armazenamento de Blob do Azure pode ser acessado do Language Studio e dos Serviços de IA do Azure. O contêiner precisa ser acessível, então a opção mais simples é escolher Container, mas também é possível usar contêineres privados com alguma configuração adicional.

Junto com seus dados, você também precisa de uma maneira de atribuir classificações para cada documento. O Language Studio fornece uma ferramenta gráfica que você pode usar para classificar cada documento, um de cada vez, manualmente.

Você pode escolher entre dois tipos diferentes de projeto. Se um documento for mapeado para uma única classe, use um projeto de classificação de rótulo único. Se você quiser mapear um documento para mais de uma classe, use o projeto de classificação de vários rótulos.

Se não quiser classificar manualmente cada documento, você pode rotular todos os seus documentos antes de criar seu projeto de Linguagem de IA do Azure. Este processo envolve a criação de um documento JSON de etiquetas neste formato:

{
    "projectFileVersion": "2022-05-01",
    "stringIndexType": "Utf16CodeUnit",
    "metadata": {
      "projectKind": "CustomMultiLabelClassification",
      "storageInputContainerName": "{CONTAINER-NAME}",
      "projectName": "{PROJECT-NAME}",
      "multilingual": false,
      "description": "Project-description",
      "language": "en-us"
    },
    "assets": {
      "projectKind": "CustomMultiLabelClassification",
      "classes": [
        {
          "category": "Class1"
        },
        {
          "category": "Class2"
        }
      ],
      "documents": [
          {
              "location": "{DOCUMENT-NAME}",
              "language": "{LANGUAGE-CODE}",
              "dataset": "{DATASET}",
              "classes": [
                  {
                      "category": "Class1"
                  },
                  {
                      "category": "Class2"
                  }
              ]
          }
      ]
  }

Você adiciona quantas classes tiver à classes matriz. Você adiciona uma entrada para cada documento na matriz, documents incluindo quais classes o documento corresponde.

Crie seu projeto de linguagem de IA do Azure

Há duas maneiras de criar seu projeto de linguagem de IA do Azure. Se você começar a usar o Language Studio sem primeiro criar um serviço de idioma no portal do Azure, o Language Studio oferecerá a criação de um para você.

A maneira mais flexível de criar um projeto de linguagem de IA do Azure é primeiro criar seu serviço de idioma usando o portal do Azure. Se você escolher essa opção, terá a opção de adicionar recursos personalizados.

Captura de ecrã a mostrar a criação de um serviço de idioma no portal do Azure.

Como você vai criar uma classificação de texto personalizada, selecione esse recurso personalizado ao criar seu serviço de idioma. Você também vinculará o serviço de idioma a uma conta de armazenamento usando esse método.

Depois que o recurso for implantado, você poderá navegar diretamente para o Language Studio no painel de visão geral do serviço de idiomas. Em seguida, você pode criar um novo projeto de classificação de texto personalizado.

Nota

Se criou o seu serviço linguístico a partir do Language Studio, poderá ter de seguir estes passos. Defina funções para seu recurso de idioma do Azure e conta de armazenamento para conectar seu contêiner de armazenamento ao seu projeto de classificação de texto personalizado.

Treine seu modelo de classificação

Como em todos os modelos de IA, você precisa ter dados identificados que possam ser usados para treiná-los. O modelo precisa ver exemplos de como mapear dados para uma classe e ter alguns exemplos que pode usar para testar o modelo. Você pode optar por deixar o modelo dividir automaticamente seus dados de treinamento, por padrão ele usará 80% dos documentos para treinar o modelo e 20% para testá-lo às cegas. Se você tiver alguns documentos específicos com os quais deseja testar seu modelo, poderá rotular documentos para teste.

Captura de tela do Language Studio mostrando a seleção de um documento para adicionar ao conjunto de testes.

No Language Studio, em seu projeto, selecione Rotulagem de dados. Você verá todos os seus documentos. Selecione cada documento que deseja adicionar ao conjunto de testes e, em seguida, selecione Testando o desempenho do modelo. Guarde as etiquetas atualizadas e, em seguida, crie um novo trabalho de formação.

Criar índice de pesquisa

Não há nada específico que você precise fazer para criar um índice de pesquisa que será enriquecido por um modelo de classificação de texto personalizado. Siga as etapas em Criar uma solução de Pesquisa de IA do Azure. Você atualizará o índice, o indexador e a habilidade personalizada depois de criar um aplicativo de função.

Criar uma aplicação de funções do Azure

Você pode escolher a linguagem e as tecnologias que deseja para seu aplicativo de função. O aplicativo precisa ser capaz de passar JSON para o ponto de extremidade de classificação de texto personalizado, por exemplo:

{
    "displayName": "Extracting custom text classification", 
    "analysisInput": {
        "documents": [
            {
                "id": "1", 
                "language": "en-us", 
                "text": "This film takes place during the events of Get Smart. Bruce and Lloyd have been testing out an invisibility cloak, but during a party, Maraguayan agent Isabelle steals it for El Presidente. Now, Bruce and Lloyd must find the cloak on their own because the only non-compromised agents, Agent 99 and Agent 86  are in Russia"
            }
        ]
      }, 
    "tasks": [
        {
        "kind": "CustomMultiLabelClassification", 
        "taskName": "Multi Label Classification", 
        "parameters": {
            "project-name": "movie-classifier", 
            "deployment-name": "test-release"}
        }
    ]
}

Em seguida, processe a resposta JSON do modelo, por exemplo:

{
  "jobId": "be1419f3-61f8-481d-8235-36b7a9335bb7",
  "lastUpdatedDateTime": "2022-06-13T16:24:27Z",
  "createdDateTime": "2022-06-13T16:24:26Z",
  "expirationDateTime": "2022-06-14T16:24:26Z",
  "status": "succeeded",
  "errors": [],
  "displayName": "Extracting custom text classification",
  "tasks": {
    "completed": 1,
    "failed": 0,
    "inProgress": 0,
    "total": 1,
    "items": [
      {
        "kind": "CustomMultiLabelClassificationLROResults",
        "taskName": "Multi Label Classification",
        "lastUpdateDateTime": "2022-06-13T16:24:27.7912131Z",
        "status": "succeeded",
        "results": {
          "documents": [
            {
              "id": "1",
              "class": [
                {
                  "category": "Action",
                  "confidenceScore": 0.99
                },
                {
                  "category": "Comedy",
                  "confidenceScore": 0.96
                }
              ],
              "warnings": []
            }
          ],
          "errors": [],
          "projectName": "movie-classifier",
          "deploymentName": "test-release"
        }
      }
    ]
  }
}

Em seguida, a função retorna uma mensagem JSON estruturada de volta para um conjunto de habilidades personalizado no AI Search, por exemplo:

[{"category": "Action", "confidenceScore": 0.99}, {"category": "Comedy", "confidenceScore": 0.96}]

Há cinco coisas que o aplicativo de função precisa saber:

  1. O texto a classificar.
  2. O ponto de extremidade para seu modelo implantado de classificação de texto personalizado treinado.
  3. A chave primária para o projeto de classificação de texto personalizado.
  4. O nome do projeto.
  5. O nome da implantação.

O texto a ser classificado é passado do seu conjunto de habilidades personalizado na Pesquisa de IA para a função como entrada. Os quatro itens restantes podem ser encontrados no Language Studio.

Captura de tela mostrando de onde copiar o ponto de extremidade de previsão.

O nome do ponto de extremidade e da implantação está no painel de implantação de um modelo.

Captura de ecrã a mostrar de onde copiar a chave primária para serviços linguísticos.

O nome do projeto e a chave primária estão no painel de configurações do projeto.

Atualizar sua solução Azure AI Search

Há três alterações no portal do Azure que você precisa fazer para enriquecer seu índice de pesquisa:

  1. Você precisa adicionar um campo ao seu índice para armazenar o enriquecimento de classificação de texto personalizado.
  2. Você precisa adicionar um conjunto de habilidades personalizado para chamar seu aplicativo de função com o texto para classificar.
  3. Você precisa mapear a resposta do conjunto de habilidades para o índice.

Adicionar um campo a um índice existente

No portal do Azure, vá para o recurso AI Search, selecione o índice e você adicionará JSON neste formato:

{
  "name": "classifiedtext",
  "type": "Collection(Edm.ComplexType)",
  "analyzer": null,
  "synonymMaps": [],
  "fields": [
    {
      "name": "category",
      "type": "Edm.String",
      "facetable": true,
      "filterable": true,
      "key": false,
      "retrievable": true,
      "searchable": true,
      "sortable": false,
      "analyzer": "standard.lucene",
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    },
    {
      "name": "confidenceScore",
      "type": "Edm.Double",
      "facetable": true,
      "filterable": true,
      "retrievable": true,
      "sortable": false,
      "analyzer": null,
      "indexAnalyzer": null,
      "searchAnalyzer": null,
      "synonymMaps": [],
      "fields": []
    }
  ]
}

Esse JSON adiciona um campo composto ao índice para armazenar a classe em um category campo pesquisável. O segundo confidenceScore campo armazena a porcentagem de confiança em um campo duplo.

Editar o conjunto de habilidades personalizado

No portal do Azure, selecione o conjunto de habilidades e adicione JSON neste formato:

{
  "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
  "name": "Genre Classification",
  "description": "Identify the genre of your movie from its summary",
  "context": "/document",
  "uri": "https://learn-acs-lang-serives.cognitiveservices.azure.com/language/analyze-text/jobs?api-version=2022-05-01",
  "httpMethod": "POST",
  "timeout": "PT30S",
  "batchSize": 1,
  "degreeOfParallelism": 1,
  "inputs": [
    {
      "name": "lang",
      "source": "/document/language"
    },
    {
      "name": "text",
      "source": "/document/content"
    }
  ],
  "outputs": [
    {
      "name": "text",
      "targetName": "class"
    }
  ],
  "httpHeaders": {}
}

Esta WebApiSill definição de habilidade especifica que o idioma e o conteúdo de um documento são passados como entradas para o aplicativo de função. O aplicativo retornará o texto JSON chamado class.

Mapeie a saída do aplicativo de função para o índice

A última alteração é mapear a saída para o índice. No portal do Azure, selecione o indexador e edite o JSON para ter um novo mapeamento de saída:

{
  "sourceFieldName": "/document/class",
  "targetFieldName": "classifiedtext"
}

O indexador agora sabe que a saída do aplicativo document/class de função deve ser armazenada no classifiedtext campo. Como isso foi definido como um campo composto, o aplicativo de função tem que retornar uma matriz JSON contendo um category campo e confidenceScore .

Agora você pode pesquisar um índice de pesquisa enriquecido para o seu texto classificado personalizado.