lunedì 30 novembre 2009

analisi dei suoni nello speech recognition

Un segnale acustico, è dato dal movimento repentino delle corde vocali che provocano delle brusche variazioni della pressione dell’aria circostante a frequenze che vanno dai 20Hz ai 4000Hz (varia da individuo ad individuo). Tale segnale, se captato da un microfono, provoca la variazione nel tempo dell’ampiezza di un segnale elettrico. Talesegnale elettrico, che varia nel tempo, dà luogo al segnale nel dominio del tempo. Nel caso del parlato, una prima operazione da effettuare, è quella del filtraggio con un filtro passa banda o passa basso, al fine di elidere i suoni ambientali che non fanno parte dello spettro del parlato umano.
Nella disciplina dell’analisi dei suoni, il segnale, viene suddiviso in frame, ovvero porzioni di forma d’onda nel tempo. Assumendo che il segnale vari lentamente nel tempo, si può dire che, la scelta di un’opportuno frame di dimensione piccola, può comportare la possibilità di prelevare una unità di informazione, ovvero un’unità di suono. Nel parlato, tale valore è pari a 10ms, ovvero entro 10 ms, un essere umano può al massimo pronunciare un unico suono. Ciò significa che, per poter analizzare i suoni, ci interessa prelevare delle unità di informazione, ciascuna contenuta entro 10ms.
All’interno di un frame, si effettua un campionamento; infatti, è vero che, dentro un frame vi è un’unità di informazione, per cui basterebbe entro 10 ms prelevare un ampiezza, tanto il suono è uguale entro 10 ms, ma non ci si limita a ciò, si prende un vettore di parametri calcolati opportunamente sulla base del segnale contenuto entro il frame. Per potere ottenere il frame, si prende una forma d’onda quadrata di durata 10ms e si sposta nel tempo tale finestra (window). La window però non si sceglie quasi mai quadrata, ma smussata, in maniera tale da pesare maggiormente le caratteristiche della forma d’onda vicino al centro del frame, infatti si utilizza spesso la cosiddetta finestra di hamming, che ha la forma di una “piovra”.


La ragione per cui si scelgono window smussate, è perché con le forme quadrate, appena il filtro viene spostato, se si registrano parametri quali la somma dell’energia (come somma dei quadrati
dell’ampiezza di ogni campione).


Nel dominio del tempo, i parametri menzionati (spesso di fa riferimento ad un vettore), possono essere rappresentati matematicamente nella forma di Q(n), con T [] che è una
trasformazione anche non lineare pesata dalla finestra w(n). Tale finestra può
essere la finestra di hamming (si parla anche di filtro FIR a risposta finita), che ci permette di ridurre il frame rate risparmiando i calcoli, oppure un filtro IIR (a risposta infinita):


Una cosa importante, per quanto concerne il riconoscimento del parlato, è la cosidetta Short-Time Average Energy, ovvero:


