Criar Entidades

Veja como criar uma entidade.

Para criar uma entidade:
  1. Clique em Entidades (Esta é uma imagem do ícone Entidades.) na barra de navegação esquerda.
  2. Clique em Adicionar Entidade, digite o nome e selecione o tipo. Os campos da caixa de diálogo refletem o tipo de entidade. Por exemplo, para entidades de expressões regulares, você pode adicionar a expressão. Para entidades de Lista de Valores, adicione os valores e sinônimos.
    Se sua habilidade suportar vários idiomas por meio do suporte ao idioma nativo do Digital Assistant, adicione os correspondentes do idioma estrangeiro aos valores e sinônimos da entidade Lista de Valores.

    Como esses valores precisam ser mapeados para o valor correspondente do idioma principal (O Valor do Idioma Principal), selecione o valor principal antes de adicionar o idioma secundário. Por exemplo, se você tiver adicionado o francês como idioma secundário a uma habilidade cujo idioma principal é o inglês, primeiro selecione small como Valor do Idioma Principal e depois adicione petite.

  3. Como etapa opcional, digite uma descrição. Você pode usar a descrição para soletrar a entidade, como os sabores de pizza para uma entidade PizzaTopping. Essa descrição não é mantida quando você adiciona a entidade a uma entidade composta.
  4. Você pode adicionar as funções a seguir, que são opcionais. Elas poderão ser substituídas se você adicionar a entidade a uma entidade composta.
    • Se uma entidade de lista de valores tiver uma lista longa de valores, mas você só quiser mostrar aos usuários algumas opções de cada vez, poderá definir a paginação desses valores especificando um número no campo Tamanho da Faixa de Enumeração ou definindo uma expressão do Apache FreeMarker que seja avaliada como esse número. Por exemplo, você pode definir uma expressão que retorne valores enum com base no canal.

      Quando você definir essa propriedade como 0, a habilidade não vai gerar uma lista, mas vai comparar a entrada do usuário com um valor de entidade.

      Se você definir esse número como mais baixo que o total de valores definido para essa entidade, o componente Resolver Entidades exibirá um botão Mostrar Mais para acompanhar cada conjunto completo de valores. Se você usar um componente Resposta Comum para resolver a entidade, você mesmo poderá configurar o botão Mostrar Mais.
      Esta é uma imagem do botão Mostrar Mais.
      Você pode alterar o texto do botão Mostrar Mais usando a propriedade showMoreLabel que pertence aos componentes Resolver Entidades e Resposta Comum.

    • Adicione uma mensagem de erro para entrada inválida do usuário. Utilize uma expressão do Apache FreeMarker que inclua a propriedade system.entityToResolve.value.userInput. Por exemplo, ${system.entityToResolve.value.userInput!'This'}' is not a valid pizza type.
    • Para permitir que os usuários escolham mais de um valor em uma entidade de lista de valores, ative a opção Diversos Valores. Ao ativar essa opção, os valores são exibidos como lista numerada.
      Esta é uma imagem da lista com diversos valores numerados.
      A desativação dessa opção exibe os valores como lista de opções, que permite uma única escolha apenas.
    • A ativação da opção Correspondência Difusa aumenta as chances de que entrada do usuário correspondem a um valor, especialmente quando seus valores não têm muitos sinônimos. A correspondência difusa usa palavra derivada para identificar correspondências da entrada do usuário. A desativação da correspondência difusa impõe uma correspondência estrita, o que significa que a entrada do usuário deve ter uma correspondência exata com os valores e sinônimos; "carros" não corresponderá a um valor chamado "carro", nem "gerente" corresponderá a "gerente de desenvolvimento".
    • Para habilidades configuradas com um serviço de tradução, a correspondência de entidades é baseada na tradução da entrada. Se você ativar a opção Corresponder ao Valor Original, a entrada original também será considerada na correspondência de entidades, o que pode ser útil para a correspondência de valores que não podem ser traduzidos.
    • Para forçar um usuário a selecionar um único valor, ative Prompt para Desambiguação e adicione um prompt de desambiguação. Por padrão, essa mensagem é Please select one value of <item name>, mas você pode substituí-la por outra que contenha somente texto (You can only order one pizza at a time. Which pizza do you want to order?) ou uma combinação de texto e expressões do FreeMarker. Por exemplo :
      "I found multiple dates: <#list system.entityToResolve.value.disambiguationValues.Date as date>${date.date?number_to_date}<#sep> and </#list>. Which date should I use as expense date?"
    • Defina uma regra de validação usando uma expressão do FreeMarker.
      Observação

      Você só pode adicionar prompts, desambiguação e validação para entidades incorporadas quando elas pertencem a um repositório composto.
  5. Clique em Criar.
  6. próximas etapas:
    1. Adicione a entidade a uma intenção. Isso informa à habilidade os valores que ela precisa extrair da entrada do usuário durante o processamento do idioma. Consulte Adicionar Entidades a Intenções.
    2. No fluxo de caixas de diálogo, declare uma variável para a entidade.
    3. Acesse os valores da variável usando expressões do Apache FreeMarker. Consulte Operações Incorporadas de Array do FreeMarker.
    4. Clique em Validar e verificar as mensagens de validação para ver erros relacionados aos handlers de eventos de entidade (se usados), possíveis problemas, como diversos valores em uma entidade de lista de valores que compartilham o mesmo sinônimo, e para obter orientação sobre a aplicação de melhores práticas, como adicionar vários prompts, para tornar a habilidade mais participativa.

