Come preparare i dati di training in formato testo per il riconoscimento vocale personalizzato

Il servizio Voce di Azure AI può essere visualizzato come due componenti: il riconoscimento vocale e la formattazione del testo. Il riconoscimento vocale trascrive l'audio in testo lessicale e quindi il testo lessicale viene trasformato in testo visualizzato.

Diagramma del flusso del riconoscimento vocale da testo lessicale a testo visualizzato.

Le seguenti impostazioni locali supportano la funzionalità formato testo visualizzato: da-DK, de-DE, en-AU, en-CA, en-GB, en-HK, en-IE, en-IN, en-NG, en-NZ, en-PH, en-SG, en-US, es-ES, es-MX, fi-FI, fr-CA, fr-FR, hi-IN, it-IT, ja-JP, ko-KR, nb-NO, nl-NL, pl-PL, pt-BR, pt-PT, sv-SE, tr-TR, zh-CN, zh-HK.

Formattazione predefinita del testo visualizzato

La pipeline di testo visualizzato è costituita da una sequenza di generatori di formati di visualizzazione. Ogni generatore corrisponde a un'attività di formato di visualizzazione, ad esempio ITN, maiuscole e filtro per contenuto volgare.

  • ITN (Inverse Text Normalization): per convertire il testo dei numeri parlati in formato visualizzato. Ad esempio: "I spend twenty dollars" -> "I spend $20"
  • Maiuscole: per visualizzare in maiuscolo i nomi di entità, gli acronimi o la prima lettera di una frase. Ad esempio: "she is from microsoft" -> "She is from Microsoft"
  • Filtro contenuto volgare: mascheramento o rimozione di parole volgari da una frase. Ad esempio, supponendo che "abcd" sia una parola volgare, la parola viene mascherata dalla maschera volgarità: "I never say abcd" -> "I never say ****"

Microsoft gestisce i generatori di base della pipeline di testo visualizzato per le attività di elaborazione per utilizzo generico. I generatori di base vengono visualizzati per impostazione predefinita quando si usa il servizio Voce. Per altre informazioni sulla formattazione predefinita, vedere Formato testo visualizzato.

Formattazione del testo di visualizzazione personalizzata

Oltre ai generatori di base gestiti da Microsoft, è possibile definire regole di formattazione del testo visualizzato personalizzate per personalizzare la pipeline di formattazione per scenari specifici. Le regole di formattazione del testo visualizzato personalizzate sono definite in un file di formattazione del testo visualizzato personalizzato.

L'ordine della pipeline di formattazione del testo visualizzato è illustrato in questo diagramma.

Diagramma dei generatori di formati di visualizzazione.

ITN personalizzato

La filosofia dell'ITN personalizzato basato su modelli implica che è possibile specificare l'output finale che si vuole visualizzare. Il servizio Voce individua il modo in cui le parole possono essere pronunciate ed esegue il mapping delle espressioni vocali stimate al formato di output specificato.

Un modello ITN personalizzato viene creato da un set di regole ITN. Una regola ITN è un'espressione regolare come una stringa di criteri, che descrive:

  • Un modello di corrispondenza della stringa di input
  • Il formato desiderato della stringa di output

Le regole ITN predefinite fornite da Microsoft vengono applicate per prime. L'output del modello ITN predefinito viene usato come input del modello ITN personalizzato. L'algoritmo corrispondente all'interno del modello ITN personalizzato non fa distinzione tra maiuscole e minuscole.

Esistono quattro categorie di criteri di ricerca con regole ITN personalizzate.

Modelli con valori letterali