O meglio la short-time average magnitude, questo perché, la prima, ha il difetto di essere sensibile a grandi variazioni del segnale, essendo i campioni elevati al quadrato. Ricordo che s(i) trattasi dell’ampiezza del segnale nel punto i interno al frame che contiene N campioni. L’energia è importante nelle applicazioni vocali, in quanto l’energia varia molto come ampiezza nel tempo nel caso di suoni vocalizzati e non, come pure tra fonemi diversi; per cui viene permessa la segmentazione del parlato nei sistemi automatici di riconoscimento vocale, aiutando a determinare l’inizio e la fine delle parole isolate (ad esempio nel gms, se riesco a fare questo, allora evito di trasmettere le pause). Per avere informazioni sul contenuto spettrale della voce, si utilizza la trasformata di Fourier; però il alcuni casi, è sufficiente il ZCR (Zero Crossing Rate) per avere informazioni sul contenuto spettrale con richieste computazionali molto basse. Rappresenta il numero di volte per le quali il segnale passa per lo zero (o cambia segno) tra due campioni successivi. E’ possibile ricavare per segnali a banda stretta, la frequenza fondamentale F0 in questo modo:
Fs è la frequenza di campionamento del segnale e ZCR è espressa in zero crossing per campione. E’ possibile ottenere un valore di energia. Infatti, matematicamente, la ZCR equivale alla Q(n), per cui se sostituisco al posto del vettore T e scalo w(n) di un fattore 1/N, ottengo la seguente formula:
La ZCR ci aiuta a determinare segnali vocalizzati o meno. Infatti il modello vocale suggerisce che, al di sotto dei 3khz è concentrata l’energia della componente vocalizzata, mentre a frequenze più elevate abbiamo l’energia delle componenti non vocalizzate (unvoiced speed). Abbinando un analisi ZCR con la short-time average Energy, riesco ad individuare con precisione inizio e fine delle parole.Un’altra caratteristica del suono, è la short time autocorrelation, che è pari all’antitrasformata di Fourier della densità spettrale di energia. In un certo senso l’autocorrelazione a misurare la somiglianza tra un segnale ed il suo traslato (la formulaprecedente si riferisce ad un segnale discreto). Conserva le armoniche del segnale, l’ampiezza delle formanti e la loro frequenza. E’ inoltre caratterizzato da alcune caratteristiche importanti:

  • È una funzione pari;

  • Per k=0 otteniamo il massimo;
  • Per k=0 corrisponde l’energia del segnale o alla potenza media se i segnali
    sono deterministici.

  • Riesco a stimare la periodicità del segnale perché anche l’autocorrelazione è
    periodica con periodicità del segnale( cioè
    f(k)=f(k+P)).
La short time autocorrelation
È ottenuta filtrando il segnale con delle finestre temporali. Perché è importante quest’ultima?Perché trova applicazione nell’estrazione dei pitch e nella discriminazione tra suono vocalizzato e non. Un’ulteriore alternativa a quest’ultima è la short time average magnitude difference function;Prendendo w(n) rettangolare di durata N, avrò:


Perché andare a ricercare la frequenza fondamentale? La frequenza fondamentale viene detta anche pitch e rappresenta per quanto concerne l’ambito del vocale, la frequenza fondamentale della vibrazione delle corde vocali. Posso utilizzare la short-time autocorrelation function per risalire a tale frequenza:Con Fs che è la frequenza di campionamento, kM è il campione m-simo a cui si rileva il primo massimo dopo quello per K=0. Quest’operazione viene effettuata dal cosiddetto stimatore di pitch che in genere attua 3 fasi:


  1. filtraggio e semplificazione del segnale con la riduzione dei dati;

  2. estrazione del periodo;

  3. correzione di eventuali errori.

Inviluppo spettrale

