Entender o reconhecimento de entidade nomeada personalizada

Concluído

O NER personalizado é um serviço de API do Azure que examina documentos, identifica e extrai entidades definidas pelo usuário. Essas entidades podem ser qualquer coisa, desde nomes e endereços, desde extratos bancários até mineração de conhecimento para melhorar os resultados da pesquisa.

O NER personalizado faz parte do Azure Language nas Foundry Tools.

NER personalizado versus interno

A Linguagem do Azure fornece determinado reconhecimento de entidade interno, para reconhecer itens como uma pessoa, local, organização ou URL. O NER interno permite que você configure o serviço com configuração mínima e extraia entidades. Para chamar um NER interno, crie seu serviço e chame o ponto de extremidade do serviço NER da forma a seguir:

<YOUR-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-resource>.cognitiveservices.azure.com
<API-VERSION> A versão da API que você está chamando 2023-05-01

O corpo dessa chamada conterá o(s) documento(s) do qual as entidades são extraídas, e os cabeçalhos conterão sua chave de serviço.

A resposta da chamada acima contém uma matriz de entidades reconhecidas, como:

<...>
"entities":[
    {
        "text":"Seattle",
        "category":"Location",
        "subcategory":"GPE",
        "offset":45,
        "length":7,
        "confidenceScore":0.99
    },
    {
        "text":"next week",
        "category":"DateTime",
        "subcategory":"DateRange",
        "offset":104,
        "length":9,
        "confidenceScore":0.8
    }
]
<...>

Exemplos de quando usar o NER interno incluem localizar locais, nomes ou URLs em documentos de texto longo.

Dica

Uma lista completa de categorias de entidade reconhecidas está disponível nos documentos do NER.

O NER personalizado, que é o foco do restante deste módulo, está disponível quando as entidades que você deseja extrair não fazem parte do serviço interno ou você só deseja extrair entidades específicas. Você pode tornar seu modelo NER personalizado tão simples ou complexo quanto necessário para seu aplicativo.

Exemplos de quando você quer um NER personalizado incluem dados jurídicos ou bancários específicos, mineração de conhecimento para aprimorar a pesquisa de catálogos ou a busca de textos específicos para políticas de auditoria. Cada um desses projetos requer um conjunto específico de entidades e dados que precisa extrair.

Ciclo de vida do projeto de Linguagem do Azure

Diagrama conceitual mostrando as etapas do projeto para definir entidades, marcar dados, treinar modelo, exibir modelo, aprimorar o modelo, implantar modelo e extrair entidades.

A criação de um modelo de extração de entidade normalmente segue um caminho semelhante à maioria dos recursos do serviço de Linguagem do Azure:

  1. Definir entidades: compreendendo os dados e as entidades que você deseja identificar e tente torná-los o mais claro possível. Por exemplo, definindo exatamente quais partes de um extrato bancário você deseja extrair.
  2. Dados de marca: Rotule ou marque seus dados existentes, especificando qual texto no seu conjunto de dados corresponde a qual entidade. Essa fase é importante e deve ser executada de maneira precisa e completa, pois quaisquer rótulos incorretos ou omitidos reduzirão a eficácia do modelo treinado. Uma boa variação de documentos de entrada possíveis é útil. Por exemplo, nome do banco de rótulos, nome do cliente, endereço do cliente, termos específicos de empréstimo ou conta, valor de empréstimo ou conta e número da conta.
  3. Modelo de treinamento: treine seu modelo depois que suas entidades forem rotuladas. O treinamento ensina seu modelo a reconhecer as entidades que você rotula.
  4. Modelo de exibição: depois que o modelo for treinado, exiba os resultados do modelo. Esta página inclui uma pontuação de 0 a 1 baseada na precisão e no recall dos dados testados. Você pode ver quais entidades funcionaram bem (como o nome do cliente) e quais entidades precisam melhorar (como o número da conta).
  5. Melhorar o modelo: Melhore seu modelo vendo quais entidades não foram identificadas e quais entidades foram extraídas incorretamente. Descubra quais dados precisam ser adicionados ao treinamento do modelo para melhorar o desempenho. Esta página mostra como as entidades falharam e quais entidades (como número de conta) precisam ser diferenciadas de outras entidades semelhantes (como o valor do empréstimo).
  6. Modelo de implantação: depois que o modelo for executado conforme desejado, implante o modelo para disponibilizá-lo por meio da API. No nosso exemplo, você pode enviar solicitações ao modelo quando ele for implantado para extrair entidades de extrato bancário.
  7. Extrair entidades: use seu modelo para extrair entidades. O laboratório aborda como usar a API, e você pode consultar a referência da API para obter mais detalhes.

