Che cosa sono i criteri di ricerca?

I criteri di ricerca possono essere personalizzati per raggruppare finalità ed entità di criteri all'interno di un PatternMatchingModel. Usando tale raggruppamento, è possibile accedere a tipi di entità più avanzati che consentono di rendere più preciso il riconoscimento delle finalità.

Per le impostazioni locali supportate, vedere qui.

Criteri e frasi esatte

Esistono due tipi di stringhe usate nel matcher di criteri: "frasi esatte" e "criteri". È importante comprendere le differenze.

Le frasi esatte sono stringhe delle parole esatte che si desidera trovare. Ad esempio:

"Portami al settimo piano".

Un criterio è una frase che contiene un'entità contrassegnata. Le entità sono contrassegnate con "{}", a definire la posizione all'interno del criterio, e il testo all'interno di "{}" fa riferimento all'ID entità. Stante l'esempio precedente, è possibile estrarre il nome del piano in un'entità denominata "floorName". A tale scopo, usare un criterio simile a questo:

"Portami al piano {floorName}"

Struttura di un PatternMatchingModel

PatternMatchingModel contiene un ID per fare riferimento a tale modello, un elenco di oggetti PatternMatchingIntent e un elenco di oggetti PatternMatchingEntity.

Finalità dei criteri di ricerca

Gli oggetti PatternMatchingIntent rappresentano una raccolta di frasi utilizzate per valutare la voce o il testo in IntentRecognizer. Se le frasi corrispondono, in quel caso l’oggetto IntentRecognitionResult restituito avrà l'ID dell’oggetto PatternMatchingIntent corrispondente.

Entità di criteri di ricerca

Gli oggetti PatternMatchingEntity rappresentano un riferimento a una singola entità e le relative proprietà corrispondenti che indicano a IntentRecognizer come trattarla. Tutti gli oggetti PatternMatchingEntity devono avere un ID presente in una frase oppure non si troverà una corrispondenza.

Restrizioni di denominazione delle entità

I nomi di entità contenenti i caratteri ':' assegnano un ruolo a un'entità.

Tipi di entità

Entità Any

L'entità “Any” (“Qualsiasi”) corrisponde a qualsiasi testo visualizzato in tale slot indipendentemente dal testo in essa contenuto. Se si considera l'esempio precedente usando il modello "Portami al piano {floorName}", l'utente potrebbe pronunciare qualcosa di simile alla frase seguente:

"Portami al parcheggio al piano 2

In questo caso, l'entità "floorName" corrisponde all’espressione "parcheggio 2".

Queste entità sono corrispondenze differite che tentano di trovare la corrispondenza con il minor numero possibile di parole, a meno che non vengano visualizzate all'inizio o alla fine di un'espressione. Considerare il criterio riportato di seguito:

"Portami al piano {floorName1} {floorName2}"

In questo caso, l'espressione "Portami al parcheggio al piano 2" corrisponde e restituisce floorName1 = "parcheggio" e floorName2 = "2".

Può essere difficile gestire testo acquisito aggiuntivo. Probabilmente l'utente ha continuato a parlare e l'espressione ha acquisito un senso più ampio di quanto esplicitato nel comando. "Portami al parcheggio al piano 2 sì Janice ho sentito parlare di questo facciamolo". In questo caso il floorName1 sarebbe corretto, ma floorName2 sarebbe = "2 sì Janice ho sentito parlare di questo facciamolo". È importante tenere presente le modalità di corrispondenza delle entità e regolare lo scenario in modo appropriato. Il tipo di entità Any è il tipo di corrispondenza più semplice e meno preciso che viene eseguito.

Entità List

L'entità List è costituita da un elenco di frasi che guida il motore su come trovare la corrispondenza. L'entità "List" ha due modalità. "Strict" e "Fuzzy".

Si supponga di avere un elenco di piani serviti dal nostro ascensore. Poiché si ha a che fare con la lingua parlata, si aggiungono anche voci che usano il formato lessicale.

"1", "2", "3", "hall", "piano terra", "uno", "due", "tre"

Quando si utilizza un'entità con tipo ID “List” in modalità “Strict”, il motore trova una corrispondenza solo se il testo nello slot viene visualizzato nell'elenco.

"portami al piano uno" sarà presente come corrispondenza.

"portami al piano 5" no.

È importante notare che è l'intera finalità a non corrispondere, non solo l'entità.

Quando un'entità di tipo "List" viene usata in modalità "Fuzzy", il motore corrisponde comunque alla finalità e restituisce il testo visualizzato all’interno dello slot nell'espressione, anche se non si trova nell'elenco. Questa corrispondenza è utile in fase di impostazione al fine di migliorare il riconoscimento vocale.

Avviso

