Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per le applicazioni IVR (Interactive Voice Response) e le attività di riconoscimento vocale più ampie per le applicazioni vocali, un elenco vincolato o un riconoscimento basato su "grammatica" offre vantaggi significativi. Supera notevolmente il tradizionale riconoscimento vocale basato su semantica usato nei moderni motori di intelligenza artificiale di riconoscimento vocale (STT) in termini di accuratezza, prestazioni e costi. Questo aumento delle prestazioni è dovuto al fatto che il riconoscimento basato sulla grammatica può vincolare l'output di riconoscimento a un set predefinito di regole, che rafforza l'accuratezza.
Le grammatiche sono conformi alla specifica SRGS (Speech Recognition Grammar Specification), come descritto in dettaglio nella specifica W3C. Quando una richiesta entra nel motore, converte l'audio parlato ("espressioni") in testo. Il motore confronta quindi il testo riconosciuto con la grammatica e tutti gli artefatti associati, ad esempio i lessici di pronuncia. Questo processo fornisce una trascrizione letterale o un'interpretazione che la grammatica vincola alle informazioni fornite all'interno della grammatica. Una logica aggiuntiva, ad esempio ECMAScript integrata nella grammatica, può perfezionare ulteriormente l'interpretazione.
Il riconoscimento vocale vincolato è ideale per:
Riconoscimento di elenchi vincolati (indirizzi, ticker azionari, codici postali, nomi di reparto e così via).
Riconoscimento alfanumerico delle stringhe (numeri di rilevamento, numeri account, codici di conferma e così via).
- Inclusione di vincoli posizionali. Ad esempio, i primi due caratteri dell'ID membro iniziano con AN, FD, NT. Un altro esempio di vincolo posizionale è un numero di identificazione del veicolo.
Riconoscimento alfanumerico o numerico con checksum o vincoli simili. Ad esempio, i numeri di carta di credito in cui è presente un checksum Luhn.
Applicazioni di dialogo dirette in cui devono essere pronunciate parole o frasi specifiche.
Creazione di grammatiche vocali
Scrivere grammatiche vocali vincolate usando Grammar XML (GrXML). Come qualsiasi documento XML, un file di grammatica deve iniziare con un'intestazione che specifica determinate caratteristiche della grammatica. Il corpo principale di un file di grammatica è costituito da regole grammaticali che definiscono le parole pronunciate riconosciute dalla grammatica e i valori variabili corrispondenti restituiti dagli elementi riconosciuti.
Intestazione del file di grammatica
L'intestazione in un file di grammatica è costituita dalla dichiarazione XML e dall'elemento <grammar> che specifica la lingua del documento, la radice e lo spazio dei nomi.
<?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">
Dichiarazione XML e tipo di codifica
Il primo elemento nell'intestazione è sempre la dichiarazione XML. Questo elemento specifica la versione di XML utilizzata nel documento (1.0 o 1.1). Specifica anche la codifica applicabile al documento, che determina le lingue che possono o non possono essere usate.
La versione e la codifica sono attributi obbligatori. Usa qualsiasi codifica appropriata per le preferenze, ad esempio la configurazione del computer, l'applicazione per l'elaborazione del testo e così via. Al motore di riconoscimento vocale vincolato non importa la codifica usata.
Nella tabella seguente è riportato un breve elenco di codifiche tipiche per diversi linguaggi:
| Encoding | Description |
|---|---|
| ISO-8859-1 | Latin-1. Utilizzato per inglese, francese, tedesco e spagnolo. |
| UTF-8 | Usato per tutte le lingue. |
| UTF-16 | Usato per tutte le lingue. |
| Big5 | Utilizzato per cantonese (ce-HK). |
| GB | Utilizzato per mandarino (zh-TW). |
| Shift-JIS e EUC-JP | Utilizzato per giapponese. |
| KSC e EUC-KR | Utilizzato per coreano. |
La maggior parte delle lingue può essere rappresentata in più di una codifica.
In fase di esecuzione, il sistema converte automaticamente la codifica dei file grammaticali in formato UTF-16 usando le librerie International Components for Unicode (ICU). Il sito Web ufficiale del consorzio Unicode è http://site.icu-project.org/.
Lingua, spazio dei nomi e formato di tag semantico
Il secondo elemento nell'intestazione è l'elemento <grammar> , i cui attributi specificano le informazioni predefinite per il documento. Gli attributi obbligatori sono:
xml:lang: specifica l'identificatore del linguaggio umano predefinito da usare, come definito nel documento RFC (Request For Comments) RFC 3066 nel sito Web IETF.Microsoft supporta un'ampia gamma di lingue. Il linguaggio scelto deve essere compatibile con il tipo di codifica grammaticale.
version: specifica la versione di GrXML (1.0).xmlns: designa lo spazio dei nomi grammaticale. Per le grammatiche GrXML, questa designazione è semprehttp://www.w3.org./2001/06/grammar.tag-format: definisce il formato usato per gli script all'interno<tag>degli elementi nel corpo principale della grammatica per assegnare valori.
Il formato del tag deve essere una di queste stringhe:
| Value | Formato dei tag semantici |
|---|---|
| swi-semantics/1.0 | Sintassi del tag (usata se tag-format non è definito). Questa sintassi è nota come swi syntax (per SpeechWorks International). |
| semantics/1.0 | Sintassi del tag di script W3C. |
| semantics/1.0-literals | Sintassi del tag dei valori letterali stringa W3C. |
Note
In senso stretto, l'attributo tag-format non è obbligatorio se la grammatica non usa l'elemento
<tag>. Tuttavia, la maggior parte delle grammatiche usa<tag>per assegnare valori, pertanto Microsoft consiglia vivamente di specificare il formato di tag.Puntare sempre gli attributi e gli elementi GrXML, ad esempio
xmlns, al namespace<http://voicexml.site.com/grammar>.
Dictionaries
In alcuni casi, la grammatica potrebbe dover includere parole o frasi che il motore di riconoscimento vocale vincolato non può analizzare normalmente. Ad esempio, un nome potrebbe essere detto e digitato in modo diverso, come la città "Worcester", che potrebbe essere pronunciata "wih-sta".
Usare l'elemento <lexicon> per importare dizionari che mappano le espressioni al testo corrispondente nel file di grammatica.
Corpo principale del file di grammatica
La sezione principale di un file di grammatica contiene le regole che definiscono effettivamente la grammatica: le parole pronunciate e le frasi da riconoscere e i valori da restituire all'applicazione principale per ogni elemento riconosciuto.
Regole
Il corpo principale di un file di grammatica è costituito da regole definite usando l'elemento GrXML <rule> . Ogni regola ha un identificatore univoco. Ogni regola elenca le parole e le frasi riconosciute come testo all'interno di un elemento <item> o di un elemento <token>. Questi elementi potrebbero essere annidati all'interno di altri elementi GrXML:
L'elemento
<one-of>presenta un elenco di alternative accettabili e per attivare la regola è necessaria una sola alternativa.L'elemento
<ruleref>fa riferimento a un'altra regola, come a una subroutine.L'elemento
<tag>specifica le azioni da eseguire o i valori da assegnare a una variabile. Può includere uno script scritto nel linguaggio in formato tag.
Quando l'utente pronuncia una parola o una frase che la regola copre, la regola esegue le azioni, le assegnazioni di valori o altro codice definito per tale espressione.
Regola radice
La regola radice è la prima regola nel file, a meno che l'intestazione non specifichi diversamente. Funge da regola di livello operativo predefinita. Quando viene fatto riferimento alla grammatica senza specificare la regola da cercare, questa regola radice è la prima a essere consultata.
Ambito della regola
Assegnare ogni regola all'interno del corpo principale di un file di grammatica in qualità di ambito. L'ambito indica se è possibile fare riferimento alla regola indipendentemente dai file esterni (pubblici) o solo da un'altra regola all'interno della stessa grammatica (privata). Tutte le regole sono private per impostazione predefinita, a meno che non vengano definite come pubbliche.
Quando la regola è pubblica, è possibile usare il relativo attributo ID come ancoraggio per i riferimenti di altri documenti. Considera ad esempio la sintassi seguente:
<grammar src="../grammars/universals.grxml#YesNo"/>
Quando si richiama questo elemento grammaticale, si riferisce direttamente alla regola "YesNo" pubblica all'interno del file universals.grxml , indipendentemente dal fatto che si tratti della regola radice del file.
Note
La regola radice di un file di grammatica può essere privata. Non è possibile fare riferimento a questa regola in modo indipendente. Tuttavia, viene usato per impostazione predefinita come punto di ingresso per la grammatica quando si richiama il file grammaticale stesso.
Estrarre significato e restituire risultati
Note
La SWI_meaning chiave deve contenere le informazioni restituite all'agente abilitato per la voce che opera all'interno di Copilot Studio.
La chiave SWI_meaning contiene il significato semantico di una frase riconosciuta. È possibile impostarla solo per la regola radice. Questa chiave è inclusa nell'elenco swirec_extra_nbest_keys per impostazione predefinita, quindi viene visualizzata nel risultato XML se la grammatica imposta questa chiave.
SWI_meaning filtra le risposte ridondanti in modo che le voci nell'elenco n-best siano veramente le migliori. L'eliminazione della ridondanza migliora i punteggi di attendibilità e l'utilità dell'elenco n-best.
Quando una frase riconosciuta è simile a un'altra nella grammatica, spesso ha un punteggio di attendibilità basso, perché il motore di riconoscimento vocale vincolato non è sicuro della frase corretta. Quando si usa SWI_meaning correttamente, il motore di riconoscimento vocale vincolato raggruppa le interpretazioni ridondanti nello stesso slot nell'elenco n-best. Nell'esempio seguente, SWI_meaning è impostato su "indirizza le chiamate a casa" se la frase riconosciuta è "indirizza le mie chiamate a casa" o "per favore indirizza le mie chiamate a casa".
Senza SWI_meaning, la grammatica potrebbe produrre l'elenco n-best seguente:
| N | Testo |
|---|---|
| 1 | indirizza le mie chiamate al telefono della mia auto |
| 2 | indirizza le chiamate alla mia auto |
| 3 | invia le chiamate a casa |
| 4 | per favore invia le mie chiamate all'ufficio |
| 5 | invia le mie chiamate all'ufficio |
| 6 | indirizza le chiamate a casa mia |
Quando si usa SWI_meaning, il motore di riconoscimento vocale vincolato dispone l'elenco n-best in base al significato dell'interpretazione anziché alla frase esatta pronunciata, in modo che le voci nell'elenco n-best siano veramente distinte:
| N | Testo | Chiave SWI_meaning di primo livello |
|---|---|---|
| 1 | indirizza le mie chiamate al telefono della mia auto | indirizza le chiamate all'auto |
| indirizza le chiamate alla mia auto | indirizza le chiamate all'auto | |
| 2 | invia le chiamate a casa | indirizza le chiamate a casa |
| indirizza le chiamate a casa mia | indirizza le chiamate a casa | |
| 3 | per favore invia le mie chiamate all'ufficio | indirizza le chiamate al lavoro |
| invia le mie chiamate all'ufficio | indirizza le chiamate al lavoro |
Il motore di riconoscimento vocale vincolato imposta SWI_meaning automaticamente, anche se non viene impostato in modo esplicito in uno script all'interno della grammatica.
Se non si definisce SWI_meaning in modo esplicito nella radice, viene costruito concatenando tutte le chiavi definite nella radice e i relativi valori. Tuttavia, questa costruzione non si applica ad alcuna chiave che inizia con SWI_, ad esempio SWI_literal. Le coppie chiave/valore vengono disposte in ordine alfabetico. Il ragionamento è che, per quanto riguarda l'applicazione, il set di chiavi restituite costituisce il significato della frase.
Se non sono presenti chiavi, i risultati dipendono dall'utilizzo della semantica SISR o SWI. Con SISR, la chiave SWI_meaning non è impostata se non sono presenti chiavi. Al contrario, con la semantica SWI, SWI_meaning è impostata come segue:
{SWI_literal:<literal>}
Se SWI_meaning è un oggetto , viene convertito in una rappresentazione di stringa.
Anche se l'applicazione può accedere a SWI_meaning, spesso usa le altre coppie chiave/valore definite in modo specifico.
Ospitare grammatiche vocali tramite Archiviazione di Azure
Copilot Studio supporta il riconoscimento vocale vincolato tramite grammatiche vocali. Tuttavia, non supporta direttamente la creazione, il test o l'hosting di queste grammatiche. Per ospitare grammatiche, usare Archiviazione di Microsoft Azure per creare una connessione attendibile e sicura tra l'agente abilitato per la voce e l'archiviazione grammaticale.
Configurare un account di archiviazione di Azure
Creare un account di archiviazione di Azure. Assicurarsi che la sottoscrizione, il gruppo di risorse, l'area e il nome della risorsa del nuovo account di archiviazione seguano i criteri dell'organizzazione. Utilizzare le seguenti impostazioni:
Per Servizio primario, selezionare Azure Blob Storage o Azure Data Lake Storage Gen 2.
Selezionare Premium per Prestazioni.
Per altre informazioni, vedere Creare un account di archiviazione di Azure.
Configurare il contenitore di archiviazione
Usare il sito Web statico come contenitore di archiviazione per i file di grammatica caricati. Il contenitore di archiviazione fornisce l'endpoint primario e l'endpoint secondario per il sito Web.
Dopo aver caricato il file grammaticale, selezionare il file dalla directory per visualizzare le proprietà e i dettagli del file. Salvare l'URL per il file, che deve essere nel formato seguente:
https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}
Per altre informazioni, vedere Creare un contenitore.
Autenticare il motore di riconoscimento vocale vincolato
Affinché il riconoscimento vocale vincolato funzioni all'interno di un agente abilitato per la voce, il sistema deve eseguire l'autenticazione usando l'account di archiviazione creato nel passaggio precedente come percorso attendibile. Questa autenticazione richiede il ruolo di Lettore di dati blob di archiviazione.
Per altre informazioni, vedere Assegnare ruoli di Azure usando il portale di Azure.
Accedere al portale di Azure, aprire una sessione di Azure Cloud Shell ed eseguire il comando seguente per creare un'entità servizio del motore di riconoscimento vocale vincolata nel tenant.
az ad sp create --id e0e7bef0-777c-40ef-86aa-79d83ba643c7
Note
Quando si cerca il principale del servizio, si vede che contiene "NRaaS" nel nome.
Usare il riconoscimento vocale vincolato in Copilot Studio
Creare un'entità esterna
È possibile considerare un'entità all'interno di Copilot Studio come un'unità di informazioni che rappresenta un determinato tipo di soggetto reale. Ad esempio, un numero di telefono, un codice postale, una città o il nome di una persona. Usando le entità, un agente può riconoscere le informazioni pertinenti da un input dell'utente e salvarle per usarle in un secondo momento. In questo scenario, una grammatica vocale vincolata esegue il riconoscimento.
Usare entità esterne per fare riferimento alle grammatiche vocali. Per creare un'entità esterna, aprire l'agente abilitato per la voce e passare a Impostazioni>entità>Aggiungi un'entità> esterna.
Note
Quando si costruisce l'entità, usare una variabile globale o di sistema e non una variabile di ambiente . Se è necessario usare una variabile di ambiente, creare una variabile globale assegnargli il valore della variabile di ambiente. Questa variabile globale può quindi essere usata nell'ULR grammaticale per riferimento.
Inserire i seguenti dati:
Nome: URL di grammatica nel formato
https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=trueNote
Nell'inserimento dell'URL viene rilevata la distinzione tra maiuscole e minuscole.
La modalità di riconoscimento predefinita è Solo riconoscimento vocale. Per configurazioni grammaticali alternative, vedere la tabella seguente:
| Type | Parametro query | Example |
|---|---|---|
| Solo riconoscimento vocale | Nessuno | 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 |
| Riconoscimento vocale o DTMF (Stesso file di grammatica) |
&mode=speechdtmf |
https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true&mode=speechdtmf |
| Riconoscimento vocale o DTMF (file di grammatica diversi ) | &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
Gli URL possono includere anche nomi di variabili dirette all'interno di Copilot Studio.
Si supponga, ad esempio, che siano presenti due set identici di grammatiche, uno per l'inglese e uno per lo spagnolo e ognuno viene archiviato in una sottodirectory diversa. L'agente multilingue deve essere in grado di usare le grammatiche inglesi quando si converrà in inglese e in modo analogo in spagnolo. In questo caso, l'URL grammaticale sarà: {Env.BaseURL}/common/**{System.User.Language}**/{grammarFileName}?
Dove System.User.Language è en_US o es_US e cambia quando la lingua viene modificata all'interno del tuo agente.
Descrizione: una semplice descrizione della grammatica, a cui fa riferimento il selettore nell'area di disegno come nome dell'entità. Ad esempio, "numero di carta di credito".
Tipo di dati: scegli il tipo di dati Record e definisci lo schema dei tag previsti in risposta. Ad esempio, se la grammatica restituisce
SWI_meaninge città, lo schema Record è simile al seguente:kind: Record properties: city: String SWI_meaning: String
Dopo aver selezionato Salva, l'entità viene visualizzata nell'elenco. Nel canvas di creazione, vai a un nodo Domanda. Proprio come per le entità tradizionali, seleziona l'entità esterna (associata a una grammatica) che l'agente deve riconoscere in seguito alla risposta dell'utente alla richiesta.
Comportamento di runtime
Quando viene eseguito un agente abilitato per la voce e questo rileva la logica che usa una grammatica esterna, quest'ultimo raggiunge l'account di archiviazione di Azure e recupera la grammatica per l'interpretazione. L'agente corrisponde quindi ciò che l'utente ha detto rispetto al vincolo applicato all'interno della grammatica. Se una corrispondenza ha esito positivo, il sistema restituisce la risposta nella variabile Record , in base allo schema definito nell'entità esterna.
Logica del canvas
Il risultato salvato nella variabile del nodo è sempre un tipo record come definito nello schema dell'entità esterna. Gli autori possono usare questa variabile Record per accedere alle chiavi definite nello schema, ad esempio variableName.SWI_meaning o variableName.city tramite la notazione punto.
Risoluzione dei problemi
Codici errore
| Errore | Definizione |
|---|---|
| 400 | Richiesta non valida |
| 401 | Non autenticato |
| 403 | Vietato |
| 404 | Nessun riconoscimento vocale |
| 408 | Nessun timeout di input |
| 418 | Timeout della sessione |
| 419 | Nessuna risorsa attiva: manca una grammatica |
| 500 | Errore interno: segnala a Microsoft in un ticket di supporto |
SWI_Literal
Per molte grammatiche che funzionano con il motore di riconoscimento vocale vincolato, la SWI_Literal funzionalità restituisce l'istruzione letterale pronunciata dall'utente, non il risultato interpretato. Registrare questo valore come uno degli output in Copilot Studio per facilitare il debug.
Limitazioni note
La soluzione presenta le limitazioni seguenti:
- Dimensione massima del singolo file di grammatica, attualmente limitato a 100 MB.
- Il passaggio di variabili non è supportato.
- L'account di archiviazione deve trovarsi nello stesso tenant dell'agente.
- La dimensione dell'URL non può superare i 500 caratteri.
- Sono consentiti solo gli endpoint dell'account di archiviazione di Azure.
- Le grammatiche secondarie possono essere ospitate solo nello stesso account di archiviazione (usando lo stesso FPA per l'autorizzazione).
- Parser XML sicuro (ovvero DTD non è consentito e deve essere convalidato rispetto allo schema SRGS/SISR).
- Solo il formato di output NLSML è supportato internamente.
- Il parametro legacy
swirec_simple_result_keynon ha alcun effetto e vengono restituiti tutti i tag.
Legale
Il servizio Microsoft Dynamics elabora sistemi di riconoscimento vocale vincolati. Utilizzando questa esperienza, accetti le condizioni di Dynamics.