Entidades de Lista de Valores para Vários Idiomas

Quando você tem uma habilidade direcionada a vários idiomas e que usa o suporte ao idioma nativo do Digital Assistant, você pode definir valores para cada idioma da habilidade. Para cada valor de entidade no idioma principal de uma habilidade, designe um valor correspondente em cada idioma adicional.

Dica:

Para garantir que sua habilidade produza consistentemente respostas no idioma detectado, sempre inclua useFullEntityMatches: true nos estados Resposta Comum, Resolver Entidades e Entidade de Correspondência. Conforme descrito em Adicionar Idiomas Suportados Nativamente a uma Habilidade, definir essa propriedade como true (o padrão) retorna o valor da entidade como um objeto cujas propriedades diferenciam o idioma principal do idioma detectado. Quando referenciadas nas expressões FreeMarker do Apache, essas propriedades garantem que o idioma apropriado seja exibido no texto e nos labels da mensagem da habilidade.

Suporte a Stemming de Palavras no Fuzzy Match

A partir da Versão 22.10, a correspondência difusa para entidades de valor de lista é baseada na palavra derivada, em que uma correspondência de valor é baseada na raiz lexical da palavra. Nas versões anteriores, a correspondência difusa era ativada por meio de correspondência parcial e correção automática. Embora essa abordagem fosse tolerante a erros de digitação na entrada do usuário, incluindo palavras transpostas, ela também poderia resultar em correspondências para mais de um valor dentro da entidade da lista de valores. Com a haste, essa dispersão é eliminada: as correspondências são baseadas na ordem das palavras da entrada do usuário, portanto, uma única correspondência é feita ou nenhuma. Por exemplo, "Lovers Veggie" não resultaria em nenhuma correspondência, mas "Veggie Lover" corresponderia ao valor Veggie Lovers de uma entidade do tipo pizza. (Observe que o "amante" é derivado.) Palavras de interrupção, como artigos e preposições, são ignoradas em valores extraídos, assim como caracteres especiais. Por exemplo, "Veggie the Lover" e "Veggie////Lover" corresponderiam ao valor Veggie Lovers.

Criar Entidades de ML

Entidades de ML são uma abordagem orientada a modelos para extração de entidades. Assim como as intenções, você cria Entidades de ML com base em declarações de treinamento - provavelmente as mesmas declarações de treinamento usadas para criar suas intenções. No entanto, para Entidades ML, anote as palavras nas declarações de treinamento que correspondem a uma entidade.

Para começar, você mesmo pode anotar alguns dos dados de treinamento, mas, como é o caso das intenções, você pode desenvolver um conjunto de treinamento mais variado (e, portanto, robusto) por meio do crowd sourcing dele. Conforme observado nas diretrizes de treinamento, a detecção robusta de entidades requer de 600 a 5000 ocorrências de cada entidade de ML em todo o conjunto de treinamento. Além disso, se os dados de treinamento da intenção já forem expansivos, talvez você queira obtê-los em vez de anotar cada declaração por conta própria. Em ambos os casos, você deve analisar seus dados de treinamento para descobrir se as entidades estão representadas uniformemente e se os valores das entidades são suficientemente variados. Com as anotações concluídas, treine o modelo e teste-o. Depois de revisar as entidades detectadas nas execuções de teste, você pode continuar a atualizar o corpus e treinar novamente para melhorar a precisão.

