Usar gramáticas de fala externas

Para aplicativos IVR (Interactive Voice Response) e tarefas mais amplas de reconhecimento de fala para aplicativos de voz, uma lista restrita ou reconhecimento baseado em "gramática" oferece vantagens significativas. Ele supera em muito o reconhecimento de fala tradicional baseado em semântica usado em mecanismos de IA STT (conversão de fala em texto) modernos em termos de precisão, desempenho e custo. Esse aumento de desempenho ocorre porque o reconhecimento baseado em gramática pode restringir a saída de reconhecimento a um conjunto predefinido de regras, o que reforça a precisão.

As gramáticas seguem a SRGS (Especificação de Gramática de Reconhecimento de Fala), conforme detalhado na especificação do W3C. Quando uma solicitação entra no mecanismo, ela converte áudio falado ("enunciados") em texto. Em seguida, o mecanismo compara o texto reconhecido com a gramática e quaisquer artefatos associados, como léxicos de pronúncia. Esse processo fornece uma transcrição literal ou uma interpretação que a gramática restringe às informações fornecidas dentro da gramática. A lógica extra, como ECMAScript incorporada à gramática, pode refinar ainda mais a interpretação.

O reconhecimento de fala restrita é ideal para:

  • Reconhecendo listas restritas (endereços, símbolos de ações, CEP, nomes de departamentos e similares).

  • Reconhecimento de cadeia de caracteres alfanumérica (números de acompanhamento, números de conta, códigos de confirmação e tal).

    • Incluindo ter restrições posicionais. Por exemplo, os dois primeiros caracteres da ID do membro começam com AN, FD, NT. Outro exemplo de restrições posicionais é um número de identificação do veículo.
  • Reconhecimento alfanumérico ou de dígitos com somas de verificação ou restrições semelhantes. Por exemplo, números de cartão de crédito que possuem verificação de Luhn.

  • Aplicativos de diálogo direcionados em que palavras ou frases específicas devem ser proferidas.

Elaboração de gramáticas de fala

Escreva gramáticas de fala restritas usando GrXML (Grammar XML). Como qualquer documento XML, um arquivo de gramática deve começar com um cabeçalho que especifica determinadas características da gramática. O corpo principal de um arquivo de gramática consiste em regras gramaticais que definem as palavras faladas reconhecidas pela gramática e os valores de variáveis correspondentes que os itens reconhecidos retornam.

Cabeçalho de arquivo de gramática

O cabeçalho em um arquivo gramatical consiste na declaração XML e no <grammar> elemento que especifica a linguagem do documento, a raiz e o namespace.

<?xml version="1.0" encoding="UTF-8" ?>

<grammar xmlns="http://www.w3.org/2001/06/grammar"

version="1.0" xml:lang="en-US" root="YesNo"

tag-format="swi-semantics/1.0">

Tipo de codificação e declaração XML

O primeiro elemento no cabeçalho é sempre a declaração XML. Esse elemento especifica a versão do XML usada no documento (1.0 ou 1.1). Ele também especifica a codificação que se aplica ao documento, que determina os idiomas que podem ou não ser usados.

A versão e a codificação são atributos necessários. Use qualquer codificação apropriada às suas preferências (por exemplo, configuração do computador, aplicativo de processamento de texto e assim por diante). O mecanismo de reconhecimento de fala restrito não se importa com qual codificação você usa.

Uma pequena lista de codificações típicas para vários idiomas é mostrada na tabela a seguir:

Codificação Description
ISO-8859-1 Latino-1. Usado para inglês, francês, alemão e espanhol.
UTF-8 Usado para todos os idiomas.
UTF-16 Usado para todos os idiomas.
Big5 Usado para o cantonês (zh-HK).
GB Usado para chinês tradicional (zh-TW).
Shift-JIS e EUC-JP Usado para o idioma japonês.
KSC e EUC-KR Usado para conteúdo em coreano.

