• Iscriviti gratuitamente
  • Iscriviti alla nostra newsletter Piani e prezzi
    Generic selectors
    Exact matches only
    Search in title
    Search in content
    Post Type Selectors
  • Categories
    • Lavoro ibrido
    • Videoconferenze
    • Cloud Calling
    • Dispositivi di collaborazione
    • Esperienza clienti 
    • Gestione eventi
  • Lavoro ibrido
  • Videoconferenze
  • Cloud Calling
  • Dispositivi di collaborazione
  • Esperienza clienti 
  • Gestione eventi
 
  • Blog home
  • >
  • Engineering
  • >
  • Post-elaborazione in sistemi di riconoscimento vocale automatico
Engineering

Post-elaborazione in sistemi di riconoscimento vocale automatico

Set 14, 2021 — Pavel Pekichev

Introduzione

I sistemi di riconoscimento vocale automatico forniscono trascrizioni di testo. Di solito, si tratta di una sequenza di parole. Cisco utilizza sistemi ASR per fornire sottotitoli codificati in tempo reale nelle riunioni Webex. Un problema tipico è che potrebbe essere difficile leggere i sottotitoli senza punteggiatura e maiuscole/minuscole. Il modo in cui si comprende il significato di un testo può cambiare in base alla punteggiatura. Immagina la seguente sequenza di parole con due opzioni per la punteggiatura:

“grazie hai fatto una donazione a qualcuno e ora lavora”

Opzione A: “Grazie! Hai fatto una donazione a qualcuno e ora lavora.”

Opzione B: “Grazie! Hai fatto una donazione a qualcuno. E ora lavora!”

Un solo segno di punteggiatura fa una grande differenza.

Di seguito alcuni aspetti che vengono considerati durante lo sviluppo di un sistema di post-elaborazione:

  • Modelli di alta precisione per ripristino di punteggiatura e maiuscole/minuscole da testo non elaborato.
    Inferenza veloce su risultati temporanei: per mantenere l’allineamento a sottotitoli in tempo reale.
  • Utilizzo risorse ridotto: il riconoscimento vocale consuma molte risorse informatiche; non abbiamo bisogno che anche i nostri modelli di punteggiatura consumino un numero elevato di risorse informatiche.
  • Possibilità di elaborare termini non inclusi nel vocabolario: a volte, dobbiamo inserire punteggiatura o parole in maiuscolo/minuscolo che il nostro modello non ha mai visto prima.

Alcuni approcci classici basati su n-gram [1] offrono una qualità relativamente buona. Tuttavia, hanno i loro lati negativi. Sebbene i modelli n-gram abbiano un’inferenza veloce, anche i modelli 3-gram possono richiedere fino a diversi gigabyte di spazio su disco in base al vocabolario della lingua. Un altro svantaggio è la gestione di parole non incluse nel vocabolario. Se una parola non era presente nei dati di addestramento, un modello non può elaborarla in modo regolare, con un conseguente impatto sulla precisione.

Gli approcci moderni utilizzano tecniche efficaci, ma con un consumo elevato di risorse informatiche, come RNN bidirezionale [3] o architetture di reti neurali basate su trasformatori e attenzione [2]. Questi modelli hanno una precisione elevata [2] ma potrebbero non essere adatti a casi d’uso di streaming in diretta, perché richiedono l’intera sequenza di input per eseguire l’inferenza. Ad esempio, quando disponi di un solo nuovo token di input per una RNN bidirezionale, devi aggiornare gli stati nascosti di tutti i token precedenti del modello (figura 1).

Calcoli sul passaggio indietro di una RNN bidirezionale

Figura 1. Calcoli sul passaggio indietro di una RNN bidirezionale. Per ogni nuovo input, tutti i precedenti stati nascosti devono essere aggiornati sequenzialmente.

 