L’inviluppo spettrale è molto importante nell’analisi del parlato. Infatti le zone della frequenza in cui si concentra l’energia si trovano in corrispondenza con le principali risonanze del tratto vocale. Queste risonanze sono molto importanti per riconoscere le vocali e le frequenze in cui si concentra l’energia vengono dette formanti. In genere gli strumenti musicali sono distinti da rispettivi inviluppi spettrali. Come si fa l’inviluppo? Si prende lo spettro in ampiezza e si selezionano i massimi. Tali massimi vengono congiunti con delle linee rette (attenzione, i massimi relativi della funzione!!) oppure sisuddivide l’asse delle frequenza in intervalli, ed in corrispondenza di essi(ascisse) si individuano le ampiezze e talune si collegano con dei segmenti. Come ottenere questi punti sulle ascisse? Ad esempio usando un banco di filtri passabanda equispaziati (banda costante) o distribuiti logaritmicamente sull’asse delle frequenze (filtri a Q costante).A livello computazionale, questi filtri possono essere implementati con la FFT, calcolando dapprima lo spettro in modulo, poi sommando i contributi di ciascun bin frequenziale pesato dallarisposta in frequenza dell’r-esimo filtro. Nel caso di passabanda rettangolari, si può calcolare l’energia Er(j) per il canale r-esimo del j-esimo frame con:Dove con Br si indicano le componenti spettrali appartenenti al filtro r-esimo ed N la dimensione della FFT. Quando parliamo di spettrogramma, in realtà stiamo trattando una rappresentazione in tre dimensioni. Se noi, di un segnale nel tempo facciamo la FFT, per ogni frame, allora possiamo creare una rappresentazione in cui, nelle ascisse porremo il tempo, nelle ordinate le frequenze. Preso un tempo ti nelle ascisse, e tracciando una riga verticale, su tale riga, potremo individuare varie zone di colore più o meno scuro. Se una parte è scura, significa che avrò molta energia per la frequenza che trovo nell’ordinata. In sostanza lo spettrogramma è una registrazione dell’andamento dell’energia dei vari frame, visualizzata per frequenza. Ovvero mi dice che, ad esempio, nel frame che incapsula il tempo ti, l’energia è molto più concentrata per una frequenza che non per l’altra. Proprio perché è riferita ai frames, si noti come lo spettrogramma ha un’andamento a striscie verticali. Avere più energia per una data frequenza, significa che nei momenti in cui il parlato aveva quella data frequenza, l’ampiezza del suono era molto alta. Per cui, nel parlato, diventa molto importante parametrizzare l’inviluppo spettrale. Al momento, il sistema migliore è un metodo non lineare cosiddetto cepstrum e la sua variante mel-cepstrum. Tutte queste tecniche di analisi dei frames, hanno lo scopo di ricavare per ogni frame un vettore di caratteristiche. Ogni caratteristica del vettore, viene pesata in maniera diversa. Lo stato dell’arte per il trattamento di tale vettore, è l’MFCC(Mel Scale Cepstral Coefficient). Mel è una scala derivata da studi di psicoacustica che hanno sancito il fatto che lo studio del parlato può essere effettuato studiando lo spettro dopo averlo filtrato con una serie di filtri triangolari parzialmente sovrapposti che iniziano da una data frequenza e terminano ad una frequenza massima. La frequenza minima per il parlato è di 100Hz. Mel dice che l’uomo è sensibile non alla frequenza, ma al logaritmo della frequenza. Il filtro di Mel è applicato allo spettro di ogni frame. Una frequenza massima di 5000 Hz potrebbe aiutare ad eliminare gran parte del rumore. La frequenza massima dovrebbe essere inferiore, in ogni caso, alla frequenza di Nyquist (pari a metà della frequenza di campionamento).

Ciò che stà alla base, è che la sorgente x(n) passa attraverso un filtro descritto dalla risposta all’impulso h(n)

Lo spettro del segnale y(n) è pari ad ,ovvero il prodotto di due spettri, dove k è l’indice per le frequenze discrete. Poiché è difficile separare gli spettri di entrambi, allora il cepstrum usa gli algoritmi:Se pensiamo a log |Y(k)| come ad un segnale nel tempo (anche se è in frequenza), è possibile distinguere due parti del segnale:

  1. La parte a variazione veloce;

  2. la parte a variazione lenta.
Queste due parti è possibile estrarle attraverso un filtro passa alto ed uno passa basso applicati ad log|Y(k)|. Un altro metodo, consiste nel separare le due componenti usando la trasformata inversa di Fourier:Questa trasformata inversa, mi fornisce verso l’origine l’inviluppo spettrale, mentre in punti distanti compare l’eccitazione. In particolare nei punti in cui log |Y(k)| mostra la periodicità, allora la DTF mostrerà una riga. L’ascissa di DFT si chiama quefrency invece di frequency e ceps-trum stà a spec-trum. LA separazione quindi ha come effetto quello di separare l’inviluppo spettrale dall’eccitazione o sorgente. Tale separazione è quindi ottenuta moltiplicando il cepstrum per una finestra passa-basso nel dominio del cepstrum. Quindi questo filtro passa basso serve per potere separare. Abbiamo che nc è una soglia opportuna. Scegliere questa soglia è importante. Per sceglierla bisogna ragionare sulle formanti. Per un uomo, la formante più bassa è pari a 270hz. Per una donna invece 310hz. Le oscillazioni dello spettro che corrispondono all’inviluppo non devono quindi avere componenti sopra la quefrency qp=3.7ms=1/270 Hz. Per suoni periodici bisogna scegliere nc < np, con np periodo in campioni.
Per una frequenza di campionamento di 44khz, risulta np=44.1 x 3.7=163 campioni. Come soglia verrà però scelto un valore leggermente inferiore. In generale, le formanti, ovvero le frequenze