A maioria dos idiomas pode ser representada em mais de uma codificação.

Em runtime, o sistema converte automaticamente a codificação de arquivo gramatical em formato UTF-16 usando as bibliotecas de ICU (Componentes Internacionais para Unicode). O site oficial do consórcio Unicode é http://site.icu-project.org/.

Idioma, namespace e formato de marca semântica

O segundo elemento no cabeçalho é o <grammar> elemento, cujos atributos especificam informações padrão para o documento. Os atributos necessários são:

  • xml:lang: especifica o identificador da linguagem humana padrão a ser usada, conforme definido no documento RFC 3066 do documento Solicitação de Comentários (RFC) no site do IETF.

  • A Microsoft dá suporte a uma ampla variedade de idiomas. O idioma escolhido deve ser compatível com o tipo de codificação gramatical.

  • version: especifica a versão do GrXML (1.0).

  • xmlns: designa o namespace de gramática. Para gramáticas GrXML, essa designação é sempre http://www.w3.org./2001/06/grammar.

  • tag-format: Define o formato usado para scripts dentro de elementos <tag> no corpo principal da gramática para atribuir valores.

O formato de etiqueta deve ser uma destas strings:

Valor Formato de marcas semânticas
swi-semantics/1.0 Sintaxe de marca (usada se o formato de marca não estiver definido). Essa sintaxe é conhecida como swi syntax (para SpeechWorks International).
semântica/1.0 Sintaxe da tag script do W3C.
semântica/1.0-literals Sintaxe da tag de literais de string W3C.

Note

  • Strictamente falando, o atributo de formato de tag não é necessário se sua gramática não usar o elemento <tag>. No entanto, a maioria das gramáticas usa <tag> para atribuir valores, portanto, a Microsoft recomenda que você especifique o formato de marca.

  • Sempre aponte atributos e elementos GrXML, como xmlns, para o namespace <http://voicexml.site.com/grammar>.

Dictionaries

Em alguns casos, a gramática pode precisar incluir palavras ou frases que o mecanismo de reconhecimento de fala restrito não pode analisar normalmente. Por exemplo, um nome pode ser dito e escrito de forma diferente, como a cidade "Worcester", que pode ser pronunciada "wih-sta".

Use o <lexicon> elemento para importar dicionários que mapeiam enunciados para correspondência de texto no arquivo de gramática.

Corpo principal do arquivo de gramática

A seção principal de um arquivo de gramática contém as regras que realmente definem a gramática: as palavras e frases faladas a serem reconhecidas e os valores a serem retornados ao aplicativo principal para cada item reconhecido.

Regras

O corpo principal de um arquivo de gramática consiste em regras definidas usando o elemento GrXML <rule> . Cada regra tem um identificador exclusivo. Cada regra lista as palavras e frases que reconhece como texto dentro de um <item> elemento ou <token> elemento. Esses elementos podem estar aninhados em outros elementos GrXML:

  • O <one-of> elemento apresenta uma lista de alternativas aceitáveis e apenas uma alternativa é necessária para ativar a regra.

  • O <ruleref> elemento refere-se a outra regra, como uma sub-rotina.

  • O <tag> elemento especifica ações a serem executadas ou valores a serem atribuídas a uma variável. Ele pode incluir um script escrito na linguagem de formato de marca.

Quando o usuário pronuncia uma palavra ou frase que a regra abrange, a regra executa as ações, atribuições de valor ou outro código definido para esse enunciado.

Regra raiz

A regra raiz é a primeira regra no arquivo, a menos que o cabeçalho especifique o contrário. Ele serve como a regra de nível de operação padrão. Quando a gramática é referenciada sem especificar a regra a ser pesquisada, essa regra raiz é a primeira consultada.

Escopo da regra

Atribua cada regra no corpo principal de um arquivo de gramática como um escopo. O escopo indica se você pode referenciar a regra independentemente de arquivos externos (públicos) ou apenas por outra regra dentro da mesma gramática (privada). Todas as regras são privadas por padrão, a menos que você as defina como públicas.

