Akustické modelovanie spojitej reči

Cieľom tohto cvičenia je v nadväznosti na predchádzajúce cvičenie natrénovanie akustických modelov na rozpoznávanie spojitej reči s veľkým slovníkom. Na tento účel opäť využijeme nástroj HTK. Aj v tomto cvičení využujeme rovnaký prístup na modelovanie slov fonémami, avšak ich počet bude oveľa väčší. Postup modelovania pomocou 5-stavového HMM modelu ostáva rovnaký.

Pred samotným procesom trénovania akustických modelov pre spojitú reč je potrebné pripraviť nasledovné súbory a dodržať štruktúru priečinkov.

  • priečinok config/, v ktorom sa nachádzajú nasledovné súbory:
    • mix2.hed, mix4.hed, mix8.hed, mix16.hed, mix32.hed, mix64.hed, mix128.hed a mix256.hed;
      • tieto súbory predstavujú jednoduché skripty modulu HHEd z nástroja HTK;
      • súbory určujú, koľko Gaussovych zmesí sa má použiť pri trénovaní akustických modelov;
      • trénovanie končí pri maximálnom počte, v tomto prípade pri 256 zmesiach;
    • textový súbor phonemes.lis predstavuje zoznam všetkých slovenských foném, pre ktoré sa má natrénovať akustický model;
      • štruktúra súboru zodpovedá predpisu, že na každom riadku je zapísaná jedna fonéma;
      • je to analogický súbor ako fonémový zoznam z minulého cvičenia, avšak obsahuje oveľa viac foném, keďže modelujeme väčšie množstvo slov v porovnaní s izolovanými slovami <áno, nie>;
      • zoznam foném pre náš experiment si môžete pozrieť tu;
    • textový súbor proto.hmm, ktorý predstavuje prototyp skrytého Markovovho modelu
      • je to inicializačný vzorový súbor, ktorého nastavené hodnoty sa budú počas trénovania aktualizovať pre každú modelovanú jednotku (fonému);
      • tento súbor je nutné si vždy upraviť podľa požiadaviek pre aktuálny model z hľadiska rozmeru vektorov v modeli a druhu modelu;
      • príklad tohto prototypu modelu bol ukázaný na minulom cvičení, resp. si ho môžete pozrieť aj tu;
    • konfiguračný súbor reest.cfg, ktorý je použitý v tzv. reestimačnom procese;
      • musí obsahovať minimálne jeden konfiguračný parameter TARGETKIND, ktorý špecifikuje cieľový druh akustického modelu;
      • tento parameter musí byť identický s parametrom TARGETKIND, ktorý bol použitý pri extrakcii rečových príznakov a je uvedený aj v hlavičke súboru proto.hmm
  • konfiguračný súbor rec.cfg sa používa v procese rozpoznávania (v angl. recognition);

    • musí mať rovnaké parametre ako v prípade konfiguračného súboru reest.cfg
    • obsahuje prídavné parametre súvisiace so slovníkom:

      STARTWORD = <s>
      ENDWORD = </s>

  • priečinok features_test/, ktorý obsahuje testovaciu množinu vo forme parametrizovaných rečových nahrávok, najčastejsie v MFCC (v angl. mel-frequency cepstral coefficients) formáte;
  • priečinok features_train/, ktorý obsahuje trénovaciu množinu vo forme parametrizovaných rečových nahrávok, najčastejsie v MFCC formáte;

  • súbor slovnik.dic predstavuje slovník výslovnosti rozpoznávaných slov (obsahuje zoznam slov s prislúchajúcou fonetickou sekvenciou/transkripciou):

        adepti          a d e p c i sp
        adeptov         a d e p t o u sp
        adhéznom        a d h e: z n o m sp
        adjektíva       a d j e k t i: v a sp
        adjektívum      a d j e k t i: v u m sp
        administratív   a d m i n i s t r a t i: v sp
        administratív   a d m i n i s t r a t i: u sp
        administratíva  a d m i n i s t r a t i: v a sp
        administratíve  a d m i n i s t r a t i: v e sp
  • súbor testwdnet_parlament predstavuje slovnú sieť vytvorenú zo všetkých slov nachádzajúcich sa v trénovaní;
  • dôležitý popisný súbor align.mlf, ktorý obsahuje časové zarovnania všetkých foném v jednotlivých trénovacích nahrávkach;
    • časové zarovnanie predstavuje, koľko príznakových vektorov prislúcha tej ktorej fonéme v danej nahrávke;
    • má podobnú štruktúru ako popisný súbor phones0.mlf, ale navyše obsahuje aj časové údaje (v stovkách nanosekúnd);
    • ukážka vybranej časti súboru align.mlf pre vyslovené slová "ďakujem pekne pani poslankyňa ... do rozpravy ústne" je ukázaná tu;
    • je možné si všimnúť, že jednotlivé slová (sekvencie foném pre dsané slovo) sú vždy oddelené špeciálnou fonémou sp (krátkou pauzou);
  • referenčný popisný súbor parlament_test_ref.mlf so správnymi sekvenciami slov (je porovnávaný s výstupom z rozpoznávania pomocou programu mlfcompare.pl);

  • spustiteľný súbor AddTeeModel, ktorý sa použije na modelovanie krátkej tichej pauzy (v angl. short pause, skratka sp) medzi slovami;
  • spustiteľný súbor DeleteModels, ktorý volá matlabovský súbor delete_models.m a slúži na automatické vymazanie nepotrebných akustických modelov, ktoré vznikli v jednotlivých (nie finálnych) trénovacích iteráciách;
  • matlabovský súbor delete_models.m, ktorý je volaný súborom DeleteModels (bol spomenutý vyššie) - vymaže nepotrebné akustické modely;
  • spustiteľný súbor evaluate.bat vykonáva evaláciu (vyhodnotenie) úspešnosti rozpoznaného textu v súboroch;
    • spúšťa sa po skončení rozpoznávania všetkých testovacích nahrávok so všetkými akustickými modelmi;
    • medzi inými, volá aj matlabovský súbor results.m
  • matlabovský súbor generate_train_and_recognition_commands_parlament.m generuje všetky potrebné príkazy na spustenie trénovania a rozpoznávania v rôznych variantoch;
  • súbor makefile, ktorým sa súšťa generovanie spustiteľných súborov obsahujúcich príkazy na trénovanie a rozpoznávanie (pomocou zmieneného m-súboru generate_train_and_recognition_commands_parlament.m);
  • spustiteľný súbor mlfcompare.pl vyhodnocuje úspešnosť rozpoznaného textu porovnaním rozpoznaných viet/slov s referenčnými;
    • výsledkom je úspešnosť/chybovosť rozpoznania v percentách;
    • je napísaný v jazyku PERL a je volaný spustiteľným súborom evaluate.bat;
  • spustiteľný súbor reestimate.pl predstavuje jadro trénovacieho skriptu v jazyku PERL, umožňuje rozdelenie trénovacieho procesu na viac jadier/procesorov súčasne, čím sa trénovanie modelov výrazne zrýchli;
  • matlabovský súbor results.m parsuje číselné výsledky zo súborov, ktoré vznikli pri vyhodnotení rozpoznaného textu (je volaný spustiteľným súborom evaluate.bat);

  • trénovací skript trenuj_e_parlament_sp.pl vykonáva trénovanie (inicializáciu akustických modelov a zároveň aj ich reestimáciu);
  • trénovací skript trenuj_e_parlament_sp_herest.pl vykonáva len proces reestimácie modelov;
  • trénovací skript trenuj_e_parlament_sp_init.pl vykonáva len inicializáciu modelov (pozn. tieto skripty sa využijú podľa toho, ktorú fázu trénovania potrebujeme vykonať).

  • prázdny priečinok logs/, do ktorého sa budú priebežne ukladať logovacie súbory obsahujúce záznamy o priebehu trénovania;
  • priečinok workdir1 (obsahuje len jednoduchý skript sil.hed modulu HHEd), do ktorého sa budú počas trénovania priebežne ukladať vytvorené akustické modely podľa počtu použitých Gaussovych zmesí na základe horeuvedených súborov mix*.hed;
  • súbor testlist_par.scp obsahuje zoznam testovacích nahrávok umiestnených v priečinku features_test/, ktorý je potrebné pripraviť vždy podľa aktuálnej testovacej množiny;

