¿Qué es la coincidencia de patrones?

La coincidencia de patrones se puede personalizar para agrupar intenciones de patrón y entidades dentro de PatternMatchingModel. Mediante esta agrupación, es posible acceder a tipos de entidad más avanzados que ayudan a que el reconocimiento de intenciones sea más preciso.

Para ver las configuraciones regionales admitidas, consulte aquí.

Patrones frente a frases exactas

Hay dos tipos de cadenas que se usan en el buscador de coincidencia de patrones: "frases exactas" y "patrones". Es importante comprender las diferencias.

Las frases exactas son cadenas de las palabras exactas para las que desea buscar una coincidencia. Por ejemplo:

"Take me to floor seven".

Un patrón es una frase que contiene una entidad marcada. Las entidades se marcan con "{}" para definir el lugar dentro del patrón. El texto incluido en "{}" hace referencia al identificador de entidad. Teniendo en cuenta el ejemplo anterior, quizás desee extraer el nombre de la planta en una entidad denominada "floorName". Para ello, tendría que usar un patrón similar al siguiente:

"Take me to floor {floorName}"

Esquema de PatternMatchingModel

PatternMatchingModel contiene un identificador con el que hacer referencia al modelo, una lista de objetos PatternMatchingIntent y una lista de objetos PatternMatchingEntity.

Intenciones con coincidencia de patrones

Los objetos PatternMatchingIntent representan una colección de frases que se usan para evaluar la voz o el texto en IntentRecognizer. Si las frases coinciden, el IntentRecognitionResult devuelto utiliza el id. del PatternMatchingIntent que coincidió.

Entidades con coincidencia de patrones

Los objetos PatternMatchingEntity representan una referencia de entidad individual y sus propiedades correspondientes que indican a IntentRecognizer cómo tratarla. Todos los objetos PatternMatchingEntity deben tener un id. que esté presente en una frase o, de lo contrario, no habrá coincidencias.

Restricciones de nomenclatura de entidades

Los nombres de entidad que contienen caracteres ":" asignan un rol a una entidad.

Tipos de entidades

Entidad Any

La entidad "Any" coincide con cualquier texto que aparezca en esa ranura, independientemente del texto que contenga. Si se tiene en cuenta el ejemplo anterior con el patrón "Take me to floor {floorName}", el usuario podría decir algo parecido a lo siguiente:

"Take me to the floor parking 2"

En este caso, la entidad "floorName" coincidiría con "parking 2".

Se trata de coincidencias aproximadas que intentan coincidir con el menor número de palabras posible, a menos que aparezcan al principio o al final de una expresión. Observe el siguiente patrón:

"Take me to the floor {floorName1} {floorName2}"

En este caso, la expresión "Take me to the floor parking 2" coincidiría con floorName1 = "parking" y floorName2 = "2".

Puede resultar complicado controlar texto capturado adicional. Quizás el usuario no paraba de hablar y la expresión capturó más información que el comando. "Take me to floor parking 2 yes Janice I heard about that let's". En este caso, floorName1 sería correcto, pero floorName2 equivaldría a "2 yes Janice I heard about that let's". Es importante tener en cuenta la forma en que las entidades coinciden y ajustar el escenario adecuadamente. El tipo de entidad Any es el tipo de correspondencia más básico y menos preciso que se realiza.

Entidad de lista

La entidad "List" se compone de una lista de frases que guían al motor sobre cómo hacerlas coincidir. La entidad "Lista" tiene dos modos: "Estricto" y "Aproximado".

Supongamos que tenemos una lista de plantas para el ascensor. Puesto que estamos trabajando con la voz, también agregamos entradas usando el formato léxico.

"1", "2", "3", "lobby", "ground floor", "one", "two", "three"

Cuando una entidad con un identificador es del tipo "List" y está en modo "Estricto", el motor solo encontrará coincidencias si el texto de la ranura aparece en la lista.

"take me to floor one" coincidirá.

"Take me to floor 5" no coincidirá.

Es importante tener en cuenta que no coincidirá toda la intención, no solo la entidad.

Cuando una entidad del tipo "List" está en modo "Aproximado", el motor encontrará coincidencias con la intención y devolverá el texto que aparecía en la ranura de la expresión, aunque no esté en la lista. Esta coincidencia es útil en otro plano para ayudar a mejorar el reconocimiento de voz.

Advertencia