Para criar uma Entidade de ML:
  1. Clique em + Adicionar Entidade.
  2. Preencha a caixa de diálogo Criar Entidade. Lembre-se de que Nome e Descrição aparecem nas páginas do colaborador para Jobs de Anotação de Entidade.
    • Informe um nome que identifique o conteúdo anotado. Um nome exclusivo ajuda os colaboradores.
    • Insira uma descrição. Embora esta seja uma propriedade opcional, os colaboradores a usam, juntamente com a propriedade Nome, para diferenciar entidades.
    • Escolha Entidade do ML na lista.
  3. Ative Excluir Correspondências de Entidade do Sistema quando as anotações de treinamento contiverem nomes, locais, números ou outro conteúdo que possa entrar em conflito com os valores de entidade do sistema. A definição dessa opção impede que o modelo extraia valores de entidade do sistema que estão dentro da entrada resolvida para essa entidade ML. Ele impõe um limite em torno dessa entrada para que o modelo o reconheça apenas como um valor de entidade ML e não faça parsing dele ainda mais para valores de entidade do sistema. Você pode definir essa opção para entidades compostas que fazem referência a entidades ML.
  4. Clique em Criar.
  5. Clique em +Value Listar Entidades para associar essa entidade a até cinco Entidades de Lista de Valores. Isso é opcional, mas associar uma Entidade de ML a uma Entidade da Lista de Valores combina a extração contextual da Entidade de ML e a extração independente do contexto da Entidade da Lista de Valores.
  6. Clique na guia DataSet. Esta página lista todas as declarações de cada Entidade de ML em sua habilidade, que incluem as declarações que você mesmo adicionou para inicializar a entidade, aquelas enviadas de jobs de fornecimento coletivo ou que foram importadas como objetos JSON. Nesta página, você pode adicionar declarações manualmente ou em massa fazendo upload de um arquivo JSON. Você também pode gerenciar as declarações desta página editando-as (incluindo anotando-as ou reanotando-as) ou excluindo, importando e exportando-as.
    • Adicione declarações manualmente:
      • Clique em Adicionar Declaração. Depois de adicionar a declaração, clique em Editar Anotações para abrir a Lista de Entidades.
        Observação

        Você só pode adicionar uma declaração de cada vez. Se quiser adicionar declarações em massa, você poderá adicioná-las por meio de um job de Anotação de Entidade ou fazer upload de um arquivo JSON.
      • Destaque o texto relevante para a Entidade ML e, em seguida, conclua a rotulagem selecionando a Entidade ML na Lista de Entidades. Você pode remover uma anotação clicando em x no label.
        Esta é uma imagem do ícone Excluir em uma anotação.

    • Adicione declarações de um arquivo JSON. Este arquivo JSON contém uma lista de objetos de declaração.
      [
        {
          "Utterance": {
            "utterance": "I expensed $35.64 for group lunch at Joe's on 4/7/21",
            "languageTag": "en",
            "entities": [
              {
                "entityValue": "Joe's"   
                "entityName": "VendorName",
                "beginOffset": 37,
                "endOffset": 42
              }
            ]
          }
        },
        {
          "Utterance": {
            "utterance": "Give me my $30 for Coffee Klatch on 7/20",
            "languageTag": "en",
            "entities": [
              {
                "entityName": "VendorName",
                "beginOffset": 19,
                "endOffset": 32
              }
            ]
          }
        }
      ]
      Você pode fazer upload dele clicando em Mais > Importar para recuperá-lo do sistema local.
      O objeto entities descreve as entidades de ML que foram identificadas na declaração. Embora o exemplo anterior ilustre um único objeto entities para cada declaração, uma declaração pode conter várias entidades de ML, o que significa vários objetos entities:
      [
        {
          "Utterance": {
            "utterance": "I want this and that",
            "languageTag": "en",
            "entities": [
              {
                "entityName": "ML_This",
                "beginOffset": 7,
                "endOffset": 11
              },
              {
                "entityName": "ML_That",
                "beginOffset": 16,
                "endOffset": 20
              }
            ]
          }
        },
        {
          "Utterance": {
            "utterance": "I want less of this and none of that",
            "languageTag": "en",
            "entities": [
              {
                "entityName": "ML_This",
                "beginOffset": 15,
                "endOffset": 19
              },
              {
                "entityName": "ML_That",
                "beginOffset": 32,
                "endOffset": 36
              }
            ]
          }
        }
      ]
      entityName identifica a própria Entidade ML e entityValue identifica o texto rotulado para a entidade. entityValue é uma chave opcional que você pode usar para validar o texto rotulado em relação às alterações feitas na declaração. O próprio label é identificado pelas propriedades beginOffset e endOffset, que representam o deslocamento dos caracteres que começam e terminam o label. Esse deslocamento é determinado por caractere, não por palavra, e é calculado a partir do primeiro caractere da declaração (0-1).
      Observação

      Você não pode criar as Entidades de ML com base nesse JSON. Eles devem existir antes de você fazer upload do arquivo.
      Se você não quiser determinar as compensações, poderá deixar o objeto entities indefinido e aplicar os labels depois de fazer upload do arquivo JSON.
      [
        {
          "Utterance": {
            "utterance": "I expensed $35.64 for group lunch at Joe's on 4/7/21",
            "languageTag": "en",
            "entities": []
              
            
          }
        },
        {
          "Utterance": {
            "utterance": "Give me my $30 for Coffee Klatch on 7/20",
            "languageTag": "en",
            "entities": []
            
          }
        }
      ]
      O sistema verifica se há duplicações para evitar entradas redundantes. Somente as alterações feitas na definição entities no arquivo JSON são aplicadas. Se uma declaração tiver sido alterada no arquivo JSON, ela será considerada uma nova declaração.
    • Edite uma declaração anotada:
      • Clique em Editar Esta é uma imagem do ícone Editar Entidade ML para remover a anotação.
        Observação

        Uma declaração modificada é considerada uma nova declaração (não anotada).
      • Clique em Editar Anotações para abrir a Lista de Entidades.
      • Destaque o texto e selecione uma Entidade de ML na Lista de Entidades.
      • Se precisar remover uma anotação, clique em x no label.
  7. Quando terminar de anotar as declarações. Clique em Treinar para atualizar o Tm do instrutor e o modelo de Entidade.
  8. Teste o reconhecimento inserindo uma frase de teste no Testador de Declarações, idealmente uma com um valor não encontrado em nenhum dado de treinamento. Verifique os resultados para descobrir se o modelo detectou a Entidade ML correta e se o texto foi rotulado corretamente e completamente.
  9. Associe a Entidade ML a uma intenção.