Le entità List fuzzy vengono implementate, ma non integrate nella parte di riconoscimento vocale. Di conseguenza, esse corrisponderanno alle entità, ma non miglioreranno il riconoscimento vocale.

Entità Integer predefinita

L'entità "PrebuiltInteger" viene usata quando si prevede di ottenere un numero intero in tale slot. Non corrisponderà alla finalità se non è possibile trovare un numero intero. Il valore restituito è una rappresentazione di stringa del numero.

Esempi di valori di corrispondenza e restituzione validi

"Duemilacentocinquantacinque" -> "2155"

"primo" -> "1"

"a" -> "1"

"quattro zero sette uno" -> "4071"

Se il testo non è riconoscibile come numero, l'entità e la finalità non corrispondono.

Esempi di corrispondenza non valida

"il terzo"

"penso primo piano"

"secondo più tre"

"trentatré e comunque"

Si consideri l’esempio con il nostro ascensore.

"Portami al piano {floorName}"

Se "floorName" è un'entità integer predefinita, si prevede che qualsiasi testo all'interno dello slot rappresenti un numero intero. Qui un piano identificato con un numero sarebbe una buona corrispondenza, ma non un piano che avesse un nome come "hall".

Raggruppamento di elementi obbligatori e facoltativi

Nel modello è consentito includere parole o entità che "potrebbero" essere presenti nell'espressione. Ciò è particolarmente utile per determinatori come "il/la", "un" o "una". Questo non ha alcuna differenza funzionale rispetto alla codifica delle numerose combinazioni, ma può aiutare a ridurre il numero di criteri necessari. Indicare gli elementi facoltativi con "[" e "]". Indicare gli elementi obbligatori con "(" e ")". È possibile includere più elementi nello stesso gruppo separandoli con il carattere '|'.

Per vedere come si ridurrebbe il numero di criteri necessari, considerare il set seguente:

"Portami a {floorName}"

"Portami al {floorName}"

"Portami {floorName}"

"Portami a {floorName} per favore"

"Portami al {floorName} per favore"

"Portami {floorName} per favore"

"Portami {floorName} per favore"

"Portami a {floorName} per favore"

Questi elementi possono essere tutti ridotti a un unico criterio con raggruppamento ed elementi facoltativi. In primo luogo, è possibile raggruppare "a" e "il" come parole facoltative così: "[a | il]" e, secondo, possiamo rendere facoltativo anche il "per favore". Infine, è possibile raggruppare "portare" (verso chi parla) e "portare" (lontano da chi parla) in base alle esigenze.

"(Portare | Portare) me [a | il] {floorName} [per favore]"

Inoltre, è possibile includere entità facoltative. Si supponga che ci siano più piani dove è possibile parcheggiare e che si voglia trovare una corrispondenza con la parola che precede {floorName}. È possibile farlo con un criterio simile al seguente:

"Portami a [{floorType}] {floorName}"

Gli elementi facoltativi sono utili anche se è possibile usare il riconoscimento delle parole chiave e una funzione push-to-talk. Ciò significa che a volte la parola chiave è presente e altre volte no. Supponendo che la parola chiave fosse "computer", il criterio avrebbe un aspetto simile a quello seguente.

"[Computer] Portami a {floorName}"

Nota

Anche se è utile utilizzare elementi facoltativi, ciò aumenta le probabilità che i criteri vengano a collidere. In questo caso due criteri possono corrispondere alla stessa frase pronunciata. Tale situazione può a volte essere risolta separando gli elementi facoltativi in criteri separati.

Ruoli entità

All'interno del criterio potrebbe esserci uno scenario in cui si vuole usare la stessa entità più volte. Si consideri lo scenario di prenotazione di un volo da una città a un'altra. In questo caso, l'elenco delle città è lo stesso, ma è necessario sapere da quale città proviene l'utente e quale città è la destinazione. A tale scopo, è possibile usare un ruolo assegnato a un'entità usando ":".

"Prenota un volo da {city:from} a {city:destination}"

Dato un modello simile a questo, nel risultato saranno presenti due entità con l'etichetta "city:from" e "city:destination", ma entrambe faranno riferimento all'entità "city" ai fini della corrispondenza.

Priorità corrispondenza finalità

A volte più criteri corrispondono alla stessa espressione. In questo caso, il motore assegna la priorità ai criteri come indicato di seguito.

  1. Frasi esatte.
  2. Criteri con più entità.
  3. Criteri con entità integer.
  4. Criteri con entità List.
  5. Criteri con entità Any.
  6. Criteri con più byte corrispondenti.
    • Esempio: il modello "seleziona {something} a sinistra" avrà una priorità più alta rispetto a "seleziona {something}".

Passaggi successivi