Compartilhar via


O que são padrões correspondentes?

Os padrões correspondentes podem ser personalizados para agrupar as intenções e as entidades de padrão em um PatternMatchingModel. Usando esse agrupamento, é possível acessar tipos de entidade mais avançados que ajudam a aumentar a precisão do reconhecimento de intenção.

Para ver as localidades com suporte, entre aqui.

Padrões vs. frases exatas

Há dois tipos de cadeias de caracteres usados na correspondência de padrão: "frases exatas" e "padrões". É importante entender as diferenças entre elas.

As frases exatas são uma cadeia de caracteres das palavras exatas que você deseja corresponder. Por exemplo:

"Leve-me ao andar sete".

Um padrão é uma frase que contém uma entidade marcada. As entidades são marcadas com "{}" para definir o local dentro do padrão e o texto dentro de "{}" faz referência à ID da entidade. Considerando o exemplo anterior, talvez você queira extrair o nome do andar em uma entidade chamada "floorName". Você faria isso com um padrão como este:

"Leve-me para o andar {floorName}"

Estrutura de tópicos de PatternMatchingModel

O PatternMatchingModel contém uma ID para fazer referência a esse modelo, uma lista de objetos PatternMatchingIntent e uma lista de objetos PatternMatchingEntity.

Padrões correspondentes a intenções

Os objetos PatternMatchingIntent representam uma coleção de frases que são usadas para avaliar a fala ou o texto no IntentRecognizer. Se as frases forem correspondidas, o IntentRecognitionResult retornado terá a ID do PatternMatchingIntent correspondente.

Padrões correspondentes a entidades

Os objetos PatternMatchingEntity representam uma entidade individual e suas respectivas propriedades que dizem ao IntentRecognizer como tratá-la. Todos os objetos PatternMatchingEntity precisam ter uma ID que esteja presente em uma frase, caso contrário, não há correspondência.

Restrições de nomenclatura da entidade

Os nomes de entidade que contêm caracteres ':' atribuem uma função a uma entidade.

Tipos de entidades

Entidade Any

A entidade "Any" corresponderá a qualquer texto que aparecer nesse slot, independentemente do texto contido. Se considerarmos nosso exemplo anterior usando o padrão "leve-me ao andar {floorName}", o usuário poderá dizer algo como:

"Leve-me até o andar de estacionamento 2

Nesse caso, a entidade "floorName" corresponderia a "estacionamento 2".

Essas entidades são correspondências lentas que tentarão obter uma correspondência com o menor número possível de palavras, a menos que elas apareçam no início ou no final de um enunciado. Considere o seguinte padrão:

"Leve-me para o andar {floorName1} {floorName2}"

Nesse caso, o enunciado "leve-me ao andar do estacionamento 2" corresponderia e retornaria floorName1 = "estacionamento" e floorName2 = "2".

Pode ser complicado lidar com texto extra capturado. Talvez o usuário tenha continuado falando e o enunciado tenha sido capturado além do comando. "Leve-me para o andar do estacionamento 2 Sim Janice eu ouvi dizer vamos". Nesse caso, o floorName1 estaria correto, mas floorName2 seria = "2 Sim Janice que ouvi dizer vamos". É importante estar ciente da maneira como será feita a correspondência das entidades e ajustar o cenário adequadamente. O tipo de entidade Any é o tipo mais básico e menos preciso de correspondência feita.

Entidade de lista

A entidade "List" é composta por uma lista de frases que orientam o mecanismo sobre como fazer a correspondência. A entidade "List" tem dois modos. "Strict" e "Fuzzy".

Vamos supor que temos uma lista de andares para nosso elevador. Como estamos lidando com fala, também adicionamos entradas usando o formato lexical.

"1", "2", "3", "lobby", "andar térreo", "um", "dois", "três"

Quando uma entidade do tipo "List" ID é usada no modo "Strict", o mecanismo só encontra uma correspondência quando o texto no slot aparece na lista.

Haverá correspondência para "leve-me para andar um".

Não haverá correspondência para "leve-me ao andar 5".

É importante observar que não haverá correspondência da intenção inteira, não apenas da entidade.

Quando uma entidade do tipo "List" e está no modo "Fuzzy", o mecanismo ainda encontra a correspondência da intenção e retorna o texto que apareceu no slot no enunciado, mesmo que ele não esteja na lista. Essa correspondência é útil nos bastidores para ajudar a aprimorar o reconhecimento de fala.

Aviso