Quando a regra é pública, você pode usar seu atributo de ID como uma âncora para referências de outros documentos. Por exemplo, considere a seguinte sintaxe:

<grammar src="../grammars/universals.grxml#YesNo"/>

Quando você invoca esse elemento gramatical, ele se refere diretamente à regra pública "YesNo" dentro do arquivo universals.grxml , independentemente de ser a regra raiz do arquivo.

Note

A regra raiz de um arquivo de gramática pode ser privada. Essa regra não pode ser referenciada de forma independente. No entanto, ele é usado por padrão como o ponto de entrada para a gramática quando você invoca o próprio arquivo gramatical.

Extrair significado e retornar resultados

Note

A chave SWI_meaning deve conter as informações retornadas ao agente habilitado para voz que opera no Copilot Studio.

A SWI_meaning chave contém o significado semântico de uma frase reconhecida. Você pode defini-lo apenas para a regra raiz. Essa chave é incluída na swirec_extra_nbest_keys lista por padrão, portanto, ela será exibida no resultado XML se a gramática definir essa chave.

SWI_meaning filtra respostas redundantes para que as entradas na lista n-best sejam verdadeiramente distintas. A eliminação da redundância melhora as pontuações de confiança e a utilidade da lista n-best.

Quando uma frase reconhecida é semelhante a outra na gramática, ela geralmente tem uma pontuação de confiança baixa, porque o mecanismo de reconhecimento de fala restrito não tem certeza de qual frase está correta. Quando você usa SWI_meaning corretamente, o mecanismo de reconhecimento de fala restrito agrupa interpretações redundantes no mesmo slot na lista n-best. No exemplo a seguir, SWI_meaning é definido como "chamadas diretas para casa" se a frase reconhecida é "direcionar minhas chamadas para casa" ou "por favor, direcione minhas chamadas para casa".

Sem SWI_meaning, a gramática pode produzir a seguinte lista dos melhores n:

N Texto
1 direcionar minhas chamadas para o telefone do meu carro
2 chamadas diretas para o meu carro
3 enviar chamadas para casa
4 envie minhas chamadas para o escritório
5 enviar minhas chamadas para o escritório
6 chamadas diretas para minha casa

Quando você usa SWI_meaning, o mecanismo de reconhecimento de fala restrito organiza a lista n-best pelo significado da interpretação em vez da frase exata falada, de modo que as entradas na lista n-best sejam verdadeiramente distintas:

N Texto Chave de SWI_meaning de nível superior
1 direcionar minhas chamadas para o telefone do meu carro carro de chamadas diretas
chamadas diretas para o meu carro carro de chamadas diretas
2 enviar chamadas para casa chamadas diretas para casa
chamadas diretas para minha casa chamadas diretas para casa
3 envie minhas chamadas para o escritório as chamadas diretas funcionam
enviar minhas chamadas para o escritório as chamadas diretas funcionam

O mecanismo de reconhecimento de fala restrito é definido SWI_meaning automaticamente, mesmo que você não o defina explicitamente em um script dentro da gramática.

Se você não definir SWI_meaning explicitamente na raiz, ela será construída concatenando todas as chaves definidas na raiz e em seus valores. No entanto, essa construção não se aplica a chaves que começam com SWI_, como SWI_literal. Os pares chave/valor são classificados em ordem alfabética pela primeira vez. O raciocínio é que, no que diz respeito ao aplicativo, o conjunto de chaves retornadas é o significado da sentença.

Se não houver chaves, os resultados dependerão se você estiver usando semântica SISR ou SWI. Com o SISR, a SWI_meaning chave não será definida se não houver nenhuma chave. Por outro lado, com a semântica SWI, SWI_meaning é definido como o seguinte:

{SWI_literal:<literal>}

Se SWI_meaning for um objeto, ele será convertido em uma representação de cadeia de caracteres.