Considerações sobre seleção de dados e refinamento de entidades

Para obter o melhor desempenho, você precisará usar dados de alta qualidade para treinar o modelo e tipos de entidade claramente definidos.

Os dados de alta qualidade permitirão que você gaste menos tempo refinando e gere melhores resultados do seu modelo.

  • Diversidade – use o mais diverso possível de um conjunto de dados sem perder a distribuição real esperada nos dados reais. Você desejará usar dados de exemplo do maior número possível de fontes, cada uma com seus próprios formatos e número de entidades. É melhor que seu conjunto de dados represente o maior número possível de fontes diferentes.
  • Distribuição – use a distribuição apropriada de tipos de documento. Um conjunto de dados mais diversificado para treinar seu modelo ajudará seu modelo a evitar o aprendizado de relações incorretas nos dados.
  • Precisão – use dados o mais próximo possível dos dados do mundo real. Dados falsos funcionam para iniciar o processo de treinamento, mas provavelmente serão diferentes dos dados reais de maneiras que podem fazer com que seu modelo não seja extraído corretamente.

As entidades também precisam ser cuidadosamente consideradas e definidas da forma mais distinta possível. Evite entidades ambíguas (como dois nomes próximos um do outro em um extrato bancário), pois isso fará com que o modelo tenha dificuldades para diferenciar. Se for necessário ter algumas entidades ambíguas, certifique-se de ter mais exemplos para que seu modelo aprenda para que ele possa entender a diferença.

Manter suas entidades distintas contribuirá significativamente para melhorar o desempenho do modelo. Por exemplo, tentar extrair algo como "Informações de contato" que pode ser um número de telefone, identificador de mídia social ou endereço de email exigiria vários exemplos para ensinar corretamente seu modelo. Em vez disso, tente dividi-las em entidades mais específicas, como "Telefone", "Email" e "Mídia social" e permita que o modelo rotule qualquer tipo de informação de contato encontrada.

Como extrair entidades

Para enviar uma tarefa de extração, a API requer que o corpo JSON especifique qual tarefa executar. Quanto ao NER personalizado, a tarefa para o conteúdo JSON é CustomEntityRecognition.

Seu pacote de dados será semelhante ao seguinte JSON:

{
    "displayName": "string",
    "analysisInput": {
        "documents": [
            {
                "id": "doc1", 
                "text": "string"
            },
            {
                "id": "doc2",
                "text": "string"
            }
        ]
    },
    "tasks": [
        {
            "kind": "CustomEntityRecognition",
            "taskName": "MyRecognitionTaskName",
            "parameters": {
            "projectName": "MyProject",
            "deploymentName": "MyDeployment"
            }
        }
    ]
}

Limites do projeto

O serviço de Idioma do Azure impõe as seguintes restrições:

  • Treinamento - pelo menos 10 arquivos e não mais de 100.000
  • Implantações – 10 nomes de implantação por projeto
  • APIs
    • Criação – esta API cria um projeto, treina e implanta seu modelo. Limitado a 10 POST e 100 GET por minuto
    • Analisar – essa API faz o trabalho de realmente extrair as entidades; ele solicita uma tarefa e recupera os resultados. Limitado a 20 GET ou POST
  • Projetos – apenas 1 conta de armazenamento por projeto, 500 projetos por recurso e 50 modelos treinados por projeto
  • Entidades – cada entidade pode ter até 500 caracteres. Você pode ter até 200 tipos de entidade.

Consulte os limites de serviço para a página de Idioma do Azure para obter informações detalhadas.