As entidades de lista difusa são implementadas, mas não integradas à parte de reconhecimento de fala. Portanto, elas corresponderão às entidades, mas não melhorarão o reconhecimento de fala.

Entidade de inteiro predefinida

A entidade "PrebuiltInteger" é usada quando você espera obter um inteiro no slot. Ela não corresponderá à intenção se um inteiro não puder ser encontrado. O valor retornado é uma representação de cadeia de caracteres do número.

Exemplos de valores retornados e de correspondência válidos

"Dois mil cento e cinquenta e cinco"- > "2155"

"primeiro" -> "1"

"um" -> "1"

"quatro zero sete um"- > "4071"

Se houver texto que não seja reconhecível como um número, não haverá correspondência entre a entidade e a intenção.

Exemplos de uma correspondência inválida

"o terceiro"

"primeiro andar, eu acho"

"segundo mais três"

"trinta e três, por aí"

Considere nosso exemplo de elevador.

"Leve-me para o andar {floorName}"

Se "floorName" for uma entidade de inteiro predefinida, qualquer texto dentro do slot deverá representar um inteiro. Nesse caso, um número de andar teria uma boa correspondência, mas um andar com um nome como "lobby" não teria.

Agrupamento de itens obrigatórios e opcionais

No padrão, é permitido incluir palavras ou entidades que "podem" estar presentes no enunciado ou não. Isso é especialmente útil para determinantes como "the", "a" ou "an". Isso não tem nenhuma diferença funcional da hard coding de várias combinações, mas pode ajudar a reduzir o número de padrões necessários. Indique itens opcionais com "[" e "]". Indique os itens obrigatórios com "(" e ")". Você pode incluir vários itens no mesmo grupo separando-os com um caractere "|".

Para ver como isso reduziria o número de padrões necessários, considere o seguinte conjunto:

"Leve-me para {floorName}"

"Leve-me o {floorName}"

"Leve {floorName}"

"Leve-me para {floorName}, por favor"

"Leve-me o {floorName}, por favor"

"Leve-me {floorName}, por favor"

"Traga-me {floorName}, por favor"

"Traga-me para {floorName}, por favor"

Todos eles podem ser reduzidos a um único padrão com itens de agrupamento e opcionais. Primeiro, é possível agrupar "para" e "o" como palavras opcionais, por exemplo: "[para | o]", e, segundo, podemos tornar o "por favor" opcional também. Por fim, podemos agrupar "traga" e "leve" conforme necessário.

"(Traga | Leve)-me [para | o] {floorName} [por favor]"

Também é possível incluir entidades opcionais. Imagine que haja vários níveis de estacionamento e você deseje associar a palavra antes de {floorName}. Você faria isso com um padrão como este:

"Leve-me a [{floorType}] {floorName}"

Os opcionais também serão muito úteis se você estiver usando o reconhecimento de palavra-chave e uma função push-to-talk. Isso significa que, às vezes, a palavra-chave estará presente e às vezes não estará. Supondo que sua palavra-chave fosse "computador", seu padrão seria semelhante a este.

"[Computador] Leve-me para {floorName}"

Observação

Embora seja útil usar itens opcionais, isso aumenta as chances de colisões de padrão. É neste ponto que dois padrões podem corresponder à mesma frase falada. Se isso ocorrer, algumas vezes o problema pode ser resolvido separando os itens opcionais em padrões separados.

Funções de entidade

Dentro do padrão, pode haver um cenário em que você deseje usar a mesma entidade várias vezes. Considere o cenário de reservar um voo de uma cidade para outra. Nesse caso, a lista de cidades é a mesma, mas é necessário saber de qual cidade o usuário é proveniente e qual cidade é o destino. Para fazer isso, você pode usar uma função atribuída a uma entidade usando um ':'.

"Reservar um voo de {city:from} para {city:destination}"

Considerando um padrão como esse, haverá duas entidades no resultado rotuladas como "city:from" e "city:destination", mas ambas estarão referenciando a entidade "cidade" para fins de correspondência.

Prioridade de correspondência da intenção

Às vezes, vários padrões correspondem ao mesmo enunciado. Nesse caso, o mecanismo dará prioridade aos padrões da seguinte maneira.

  1. Frases exatas.
  2. Padrões com mais entidades.
  3. Padrões com entidades Integer.
  4. Padrões com entidades List.
  5. Padrões com entidades Any.
  6. Padrões com mais bytes correspondentes.
    • Exemplo: o padrão "selecione {algo} à esquerda" será uma prioridade mais alta do que "selecione {algo}".

Próximas etapas