Embora o aplicativo possa acessar SWI_meaning, ele usa mais frequentemente outros pares chave/valor definidos especificamente para ele.

Hospedar gramáticas de fala por meio do Armazenamento do Azure

O Copilot Studio dá suporte ao reconhecimento de fala restrito por meio de gramáticas de fala. No entanto, ele não dá suporte diretamente à criação, teste ou hospedagem dessas gramáticas. Para hospedar gramáticas, use o Armazenamento do Microsoft Azure para criar uma conexão confiável e segura entre o agente habilitado para voz e o armazenamento gramatical.

Configure uma conta de armazenamento do Azure

Crie uma conta de armazenamento do Azure. Verifique se a assinatura, o grupo de recursos, a região e o nome do recurso da nova conta de armazenamento seguem as políticas da sua organização. Use as configurações a seguir:

  • Para o Serviço Primário, selecione o Armazenamento de Blobs do Azure ou o Azure Data Lake Storage Gen 2.

  • Selecione Premium para o Desempenho.

Saiba mais em Criar uma conta de armazenamento do Azure.

Configurar o contêiner de armazenamento

Use o Site Estático como o contêiner de armazenamento para seus arquivos de gramática carregados. O contêiner de armazenamento fornece o ponto de extremidade primário e o ponto de extremidade secundário para o site.

Depois de carregar o arquivo de gramática, selecione o arquivo no diretório para exibir as propriedades e os detalhes do arquivo. Salve a URL do arquivo, que deve estar no seguinte formato:

https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}

Saiba mais em Criar um contêiner.

Autenticar o mecanismo de reconhecimento de fala restrito

Para que o reconhecimento de fala restrito funcione dentro de um agente habilitado para voz, o sistema precisa se autenticar usando a conta de armazenamento criada na etapa anterior como um local confiável. Essa autenticação requer a função Leitor de Dados do Armazenamento Blob.

Saiba mais em Atribuir funções do Azure usando o portal Azure.

Entre no portal do Azure, abra uma sessão do Azure Cloud Shell e execute o comando a seguir para criar uma entidade de serviço do mecanismo de reconhecimento de fala restrita em seu locatário.

az ad sp create --id e0e7bef0-777c-40ef-86aa-79d83ba643c7

Note

Ao pesquisar o principal de serviço, você verá que ele contém "NRaaS" no nome.

Empregar fala restrita no Copilot Studio

Criar uma entidade externa

Você pode pensar em uma entidade no Copilot Studio como uma unidade de informações que representa um determinado tipo de assunto do mundo real. Por exemplo, um número de telefone, código postal, cidade ou até mesmo o nome de uma pessoa. Usando entidades, um agente pode reconhecer as informações relevantes de uma entrada de usuário e salvá-la para uso posterior. Nesse cenário, uma gramática de fala restrita executa o reconhecimento.

Use entidades externas para referenciar gramáticas de fala. Para criar uma entidade externa, abra seu agente habilitado para voz e acesse Configurações Entidades>>Adicionar uma entidade>Registre uma entidade externa.

Note

Ao construir sua entidade, use uma variável global ou de sistema e não uma variável de ambiente . Se você precisar usar uma variável de ambiente, crie uma variável global atribua-lhe o valor da variável de ambiente. Em seguida, essa variável global pode ser usada na gramática URL para referência.

Digite as seguintes informações:

  • Nome: URL de gramática no formato de https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true

    Note

    A URL diferencia maiúsculas de minúsculas.

O modo de reconhecimento padrão é Apenas Voz. Para obter configurações gramaticais alternativas, consulte a seguinte tabela:

Tipo Parâmetro de Consulta Example
Somente função de fala Nenhum https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true
DTMF &mode=dtmf https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true&mode=dtmf
Fala ou DTMF
(Mesmo arquivo de gramática)
&mode=speechdtmf https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true&mode=speechdtmf
Fala ou DTMF (Arquivos Gramaticais Diferentes) &mode=speechdtmf&dtmfgrammar={grammarURL} https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true&mode=speechftmf&dtmfgrammar=https://{resourceName}.blob.core.windows.net/\$web/{DTMFgrammarFileName}