Excluir Correspondências da Entidade do Sistema

A ativação de Excluir Correspondências de Entidade do Sistema impede que o modelo substitua valores de entidade do sistema extraídos anteriormente por valores concorrentes encontrados dentro dos limites de uma entidade ML. Com essa opção ativada, "Criar uma reunião na segunda-feira para discutir o resultado da terça-feira" mantém os valores da entidade DATE_TIME e ML separados resolvendo a entidade DATE_TIME aplicável (segunda-feira) e ignorando "Terça-feira" no texto reconhecido como a entidade ML ("discuta o resultado da terça-feira").

Quando essa opção está desativada, a habilidade resolve dois valores de entidades DATE_TIME, segunda e terça-feira. Valores conflitantes como esses diminuem a experiência do usuário ao atualizar um valor de entidade com slot anterior com um valor não intencional ou ao interjetar um prompt de desambiguação que interrompe o fluxo da conversa.
Observação

Você pode definir a opção Excluir Correspondências de Entidade do Sistema para entidades compostas que fazem referência a uma entidade ML.

Importar Entidades de Lista de Valores de um Arquivo CSV

Em vez de criar suas entidades uma por vez, você pode criar conjuntos inteiros delas quando importa um arquivo CSV que contém as definições de entidades.

Esse arquivo CSV contém colunas para nome da entidade (entity), valor da entidade (value) e quaisquer sinônimos (synonyms). Você pode criar esse arquivo do zero ou pode reutilizar ou reajustar um CSV que tenha sido criado com base em uma exportação.

Se você estiver iniciando um novo ou usando um arquivo exportado, leve em conta a versão da habilidade na qual você está importando, por causa das alterações de formato e conteúdo do suporte ao idioma nativo que foram introduzidas na Versão 20.12. Embora você possa importar um CSV de uma versão anterior para uma habilidade 20.12 sem incidentes na maioria dos casos, ainda há alguns problemas de compatibilidade que talvez seja necessário tratar. Mas antes disso, vamos dar uma olhada no formato de um arquivo anterior à versão 20.12. Esse arquivo é dividido nas seguintes colunas: entity, value e synonyms. Por exemplo :
entity,value,synonyms
PizzaSize,Large,lrg:lrge:big
PizzaSize,Medium,med
PizzaSize,Small,little
Para habilidades criadas ou atualizadas para a Versão 20.12, os arquivos de importação têm tags de idioma anexadas aos cabeçalhos das colunas value e synonyms. Por exemplo, se o idioma nativo principal da habilidade for inglês (en), as colunas value e synonyms serão en:value e en:synonyms:
entity,en:value,en:synonyms
PizzaSize,Large,lrg:lrge:big
PizzaSize,Medium,med
PizzaSize,Small,
PizzaSize,Extra Large,XL
Os CSVs que suportam vários idiomas nativos exigem conjuntos adicionais de colunas value e synonyms para cada idioma secundário. Se o idioma secundário de uma habilidade em inglês nativo for o francês (fr), o CSV terá as colunas fr:value e fr:synonyms como correspondentes às colunas en:
entity,en:value,en:synonyms,fr:value,fr:synonyms
PizzaSize,Large,lrg:lrge:big,grande,grde:g
PizzaSize,Medium,med,moyenne,moy
PizzaSize,Small,,petite,p
PizzaSize,Extra Large,XL,pizza extra large,
Veja aqui as questões que devem ser observadas se você planeja importar CSVs entre versões:
  • Se você importar um CSV anterior à versão 20.12 para uma habilidade 20.12 (incluindo aquelas que suportam idiomas nativos ou usam serviços de tradução), os valores e sinônimos serão importados como idiomas principais.
  • Todos os valores de entidade dos idiomas principal e secundário devem ser exclusivos em uma entidade; portanto, não será possível importar um CSV se o mesmo valor tiver sido definido mais de uma vez para uma única entidade. Podem ocorrer valores duplicados nas versões anteriores à 20.12, em que os valores podem ser considerados exclusivos por causa das variações de maiúsculas e minúsculas. Isso não vale para a versão 20.12, na qual maiúsculas e minúsculas são aplicadas com mais rigor. Por exemplo, não será possível importar um CSV se ele tiver PizzaSize, Small e PizzaSize, SMALL. Se você planeja fazer upgrade da Versão 20.12, primeiro resolva todos os valores de entidade iguais, mas diferenciados apenas por maiúsculas e minúsculas antes de fazer o upgrade.
  • O suporte ao idioma principal se aplica às habilidades criadas com o uso da Versão 20.12 e mais recente; sendo assim, remova primeiramente as tags de idioma e quaisquer entradas de idioma secundário para poder importar um CSV da Versão 20.12 para uma habilidade criada com uma versão anterior.
