Akustické modelovanie spojitej reči

Testovanie akustických modelov predstavuje vlastne rozpoznávanie reči, kedy s využitím natrénovaného znalostného zdroja (akustického modelu) a dekodéra hľadáme kombináciu slov, ktorá s najväčšou pravdepodobnosťou zodpovedá vstupnému rečovému signálu (testovacej nahrávke). Ako už bolo spomenuté, na testovanie sa používajú modely z poslednej iterácie trénovania, čomu v našom prípade zodpovedajú modely z druhej iterácie, s príponou *_2.mmf, pričom ostatné - nepotrebné sa neskôr vymažú. Pripomíname, že testovanie prebieha s využitím testovacej množiny nahrávok, ktorá je reprezentovaná priečinkom features_test/.

Z hľadiska počtu Gaussovych zmesí je potrebné poznamenať, že na hlavné rozpoznávanie (napr. prebiehajúce v reálnom systéme rozpoznávania) sa väčšinou používajú modely s vyšším počtom zmesí. V prípade rozpoznávania založenom na fonémach (náš prípad) sa obvykle využívajú zmesi v rozsahu 128 až 512. Nižšie počty produkujú nižšie úspešnosti, nakoľko dané modely nie sú veľmi presné (sú potrebné len na vytvorenie modelov s vyšším počtom zmesí s cieľom zvýšenia ich presnosti). Vyššie počty zmesí ako 512 môžu síce generovať presnejší výstup, avšak za cenu výrazného spomalenia procesu rozpoznávania, pretože je nutné pri rozpoznávaní oskórovať vstupné príznakové vektory s veľmi vysokým počtom stavov pre jednotlivé zmesi a fonémy. Z praxe je navyše známe, že ďalšie zvyšovanie počtu zmesí už ďalšie zvyšovanie úspešnosti nemusí vôbec zabezpečiť (nastáva stav nasýtenia). V prípade rozpoznávania založenom na kontextovo-závislých fonémach (trifónach) sa v praxi využíva najčastejšie 32-zmesový akustický model.

Testovanie sa obyčajne spúšťa separátnymi príkazmi, ktoré môžu byť vo všeobecnosti veľmi dlhé, nakoľko je potrebné dekodéru zadať niekoľko vstupných parametrov. Pri takomto postupe je možné sa ľahko pomýliť. Z toho dôvodu boli na testovanie zavedené spustiteľné súbory, ktoré si používateľ vygeneruje automaticky. Tieto už obsahujú všetky potrebné volania súborov, súčastí a ich vstupných parametrov, čím sa zabezpečí eliminácia vzniku chyby. Používateľ pri testovaní už len spúšťa dané súbory pre zvolené počty zmesí a čaká na výsledok.

V našom prípade, kedy testujeme modely v rozsahu počtu zmesí 1 - 256, máme k dispozícii niekoľko spustiteľných súborov na testovanie, ktoré boli vygenerované spustením súboru makefile pred začatím trénovania. Tieto spustiteľné súbory majú názov v tvare recognition*.bat, kde symbol * reprezentuje testovaný počet zmesí, resp. rozsah zmesí. V našom prípade máme k dispozícii konkrétne tieto spustiteľné súbory na testovanie:

recognition1-16.bat
recognition128.bat
recognition1-4.bat
recognition16.bat
recognition1.bat
recognition256.bat
recognition2.bat
recognition32-256.bat
recognition32.bat
recognition4.bat
recognition64-256.bat
recognition64.bat
recognition8-32.bat
recognition8.bat
recognition.bat

Z tohto výpisu je zrejmé, že testovací proces si môže používateľ manažovať sám, aj podľa dostupných výpočtových kapacít na danom serveri. Ak využije režimy screen systému OS Unix/Linux, v tom prípade môže spustiť viac rozpoznávaní súčasne, každé na inom jadre CPU. Inak je testovací proces jednojadrový. Tzn., že môže spustiť jeden proces pre každú Gaussovu zmes (recognition1.bat, recognition2.bat, recognition4.bat, atď.), resp. môže spustiť testovanie v dávkovom režime, napr. pre 1 - 16 zmesí príkazom recognition1-16.bat, a pod. Ak nie sú dostupné výpočtové kapacity, testovanie nie je naliehavé alebo sa testuje viacero rôznych modelov súčasne, stačí spustiť príkaz:

$ ./recognition.bat,

ktorý zabezpečí otestovanie všetkých akustických modelov pre všetky počty Gaussovych zmesí. Tento dávkový spustiteľný súbor obsahuje nasledovné príkazy (ostatné súbory obsahujú len výber z tejto množiny príkazov pre daný počet zmesí):

HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.1_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.1.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis
HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.2_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.2.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis
HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.4_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.4.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis
HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.8_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.8.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis
HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.16_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.16.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis
HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.32_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.32.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis
HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.64_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.64.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis
HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.128_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.128.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis
HVite -C rec.cfg -H workdir1/model_alignModel_MFCC_0_D_A_Z.256_2.mmf -S testlist_par.scp -l '*' -i mfforiginal.256.mlf -t 400.0 -u 3072 -v 200.0 -s 12.0 -p -8.0 -T 1 -w testwdnet_parlament slovnik.dic config/phonemes.lis

Tieto príkazy obsahujú už známe, horeopísané súbory a priečinky a ďalšie prepínače nástroja HVite, ktoré zabezpečia optimálne nastavenie rozpoznávania. Tento nástroj predstavuje Viterbiho dekodér.

Výstupom rozpoznávania pre dané počty zmesí sú súbory mfforiginal.*.mlf, kde symbol * opäť reprezentuje testovaný počet zmesí. Výpis týchto súborov po skončení úplného testovania je nasledovný:

mfforiginal.128.mlf
mfforiginal.16.mlf
mfforiginal.1.mlf
mfforiginal.256.mlf
mfforiginal.2.mlf
mfforiginal.32.mlf
mfforiginal.4.mlf
mfforiginal.64.mlf
mfforiginal.8.mlf

Ak sa pozrieme na obsah týchto súborov, je zrejmé, že obsahujú hlavičku súboru, názov rozpoznávanej nahrávky, rozpoznaný text, spolu s časovými značkami v stovkách nanosekúnd a príslušné akustické skóre pre dané slovo:

#!MLF!#
"*/par001s0030.rec"
700000      2100000     že          -1108.086182
2100000     4100000     sa          -1515.902710
4100000     9600000     navrhuje    -3722.974854
9600000     20000000    zákone      -6932.338867
20000000    22800000    aby         -2066.940186
22800000    29200000    orgán       -4251.462891
29200000    33600000    ochrany     -3250.321045
33600000    45700000    prírody     -7827.471680
55400000    57000000    a           -1199.708252
57000000    58700000    do          -1374.663818
58700000    63600000    tridsať     -3503.771729
63600000    70200000    dní         -4130.488770
70200000    80300000    nerozhodne  -6703.827148
.

Správnosť týchto rozpoznaných sekvencií slov sa vďalšom kroku evaluácie vyhodnocuje porovnaním s referenčným (správnym) prepisom a vypočíta sa presnosť (úspešnosť) rozponávania pre daný počet zmesí.

Za účelom evaluácie vytvorených akustických modelov bol zvolený parameter chybovosť rozpoznávania (v angl. word error rate, skr. WER), ktorý je doplnkovou hodnotou k úspešnosti rozpoznávania (v angl. accuracy, skr. Acc.) v percentách, ktorá bola vypočítaná nasledovne:

$$ Acc. = \frac{H-I}{N}\times 100\%,$$

kde symbol $H$ vyjadruje počet správne rozpoznaných slov, $I$ je počet vložených chýb (v angl. insertions) a $N$ je počet všetkých referenčných slov. Výsledný parameter WER bol teda vypocítaný:

$$ WER=100(\%)-Acc.$$