Las entidades de lista aproximada se implementan, pero no se integran en la parte de reconocimiento de voz. Por lo tanto, coincidirán con las entidades, pero no mejorarán el reconocimiento de voz.

Entidad de entero precompilada

La entidad "PrebuiltInteger" se usa cuando se espera obtener un entero en ese espacio. No coincidirá con la intención si no se encuentra un entero. El valor devuelto es una representación de cadena del número.

Ejemplos de una coincidencia válida y valores devueltos

"Two thousand one hundred and fifty-five" -> "2155"

"first" -> "1"

"a" -> "1"

"four oh seven one" -> "4071"

Si hay texto que no se reconoce como un número, la entidad y la intención no coincidirán.

Ejemplos de una coincidencia no válida

"the third"

"first floor I think"

"second plus three"

"thirty-three and anyways"

Tenga en cuenta el ejemplo del ascensor.

"Take me to floor {floorName}"

Si "floorName" es una entidad de entero precompilada, lo esperado es que cualquier texto que haya en esa ranura represente un entero. Aquí, un número de planta coincidiría bien, pero una planta con el nombre "lobby" no lo haría.

Agrupación de elementos obligatorios y opcionales

En el patrón se permite incluir palabras o entidades que "podrían" estar presentes en la expresión. Esto es especialmente útil para los determinadores como "the", "a" o "an". Esto no tiene ninguna diferencia funcional con respecto a la codificación de muchas combinaciones, pero puede ayudar a reducir el número de patrones necesarios. Indique elementos opcionales con "[" y "]". Indique los elementos necesarios con "(" y ")". Puede incluir varios elementos en el mismo grupo si los separa con un carácter "|".

Para ver cómo reduciría esto el número de patrones necesarios, observe el siguiente conjunto:

"Take me to {floorName}"

"Take me the {floorName}"

"Take me {floorName}"

"Take me to {floorName} please"

"Take me the {floorName} please"

"Take me {floorName} please"

"Bring me {floorName} please"

"Bring me to {floorName} please"

Todos ellos se pueden reducir a un único patrón con la agrupación y los elementos opcionales. En primer lugar, es posible agrupar "to" y "the" juntos como palabras opcionales como las siguientes: "[to | the]", y también podemos hacer que "please" sea opcional. Por último, podemos agrupar "bring" y "take" según sea necesario.

"(Bring | Take) [to | the] {floorName} [please]"

También es posible incluir entidades opcionales. Imagine que hay varios niveles de aparcamiento y desea coincidir con la palabra antes de {floorName}. Para ello, tendría que usar un patrón similar al siguiente:

"Take me to [{floorType}] {floorName}"

Las opcionales también son útiles si usa el reconocimiento de palabras clave y la función pulsar para hablar. Esto significa que a veces la palabra clave está presente y, a veces, no. Suponiendo que la palabra clave era "computer", el patrón tendría un aspecto similar al siguiente.

"[Computer] Take me to {floorName}"

Nota:

Aunque resulta útil usar elementos opcionales, aumenta las posibilidades de colisiones de patrones. Aquí es donde dos patrones pueden coincidir con la misma frase hablada. Si esto ocurre, a veces se puede resolver separando los elementos opcionales en patrones independientes.

Roles de entidad

Dentro del patrón, puede haber un escenario en el que quiera usar la misma entidad varias veces. Considere el escenario de reserva de un vuelo de una ciudad a otra. En este caso, la lista de ciudades es la misma, pero es necesario saber de qué ciudad viene el usuario y a qué ciudad va. Para ello, puede usar un rol asignado a una entidad mediante ":".

"Book a flight from {city:from} to {city:destination}"

Dado un patrón como este, habrá dos entidades en el resultado etiquetadas como "city:from" y "city:destination", pero ambas harán referencia a la entidad "city" con fines de coincidencia.

Prioridad de coincidencia de intenciones

A veces, varios patrones coinciden con la misma expresión. En este caso, el motor da prioridad a los patrones de la siguiente manera.

  1. Frases exactas.
  2. Patrones con más entidades.
  3. Patrones con entidades de entero.
  4. Patrones con entidades de lista.
  5. Patrones con entidades Any.
  6. Patrones con más bytes coincidentes.
    • Ejemplo: El patrón "seleccionar {algo} a la izquierda" tendrá mayor prioridad que "seleccionar {algo}".

Pasos siguientes