Partilhar via


Práticas recomendadas para a compreensão da linguagem de conversação

Use as diretrizes a seguir para criar os melhores projetos possíveis em compreensão de linguagem conversacional.

Escolha um esquema consistente

Esquema é a definição de suas intenções e entidades. Há diferentes abordagens que você pode adotar ao definir o que deve criar como uma intenção versus uma entidade. Coloque-se estas questões:

  • Que ações ou consultas estou tentando capturar do meu usuário?
  • Que informações são relevantes em cada ação?

Normalmente, você pode pensar em ações e consultas como intenções, enquanto as informações necessárias para atender a essas consultas são entidades.

Por exemplo, suponha que você queira que seus clientes cancelem assinaturas de vários produtos que você oferece por meio de seu chatbot. Você pode criar uma intenção de cancelamento com vários exemplos, como "Cancelar o serviço da Contoso" ou "Parar de me cobrar pela assinatura da Fabrikam". A intenção do usuário aqui é cancelar, e o serviço Contoso ou a assinatura da Fabrikam são as assinaturas que ele deseja cancelar.

Para continuar, crie uma entidade para assinaturas. Em seguida, você pode modelar todo o seu projeto para capturar ações como intenções e usar entidades para preencher essas ações. Essa abordagem permite cancelar qualquer coisa que você defina como uma entidade, como outros produtos. Em seguida, você pode ter intenções de se inscrever, renovar e atualizar que todos fazem uso das assinaturas e outras entidades.

O design de esquema anterior facilita a extensão dos recursos existentes (cancelamento, atualização ou inscrição) para novos destinos criando uma nova entidade.

Outra abordagem é modelar as informações como intenções e as ações como entidades. Vamos dar o mesmo exemplo de permitir que seus clientes cancelem assinaturas por meio do seu chatbot.

Você pode criar uma intenção para cada assinatura disponível, como a Contoso, com expressões como "Cancelar Contoso", "Parar de me cobrar pelos serviços da Contoso" e "Cancelar a assinatura da Contoso". Em seguida, você cria uma entidade para capturar a ação de cancelamento . Você pode definir entidades diferentes para cada ação ou consolidar ações como uma entidade com um componente de lista para diferenciar entre ações com chaves diferentes.

Esse design de esquema facilita a extensão de novas ações para destinos existentes adicionando novas entidades de ação ou componentes de entidade.

Certifique-se de evitar tentar canalizar todos os conceitos em intenções. Por exemplo, não tente criar uma intenção Cancelar Contoso que tenha apenas a finalidade dessa ação específica. As intenções e as entidades devem trabalhar em conjunto para capturar todas as informações necessárias do cliente.

Você também deseja evitar misturar diferentes designs de esquema. Não crie metade do seu aplicativo com ações como intenções e a outra metade com informações como intenções. Para obter os resultados possíveis, certifique-se de que é consistente.

Equilibrar dados de treinamento

Quando se trata de dados de treinamento, tente manter seu esquema bem equilibrado. Incluir grandes quantidades de uma intenção e muito poucas de outra resulta em um modelo tendencioso para intenções específicas.

Para resolver esse cenário, talvez seja necessário reduzir a amostra do conjunto de treinamento. Ou você pode precisar adicionar a ele. Para reduzir a amostra, você pode:

  • Livre-se de uma certa porcentagem dos dados de treinamento aleatoriamente.
  • Analise o conjunto de dados e remova entradas duplicadas sobre-representadas, o que é uma maneira mais sistemática.

Para adicionar ao conjunto de treinamento, no Language Studio, na guia Rotulagem de dados, selecione Sugerir enunciados. O Entendimento de Linguagem de Conversação envia uma chamada para o Azure OpenAI para gerar expressões semelhantes.

Captura de tela que mostra uma sugestão de enunciado no Language Studio.

Você também deve procurar "padrões" não intencionais no conjunto de treinamento. Por exemplo, veja se o conjunto de treinamento para uma determinada intenção é todo minúsculo ou começa com uma frase específica. Nesses casos, o modelo que você treina pode aprender esses vieses não intencionais no conjunto de treinamento em vez de ser capaz de generalizar.

Recomendamos que introduza a diversidade de invólucros e pontuação no conjunto de treino. Se se espera que o seu modelo lide com variações, certifique-se de ter um conjunto de treinamento que também reflita essa diversidade. Por exemplo, inclua alguns enunciados no invólucro adequado e alguns em todas as letras minúsculas.

