6. Capire il Riconoscimento del Parlato

6.1. Come Funzionano i Riconoscitori

I sistemi di riconoscimento possono essere suddivisi in due classi. Sistemi basati sul riconoscimento di pattern confrontano il parlato con dei pattern noti/appresi per determinare delle corrispondenze. Sistemi basati sulla fonetica acustica sfruttano conoscenze sul corpo umano (emissione della voce e ascolto) per confrontare feature del parlato (proprietà fonetiche come il suono delle vocali). La maggior parte dei sistemi moderni utilizza l'approccio di riconoscimento di pattern perché questo si adatta molto bene alle tecniche computazionali esistenti e tende a presentare migliori valori di accuratezza.

L'attività della maggior parte dei riconoscitori si può suddividere nei seguenti passi:

  1. Registrazione del suono e Riconoscimento degli enunciati

  2. Pre-filtraggio (pre-amplificazione, normalizzazione spostamento di banda, ecc.)

  3. Suddivisione in Frame/Finestre (suddivisione dei dati in un formato utilizzabile)

  4. Filtraggio (ulteriore filtraggio di ciascuna finestra/frame/banda di frequenze)

  5. Confronto e Matching (riconoscimento degli enunciati)

  6. Azione (Esegue la funzione associata col pattern riconosciuto)

Anche se ciascun passo sembra facile, in realtà richiede l'esecuzione di una moltitudine di tecniche diverse e talvolta completamente opposte.

(1) Registrazione dell'audio/enunciati: può essere fatta in un certo numero di modi. Il punto di inizio di un enunciato può essere determinato confrontando livelli audio dell'ambiente (l'energia acustica in alcuni casi) con il campione appena registrato. Il punto terminale dell'enunciato è più difficile da determinare in quanto l'utente tende ad inserire nel parlato degli "artefatti", come respiri, rumore di denti, echi.

(2) Pre-Filtraggio: lo si può fare in molti modi diversi, a seconda di altre caratteristiche del sistema di riconoscimento. I metodi più comuni sono il metodo "Banco di Filtri" che usa una serie di filtri audio per preparare il campione audio, e la Codifica Lineare Predittiva che usa una funziona di predizione per calcolare le differenze (errori). Sono anche utilizzate diverse forme di analisi spettrale.

(3) La suddivisione in Frame/Finestre separa il campione audio in parti di dimensioni specifiche. Spesso questa operazione viene effettuata direttamente nei passi 2 o 4. In questo passo, inoltre, si preparano le parti estreme del campione per l'analisi: si rimuovono gli edge click, ecc.

(4) Un ulteriore passo di Filtraggio non è sempre presente e, quando lo è, è utilizzato per effettuare gli ultimi aggiustamenti del campione prima delle fasi di confronto e matching. Spesso si fanno operazioni di allineamento temporale e normalizzazione.

Esiste un enorme numero di tecniche per il passo (5): Confronto e Matching. La maggior parte è basata sul confronto della Finestra corrente con dei campioni noti. Ci sono, poi, metodo basati su Hidden Markov Models (HMM), analisi della frequenza, analisi differenziale, tecniche di algebra lineare, distorsione spettrale, distorsione temporale. Tutti questi metodi sono usati per generare un valore di probabilità e accuratezza del match.

(6) Le Azioni sono qualsiasi cosa che lo sviluppatore voglia fare. *GRIN*

6.2. Introduzione all'Audio Digitale

L'audio è un fenomeno inerentemente analogico. La registrazione di un campione digitale richiede di convertire il segnale analogico che proviene dal microfono in un segnale digitale attraverso un convertitore A/D presente sulla scheda audio. Quando un microfono è attivo, le onde sonore fanno vibrare l'elemento magnetico presente nel microfono, generando, così, una corrente elettrica che raggiunge la scheda audio (si può pensare ad uno speaker che funziona al contrario). Il compito del convertitore A/D è, sostanzialmente, quello di registrare il valore della tensione elettrica a intervalli di tempo specifici.

Ci sono due fattori importanti da considerare durante questo processo. Il primo è la "frequenza di campionamento", ovvero quanto spesso vengono registrati i valori della tensione. Il secondo fattore è il "numero di bit per campione", ovvero quanto accurato è il valore registrato. Un terzo elemento da considerare è il numero di canali (mono o stereo), ma per la maggior parte delle applicazioni di ASR mono è sufficiente. Nella maggior parte dei casi si usano dei valori predefiniti per questi parametri e l'utente non dovrebbe modificarli a meno che non sia richiesto nella documentazione del programma. Gli sviluppatori, invece, dovrebbero sperimentare diversi valori per determinare quale garantisce un funzionamento ottimale dei loro algoritmi.

Qual è un buon valore della "frequenza di campionamento" per ASR? Considerato che il parlato richiede relativamente poca banda (compresa tra le frequenze 100Hz e 8kHz), 8000 campionamenti al secondo (8kHz) è un valore sufficiente per la maggior parte delle applicazioni. Alcuni, tuttavia, preferiscono effettuare 16000 campionamenti al secondo (16kHz) perché con questo valore è possibile ottenere informazioni più accurate sui suoni ad alta frequenza. Se si dispone di sufficiente potenza di elaborazione, è opportuno impostare la frequenza di campionamento a 16kHz. Per la maggior parte delle applicazioni di ASR, utilizzare frequenze di campionamento maggiori di circa 22kHz è uno spreco.

Qual è, invece, un buon valore per il "numero di bit per campione"? 8 bit permettono di esprimere valori compresi tra 0 e 255, ovvero di registrare 256 posizioni diverse dell'elemento magnetico del microfono. 16 bit permettono di distinguere 65536 possibili posizioni. Similmente a quanto detto per la frequenza di campionamento, se si dispone di sufficiente potenza di elaborazione, si dovrebbe impostare il numero di bit per campione a 16 bit. Come termine di paragone, un Compact Disc è codificato usando 16 bit per campione e la frequenza di campionamento è circa 44kHz.

Il formato di codifica usato dovrebbe essere semplice - lineare con segno o senza segno. Usare un algoritmo U-Law/A-Law o qualche altro schema di compressione non è generalmente utile, dal momento che comporta un costo computazionale e non fornisce grandi vantaggi.