che corrispondono ai massimi dell’inviluppo spettrale sono molto utili in
quanto servono a differenziare le varie vocali. Poiché l’inviluppo spettrale ha
in ordinata l’energia, le formanti sono le frequenze sulle quali si concentra
la maggiore energia.


giovedì 8 ottobre 2009

Aerodinamica del parlato


Nella disciplina della speech recognition, è doveroso fornire una descrizione del processo umano di produzione della voce. Tale parte, nonostante possa far parte di aspetti biologici, non è da sottovalutare, in quanto vedremo che, molte migliorie apportate ai sistemi di riconoscimento vocale, al fine di migliorare l'accuratezza degli stessi, parte proprio da alcune considerazioni fisiche sulla creazione del parlato.
La voce umana è l'effetto di rapide variazioni di aria che, emessa dai polmoni, attraversa la trachea e viene emessa all'esterno del corpo umano dalla bocca e dal naso. Nel passaggio dalla trachea, l'aria raggiunge la laringe. La laringe contiene due piccole "lamelle" di muscolo dette corde vocali. Lo spazio esistente tra le corde vocali (glottis) può essere stretto, a causa delle corde vocali che, entrambe, tendono a chiudersi, ma non completamente. In questa condizione, e con il passaggio di aria, avremo la creazione del suono vocale (voiced sound) perchè le corde vocali vibrano al passaggio. Se invece un essere umano emette dei suoni, ma mentre li emette le corde vocali sono completamente aperte (con un glottis molto ampio), allora avremo dei suoni non vocali (unvoiced sound) perchè le corde non vibrano. Al di sopra della trachea, l'aria raggiunge il tratto vocale (vocal tract) che viene suddiviso in:
-tratto orale (oral tract);
-tratto nasale (nasal tract).
Si badi che i suoni nasali, utilizzano sia il tratto nasale che quello orale come cavità di risonanza.
I movimenti d'aria sono quindi alla base della creazione del parlato.
L'aria, in una condizione statica, può essere caratterizzata attraverso la seguente equazione:
PV = nRT
Dove:
P --> pressione;
V --> volume;
n --> la massa di aria in mole;
R --> una costante del gas;
T --> la temperatura.
La temperatura influisce sulla densità, visoosità e velocità dell'aria. La pressione è un parametro fisico molto importante nel parlato. Generalmente la pressione esercitata dall'aria emessa da un essere umano, si aggira dai 5 ai 30 cm di livello di acqua misurato rispetto alla pressione atmosferica (ad esempio utilizzando un manometro). L'aria emessa dal parlato umano, genera un'onda longitudinale caratterizzata da repentine pressioni e rarefazioni rispetto alla situazione dell'aria dell'ambiente esterno. Le zone a pressione più alta, hanno delle molecole di aria che si spostano molto velocemente nelle zone rarefatte attorno. Ciò comporta una certa velocità della massa d'aria, ovvero la velocità del suono (speed of sound).
Nel caso dell'aria, la formula PV può essere semplificata. Questo perchè il fenomeno della pressione d'aria del parlato può essere considerato un processo adiabatico.
Un processo è detto adiabatico se non vi è scambio di calore tra l'interno e l'esterno del sistema che stiamo considerando. Se è vero che l'onda di pressione longitudinale provocata dal parlato provoca repentini cambi di pressione nelle molecole di aria esterne, e quindi cambi di temperatura, è altrettanto vero che questi cambi di temperatura sono talmente veloci da poter essere praticamente nulli gli scambi di calore. Con ciò, la formula di sopra diviene:
PV^gamma=Costante. (con gamma=1,4 oer l'aria).
Da notare ovviamente che la temperatura non è costante.
Il flusso d'aria che viene emessa dal corpo umano attraverso gli apparati può essere approssimato ad un flusso d'aria che passa attraverso un tubo. Il flusso d'aria è soggetto alla presenza di elementi che comportano una superficie del tubo irregolare, o meglio la presenza di escrescenze che comportano dei fenomeni turbolenti.
La computazione delle proprietà acustiche del tratto vocale e nasale, non è banale se non si impartiscono delle semplificazioni. Per fortuna, nel caso del parlato e per frequenze sotto i 4khz è possibile fare delle forti semplificazioni senza ottenere dei discostamenti apprezzabili dalla realtà effettiva.
Le assunzioni che è possibile fare sono le seguenti:
- Il tratto vocale/nasale è possibile approssimarlo ad un tubo dritto a sezioni variabili.
- La propagazione in questo tubo è un'onda planare. Ciò significa che, preso qualsiasi piano perperndicolare all'asse di propagazione, ciascuna grandezza fisica quale densità e pressione sono costanti in questo piano.
- La propagazione dell'onda nel tratto vocale è lineare. Questa assunzione è possibile farla in quanto il Mach number per i suoni vocali è molto basso ovvero minore di 0,2.

Per quanto concerne il tratto nasale, l'effetto dell'emissione di suono dal naso è dato dall'accoppiata della cavità nasale assieme alla cavità orale, e può essere approssimata anche in questo caso ad un tubo con sezione variabile. Possiamo schematizzare la cavità nasale con il seguente schema:

Velocità di volume di fluido e regime di fluido sono rispettavemente grandezze e condizioni che influiscono molto sulla propagazione della voce e sulle caratteristiche dei suoni ricevuti da chi ascolta.
Nello studio dei fluidi è importante fare alcune semplificazioni. In particolare considerare il flusso come fermo ed incomprimibile, può comportare notevoli semplificazioni nelle formule del moto dei fluidi. Un flusso fermo significa che qualunque punto del fluido, è caratterizzato da condizioni di pressione e velocità costante, ovvero il fluido non ha caratteristiche di turbolenza, in quando la turbolenza comporta variazioni casuali di pressione e velocità. L'incomprimibilità non significa che stiamo trattando i liquidi, ma che alcune condizioni che si vengono a verificare nel caso di compressibilità vengono a mancare, comportando delle semplificazioni.
Queste due condizioni comportano la possibilità di utilizzare la formula di Bernoulli per i fluidi all'interno di una conduttura (come l'aria che viene emessa attraverso la trachea)in una forma semplificata:

La formula di Bernoulli descrive le caratteristiche del flusso prendendo due punti, 1 e 2.
g--> accellerazione di gravità;
Hl--> perdita di calore;
p1 e p2 --> la pressione misurata nei punti 1 e 2;
v1 e v2 --> le velocità delle particelle nel punto 1 e 2;
ro--> la densità.
La perdita di calore e dovuta alla frizione che si viene a creare nel liquido e che crea calore. Se considideriamo il fluido privo di effetti di frizione, allora è possibile porre Hl=0 ed introducendo la grandezza di velocità di volume,
pari a:
U=vA (m^3/s)
allora avremo che:


A1 e A2 sono le aree delle sezioni del flusso nei punti 1 e 2.
Ad ogni modo la perdita di calore può divenire significativa, ed è proporzionale alla lunghezza del tubo ed al quadrato della velocità del flusso. La costante di proporzionalità dipende peraltro da una costante di rugosità e dal numero di Reynolds:
Re=VD/v
. V è pari alla velocità caratteristica
. D è pari alla dimensione caratteristica
. v è la viscosità cinematica
Per flussi all'interno di tubi, la V è pari alla velocità misurata al centro del tubo e D è il diametro del tubo.
Un altra caratteristica da introdurre, è il regime di flusso.
Il regime di flusso può essere di due tipi:
- Laminare;
- Instabile;
- Turbolento.
Il passaggio da un regime all'altra avviene attraverso il raggiungimento di valori del numero di Reynolds che vengono detti critici.
Quando un flusso di aria scorre lungo un tubo, le particelle vicine alla superficie
del tubo tendono a rallentare per effetto di attrito. Quindi al centro del tubo la velocità aumenta. Una volta che viene superata una certa velocità, si passa da fenomeni di attrito a fenomeni inerziali, ed il flusso tende a separarsi dallo strato vicino alla superficie del tubo. In questa condizione, la sezione di flusso diminuisce e la regione vicino alla superficie del tubo diventa instabile. In una
condizione di stato instabile, ogni perturbazione può essere amplificata. Se il numero di Reynolds diventa turbolento, ed il flusso diventa impredicibile. Il Recritico può essere differente a seconda del tipo di sezione del tubo.
Il flusso d'aria prodotto dal parlato umano può essere pesantemente affetto dagli effetti di regime di flusso. Nello stato turbolento, può causare diffrazione o assorbimento di onde sonore.
Un altro evento è quello relativo al fatto che, la voce umana comporta uno spostamento d'aria che è più alto nel verso del parlatore che in avanti (downstream e upstream). Questo effetto è proporzionale al Mach.
Il Mach:
M=V/c (con V la velocità media delle particelle nel fluido)
Se il Mach<<1 allora l'effetto downstream-upstream è limitato.
Ad esempio, nel caso della pronuncia delle vocali si provoca una velocità di volume pari a U=200cm^3/s e su un'area A=1cm^2 avremo che:
M=V/c=U/Ac=200/(1*35000)=0,0057 <<1 -->quindi l'effetto è insignificante.
Per fricatives, in cui il Mach è vicino ad 1, l'effetto è da tenere in considerazione. Il passaggio al regime instabile comporta la nascita di oscillazioni autosostenute che hanno una grande ampiezza ed una banda molto stretta. Tra un'asperità e l'altra del condotto si generano dei vortici che sono delle vere e proprie fonti di suono. Incrementando la velocità di flusso, anche la frequenza del suono prodotto aumenterà, ma si manterrà sempre vicina ad una frequenza di risonanza, e potrà saltare alla fr. di risonanza successiva mostrando isteresi. La turbolenza provoca un suono caratterizzato da un spettro piatto che può essere considerato un rumore. Tale tipo di rumore, non è semplicemente modellabile, e per farlo si utilizzano sorgenti di rumore che sono i monopoli acustici.
[continue]

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).