Rotular claramente os enunciados

  • Certifique-se de que os conceitos aos quais suas entidades se referem estejam bem definidos e separáveis. Verifique se consegue determinar facilmente as diferenças de forma fiável. Se não conseguir, essa falta de distinção pode indicar que o componente aprendido também terá dificuldade.

  • Se houver uma semelhança entre entidades, certifique-se de que há algum aspeto dos seus dados que forneça um sinal para a diferença entre elas.

    Por exemplo, se você criou um modelo para reservar voos, um usuário pode usar uma frase como "Eu quero um voo de Boston para Seattle". Espera-se que a cidade de origem e a cidade de destino de tais enunciados sejam semelhantes. Um sinal para diferenciar a cidade de origem pode ser que a palavra de muitas vezes a precede.

  • Certifique-se de rotular todas as instâncias de cada entidade em seus dados de treinamento e teste. Uma abordagem é usar a função de pesquisa para encontrar todas as ocorrências de uma palavra ou frase em seus dados para verificar se elas estão rotuladas corretamente.

  • Rotule dados de teste para entidades que não têm nenhum componente aprendido e também para as entidades que têm. Essa prática ajuda a garantir que suas métricas de avaliação sejam precisas.

Use o treinamento padrão antes do treinamento avançado

O treinamento padrão é gratuito e mais rápido do que o treinamento avançado. Ele pode ajudá-lo a entender rapidamente o efeito de alterar seu conjunto de treinamento ou esquema enquanto você constrói o modelo. Depois de ficar satisfeito com o esquema, considere usar o treinamento avançado para obter a melhor qualidade do modelo.

Use o recurso de avaliação

Quando você cria um aplicativo, geralmente é útil detetar erros antecipadamente. Geralmente, é uma boa prática adicionar um conjunto de testes ao criar o aplicativo. Os resultados do treinamento e da avaliação são úteis para identificar erros ou problemas em seu esquema.

Componentes e composição de aprendizagem automática

Para obter mais informações, consulte Tipos de componentes.

Usar o limite de pontuação Nenhum

Se você vir muitos falsos positivos, como enunciados fora de contexto sendo marcados como intenções válidas, consulte Limiar de confiança para obter informações sobre como isso afeta a inferência.

  • Componentes de entidade não aprendidos por máquina, como listas e regex, não são, por definição, contextuais. Se você vir entidades de lista ou regex em locais não intencionais, tente rotular os sinônimos de lista como o componente aprendido por máquina.
  • Para entidades, você pode usar o componente aprendido como o componente Necessário, para restringir quando uma entidade composta deve ser acionada.

Por exemplo, suponha que você tenha uma entidade chamada Quantidade de Bilhetes que tenta extrair o número de bilhetes que deseja reservar para reservar voos, para expressões como "Reserve dois bilhetes amanhã para o Cairo".

Normalmente, você adiciona um componente pré-criado para Quantity.Number que já extrai todos os números em enunciados. No entanto, se sua entidade foi definida apenas com o componente pré-construído, ela também extrai outros números como parte da entidade Quantidade de Ingressos, como "Reserve dois ingressos amanhã para o Cairo às 15h".

Para resolver esse problema, você rotula um componente aprendido em seus dados de treinamento para todos os números que devem ser uma quantidade de tíquete. A entidade tem agora duas componentes:

  • O componente pré-construído que pode interpretar todos os números.
  • O componente aprendido que prevê onde a quantidade do bilhete está localizada em uma frase.

Se você precisar do componente aprendido, certifique-se de que a Quantidade de tíquete só seja retornada quando o componente aprendido o prever no contexto correto. Se você também precisar do componente pré-construído, poderá garantir que a entidade Quantidade de tíquete retornada seja um número e esteja na posição correta.

Inconsistências do modelo de endereço

Se o seu modelo for excessivamente sensível a pequenas alterações gramaticais, como invólucros ou diacríticos, você poderá manipular sistematicamente seu conjunto de dados diretamente no Language Studio. Para usar esses recursos, selecione a guia Configurações no painel esquerdo e localize a seção Configurações avançadas do projeto.

Uma captura de tela que mostra um exemplo de configurações avançadas do projeto.

Primeiro, você pode habilitar a configuração para Habilitar transformação de dados para invólucro, que normaliza o invólucro de enunciados ao treinar, testar e implementar seu modelo. Se você migrou do LUIS, poderá reconhecer que o LUIS fez essa normalização por padrão. Para acessar esse recurso por meio da API, defina o normalizeCasing parâmetro como true. Veja o seguinte exemplo:

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      ...
      "normalizeCasing": true
      ...
    }
...