Ao importar um CSV 20.12 para uma habilidade 20.12:
  • Você pode importar um CSV multilíngue para habilidades que não usam suporte a idioma nativo, incluindo aquelas que usam serviços de tradução.
  • Se você importar um CSV multilíngue para uma habilidade que suporte idiomas nativos ou usa serviços de tradução, somente as linhas que fornecem um valor válido para o idioma principal serão importadas. O restante é ignorado.
Com isso em mente, veja aqui como criar entidades por meio de uma importação:
  1. Clique em Entidades (Esta é uma imagem do ícone Entidades.) na barra de navegação esquerda.

  2. Clique em Mais, escolha Importar entidades da lista de Valores e selecione o arquivo .csv no seu sistema local.
    Veja a seguir a descrição da importação-entities.png
    Descrição da ilustração import-entities.png

  3. Adicione as entidades a uma intenção (ou a uma lista de entidades e depois a uma intenção).

Exportar Entidades de Lista de Valores para um Arquivo CSV

Você pode exportar os valores e sinônimos em um arquivo CSV para reutilização em outra habilidade. Os CSVs exportados compartilham o mesmo formato dos CSVs usados para criar entidades por meio de importações, pois contêm colunas entity, value e synonyms. Esse CVS tem requisitos específicos da release que podem impactar a reutilização.
  • Os CSVs exportados de habilidades criadas ou atualizados para a Versão 20.12 estão equipados para suporte ao idioma nativo por meio das tags de idioma principal (e, às vezes, secundário) anexadas às colunas value e synonyms. Por exemplo, o CSV no trecho de código a seguir tem um conjunto de colunas value e synonyms para o idioma principal da habilidade, inglês (en) e outro conjunto para seu idioma secundário, francês (fr):
    entity,en:value,en:synonyms,fr:value,fr:synonyms
    As tags de idioma principal são incluídas em todos os CSVs 20.12, independentemente do suporte ao idioma nativo. Elas estão presentes nas habilidades que não se destinam a executar qualquer tipo de tradução (nativa ou por meio de um serviço de tradução) e nas habilidades que usam serviços de tradução.
  • Os CSVs exportados das habilidades em execução nas versões anteriores à 20.12 têm as colunas de entidade, valor e sinônimos, mas não têm tags de idioma.
Para exportar entidades de lista de valores:
  1. Clique em Entidades (Esta é uma imagem do ícone Entidades.) na barra de navegação esquerda.

  2. Clique em Mais, escolha Exportar entidades da lista de Valores e salve o arquivo.
    Veja a seguir a descrição da exportação-entities.png
    Descrição da ilustração export-entities.png

    O arquivo .csv exportado é nomeado para sua habilidade. Se você for usar esse arquivo como importação, talvez precise fazer algumas edições descritas em Importar Intenções de um Arquivo CSV se for importá-lo ou exportá-lo das habilidades da Versão 20.12 e de versões anteriores.

Criar entidades dinâmicas

Os valores de entidade dinâmica são gerenciados por meio dos pontos finais da API de Entidades Dinâmicas, descritos em API REST do Oracle Digital Assistant. Para adicionar, modificar e excluir os valores de entidade e sinônimos, primeiro você deve criar uma entidade dinâmica para gerar o entityId usado nas chamadas REST.