Výsledná súborová štruktúra priečinka, v ktorom sa bude vytvárať akustický model vyzerá nasledovne:

Súborová štruktúra priečinka, v ktorom sa trénuje akustický model
Súborová štruktúra priečinka, v ktorom sa trénuje akustický model
Súborová štruktúra priečinka config/
Súborová štruktúra priečinka config/

Trénovací proces využíva vždy len trénovaciu množinu dát, ktorá je reprezentovaná priečinkom features_train/. Trénovanie celkovo pozostáva z dvoch na seba nadväzujúcich fáz:

  • inicializácia modelov, kedy sa nastavia inicializačné hodnoty akustických modelov pre jednotlivé modelované rečové jednotky (fonémy),
  • reestimácia inicializovaných modelov predstavuje výpočet nových hodnôt parametrov modelov na základe nastavených inicializačných hodnôt s využitím pokročilých algoritmov. Reestimácia je iteračný a výpočtovo náročný proces, ktorý pre dané trénovacie dáta v konečnom dôsledku vypočíta optimálne pravdepodobnosti a štatistiky pre každú modelovanú jednotku.

Pred samotným spustením trénovanie je nutné sa presvedčiť, či máme k dispozícii všetky potrebné súčasti (súbory, priečinky a skripty), ktoré boli opísané vyššie. Bez ktorejkoľvek nutnej súčasti trénovací proces neprebehne korektne alebo ho ani nebude možné spustiť. Po kontrole je možné si vygenerovať všetky spustiteľné súbory na spustenie trénovania spustením súboru makefile. Proces je možné spúšťať po častiach (je potrebný manažment používateľa) alebo sa celý proces spustí jedným skriptom, t.j. ovládanie sa zabezpečí nasledovnými vygenerovanými spustiteľnými *.bat súbormi, ktoré v sebe zahŕňajú všetky ich potrebné vstupné argumenty:

  • trenuj.bat - spúšťa kompletné trénovanie (inicializácia aj reestimácia; nie je potrebný manažment používateľa);
  • trenuj_herest.bat – obsluhuje len reestimáciu (je možné ho spustiť jedine po natrénovaní inicializačných modelov);
  • trenuj_init.bat - spúšťa trénovanie len inicializačných modelov (ním začína trénovací proces).