Em segundo lugar, você também pode habilitar a configuração para Habilitar aumento de dados para diacríticos para gerar variações de seus dados de treinamento para possíveis variações diacríticas usadas em linguagem natural. Esta funcionalidade está disponível para todos os idiomas. É especialmente útil para línguas germânicas e eslavas, onde os usuários geralmente escrevem palavras usando caracteres clássicos em inglês em vez dos caracteres corretos. Por exemplo, a frase "Navegue até o canal de esportes" em francês é "Accédez à la chaîne sportive". Quando este recurso é ativado, a frase "Accedez a la chaine sportive" (sem caracteres diacríticos) também é incluída no conjunto de dados de treinamento.

Se você habilitar esse recurso, a contagem de expressões do seu conjunto de treinamento aumentará. Por esse motivo, talvez seja necessário ajustar o tamanho dos dados de treinamento de acordo. A contagem máxima de emissão atual após o aumento é de 25.000. Para acessar esse recurso por meio da API, defina o augmentDiacritics parâmetro como true. Veja o seguinte exemplo:

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      ...
      "augmentDiacritics": true
      ...
    }
...

Aborde o excesso de confiança do modelo

Os clientes podem usar a versão de configuração de traning LoraNorm se o modelo estiver sendo incorretamente superconfiante. Um exemplo desse comportamento pode ser como o seguinte cenário, onde o modelo prevê a intenção incorreta com 100% de confiança. Essa pontuação torna a configuração do projeto de limite de confiança inutilizável.

Texto Intenção prevista Pontuação de confiança
"Quem construiu a Torre Eiffel?" Sports 1,00
"Eu estou bem para você hoje?" QueryWeather 1,00
"Espero que tenham uma boa noite." Alarm 1,00

Para resolver esse cenário, use a versão de configuração que normaliza as 2023-04-15 pontuações de confiança. A definição do projeto de limiar de confiança pode então ser ajustada para alcançar o resultado desejado.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2023-04-15",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

Depois que a solicitação for enviada, você poderá acompanhar o progresso do trabalho de treinamento no Language Studio, como de costume.

Nota

Você precisa treinar novamente seu modelo depois de atualizar a configuração do confidenceThreshold projeto. Depois, você precisa publicar novamente o aplicativo para que o novo limite entre em vigor.

Normalização na versão do modelo 2023-04-15

Com a versão do modelo 2023-04-15, a compreensão da linguagem conversacional fornece normalização na camada de inferência que não afeta o treinamento.

A camada de normalização normaliza os escores de confiança de classificação para um intervalo confinado. O intervalo selecionado atualmente é de [-a,a] onde "a" é a raiz quadrada do número de intenções. Como resultado, a normalização depende do número de intenções no aplicativo. Se o número de intenções for baixo, a camada de normalização terá um pequeno intervalo para trabalhar. Com um grande número de intenções, a normalização é mais eficaz.

Se essa normalização não parece ajudar as intenções que estão fora do escopo na medida em que o limite de confiança pode ser usado para filtrar declarações fora do escopo, ela pode estar relacionada ao número de intenções no aplicativo. Considere adicionar mais intenções ao aplicativo. Ou, se você estiver usando uma arquitetura orquestrada, considere mesclar aplicativos que pertencem ao mesmo domínio.

Depurar entidades compostas

Entidades são funções que emitem extensões em sua entrada com um tipo associado. Um ou mais componentes definem a função. Você pode marcar componentes conforme necessário e decidir se deseja habilitar a configuração Combinar componentes . Quando você combina componentes, todas as extensões que se sobrepõem são mescladas em uma única extensão. Se a configuração não for usada, cada extensão de componente individual será emitida.

Para entender melhor o desempenho de componentes individuais, você pode desativar a configuração e definir cada componente como Não necessário. Essa configuração permite inspecionar as extensões individuais emitidas e experimentar a remoção de componentes para que apenas componentes problemáticos sejam gerados.

Avaliar um modelo usando vários conjuntos de teste

Os dados em um projeto de compreensão de linguagem conversacional podem ter dois conjuntos de dados: um conjunto de testes e um conjunto de treinamento. Se você quiser usar vários conjuntos de teste para avaliar seu modelo, você pode:

  • Dê nomes diferentes aos conjuntos de testes (por exemplo, "test1" e "test2").
  • Exporte seu projeto para obter um arquivo JSON com seus parâmetros e configuração.
  • Use o JSON para importar um novo projeto. Renomeie seu segundo conjunto de teste desejado para "testar".
  • Treine o modelo para executar a avaliação usando seu segundo conjunto de testes.

Parâmetros personalizados para aplicativos de destino e aplicativos filho