Para criar a entidade dinâmica:
  1. Clique em + Entidade.
  2. Escolha Entidades Dinâmicas na lista Tipo.
  3. Se o serviço de backend estiver indisponível ou ainda não tiver enviado nenhum valor, ou se você não mantiver o serviço, clique em + Valor para adicionar valores simulados que poderão ser usados para fins de teste. Normalmente, você adicionaria esses valores estáticos antes da efetivação da infraestrutura de entidade dinâmica. Esses valores são perdidos quando você clona, cria ou exporta uma habilidade. Depois de provisionar os valores de entidade por meio da API, você poderá substituir ou manter esses valores (embora na maioria dos casos você os substitua).
  4. Clique em Criar.

Dica:

Se a API atualizar os valores da entidade conforme você estiver testando a conversa, clique em Redefinir para reiniciar a conversa.
Algumas notas para desenvolvedores de serviços:
  • Você pode consultar as entidades dinâmicas configuradas para uma habilidade usando o entityId gerado com o botId. Inclua esses valores nas chamadas para criar as solicitações de envio e os objetos que atualizam os valores da entidade.
  • Uma entidade não pode ter mais de 150.000 valores. Para reduzir a probabilidade de exceder esse limite quando você estiver lidando com grandes quantidades de dados, envie solicitações PATCH com suas exclusões antes de enviar solicitações PATCH com suas adições.
Observação

Entidades Dinâmicas são suportadas apenas em instâncias doOracle Digital Assistant provisionadas no Oracle Cloud Infrastructure (às vezes chamada de infraestrutura de nuvem Geração 2). Se sua instância for provisionada no Oracle Cloud Platform (como todas as instâncias da versão 19.4.1), você não poderá usar o recurso.

Diretrizes para a Criação de Entidades de ML