Po získaní súborov s rozpoznaným obsahom je potrebné vygenerovaný prepis vyhodnotiť výsledky je vhodné zhromaždiť, napr. vo forme tabuliek v XLS súbore. Evaluácia sa vykonáva po skončení všetkých testov, pre všetky počty Gaussovych zmesí, inak vyhodnocovací skript indikuje chybu. Vyhodnotenie sa spúšťa príkazom:

$ ./evaluate.bat,

ktorý volá hlavný vyhodnocovací PERL skript mlfcompare.pl. Jeho skrátený obsah vyzerá nasledovne:

./mlfcompare.pl parlament_test_ref.mlf mfforiginal.1.mlf    > vysledok1
./mlfcompare.pl parlament_test_ref.mlf mfforiginal.2.mlf    > vysledok2
./mlfcompare.pl parlament_test_ref.mlf mfforiginal.4.mlf    > vysledok4
.
.
./mlfcompare.pl parlament_test_ref.mlf mfforiginal.256.mlf  > vysledok256

Z uvedeného vyplýva, že tento skript porovnáva referenčné (správne) sekvencie slov s rozpoznanými sekvenciami (hypotézami). Výsledkom porovnávania sú súbory

vysledok1
vysledok2
vysledok4
.
.
vysledok256

s vyznačenými chybami a výsledkami na konci súboru. Pre zaujímavosť, skrátený obsah týchto súborov má nasledovnú syntax:

Subor: "*/par001s0030"
REF:  že sa navrhuje v     zákone aby orgán ochrany prírody ak do       tridsať dní   nerozhodne
HYP:  že sa navrhuje <del> zákone aby orgán ochrany prírody a  dvetisíc ani     <del> nerozhodne
--------------------------------------------------------------
 ACC: 0.642857142857143
   Words: 14    Matches: 9
 WER: 0.357142857142857
   Errors: 5 (Sub: 3, Ins: 0, Del: 2)
--------------------------------------------------------------

kde je možné vidieť, v ktorej časti vety nastala vzhľadom na referenciu pri rozpoznávaní chyba a o aký typ chyby sa jedná. V ďalšej časti je uvedený výsledok úspešnosti prepisu danej vety vzhľadom na stav detegovaných chýb. Na úplnom konci výsledkového súboru pre daný počet zmesí sa nachádza globálne vyhodnotenie pre všetky vety v testovacej množine:

Total:
------
Words: 8776      Matches: 7328  Errors: 1521 (Sub: 778, Del: 670, Ins: 73)
WERsclite: 17.33%       Correct: 83.50%         AccSclite: 82.67%
Pocet viet: 884 a nenajdenych 0
####################################################################
 WER: 0.174501485424779
 Acc: 0.836116496540023
####################################################################

Tieto výsledkové súbory je možné priamo použiť na ďalšie spracovanie. Kvôli uľahčeniu postupu spracovania výsledkov skript evaluate.bat ďalej volá matlabovský skript results.m:

go.matlab:
        /opt/matlab/bin/matlab -nodisplay -nodesktop -nosplash -r results

ktorý vyparsuje číselné výsledky z vygenerovaných súborov a naformátuje ich do tabuľky, ktorú je možné priamo vložiť napr. do súboru MS Excel. Forma je nasledovná:

Model_MFCC_0_D_A_Z
1   41.20   62.38
2   39.29   64.18
4   36.98   66.26
8   35.95   67.27
16  35.30   67.92
32  34.18   68.87
64  33.44   69.52
128 33.42   69.69
256 32.44   70.53

kde tabuľka začína názvom akustického modelu, ktorý sme určili v úvode experimentu, resp. názov je totožný s menom priečinka, v ktorom celý experiment prebehol. Prvý stĺpec predstavuje vyhodnocované počty zmesí, druhý stĺpec sú hodnoty chybovosti WER v percentách a tretí stĺpec sú hodnoty úspešnosti Acc. v percentách. Vygenerovaná tabuľka je automaticky uložená do textového súboru, ktorý má názov results_nazovmodelu, napr. results_Model_MFCC_0_D_A_Z.