venerdì 24 luglio 2009

Speech Recognition: Cosa ci propone l'Open Source


I software di riconoscimento vocale, sono caratterizzati da un contenuto tecnologico avanzato e fanno uso di complessi algoritmi di analisi del suono e di confronto di caratteristiche (feature) del suono con altrettante caratteristiche memorizzate atte al riconoscimento. Quando si parla di sistemi di Speech Recognition, vengono subito in mente nomi famosi, quali IBM Via Voice e Dragon Naturally Speaking. Senza dubbio sono dei sistemi validi, che migliorano di anno in anno e che oramai hanno raggiunto dei livelli di accuratezza impressionanti, raggiugibili sempre attraverso un adeguato periodo di addestramento (training). L'Open Source non è rimasto a guardare, e nel tempo ha fornito dei prodotti eccellenti, quali Julius e Sphinx.
Entrambi sono stati sviluppati in C/C++ ed in alcuni casi Java, e sono supportati da autorevoli gruppi di ricerca.
Un software di Speech Recognition, è generalmente caratterizzato da alcuni moduli contraddistinti:
a) Una parte dedita all'acquisizione del parlato ed estrazione di features, ovvero di caratteristiche contenute nel segnale vocale che sono decisive per le operazioni riconoscimento delle singole unità (fonemi) che costituiscono una parola o una frase.
b)Una parte di riconoscimento vero e proprio, che confronta le feature con altrettante feature contenute in un database, al fine di individuare la parola pronunciata.
c) Un modulo di learning o training il quale, prendendo in ingresso file di parlato dettato, assieme al file della corrispondente trascrizione del dettato, crea il cosidetto "modello acustico" ovvero una serie di informazioni essenziali per il riconoscimento.
Naturalmente, questa descrizione è molto generica e necessariamente ambigua per via della necessità di dare un'idea in poche righe, e per capire fino in fondo il funzionamento di un software di Speech Recognition si rende recessaria un'analisi di ciascun passaggio che il sistema affronta nel processo di riconoscimento.
Nei prossimi post cercherò di affrontare la questione, partendo dalla base di tutto, ovvero dall'analisi dei suoni.
Ad ogni modo torniamo ai nostri open source, in particolare a Sphinx4, ottimo ASR speaker independent, realizzato in Java per quanto concerne la parte di decoder e facilmente modificabile in base alle differenti esigenze. Insieme ai sorgenti vengono forniti anche delle demo con cui è possibile impratichirsi per realizzare delle piccole applicazioni interessanti. Consiglio peraltro di anticipare la manipolazione di sphinx4 con una buona lettura sulle tecniche utilizzate nella speech recognition, questo perchè trattasi di un argomento fortemente caratterizzato da un susseguirsi a cascata di applicazioni di analisi e trattamento dei suoni ed analisi statistiche. All'interno delle directory di ogni demo, è contenuto un file .xml delle configurazioni. Su questo file è possibile agire al fine di attuare quelle che vengono dette nel gergo dello speech recognition: operazioni di "tuning" ovvero di variazioni di variabili al fine di rendere l'ASR più accurato possibile (utilizzare sempre il WER come misura dell'accuratezza!) e trattasi in questo caso di variabili relative a pesi e probabilità, oppure valori utilizzati per la parte di front-end, ovvero quella che preleva il segnale sonoro dal vostro microfono (tempo di silenzio, sensibilità,...). Ma creare una demo tutta nostra non è così immediato, in quanto non è sufficiente fare una versione personalizzata copiando un pò il codice degli esempi. Se vogliamo ad esempio realizzare un'applicazione di riconoscimento vocale in italiano, è necessario allora creare un modello acustico ed anche un "modello di linguaggio". A questo punto devo però introdurre un punto dolente:
il modello acustico, che non è altro che una rappresentazione numerica (generalmente modelli statistici basati su catene nascoste di Markov - HMM) che deriva dal training di diverse decine di ore di parlato diversificato per sesso ed età, non è facilmente realizzabile. Non è banale trovare tutta questa mole di parlato con la relativa trascrizione dettata! Perlomeno per lingue differenti dall'inglese. Un piccolo aiuto arriva da voxforge, un progetto libero in cui vengono rilasciati gratuitamente dei "corpus" di parlato nelle varie lingue.
Ad ogni modo, sia recuperandoli, che creandoli noi stessi con l'aiuto di parenti ed amici, dovremo avere una buona mole di file vocali con la relativa trascrizione per poterli dare in pasto al modulo di training.
Il modulo di training per sphinx4 viene assolto da un software anch'esso aperto che si chiama SphinxTrain. E' un pò macchinoso, in quanto utilizza C++ da compilare su Visual Studio per generare gli eseguibili che vengono utilizzati per realizzare il modello acustico, ed il perl per lanciare in sequenza tutta una serie di eseguibili con gli opportuni argomenti. Ad ogni modo, una volta messo a punto, permette di creare dei modelli pronti per l'utilizzo con Sphinx4 nella propria applicazione demo. Ho realizzato diverse applicazioni con cui riesco a fare riconoscere il parlato umano in italiano ristretto a particolari contesti.
Per Sphinx4 e SphinxTrain è necessario dotarsi della Jdk, del Perl e di Visual Studio (o equivalente).