Alcuni approcci tentano di risolvere punteggiatura e maiuscole/minuscole sviluppando due diversi modelli [3][6], mentre altri combinano entrambi in un singolo modello perché gli output sono altamente correlati [4][2]. Anche parole che seguono immediatamente la punteggiatura dimostrano questa correlazione: le parole dopo i punti vengono probabilmente scritte con la maiuscola e le parole dopo virgole vengono probabilmente scritte con la minuscola. Esistono approcci che suggeriscono un’architettura con più output [4]: uno per attività, rispettivamente. Dimostrano che questa architettura offre prestazioni migliori rispetto ad architetture di punteggiatura e maiuscole/minuscole separate.

Alla luce delle considerazioni precedenti, abbiamo scelto di utilizzare una singola rete neurale basata su GRU con due output per punteggiatura e maiuscole/minuscole.

Per gestire le parole non incluse nel vocabolario, utilizziamo una tecnica simile a SentencePiece [6] che suddivide le parole sconosciute in token più piccoli oppure, in casi estremi, in caratteri. Di seguito una descrizione di dettagli e considerazioni.

TruncBiRNN

Intuizione e sperimentazioni dimostrano che è fondamentale disporre del contesto futuro quando si crea un modello di punteggiatura, perché è più difficile determinare i segni di punteggiatura in una posizione corrente senza conoscere le parole successive. Per utilizzare informazioni sui successivi token e non essere obbligati ad aggiornare tutti gli stati nascosti di tutti i token precedenti, abbiamo deciso di troncare la direzione indietro a una finestra fissa. In direzione avanti, è semplicemente una RNN regolare. In direzione indietro, consideriamo solo una finestra fissa in ciascun token, eseguendo l’RNN su questa finestra (figura 2). L’uso di questa finestra consente di ottenere inferenza a tempo costante per un nuovo token di input (sarà necessario calcolare un solo stato nascosto in direzione avanti e n+1 in direzione indietro).

Esempio di TruncBiRNN

Figura 2. In questo esempio, per ogni token corrente, solo i successivi due vengono considerati per calcolare lo stato nascosto in direzione indietro.

 

Ora, per ogni token, abbiamo stati nascosti per direzioni avanti e indietro, rispettivamente. Chiamiamo questo strato TruncBiRNN o TruncBiGRU (poiché utilizziamo GRU). Questi stati nascosti possono essere calcolati a tempo costante, che non dipende dalla lunghezza dell’input. L’operazione a tempo costante è fondamentale per il modello al fine di mantenere l’allineamento ai sottotitoli in tempo reale.

Architettura

L’architettura consiste di strato di incorporamento, TruncBiGRU e strato GRU unidirezionale, e strato completamente connesso. Per l’output, utilizziamo due strati softmax per punteggiatura e maiuscole/minuscole, rispettivamente (figura 3).

Figura 3. Architettura di modelli con dimensione della finestra uguale a due token per TruncBiGRU

Figura 3. Architettura di modelli con dimensione finestra uguale a due token per TruncBiGRU.

 

Per ogni parola, il modello prevede l’uso di maiuscole/minuscole e il segno di punteggiatura dopo la parola. Per sincronizzare meglio questi due output e prevedere l’uso di maiuscole/minuscole, dobbiamo conoscere anche l’incorporamento dal precedente token (per ripristinare il segno di punteggiatura dal passaggio precedente). Insieme a una funzione di perdita personalizzata (vedi la sezione seguente), ciò ci consente di evitare casi in cui venga prodotta una parola minuscola all’inizio di una frase.

Per la previsione della punteggiatura, è utile anche ottenere la previsione di maiuscole/minuscole della parola seguente. Ecco perché concateniamo incorporamenti correnti e successivi.

Uno strato di output per la punteggiatura prevede la distribuzione su tutti i segni di punteggiatura. Per il nostro modello, è impostato come segue:

punto: un punto al centro di una frase che non implica necessariamente che la parola seguente debba essere in maiuscolo (“a.m.”, “D.C.”, ecc.)

virgola

