00 04/05/2013 12:45
Il nostro dizionario delle pronunce ha tutto quello che serve per essere montato e utilizzato da Julius:
- Abbiamo la pronuncia delle parole;
- Abbiamo il corrispondente testo.
Ora dobbiamo creare uno strumento che "associa" ad ogni parola in formato testo, la corrispondente pronuncia (o suono).
Questo strumento, non conviene che ce lo inventiamo noi, ma conviene che ce lo ricaviamo attraverso l'Hidden Markov Model Toolkit (HTK).
Però l'HTK ha bisogno di ulteriori elaborazioni dei dati che abbiamo creato. In particolar modo, non possiamo dare direttamente il nostro prompts.txt e i corrispondenti file wave come input alle funzioni HTK, non saprebbero che farsene!
L'HTK, per associare un suono a un testo, lavora con file di etichette (label file). Questi label file vengono interpretati da alcune specifiche funzioni e associati in maniera opportuna al suono pertinente. Cosa sono i label file?
Sono dei file di testo che hanno una struttura del tipo:
"sample1.lab"
CARLO
SCRIVE
..
"sample2.lab"
CIAO
COME
STAI
..
L'HTK possiede delle routine che sono in grado di analizzare le onde sonore, riconoscendo e isolando i fonemi. Un label file funge da guida nell'associazione tra sample sonori e sample testuali. Niente di più.
Creiamo quindi il nostro primo label file a partire dal nostro prompts.txt.
Aprire la cygwin e scrivere:
cd voxforge (invio)
cd manual (invio)
perl ../HTK_scripts/prompts2mlf words.mlf prompts (invio)

L'esecuzione di prompts2mlf, creerà un file nella cartella manual, dal nome "words.mlf".
Tuttavia questo master label file, non è idoneo ai nostri scopi, perchè a Julius serve la corrispondenza sonora dei fonemi, non delle parole. Il file words.mlf, ha una struttura simile all'esempio che ho fatto prima e questo tipo di file, dato in pasto all'HTK, non assocerebbe i suoni fonetici alla relativa rappresentazione testuale dei nostri fonemi, ma renderebbe ogni singola parola specificata un solo fonema (un solo suono).
Il nostro obiettivo è partire da:
"sample1.lab"
CARLO
SCRIVE
..
E arrivare a:
"sample1.lab"
sil
k
a
r
l
o
sp
s
k
r
i
v
e
sp
..
Per non eseguire a mano questo impegnativo task, utilizziamo sempre l'HTK e il file che abbiamo creato prima, attraverso la compilazione del .grammar e del .voca, ovvero il il file che si trova nella cartella manual e che si chiama "dict".

All'interno della cartella manual creiamo un nuovo file e chiamiamolo mkphones0.led (mkphonesZERO). Dentro a mkphones0.led, scriviamo quello tra virgolette (senza le virgolette):
"EX
IS sil sil
DE sp"
Prima di chiudere e salvare, posizioniamo il cursore del mouse proprio dopo la parola sp e premiamo invio, in modo da lasciare un rigo vuoto sotto a quello che abbiamo scritto.
Salviamo mkphones0.led e lo chiudiamo.
Apriamo la cygwin e scriviamo:
cd voxforge (invio)
cd manual (invio)
dos2unix mkphones0.led (invio)
HLEd -A -D -T 1 -l '*' -d dict -i phones0.mlf mkphones0.led words.mlf (invio)

Il file mkphones0.led ci serve come file di configurazione per HLEd. Banalmente, diciamo ad HLEd, di creare un label file dalle parole contenute in words.mlf, ma queste parole devono essere divise in fonemi come specificato dal file dict. In fine, diciamo di scrivere il label file così ottenuto, dentro phones0.mlf.
Siamo a buon punto, infatti, dentro il file phones0.mlf, troviamo cose tipo:
"sample1.lab"
sil
k
a
r
l
o
s
k
r
i
v
e
...
sil
"sample2.lab"
sil
ci
i
a
o
k
o
m
e
v
a
...

Tuttavia, per le elaborazioni che dovremmo fare, ci serve un label file che abbia un fonema speciale, che serve per identificare la pausa di silenzio breve, che lo speaker fa tra l'esposizione di una parola e l'altra. Questo fonema particolare è "sp".
Dentro la cartella manual creiamo un nuovo file e chiamiamolo phones1.mlf. Dentro a phones1.mlf ci scriviamo quello che sta tra doppi apici, lasciando un rigo bianco alla fine del file (senza virgolette):
"EX
IS sil sil"
(ricordatevi di lasciare un rigo bianco alla fine, come avete fatto per mkphones0.led)
Salvate e chiudete il file.
Apriamo la cygwin e scriviamo:
cd voxforge (invio)
cd manual (invio)
dos2unix phones1.mlf (invio)
HLEd -A -D -T 1 -l '*' -d dict -i phones1.mlf mkphones1.led words.mlf (invio)

In questo caso, comandiamo ad HLEd, di utilizzare le informazioni fonetiche contenute nel dict, incrociandole con quelle testuali di words.mlf, per individuare ogni singola frase e metterci sil sia all'inizio che alla fine e per individuare ogni singola parola e metterci sp come separatore.
Abbiamo creato un label file utilizzabile per la costruzione del dizionario delle pronunce. Il nostro master label file è phones1.mlf, che trovate all'interno della cartella manual.
Abbiamo appena concluso lo step 4 del tutorial di voxforge che trovate qui:
www.voxforge.org/home/dev/acousticmodels/windows/create/htkjulius/tutorial/data-pre...

..Segue la manipolazione dei file sonori per poterli utilizzare nella stima del modello fonetico..