Ako bolo spomenuté, nezávisle od manažmentu trénovacích skriptov, trénovanie začína inicializačnou fázou spustením príslušného spustiteľného súboru v príkazovom riadku nasledovne:

$ ./trenuj_init.bat

alebo

$ ./trenuj.bat.

Trénovací proces fyzicky začína vytvorením zoznamu trénovacích nahrávok trainlist.lst, ktoré máme uložené v priečinku features_train/. Tento krok môže trvať aj niekoľko minút, v závislosti od aktuálneho počtu súborov. Po vytvorení zoznamu sa začína inicializačný proces, ktorý je indikovaný vypisovaním názvu jednotlivých modelov na štandardný výstup (obrazovku). Tento proces trvá s aktuálnou veľkosťou databáza približne 5 hodín, pričom inicializácia modelov prebieha na jednom jadre CPU, t.j. nie je v tomto nastavení paralelizovaná. Počas tohto procesu sa priečinky logs/ a workdir1/ priebežne napĺňajú .

Po ukončení inicializačnej fázy trénovania nasleduje reestimácia vytvorených modelov, ktorú manuálne spustíme príkazom:

$ ./trenuj_herest.bat,

resp. reestimácia pokračuje automaticky po inicializácii, ak bolo spustené kompletné trénovanie. Reestimačný proces medzi inými volá PERL skript reestimate.pl, ktorý je zodpovedný za paralelizáciu trénovania v reestimačnej fáze. V tomto skripte je potrebné pred začatím trénovania explicitne nastaviť počet jadier CPU, koľko má byť využitých pri reestimačných výpočtoch. Túto možnosť nastavíme pomocou parametra $MinimumParallel priamo v skripte:

$MinimumParallel = 4; # Minimum number of parallel training processes

Hodnotu tohto parametra odporúčame voliť s ohľadom na aktuálne dostupné jadrá CPU daného servera, na ktorom trénovanie prebieha. Je zrejmé, že na väčšom počte jadier trénovací proces prebehne skôr.

Výsledkom trénovacieho procesu sú akustické modely s rôznymi počtami Gaussovych zmesí (v našom prípade je to 1 – 256 zmesí). Modelmi rozumieme nasledovné súbory v priečinku workdir1/:

    model_alignnazovmodelu.1_0.mmf
    model_alignnazovmodelu.1_1.mmf
    model_alignnazovmodelu.1_2.mmf
    model_alignnazovmodelu.2_0.mmf
    model_alignnazovmodelu.2_1.mmf
    model_alignnazovmodelu.2_2.mmf
    .
    .
    model_alignnazovmodelu.256_0.mmf
    model_alignnazovmodelu.256_1.mmf
    model_alignnazovmodelu.256_2.mmf

pričom reťazec nazovmodelu predstavuje názov hlavného priečinka, v ktorom pracujeme (trénujeme a testujeme akustické modely). Napr., ak sa náš pracovný priečinok nazýva Model_MFCC_0_D_A_Z, akustické modely v priečinku workdir1/ budú mať nasledovné názvy:

model_alignModel_MFCC_0_D_A_Z.1_0.mmf
model_alignModel_MFCC_0_D_A_Z.1_1.mmf
model_alignModel_MFCC_0_D_A_Z.1_2.mmf
model_alignModel_MFCC_0_D_A_Z.2_0.mmf
model_alignModel_MFCC_0_D_A_Z.2_1.mmf
model_alignModel_MFCC_0_D_A_Z.2_2.mmf
.
.
model_alignModel_MFCC_0_D_A_Z.256_0.mmf
model_alignModel_MFCC_0_D_A_Z.256_1.mmf
model_alignModel_MFCC_0_D_A_Z.256_2.mmf

Je možné si všimnúť, že akustický model pre každú Gaussovu zmes obsahuje spolu tri súbory (modely). Keďže reestimácia modelov je väčšinou dvojkrokový proces, za finálny model sa považuje vždy ten, ktorý pochádza z druhej, resp. z poslednej iterácie. Poznamenávame, že model s označením *_1.mmf pochádza z prvej iterácie a model s označením *_0.mmf predstavuje ešte nereestimovaný model vzniknutý expanziou predchádzajúceho modelu s nižším počtom Gaussovych zmesí. Po skončení trénovania všetkých akustických modelov (pre všetky navolené počty Gaussovych zmesí) je možné začať jednotlivé modely testovať a vyhodnocovať.

Pokračovanie - Testovanie a evaluácia akustických modelov