punto interrogativo

ellissi

due punti

trattino

punto di fine: un punto alla fine di una frase

 

Per maiuscole/minuscole, sono disponibili quattro classi:

minuscolo

tutto maiuscolo: tutte le lettere vengono scritte in maiuscolo (“IEEE”, “NASA”, ecc.)

maiuscole

maiuscole_minuscole: per parole come “iPhone”

maiuscola iniziale: parole che iniziano una frase

Le classi aggiuntive, “maiuscola iniziale” e “punto di fine” possono sembrare ridondanti a prima vista, ma aiutano ad aumentare la coerenza di risposte correlate a maiuscole/minuscole e punteggiatura. Il “punto di fine” implica che la successiva risposta di maiuscole/minuscole non possa essere “minuscolo”, mentre “maiuscola iniziale” significa che il segno di punteggiatura precedente è un “punto di fine” o un punto interrogativo. Queste classi svolgono un ruolo importante nella funzione di perdita.

Funzione di perdita:
Dobbiamo ottimizzare entrambi, maiuscole/minuscole e punteggiatura. Per raggiungere questo obiettivo, utilizziamo una somma della funzione di perdita logloss con un coefficiente:


Funzione di perdita

tuttavia, come detto in precedenza, gli output di una rete neurale potrebbero non essere perfettamente correlati. Ad esempio, la funzione di punteggiatura può prevedere un “punto di fine” per la parola corrente, ma la funzione di maiuscole/minuscole non prevede una “maiuscola iniziale” per il token successivo. Questo tipo di errore, sebbene raro, può essere molto eclatante. Per gestirlo, utilizziamo un termine di penalità aggiuntivo nella funzione di perdita che penalizza questo tipo di errore:


sanzione disaccordo

Il primo termine corrisponde alla probabilità di avere la “maiuscola iniziale” dopo un “punto non di fine” e il secondo corrisponde alla probabilità di non avere una “maiuscola iniziale” dopo il “punto di fine”.  Questa penalità si somma nei token in cui si verifica questo errore.

Inoltre, passiamo due tensori consecutivi dallo strato precedente agli strati softmax. Con questi presupposti, possiamo ridurre in modo efficiente i termini di penalità.

Infine, abbiamo la funzione di perdita:


Funzione di perdita

Training

Per l’addestramento, utilizziamo trascrizioni di testo di un set di riunioni Webex interne e dati di testo di Wikipedia.

In primo luogo, i dati di addestramento vengono puliti e suddivisi in frasi. Durante l’addestramento, ogni esempio viene generato da frasi consecutive e viene troncato a una lunghezza casuale da una distribuzione fissa. Ciò consente al modello di vedere frasi tagliate durante l’addestramento e di gestire risultati temporanei durante l’inferenza. Quindi, addestriamo il modello su circa 300 megabyte di testo Wikipedia e lo perfezioniamo su trascrizioni di riunioni Webex.

Il pre-addestramento su Wikipedia aiuta a migliorare tutte le classi di punteggiatura, ma è particolarmente utile su classi di maiuscole/minuscole. Sospettiamo che questo sia dovuto al grande numero di nomi propri presenti in Wikipedia.

Applichiamo la stessa preparazione di dati ai nostri set di valutazione concatenando frasi e troncandole in modo casuale. Ciò ci consente di misurare la precisione che vorremmo vedere negli stati di trascrizione temporanei.

Conclusione

Utilizzando tecniche relativamente semplici con personalizzazioni dell’architettura, come GRU troncato e una penalità aggiuntiva in una funzione di perdita, abbiamo costruito un modello che può essere eseguito online. L’esperienza di lettura di sottotitoli in diretta è significativamente migliorata con segni di punteggiatura e maiuscole/minuscole in tempo reale.

Riferimenti

[1] A. Gravano, M. Jansche e M. Bacchiani, “Restoring punctuation and capitalization in transcribed speech” in ICASSP 2009, 2009, pp. 4741–4744.

