Aby korzystać z HTK w miarę prosty sposób, warto zastosować ATK - czyli API dla HTK.
Jest to niejako opakowaniem do poszczególnych podstawowych źródeł HTK: gramatyki(AHTK), n-gramów(AGram), słowników(ADict) i modeli akustycznych(AHmms). Moduły ARMan i AResource zapewniają zarządzanie.
Natomiast moduły APacket, ABuffer, ATree i AComponent zapewniają podstawowe typy do tworzenia komponentów i łączeniu ich w całość.
Więcej...
piątek, 6 listopada 2009
ATK - API dla HTK - wstęp
niedziela, 1 listopada 2009
htk - tutorial. Część 1
Gdy działa już przykład czas najwyższy stworzyć coś własnego. Bazując na książce udostępnionej na głównej stronie o htk chciałabym opisać kolejne kroki. Zwłaszcza, że w języku polskim trudno cokolwiek znaleźć na ten temat. Przykład który tu opisuję to głosowy interfejs do wybierania numeru.
Więcej...
Aby cokolwiek zrobić najpierw trzeba przygotować dane. Będą nam one potrzebne do nauczenia programu oraz do testowania.
1. Gramatyka.
W celu opisania gramatyki należy się posłużyć notacją BNF:
$digit = ONE | TWO | THREE | FOUR | FIVE | SIX | SEVEN | EIGHT | NINE | OH | ZERO;
$name = [ JOOP ] JANSEN | [ JULIAN ] ODELL | [ DAVE ] OLLASON | [ PHIL ] WOODLAND |[ STEVE ] YOUNG;
( SENT-START ( DIAL <$digit> | (PHONE|CALL) $name) SENT-END )
Gdzie | oznacza alternatywy (OR), nawiasy [] - opcjonalne przedmioty, () - jeden lub więcej powtórzeń.
Aby jednak nasz system rozumiał wyraźnie nasz słowa należy się posłużyć notacją SLF. Jednak dla wygody użytkownika została stworzona specjalny mechanizm, który tłumaczy z BNF na SLF. W tym celu należy napisać HParse gram wdnet.
2. Słownik.
Na początek należy stworzyć posortowaną listę słów/zdań potrzebnych do systemu. Przykładowe poniższe ponumerowane zdania pochodzą z bazy TIMIT:
S0001 ONE VALIDATED ACTS OF SCHOOL DISTRICTS
S0002 TWO OTHER CASES ALSO WERE UNDER ADVISEMENT
S0003 BOTH FIGURES WOULD GO HIGHER IN LATER YEARS
Te zdania mogłyby już zostać przez nas użyty do listy treningowej (wlist od word list), ale wpierw jeszcze trzeba pozamieniać spacje na nowe linie. W tym celu można użyć funkcji prompts2wlist z katalogu HTKTutorial.
Sam słownik może być zbudowany za pomocą standardowego źródła HDMan. W tym przykładzie będzie użyty angielski słownik wymowy BEEP. Zostanie on zaadoptowany bez żadnych modyfikacji poza tym, że krótkie pauzy (sp od short-pause) zostaną dodane po każdej wymowie oraz wszelkie akcenty zostaną usunięte. Jeśli słownik będzie zawierał ciszę to wtedy zostanie połączone sp z sil (od silent) i będzie pojedynczy znak sil. Te zmiany mogą być dokonane przy wykorzystaniu HDMan oraz wykorzystaniu ewentualnych skryptów edytujących zawierających często następujące trzy linijki:
AS sp
RS cmu
MP sil sil sp.
(cmu oznacza poziom akcentu).
Następująca komenda utworzy nam słownik nazwany dict przez wyszukiwanie wymowy ze słownika beep i names wszystkich wyrazów znajdujących się w wlist:
HDMan -m -w wlist -n monophones1 -l dlog dict beep names
-l dlog to różne statystyki tworzenia słownika. W szczególności pokazuje cy nie brakuje jakiś słów. W przykładzie nasze zestawy treningowe nazywają się monophones1. Zwyczajowy format wejścia każdego słownika wygląda następująco:
WORD [outsym] p1 p2 p3 ....
które oznacza, że słowo WORD jest wymawiana jako sekwencja p1 p2 p3... . Nazwa w nawiasach [] (outsym w naszym przypadku) oznacza string, który znajdzie się na wyjściu w przypadku rozpoznaniu tego słowa. Gdy wyrazu nie będzie wewnątrz [] wtedy nic nie będzie na wyjściu. Jeśli nawias zostanie pominięty to string na wyjściu będzie jak słowo. Oto kilka przykładów:
A ah sp
A ax sp
A ey sp
CALL k ao l sp
DIAL d ay ax l sp
EIGHT ey t sp
PHONE f ow n sp
SENT-END [] sil
SENT-START [] sil
SEVEN s eh v n sp
TO t ax sp
TO t uw sp
ZERO z ia r ow sp
sobota, 31 października 2009
htk - demo
Ostatnio było o zainstalowaniu samego htk. Teraz napiszę jak uruchomić przykład podany na stronie. Bo nawet to robi się jakoś inaczej niż zwykłe uruchomienie demo :).
zanim jednak zabierzemy się za uruchamianie przykładu należy ściagnąć sobie (najlepiej najnowszą) wersję Perla na Windowsy. (pobrać można np. stąd www.perl.org).
Więcej...
Teraz możemy juz postępować zgodnie ze schematem, który jest przedstawiony na głównej stronie htk. Czyli otwieramy linię komend (uruchom->cmd). A potem po kolei wpisujemy (warto pamiętać że strzałkami możemy wpisać poprzednią komendę:
cd HTKDemo mkdir hmms cd hmms mkdir tmp mkdir hmm.0 mkdir hmm.1 mkdir hmm.2 mkdir hmm.3 cd .. mkdir proto mkdir acc mkdir test perl runDemo.pl configs\monPlainM1S1.dcf
Program powinien się wykonać a na końcu powinny wyjść wyniki:
SENT: %Correct=0.00 [H=0, S=3, N=3] WORD: %Corr=63.91, Acc=59.40 [H=85,
D=35, S=13, I=6, N=133]
Subskrybuj:
Posty (Atom)