lunedì 2 febbraio 2009


Salve a tutti. Iniziamo con una panoramica sulla tecnologia Flash/Flex/Actionscript, che stà prendendo sempre più piede nelle applicazioni internet, permettendo la realizzazione di RIA (Rich Internet Application). Tempo addietro, Adobe, ha rilasciato sotto licenza open source un framework: Flex. Esso è un insieme di librerie scritte in Actionscript3 che permettono di realizzare in breve tempo applicativi interpretati dal flash player. In questo contesto, il flash player può essere considerato a tutti gli effetti una virtual machine che interpreta ed esegue del codice, in questo caso codice Actioscript3 scritto facendo uso del framework flex. Come si evince, il principio di funzionamento a simile a Java: una JVM (Java Virtual Machine) che interpreta degli applicativi (i file .class).
Con flex, una volta realizzato un applicativo, sarà necessario creare un corrispondente file in formato .swf, che è un file contenitore degli script e risorse che costituiscono l'applicativo. Ebbene il nostro flash player è in grado di prendere un file .swf ed eseguirlo in maniera analoga a come in java la JVM esegue un file .jar.
Un file .swf eseguito da flash player, può fare molte cose:
a)lavorare lato client mostrando interfaccie e funzionalità usabili ed efficaci;
b)comunicare verso dei server in maniera tale da inviare e ricevere dati (il cosidetto remoting).
Nei successivi post, ci occuperemo per l'appunto delle attività di remoting, che permettono di realizzare degli applicativi che manipolano dati anche di una certa complessità ed importanza al fine di mostrarli agli utenti con interfaccie grafiche altamente performanti dal punto di vista dell'usabilità.