Note

As URLs também podem incluir nomes de variáveis diretas no Copilot Studio.

Por exemplo, suponha que haja dois conjuntos idênticos de gramáticas, um para inglês e outro para espanhol, e cada um é armazenado em um subdiretório diferente. O agente multilíngue deve ser capaz de usar as gramáticas em inglês ao conversar em inglês e da mesma forma em espanhol. Nesse caso, a URL gramatical seria: {Env.BaseURL}/common/**{System.User.Language}**/{grammarFileName}?

Onde System.User.Language é en_US ou es_US e se altera quando o idioma é alternado no seu agente.

  • Descrição: uma simples descrição da gramática, à qual o seletor na tela se refere como o nome da entidade. Por exemplo, "número do cartão de crédito".

  • Tipo de dados: escolha o tipo de dados Registro e defina o esquema das marcas esperadas em resposta. Por exemplo, se a gramática retornar SWI_meaning e a cidade, o esquema Registro terá esta aparência:

    kind: Record
    properties:
      city: String
      SWI_meaning: String
    

Depois de selecionar Salvar, a entidade aparecerá na lista. Na tela de criação, vá para um nó de pergunta. Assim como acontece com entidades tradicionais, selecione a entidade externa (anexada a uma gramática) que você deseja que o agente reconheça como resultado da resposta do usuário ao prompt.

Comportamento de tempo de execução

Quando um agente habilitado para voz é executado e encontra a lógica que usa uma gramática externa, o agente habilitado para voz chega à conta de armazenamento do Azure e recupera a gramática para interpretação. Em seguida, o agente compara o que o usuário disse com a restrição aplicada na gramática. Se uma correspondência for bem-sucedida, o sistema retornará a resposta na variável Registro , de acordo com o esquema definido na entidade externa.

Lógica do Canvas

O resultado salvo na variável do nó é sempre um tipo Registro, conforme definido no esquema da entidade externa. Os autores podem usar essa variável Record para acessar chaves conforme definido no esquema, como variableName.SWI_meaning ou variableName.city por meio de notação de ponto.

Resolução de Erros

Códigos de erro

Erro Definição
400 Solicitação incorreta
401 Não Autenticado
403 Proibido
404 Sem Fala
408 Sem tempo limite de entrada
418 Tempo de expiração da sessão
419 Nenhum recurso ativo – faltando uma gramática
500 Erro interno – relate à Microsoft em um ticket de suporte

SWI_Literal

Para muitas gramáticas que funcionam com o mecanismo de reconhecimento de fala restrito, o SWI_Literal recurso retorna a instrução literal que o usuário pronunciou, não o resultado interpretado. Registre esse valor como uma das saídas no Copilot Studio para ajudar na depuração.

Limitações conhecidas

A solução tem as seguintes limitações:

  • Tamanho máximo do arquivo de gramática individual, que atualmente está limitado a 100 MB.
  • Não há suporte para a passagem de variáveis.
  • A conta de armazenamento deve estar localizada no mesmo locatário que o agente.
  • O tamanho da URL não pode exceder 500 caracteres.
  • Somente endpoints da conta de armazenamento do Azure são permitidos.
  • Subgramas só podem ser hospedados na mesma conta de armazenamento (usando o mesmo FPA para autorização).
  • Analisador XML seguro (ou seja, DTD não é permitido e deve validar no esquema SRGS/SISR).
  • Somente o formato de saída NLSML tem suporte interno.
  • O parâmetro legado swirec_simple_result_key não tem efeito e todas as tags são retornadas.

O serviço Microsoft Dynamics processa sistemas de Reconhecimento de Fala Restrito. Ao usar essa experiência, você concorda com os Termos do Dynamics.