Ad esempio, uno sviluppatore potrebbe avere un elemento (come un prodotto) denominato con il formato alfanumerico JO:500. Il servizio Voce capisce che gli utenti potrebbero pronunciare la parte della lettera come J O oppure potrebbero pronunciare joe e la parte numerica come five hundred o five zero zero o five oh oh o five double zero e quindi crea un modello che esegue il mapping di tutte queste possibilità a JO:500 (incluso l'inserimento dei due punti).

I modelli possono essere applicati in parallelo specificando una regola per riga nel file di formattazione del testo visualizzato. Di seguito è riportato un esempio di file di formattazione del testo visualizzato che specifica due regole:

JO:500
MM:760

Modelli con caratteri jolly

È possibile fare riferimento a un'intera serie di elementi alfanumerici (ad esempio JO:500, JO:600, JO:700) senza dover definire tutte le possibilità in diversi modi.

Gli intervalli di caratteri possono essere specificati con la notazione [...], quindi JO:[5-7]00 equivale a scrivere tre modelli.

È disponibile anche un set di elementi jolly da usare. Uno di questi è \d, ovvero qualsiasi cifra. Quindi JO:\d00 copre JO:000, JO:100 e altri fino a JO:900.

Analogamente a un'espressione regolare, esistono più classi di caratteri predefinite per una regola ITN:

  • \d: trova la corrispondenza di una cifra da "0" a "9" e restituisce direttamente l'output
  • \l: trova una corrispondenza con una lettera (senza distinzione tra maiuscole e minuscole) e la trasduce in lettera minuscola
  • \u: trova una corrispondenza con una lettera (senza distinzione tra maiuscole e minuscole) e la trasduce in lettera maiuscola
  • \a: trova una corrispondenza con una lettera (senza distinzione tra maiuscole e minuscole) e la restituisce direttamente

Esistono anche espressioni di escape per fare riferimento a caratteri che altrimenti avrebbero un significato sintattico speciale:

  • \\: trova una corrispondenza e restituisce il carattere \
  • \( e \)
  • \{ e \}
  • \|
  • \+ e \? e \*

Modelli con notazione in stile Regex

Per migliorare la flessibilità della scrittura di modelli, sono supportate le costruzioni di espressioni regolari di frasi con alternative e la chiusura di Kleene.

  • Una frase è indicata tra parentesi, ad esempio (...): le parentesi non vengono conteggiate letteralmente come caratteri corrispondenti.
  • È possibile indicare alternative all'interno di una frase con il carattere |, ad esempio (AB|CDE).
  • È possibile inserire come suffisso ? in una frase per indicare che è facoltativa, + per indicare che può essere ripetuta o * per indicare entrambe le condizione. È possibile aggiungere suffissi solo alle frasi con questi caratteri e non singoli caratteri (cosa più restrittiva rispetto alla maggior parte delle implementazioni di espressioni regolari).

Un modello come (AB|CD)-(\d)+ rappresenta costrutti come "AB-9" o "CD-22" e viene espanso in parole pronunciate come A B nine e C D twenty two (o C D two two).

Modelli con sostituzione esplicita

La filosofia generale è "mostrare come dovrebbe apparire l'output per permettere al servizio Voce di capire come lo pronunciano le persone". Tuttavia, questo approccio non funziona sempre perché alcuni scenari potrebbero presentare modi imprevedibili di dire le cose o le regole in background del servizio Voce potrebbero avere lacune. Ad esempio, possono essere presenti pronunce colloquiali per le iniziali e gli acronimi, ZPI potrebbe essere pronunciato come zippy. In questo caso, è improbabile che un modello come ZPI-\d\d funzioni se un utente indica zippy twenty two. Per questo tipo di situazione, è presente una notazione di formato testo visualizzato {spoken>written}. Questo caso specifico può essere scritto come {zippy>ZPI}-\d\d.

Ciò può essere utile per la gestione delle regole di mapping del riconoscimento vocale, ma non è ancora uno scenario supportato. Ad esempio, è possibile scrivere un modello \d0-\d0 se si prevede che il sistema possa comprendere che "-" può significare un intervallo e deve essere pronunciato to, come in twenty to thirty. La cosa potrebbe però anche non funzionare. È quindi possibile scrivere un modello più esplicito come \d0{to>-}\d0 e indicare come si desidera che venga letto il trattino.

È anche possibile escludere > e il formato scritto seguente per indicare le parole che devono essere riconosciute ma ignorate. Un modello come {write} (\u.)+ riconosce quindi write A B C ed esegue come output A.B.C, eliminando la parte write.

Esempi ITN personalizzati

Cifre di gruppo

Per raggruppare 6 cifre in due gruppi e aggiungere un carattere "-" tra di esse:

Regola ITN: esempio di \d\d\d-\d\d\d: "cadence one oh five one fifteen" -> "cadence 105-115"

Formattare il nome di un film

Spazio: 1999 è un famoso film, per supportarlo:

Regola ITN: esempio di Space: 1999: "watching space nineteen ninety nine" -> "watching Space: 1999"

Modello con sostituzione

Regola ITN: esempio di \d[05]{ to >-}\d[05]: fifteen to twenty -> 15-20

Riscrittura personalizzata

In generale, per una stringa di input, il modello di riscrittura tenta di sostituire il original phrase nella stringa di input con il new phrase corrispondente per ogni regola di riscrittura. Un modello di riscrittura è una raccolta di regole di riscrittura.

  • Una regola di riscrittura è una coppia di due frasi: la frase originale e una nuova frase.
  • Le due frasi sono separate da un carattere TAB. Ad esempio, original phrase{TAB}new phrase.
  • La frase originale viene confrontata (senza distinzione tra maiuscole e minuscole) e sostituita con la nuova frase (con distinzione tra maiuscole e minuscole). I caratteri di punteggiatura grammaticale nella frase originale vengono ignorati durante la corrispondenza.
  • Se le regole di riscrittura sono in conflitto, quella con il valore original phrase più lungo viene usata come corrispondenza.

Il modello di riscrittura supporta la grammatica per impostazione predefinita, che inserisce come maiuscola la prima lettera di una frase per en-US come le impostazioni locali. È disattivato se la funzionalità di formattazione del testo visualizzato è disattivata in una richiesta di riconoscimento vocale.

Punteggiatura grammaticale

I caratteri di punteggiatura grammaticale vengono usati per separare una frase e chiarire come questa deve essere letta.

. , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ،

Ecco le regole di punteggiatura grammaticale:

  • I caratteri di punteggiatura supportati si applicano alla punteggiatura grammaticale se sono seguiti da spazio o si trovano all'inizio o alla fine di una frase o di un'espressione. Ad esempio, . in x. y (con uno spazio tra . e y) è una punteggiatura grammaticale.
  • I caratteri di punteggiatura che si trovano al centro di una parola (ad eccezione di zh-cn e ja-jp) non sono segni di punteggiatura grammaticale. In questo caso, sono caratteri ordinari. Ad esempio, . in x.y non è una punteggiatura grammaticale.
  • Per zh-cn e ja-jp (impostazioni locali senza spaziatura), i caratteri di punteggiatura vengono sempre usati come punteggiatura grammaticale anche se si trovano tra caratteri. Ad esempio, . in 中.文 è una punteggiatura grammaticale.

Esempi di riscrittura personalizzati

Correzione dell'ortografia

Il nome COVID-19 potrebbe essere riconosciuto come covered 19. Per assicurarsi che venga visualizzato COVID-19 is a virus invece di covered 19 is a virus, usare la regola di riscrittura seguente:

#rewrite
covered 19{TAB}COVID-19

Lettera maiuscola/minuscola nome

Gottfried Wilhelm Leibniz è stato un matematico tedesco. Per assicurarsi che Gottfried Wilhelm Leibniz sia in maiuscolo, usare la regola di riscrittura seguente:

#rewrite
gottfried leibniz{TAB}Gottfried Leibniz

Volgarità personalizzata

Un modello di contenuto volgare personalizzato funziona come il modello di contenuto volgare di base, ad eccezione del fatto che usa un elenco di frasi volgari personalizzato. Inoltre, il modello di contenuto volgare personalizzato tenta di trovare corrispondenze (senza distinzione tra maiuscole e minuscole) con tutte le frasi volgari definite nel file di formattazione del testo visualizzato.

  • Le frasi volgari vengono abbinate (senza distinzione tra maiuscole e minuscole).
  • Se le regole delle frasi volgari sono in conflitto, la frase più lunga viene usata come corrispondenza.
  • Questi caratteri di punteggiatura non sono supportati in una frase volgare: . , ? 、 ! : ; ? 。 , ¿ ¡ । ؟ ، .
  • Per le impostazioni locali di zh-CN e ja-JP, le frasi volgari in inglese non sono supportate. Sono supportate parole volgari in inglese. Sono supportate frasi volgari per le impostazioni locali di zh-CN e ja-JP.

Il contenuto volgare viene rimosso o mascherato a seconda delle impostazioni della richiesta di riconoscimento vocale.

Dopo aver aggiunto contenuto volgare nel file della regola di formato testo visualizzato e dopo che il modello personalizzato viene sottoposto a training, viene usato per l'output predefinito in sintesi vocale in batch e in tempo reale.

Esempi di volgarità personalizzata

Ecco alcuni esempi di come mascherare parole volgari e frasi nel file di formattazione del testo visualizzato.

Esempio di parola volgare singola mascherata

Si supponga che xyz sia una parola volgare. Per aggiungerlo:

#profanity
xyz

Ecco un esempio di test: Turned on profanity masking to mask xyz -> Turned on profanity masking to mask ***

Maschera espressione volgare

Si supponga che abc lmn sia una frase volgare. Per aggiungerla:

#profanity
abc lmn

Ecco un esempio di test: Turned on profanity masking to mask abc lmn -> Turned on profanity masking to mask *** ***

Passaggi successivi