Se você estiver usando aplicativos orquestrados, convém enviar substituições de parâmetros personalizados para vários aplicativos filho. O targetProjectParameters campo permite que os usuários enviem um dicionário representando os parâmetros para cada projeto de destino. Por exemplo, considere um aplicativo orquestrador chamado Orchestrator orquestrando entre um aplicativo de compreensão de linguagem conversacional nomeado CLU1 e um aplicativo de resposta a perguntas personalizado chamado CQA1. Se você quiser enviar um parâmetro chamado "top" para o aplicativo de resposta à pergunta, você pode usar o parâmetro anterior.

curl --request POST \
   --url 'https://<your-language-resource>.cognitiveservices.azure.com/language/:analyze-conversations?api-version=2022-10-01-preview' \
   --header 'ocp-apim-subscription-key: <your subscription key>' \
   --data '{
     "kind": "Conversation",
     "analysisInput": {
         "conversationItem": {
             "id": "1",
             "text": "Turn down the volume",
             "modality": "text",
             "language": "en-us",
             "participantId": "1"
         }
     },
     "parameters": {
         "projectName": "Orchestrator",
         "verbose": true,
         "deploymentName": "std",
         "stringIndexType": "TextElement_V8",
"targetProjectParameters": {
            "CQA1": {
                "targetProjectKind": "QuestionAnswering",
                "callingOptions": {
                    "top": 1
                }
             }
         }
     }
 }'

Copiar projetos entre recursos linguísticos

Muitas vezes, você pode copiar projetos de compreensão de linguagem conversacional de um recurso para outro usando o botão Copiar no Language Studio. Em alguns casos, pode ser mais fácil copiar projetos usando a API.

Primeiro, identifique o:

  • Nome do projeto de origem.
  • Nome do projeto de destino.
  • Recurso linguístico de partida.
  • Recurso no idioma de destino, que é para onde você deseja copiá-lo.

Chame a API para autorizar a ação de cópia e obter accessTokens a operação de cópia real mais tarde.

curl --request POST \ 
  --url 'https://<target-language-resource>.cognitiveservices.azure.com//language/authoring/analyze-conversations/projects/<source-project-name>/:authorize-copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>' \ 
  --data '{"projectKind":"Conversation","allowOverwrite":false}' 

Chame a API para concluir a operação de cópia. Use a resposta que você recebeu anteriormente como a carga útil.

curl --request POST \ 
  --url 'https://<source-language-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<source-project-name>/:copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>\ 
  --data '{ 
"projectKind": "Conversation", 
"targetProjectName": "<target-project-name>", 
"accessToken": "<access-token>", 
"expiresAt": "<expiry-date>", 
"targetResourceId": "<target-resource-id>", 
"targetResourceRegion": "<target-region>" 
}'

Endereçar expressões fora do domínio

Os clientes podem usar a versão 2024-08-01-preview de configuração de treinamento recém-atualizada (anteriormente 2024-06-01-preview) se o modelo tiver baixa qualidade em declarações fora do domínio. Um exemplo desse cenário com a configuração de treinamento padrão pode ser como o exemplo a seguir, onde o modelo tem três intenções: Sports, QueryWeather, e Alarm. Os enunciados do teste são enunciados fora do domínio e o modelo os classifica como InDomain com uma pontuação de confiança relativamente alta.

Texto Intenção prevista Pontuação de confiança
"Quem construiu a Torre Eiffel?" Sports 0.90
"Eu estou bem para você hoje?" QueryWeather 1,00
"Espero que tenham uma boa noite." Alarm 0.80

Para resolver esse cenário, use a versão de configuração criada especificamente para resolver esse problema e, ao mesmo tempo, manter uma 2024-08-01-preview qualidade razoavelmente boa nos InDomain enunciados.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2024-08-01-preview",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

Depois que a solicitação for enviada, você poderá acompanhar o progresso do trabalho de treinamento no Language Studio, como de costume.

Advertências:

  • O limite de pontuação Nenhum para o aplicativo (limite de confiança abaixo do qual topIntent é marcado como None) quando você usa essa configuração de treinamento deve ser definido como 0. Essa configuração é usada porque essa nova configuração de treinamento atribui uma determinada parte das probabilidades no domínio a fora do domínio, para que o modelo não esteja incorretamente confiante demais sobre expressões no domínio. Como resultado, os usuários podem ver pontuações de confiança ligeiramente reduzidas para declarações no domínio em comparação com a configuração de treinamento prod.
  • Não recomendamos essa configuração de treinamento para aplicativos com apenas duas intenções, como IntentA e None, por exemplo.
  • Não recomendamos essa configuração de treinamento para aplicativos com um número baixo de expressões por intenção. É altamente recomendável um mínimo de 25 enunciados por intenção.