[2] Monica Sunkara, Srikanth Ronanki, Kalpit Dixit, Sravan Bodapati, Katrin Kirchhoff, “Robust Prediction of Punctuation and Truecasing for Medical ASR”

[3] Tilk, Ottokar & Alumäe, Tanel. (2016). Bidirectional Recurrent Neural Network with Attention Mechanism for Punctuation Restoration. 3047-3051. 10.21437/Interspeech.2016-1517.

[4] Vardaan Pahuja, Anirban Laha, Shachar Mirkin, Vikas Raykar, Lili Kotlerman, Guy Lev “Joint Learning of Correlated Sequence Labelling Tasks Using Bidirectional Recurrent Neural Networks”

[5] Wang, Peilu & Qian, Yao & Soong, Frank & He, Lei & Zhao, Hai. (2015). Part-of-Speech Tagging with Bidirectional Long Short-Term Memory Recurrent Neural Network.

[6] Lita, Lucian & Ittycheriah, Abe & Roukos, Salim & Kambhatla, Nanda. (2003). tRuEcasIng. 10.3115/1075096.1075116.

[7] https://github.com/google/sentencepiece

Iscriviti a Webex

Visita la nostra home page o contattaci direttamente per assistenza.


Fai clic qui per ulteriori informazioni sulle offerte di Webex e per eseguire l’iscrizione a un account gratuito

Un nuovo standard per riunioni video ibride
Mag 12, 2022 — Espen Loberg

Presentazione della webcam per ogni spazio di lavoro
Mag 12, 2022 — Cory Landmark

Hai un’idea sbagliata del lavoro ibrido?
Apr 28, 2022 — Chris Barwick

Bisogno di velocità: come il governo sta migliorando il coinvolgimento con iniziative di esperienza clienti
Apr 28, 2022 — Jamie Romanin

Cisco riconosciuto come Customers’ Choice nel Gartner® Peer Insights™ 2022 per Meeting Solutions per la Suite Webex
Apr 27, 2022 — Amit Barave

Connettiti con noi
Webex logo
Inizia oggi stesso, gratuitamente.
Funzionalità aggiuntive, storage e supporto a un prezzo ridotto.
Iscriviti gratuitamente Visualizza piani e prezzi
Azienda di piccole dimensioni
  • Prezzi
  • Webex App
  • Riunioni
  • Messaggi
Aziendale
  • Webex Suite
  • Chiamate
  • Riunioni
  • Messaggi
  • Slido
  • Eventi
  • Contact Center
  • Gestione esperienza
  • imimobile
  • Sicurezza
  • Control Hub
Soluzioni per
  • Istruzione
  • Sanità
  • Servizi finanziari
  • Pubblica amministrazione
  • Startup
  • Sport e intrattenimento
  • Lavoro ibrido
Resources
  • Downloads
  • Help Center
  • Join a Test Meeting
  • Online Classes
  • Accessibility
  • Inclusivity
  • Live & On-Demand Webinars
  • Webex Community
  • News & Innovations
Società
  • Cisco
  • Contatta supporto
  • Contatta reparto vendite
  • Webex Merch Store
  • Blog di Webex
© Cisco e/o relative affiliate. Tutti i diritti riservati.
  • Termini e condizioni
  • Informativa sulla privacy
  • Cookie
  • Marchi
  • Italiano
    • Cinese semplificato
    • Cinese tradizionale
    • Inglese
    • Francese
    • Tedesco
    • Giapponese
    • Coreano
    • Portoghese, Brasile
    • Spagnolo
  • 简体中文 (Cinese semplificato)
  • 繁體中文 (Cinese tradizionale)
  • English (Inglese)
  • Français (Francese)
  • Deutsch (Tedesco)
  • Italiano
  • 日本語 (Giapponese)
  • 한국어 (Coreano)
  • Português (Portoghese, Brasile)
  • Español (Spagnolo)