Aqui está uma abordagem geral para criar uma Entidade de ML.
  1. Crie Entidades de ML concisas. A definição da Entidade de ML está na base de um conjunto de treinamento útil; portanto, a clareza é fundamental em termos de seu nome e da descrição que ajudam os colaboradores a anotar declarações.

    Como os colaboradores dependem das descrições e nomes da Entidade de ML, você deve garantir que suas Entidades de ML sejam facilmente distinguíveis entre si, especialmente quando houver sobreposição potencial. Se as diferenças não estiverem claras para você, é provável que os trabalhadores da multidão fiquem confusos. Por exemplo, as entidades Comerciante e Tipo de Conta podem ser difíceis de diferenciar em alguns casos. Em "Transferir US $ 100 da minha conta poupança para a Pacific Gas and Electric", você pode rotular claramente "economia" como Tipo de Conta e Pacific Gas and Electric como Comerciante. No entanto, a fronteira entre os dois pode ser confundida em frases como "Precisa enviar dinheiro para John, transferir US $ 100 da minha poupança para sua conta corrente". A "conta de verificação" é um tipo de Conta ou um nome de Comerciante? Nesse caso, você pode decidir que qualquer destinatário deve ser sempre um nome de comerciante em vez de um tipo de conta.

  2. Na preparação do crowdsourcing das declarações de treinamento, considere a entrada típica do usuário para diferentes contextos de extração de entidade. Por exemplo, o valor pode ser extraído na mensagem inicial do usuário (contexto de declaração inicial) ou é extraído de respostas para os prompts da habilidade (contexto de declaração de slot)?
    Contexto Descrição Exemplo de Declarações (valores de Entidade ML detectados em negrito)
    Contexto de declaração inicial Uma mensagem que geralmente é bem estruturada e inclui valores de Entidade de ML. Para uma habilidade de relatório de despesas, por exemplo, a declaração incluiria um valor que o modelo pode detectar para uma Entidade de ML chamada Comerciante. Crie uma despesa para o jantar da equipe na John's Pasta Shop por US$ 85 em 3 de maio
    Contexto de declaração do slot Uma mensagem do usuário que fornece a Entidade ML em resposta a um prompt, seja por causa do design da conversa (a habilidade solicita "Quem é o comerciante?") ou para dividir um valor porque ele não foi fornecido por uma resposta enviada anteriormente.

    Em outras circunstâncias, o valor da Entidade ML pode já ter sido fornecido, mas pode ser incluído em outras mensagens do usuário na mesma conversa. Por exemplo, a habilidade pode solicitar que os usuários forneçam detalhes de despesas adicionais ou descrevam a imagem de um recebimento carregado.

    • O comerciante é a John's Pasta Shop.
    • Jantar de equipe. Valor $85. John's Pasta Shop.
    • A descrição é TurboTaxi de casa para o aeroporto CMH.
    • Recebimento do Grandiose Shack Hotel para simpósio de nuvem
  3. Reúna seus dados de treinamento e teste.
    • Se você já tiver uma coleção suficiente de declarações, talvez queira avaliá-las para distribuição de entidades e diversidade de valores de entidades antes de iniciar um job de Anotação de Entidade.
    • Se você não tiver dados de treinamento suficientes ou estiver começando do zero, inicie um Job de Paráfrase da Intenção. Para reunir declarações viáveis (e abundantes) para treinamento e teste, integre o contexto da entidade ao job criando tarefas para cada intenção. Para reunir diversas frases, considere dividir cada intenção pelo contexto da conversa.
    • Para o prompt da tarefa, forneça o contexto dos colaboradores e pergunte a eles: "Como você responderia?" ou "O que você diria?" Use as dicas anexas para fornecer exemplos e ilustrar diferentes contextos. Por exemplo :
      Prompt Dica
      Você está conversando com um bot de relatórios de despesas e deseja criar uma despesa. Qual seria a primeira coisa que você diria? Certifique-se de que o nome do comerciante esteja na declaração. Você pode dizer algo como: "Crie uma despesa para jantar em equipe na John's Pasta Shop por US $ 85 em 3 de maio".
      Esta tarefa solicita frases que não apenas iniciam a conversa, mas também incluem um nome de comerciante. Talvez você também queira declarações que reflitam respostas solicitadas pela habilidade quando o usuário não fornecer um valor. Por exemplo, "Merchant é John's Pasta Shop" em resposta ao prompt "Quem é o comerciante?" da habilidade.
      Prompt Dica
      Você enviou uma despesa para um bot de relatório de despesas, mas não forneceu um nome de comerciante. Como você responderia? Identifique o comerciante. Por exemplo, "Merchant é John's Pasta Shop".
      Você fez upload de uma imagem de um recibo para um bot de relatórios de despesas. Agora está pedindo para você descrever o recibo. Como você responderia? Identifique o nome do estabelecimento no recibo. Por exemplo: "Grandiose Shack Hotel recibo para simpósio de nuvem."
      Para testar falsos positivos para teste - palavras e frases que o modelo não deve identificar como Entidades de ML - você também pode coletar "exemplos negativos". Essas declarações incluem um valor de Entidade ML.
      Contexto Declarações de Exemplo
      Contexto de declaração inicial Pague-me de volta para o jantar de terça-feira
      Contexto de declaração do slot
      • Jantar de apresentação. Valor $ 50, 4 pessoas.
      • Descrição xerox lunch for 5
      • Recibo do hotel para estadia na entrevista
    • Reúna um grande conjunto de treinamento definindo um número apropriado de paráfrases por intenção. Para que o modelo seja generalizado com sucesso, seu conjunto de dados deve conter entre 500 e 5000 ocorrências para cada entidade de ML. Idealmente, você deve evitar a extremidade baixa deste intervalo.
  4. Depois que os colaboradores concluírem o job (ou tiverem concluído declarações suficientes para que você possa cancelar o job), você poderá adicionar as declarações ou iniciar um job de Validação de Intenção para verificá-las. Você também pode baixar os resultados para o seu sistema local para revisão adicional.
  5. Reserve cerca de 20% das declarações para teste. Para criar CSVs para o Testador de Declaração com base nos CSVs baixados para jobs de Paráfrase de Intenção e Validação de Intenção:
    • Para jobs de Paráfrase de Intenção: transfira o conteúdo na coluna result (as declarações fornecidas pelos colaboradores) para a coluna utterance no CSV do Testador de Declaração. Transfira o conteúdo da coluna intentName para a coluna expectedIntent no CSV do Testador de Declaração.
    • Para jobs de Validação de Intenção: transfira o conteúdo na coluna prompt (as declarações fornecidas pelos colaboradores) para a coluna utterance no CSV do Testador de Declaração. Transfira o conteúdo da coluna intentName para a coluna expectedIntent no CSV do Testador de Declaração.
  6. Adicione as declarações restantes a um arquivo CSV com uma única coluna, utterance. Crie um Job de Anotação de Entidade carregando este CSV. Como os colaboradores estão rotulando os valores da entidade, eles provavelmente classificarão declarações negativas como "Não tenho certeza" ou "Nenhuma das entidades se aplica".
  7. Depois que o job de Anotação de Entidade for concluído, você poderá adicionar os resultados ou iniciar um job de Validação de Entidade para verificar a rotulagem. Somente as declarações que os colaboradores consideram corretas em um job de Validação de Entidade podem ser adicionadas ao corpus.

    Dica:

    Você pode adicionar, remover ou ajustar os rótulos de anotação na guia Conjunto de Dados da página Entidades.
  8. Treine a entidade selecionando Entidade.
  9. Execute casos de teste para avaliar o reconhecimento de entidade usando as declarações reservadas do job de Paráfrase de Intenção. Você pode dividir essas declarações em diferentes suítes de teste para testar diferentes comportamentos (valores desconhecidos, pontuação que podem não estar presentes nos dados de treinamento, falsos positivos etc.). Como pode haver um grande número dessas declarações, você pode criar suítes de teste fazendo upload de um CSV no Testador de Declaração.

    Observação

    O Testador de Declaração só exibe labels de entidade para aprovação de casos de teste. Use um Teste Rápido para exibir os labels das declarações que são resolvidas abaixo do limite de confiança.
  10. Use os resultados para refinar o conjunto de dados. Adicione, remova ou edite iterativamente as declarações de treinamento até que os resultados da execução do teste indiquem que o modelo está identificando efetivamente as Entidades de ML.
    Observação

    Para evitar correspondências inadvertidas de entidades que degradam a experiência do usuário, ative Excluir Correspondências de Entidades do Sistema se os dados de treinamento contiverem nomes, locais, números.

ML - Diretrizes de Treinamento de Entidade

O modelo generaliza uma entidade usando tanto o contexto em torno de uma palavra (ou palavras) quanto a informação lexical sobre a própria palavra. Para que o modelo seja generalizado de forma eficaz, recomendamos que o número de anotações por entidade varie entre 500 e 5000. Talvez você já tenha um conjunto de treinamento grande o suficiente e que tenha a variação de valores de entidade esperada dos usuários finais. Se esse for o caso, você poderá iniciar um job de Anotação de Entidade e, em seguida, incorporar os resultados nos dados de treinamento. No entanto, se você não tiver dados de treinamento suficientes ou se os dados que você tem não tiverem cobertura suficiente para todas as entidades de ML, poderá coletar declarações de jobs de Paráfrase de Intenção de origem coletiva.

Seja qual for a origem, a distribuição de valores de entidade deve refletir sua ideia geral dos valores que o modelo pode encontrar. Para treinar adequadamente o modelo:
  • Não use em excesso os mesmos valores de entidade em seus dados de treinamento. Valores de entidade repetitivos nos dados de treinamento impedem que o modelo se generalize em valores desconhecidos. Por exemplo, você espera que a Entidade ML reconheça uma variedade de valores, mas a entidade é representada por apenas 10 a 20 valores diferentes em seu conjunto de treinamento. Nesse caso, o modelo não se generalizará, mesmo que haja duas ou três mil anotações.
  • Variar o número de palavras para cada valor de entidade. Se você espera que os usuários insiram valores de entidade com três a cinco palavras, mas seus dados de treinamento são anotados com valores de entidade de uma ou duas palavras, o modelo poderá não identificar a entidade à medida que o número de palavras aumenta. Em alguns casos, ela só pode identificar parcialmente a entidade. O modelo assume o limite da entidade das declarações que você forneceu. Se você treinou o modelo em valores com uma ou duas palavras, ele assumirá que o limite da entidade tem apenas uma ou duas palavras. A adição de entidades com mais palavras permite que o modelo reconheça limites mais longos para a entidade.
  • O tamanho da declaração deve refletir seu caso de uso e a entrada antecipada do usuário. Você pode treinar o modelo para detectar entidades para mensagens de tamanhos variados, coletando declarações curtas e longas. As declarações podem até ter várias frases. Se você espera declarações curtas que reflitam o contexto de preenchimento de slot, reúna seus dados de amostra adequadamente. Da mesma forma, se você estiver antecipando declarações para o cenário de contexto inicial, o conjunto de treinamento deverá conter frases completas.
  • Incluir pontuação. Se os nomes de entidades exigirem caracteres especiais, como '-' e '/', inclua-os nos valores de entidade nos dados de treinamento.
  • Certifique-se de que todas as Entidades de ML estejam igualmente representadas em seus dados de treinamento. Um conjunto de treinamento desequilibrado tem muitas instâncias de uma entidade e muito poucas de outra. Os modelos produzidos a partir de conjuntos de treinamento desequilibrados às vezes não conseguem detectar a entidade com poucas instâncias e prever demais as entidades com instâncias desproporcionalmente altas. Isso leva a falsos positivos.

ML - Diretrizes de Teste de Entidade

Antes de treinar sua habilidade, reserve cerca de 20% das declarações não anotadas para descobrir como o modelo se generaliza quando apresentado com declarações ou valores de entidade que não fazem parte de seus dados de treinamento. Esse conjunto de declarações pode não ser seu único conjunto de testes, dependendo dos comportamentos que você deseja avaliar. Por exemplo :
  • Use apenas declarações de contexto de slot para descobrir o quão bem o modelo prevê entidades com menos contexto.
  • Use declarações com valores "desconhecidos" para descobrir quão bem o modelo se generaliza com valores que não estão presentes nos dados de treinamento.
  • Use declarações sem Entidades de ML para descobrir se o modelo detecta falsos positivos.
  • Use declarações que contenham valores de Entidade ML com pontuação para descobrir o desempenho do modelo com valores de entidade incomuns.