You are on page 1of 11

Ukryte Modele Markowa w rozpoznawaniu mowy

Michał Stanek
Data seminarium: 24 styczeń 2006
Data oddania dokumentu: 26 styczeń 2006

Streszczenie
Dokument omawia zagadnienia związane z rozpoznawaniem
mowy za pomocą ukrytych modeli markowa. Omówiony został proces kon­
strukcji systemu, wykorzystanie modeli markowa w praktycznym działaniu
oraz budowa zintegrowanego systemu rozpoznawania mowy SPHINX 4.

1. Wstęp
Historia systemów rozpoznawania mowy sięga początków lat 50-tych, kiedy to w
Bell Laboratory zaczęto prace nad systemem do rozpoznawania izolowanych cyfr.
Wykorzystywano wtedy informacje na temat różnic w rezonansach spectrów. Koniec
lat 50-tych, lata 60-te oraz 70-te to dalszy rozwój tej dziedziny. Poza analizą spectrów
zaczęto wykorzystywać informacje statystyczne, porównywać wzorce. Powstały
matematyczne podstawy oraz formalizacja wielu metod w tym metody [2]:
• nieliniowego skalowania pary słów w celu ich porównania,

• liniowe kodowanie predykcyjne,

• dwupoziomowe programowanie dynamiczne,

• jednoprzebiegowa metoda Bridle'a i Browna,

• ukryte modele Markowa oraz

• sieci neuronowe.
Wiele z prac rozpoczętych w tamtym okresie zakończyło się sukcesami, między inny­
mi system IBM'a (opracowywany ponad 20 lat) osiąga on bardzo dobre rezultaty przy
rozpoznawaniu mowy ciągłej.
Obecnie poprawia się opracowywane wcześniej techniki, lecz niewątpliwie najwięk­
szą popularnością cieszą się ukryte modele markowa. Są one tak popularne i tak
często wykorzystywane, że wiele osób myśli, iż stanowią one jedyne słuszne i prawi­
dłowe rozwiązanie problemu rozpoznawania mowy.

2. Rodzaje systemów rozpoznawania mowy


Wyróżnić możemy różne rodzaje systemów rozpoznawania mowy [1]. Istniejące sys­
temy podzielić możemy na takie, których zadaniem jest rozpoznawania mowy ciągłej
i takie które mają wykrywać wystąpienia izolowanych słów (wbrew pierwszemu wra­
żeniu rozpoznawanie pojedynczych słów nie jest wcale sprawą łatwiejszą).
Wyróżnić możemy również systemy przeznaczone dla jednej konkretnej osoby, czyli

1
ukierunkowane w celu rozpoznawania sygnału dźwiękowego z pewną z góry określo­
ną charakterystyką, oraz takie które muszą rozpoznać słowa wypowiadane przez
wielu potencjalnych rozmówców.
Wreszcie ze względu na wielkość wyróżnić możemy systemy małe, średnie oraz
duże. Jako systemy małe rozumiemy takie w których łączna ilość rozpoznawanych
słów lub zwrotów nie przekracza 100. Systemy takie cechują się najwyższą skutecz­
nością oraz potrafią poradzić sobie z rozpoznawaniem mowy wielu osób. Średnie
systemy to takie w których łączna liczba rozpoznawanych słów nie przekracza 3
tysięcy. Aktualnie badania oraz prace rozwojowe prowadzi się nad systemami tej wła­
śnie wielkości. W końcu systemy duże to takie w których liczba rozpoznawanych
słów sięga nawet 20 tysięcy. W trakcie tworzenia takich systemów pojawia się wiele
komplikacji, zwłaszcza jeżeli chcemy stworzyć system uniwersalny potrafiący roz­
poznawać mowę wielu osób. Jeszcze trudniej stworzyć taki system tej wielkości
działający w czasie rzeczywistym.

3. Etapy rozpoznawania mowy


Każdy system rozpoznawania mowy składa się z zasadniczo podobnych modułów, z
których każdy odpowiedzialny jest za analizę otrzymanych danych na odpowiednim
dla niego poziomie. Zasadniczo nie ma znaczenia jakich algorytmów i metod używa­
my w trakcie procesu rozpoznawania mowy, czy są to przykładowo sieci neuronowe
czy też może ukryte modele markowa, ogólny schemat pozostaje niezmienny. Sche­
mat ten przedstawiony jest na rysunku 1, a każdy z kroków analizy sygnału zostanie
omówiony w dalszej części tego podpunktu.

Rysunek 1: Etapy rozpoznawania mowy ([3] str. 19)

Etap analizy sygnału dźwiękowego


Pierwszym oraz zasadniczym etapem w czasie rozpoznawania sygnału dźwiękowego
jest etap analizy tego sygnału. Jest on niezmiernie istotny z punktu widzenia funkcjo­
nowania całego systemu. Jak widzimy na rysunku 1, błędy powstałe na tym etapie
odbiją się na wszystkich następnych krokach. Podczas tego etapu dochodzi do wydo­
bycia pewnych wartości charakteryzujących dany sygnału wejściowy. Należą do nich
między innymi zmiana amplitudy w czasie oraz zmiana natężenia poszczególnych
częstotliwości w czasie (rys. 2). Od nas zależy jakie cechy będą dla nas interesujące.
Niemniej jednak istnieje już szereg parametrów, które potwierdziły swoje praktyczne
znaczenie[2], między innymi parametry cepstralne oraz wartości zmian energii
sygnału.

2
Rysunek 2: Wykres amplitudy od czasu oraz natężenia częstotliwości od czasu –
spektrogram ([2] str. 7)

Rysunek 3: Przykładowa konfiguracja filtrów dla fazy wstępnej ([2] str. 5)

Kiedy ustalimy już zestaw podstawowych parametrów jakie chcemy wydobywać z


dźwięku (rysunek 2 przedstawia przykładową konfigurację filtrów dźwiękowych),
kolejnym etapem jest ustalenie długości ramki dźwiękowej. Zastosowanie ramki po­
woduje, że pomiaru parametrów dokonujemy nie z całego sygnału dźwiękowego, a
tylko z jego fragmentu. Ramki dźwiękowe w zależności od podejścia mogą na siebie
nachodzić lub też nie. Podział sygnału dźwiękowego na ramki powoduje iż uzyskuje­
my ciąg pomiarów z których każdy jest wektorem odpowiednio zdefiniowanych przez
nas cech. Taki wektor trafia następnie do etapu analizy, gdzie następuje próba zakwa­
lifikowania danego zestawu obserwacji do wcześniej wprowadzonych wzorców.
Zanim to się jednak stanie stoimy przed jeszcze jednym problemem, jakim jest ciągło­
ść wartości parametrów charakteryzujących każdą ramkę.

Rysunek 4: Podział sygnału dźwiękowego na ramki

Wiele metod maszynowego uczenia w tym także ukryte modele markowa posiadają
dyskretny charakter, i aby móc je zastosować dysponować musimy dyskretnym oraz
skończonym zestawem dopuszczalnych stanów. Problem ten rozwiązuje się za po­
mocą kwantyzacji danego sygnału.
Problem doboru progów dla poszczególnych parametrów rozwiązujemy zazwyczaj z
wykorzystaniem algorytmów klasteryzujących np. K-means. Po utworzeniu od­
powiednich klastrów każdy parametr zostaje zakwalifikowany do odpowiedniego z
nich i jego numer zostaje dalej zwracany. Możliwe jest, że klasteryzacji podlega cały
wektor w n-wymiarowej przestrzeni, dzięki czemu możliwe jest zmniejszenie do jed­
nego wymiaru wektora wejściowego zwracając po prostu numer klastra, który jest

3
najbardziej podobny do danego zestawu parametrów sygnału. Rozwiązanie takie
upraszcza również dalszą konstrukcję modelu w którym nie musimy rozważać tak
dużej liczby kombinacji różnego rodzaju parametrów wejściowych.

Rozpoznanie sygnału za pomocą ukrytych modeli markowa


Analizę ciągu wektorów będących parametrami charakteryzującymi dany sygnał
dźwiękowy możemy przeprowadzić przy wykorzystaniu ukrytych modeli markowa.
Jak wiemy modele te są wykorzystywane tam gdzie dysponujemy jedynie ciągiem ob­
serwacji, a same przejścia pomiędzy poszczególnymi stanami systemu są dla nas
niewiadome. Z takim właśnie przypadkiem spotykamy się w czasie analizy sygnałów
dźwiękowych pod kątem rozpoznawania mowy. Zanim jednak przejdziemy dalej
chciałbym przedstawić pewne charakterystyczne typy ukrytych modeli markowa
szczególnie przydatne w czasie analizowania sygnałów dźwiękowych.

Rysunek 5: Typy ukrytych modeli markowa (a) - model ergodyczny, (b) i (c) - model Bakisa

Na rys. 6 (a) widzimy tradycyjny graf dla stacjonarnego procesu markowa pierwszego
rzędu. Jest to model ergodyczny, czyli taki w którym z każdego stanu do każdego
istnieje połączenie. W procesie analizowania sygnału dźwiękowego okazało się jed­
nak, że zarówno w procesie uczenia jak i w późniejszym procesie rozpoznawania
wzorca dużo bardziej skuteczne okazały się modele markowa charakteryzujące się
pewną określoną własnością. Model taki widzimy na rys. 6 (b), tą charakterystyczną
cechą jest to, że nie mamy połączeń do poprzednich stanów (stanów o numerze
niższym niż aktualny). Modele takie nazywamy lego-prawymi (left-righ hmm
models) lub modelami Bakisa. Macierz prawdopodobieństw przejścia pomiędzy sta­
nami jest macierzą trójkątną górną (1).

(1)

Wprowadza się również kolejne ograniczenie, jakim jest maksymalna liczba stanów o
które może nastąpić przesunięcie do przodu oznaczana symbolem 'Δ'. Wszystkie te
zależności zawarte są w nierównościach (2). Wprowadzenie ich zasadniczo ułatwia
znalezienie parametrów modelu w trakcie procesu nauki np. za pomocą algorytmu
Welcha, wektor π jest z góry określony (ponieważ zawsze zaczynam w stanie o nume­

4
rze 1), a na macierz A jest nałożone dużo ograniczeń zasadniczo zmniejszających po­
tencjalną przestrzeń rozwiązań.

(2)

Kolejną niekorzystną cechą jaka charakteryzuje podstawowy model markowa jest to,
że prawdopodobieństwo pozostania w danym stanie maleje wykładniczo z czase,. Nie
jest to pożądana cecha, chcielibyśmy aby model mógł pozostać w każdym stanie
przez pewien okres czasu (rys. 6). Prowadzi to do kolejnej modyfikacji reprezentacji
ukrytego modelu markowa i wiąże się z późniejszymi komplikacjami w postaci
modyfikacji algorytmu Welcha, który musi dodatkowo wyznaczyć parametr D, okre­
ślający maksymalny czas w jakim układ może przebywać w danym stanie.

Rysunek 6: Model markowa w którym uwzględniamy czas pozostania w danym stanie

Skoro omawiamy już modyfikację wprowadzane do ukrytych modeli markowa ze


względu na możliwości analizowania sygnału dźwiękowego, warto wspomnieć rów­
nież, o tym, że są one również wykorzystywane do modelowania reguł
gramatycznych języka. Zastosowanie ukrytych modeli markowa zamiast gramatyki
bezkontekstowej umożliwia nam wyrażenie większej ilości danych np. podczas
modelowania możliwych połączeń np. słów w zdania. Aby to osiągnąć, niezbędne jest
umożliwienie układowi przejścia bez wygenerowania obserwacji, łuk taki oznaczamy
symbolem ø (rys. 7)

Rysunek 7: Rozszerzenie modelu o możliwość przejść między stanami bez obserwacji

Na rysunku 7 (c) przedstawiony jest model markowa za pomocą którego wygene­


rować możemy dowolnie długą cyfrę. Rozwiązanie z wprowadzeniem przejścia nie
produkującego obserwacji jest również przydatne do opisania np. słów, które posiada­
ją różne możliwe wymowy, rysunek 7 b przedstawia taki graf dla słowa „two”.
Skoro omówione mamy już typy modeli markowa przejdziemy teraz do zagadnienia
samego rozpoznawania. Tutaj stajemy przed kolejnym bardzo istotnym zagadnieniem
jakim jest wybór najmniejszej rozpoznawanej jednostki. Jednostką taką może być
przykładowo słowo. Podejście takie jest dobre dla systemów małych, w których

5
mamy ograniczoną liczbę słów. Problem pojawia się w przypadku gdy chcemy roz­
poznawać około 10 000 słów. Zakładając, że dysponujemy tylko 5 przykładami
wymowy każdego słowa liczba przykładów dla jakich będziemy szukać parametrów
modelu (proces nauki) rośnie do ogromnej liczby 50 000 słów. Nawet jeżeli udało by
nam się zebrać tak ogromną liczbę danych, system nasz będzie w stanie rozpoznać je­
dynie te 10 000 słów. Alternatywnym podejściem jest rozpoznawanie fonemów1,
umożliwia nam to rozpoznanie potencjalnie dowolnego słowa. Nie jest jednak bez
wad, dla języka angielskiego mamy około 40-50 fonemów[1], co wymaga przy­
gotowania około 2500 przykładów uczących. Jednak skuteczność systemów opartych
na tym paradygmacie jest około 50% mniejsza niż systemów rozpoznających całe sło­
wa, wynika to z pewnych zależności kontekstowych (koartykulacji), kiedy poprzedni
fonem zmienia brzmienie fonemu po nim następującego.
Alternatywnym podejściem jest rozpoznawanie sylab. Systemy oparte na tej zasadzie
są już dużo dokładniejsze niż systemy oparte na fonemach, niestety w języku angiel­
skim dysponujemy około 10 000 możliwych sylab, co znowu czyni proces
przygotowywania danych bardzo uciążliwym. Możemy zmniejszyć tą liczbę próbując
rozpoznawać podwójne sylaby (demi-syllables), przykładowo dla angielskiego słowa
bed, musielibyśmy rozpoznać wtedy dwa wzorce /B AE/ + /AE D/. Dzięki takiemu
podejściu i faktowi, że część sylab nie może występować obok siebie ilość danych
jakie musimy przygotować spada do „zaledwie” 2 000.
Zdecydowanie najlepsze są systemy które rozpoznają tak zwane trójdźwięki (tripho­
nes) – fonemy występujące w kontekście. Słowo „bed” składa się z następujących
trójdźwięków: SILBAE BAED AEDSIL (gdzie SIL oznacza ciszę). Jednak skoro posiada­
my aż 50 fonemów dla języka angielskiego (w języku polskim występuje około 78),
to rozważając kombinację wszystkich trójek takich fonemów otrzymujemy astrono­
miczną liczbę 503 = 125 000. Jednak podobnie jak w przypadku sylab większość
kombinacji nie jest możliwa w języku, dodatkowo stosuje się pewien zabieg uogól­
nienia w którym określa się że dany fonem poprzedza np. samogłoska, co zapisujemy
VTV (v – vowel).

Każde z przedstawionych tutaj podejść ma swoje wady oraz zalety, różnią się zarów­
no możliwościami jakie oferują jak również czasochłonnością przygotowania danych
uczących. Kiedy jednak zdecydujemy się na któreś z nich przechodzimy do kolejnego
etapu jakim jest skonstruowanie ukrytych modeli markowa. Modeli tych konstruuje­
my dokładnie tyle ile chcemy jednostek wykrywać. Dla systemu rozpoznającego 10
słów stworzymy 10 modeli, każdy rozpoznający dane słowo. Dla systemu roz­
poznającego fonemy stworzymy 50 modeli, każdy rozpoznający pojedynczy fonem.
Załóżmy jednak w tej chwili, że rozpoznawać chcemy te 10 słów, musimy zatem
utworzyć 10 ukrytych modeli markowa oraz wyznaczyć ich parametry, tak aby każdy
mógł rozpoznać dokładnie jedno słowo. Aby tego dokonać musimy jeszcze dyspono­
wać odpowiednimi przykładami uczącymi, czyli ciągami obserwacji, w naszym
przypadku będzie to lista wektorów parametrów charakteryzujących dany wyraz. Wy­
znaczenie parametrów każdego z tych modeli odbywa się za pomocą algorytmu
Welcha, który uruchamiamy z danymi każdej obserwacji dla rozpoznawanych jedno­
stek.
Etap rozpoznawania sygnału dźwiękowego, polega na tym, że każdy sygnał trafia do
wszystkich modeli i staramy się odpowiedzieć na pytanie jakie jest prawdopodo­
bieństwo wygenerowania danego sygnału przez ten model. W tym momencie

1 Fonem jest najmniejszą jednostką dźwięku posiadającą znaczenie w języku.

6
możemy stworzyć tablicę rankingową słów, a w zasadzie modeli które uzyskały naj­
większe prawdopodobieństwa, lub też wybrać ten jeden który uzyskał największe
prawdopodobieństwo (rys. 8). Podobna sytuacja występuje jeżeli analizujemy fone­
my, sylaby czy trójdźwięki, musimy dysponować dokładnie taką liczbą ukrytych
modeli markowa jaką mamy zamiar wykrywać.

Rysunek 8: ([3] str. 5)

Analiza leksykalna
Jesteśmy już za etapem wykrywania podstawowych jednostek z dźwięku. W tym
momencie kończy się właściwie proces, w którym bierzemy pod uwagę parametry
sygnału dźwiękowego. Kolejnym etapem jest analiza leksykalna, jest ona przeprowa­
dzana jednak tylko wtedy kiedy rozpoznawana jednostka jest mniejsza niż słowo,
gdyż jej zadaniem jest ustalenie najbardziej prawdopodobnego słowa na podstawie
wyników uzyskanych z poprzedniego etapu dopasowania wzorców dźwiękowych. Na
rys. 9 przedstawione są dwa modele markowa, pierwszy odpowiedzialny za wykrycie
fonemu /s/, drugi natomiast za wykrycie słowa „sad”, jak widać model odpowiedzial­
ny za wykrycie słowa określa reguły składania poszczególnych fonemów. Przykład z
tym słowem jest jednak trywialny, ponieważ prawdopodobieństwa przejść pomiędzy
poszczególnymi stanami są ustalone na 1.0, co jest równoznaczne z zastosowaniem na
przykład automatu skończonego w celu wykrycia słowa. Oczywiście wykorzystanie
ukrytych modeli markowa na tym poziomie nie jest konieczne, jest jednak bardzo po­
mocne jeżeli dane słowo może być wypowiadane w różny sposób (np. uwzględniając
akcent). Aby odpowiedzieć na pytanie które słowo (model markowa określające zasa­
dy konstrukcji słowa) jest najbardziej prawdopodobny dla danego ciągu obserwacji
należy wykorzystać algorytm Viterbiego.

Rysunek 9: Modele markowa dla rozpoznania fonemu i słowa

7
Analiza syntaktyczna
Kolejnym etapem analizy mowy jest łączenie słów w zdania i wypowiedzi. Jest to
realizowane przez zdefiniowanie gramatyki rozpoznawanego języka, a następnie
sprawdzanie czy rozpoznane słowo (wraz ze słowami je poprzedzającymi) zgadza się
z tymi regułami. Etap ten zazwyczaj służy do określenia odpowiednich ograniczeń na
wyniki uzyskane z warstwy dokonującej analizy leksykalnej, która zwraca po­
szczególne słowa. Oczywiście zakładając, że warstwa leksykalna zwraca nie jeden a
wiele wyników, każdy z odpowiednim prawdopodobieństwem, słowa te można
sprawdzić pod kątem tego czy jest możliwe ich wystąpienie w takiej sekwencji, a na­
stępnie jak dana sekwencja słów jest prawdopodobna w danym języku. Odpowiedzi
na takie pytania udzielają np. słowniki N-gramowe, które zawierają prawdopodo­
bieństwa wystąpienia danego słowa w kontekście o długości n-1. Oczywiście
prawdopodobieństwa takie uzyskuje się po wcześniejszej analizie statystycznej kor­
pusu2. Naturalnym sposobem wyrażenia słowników n-gramowych jest konstrukcja ich
w postaci modeli markowa.

Rysunek 10: Model języka w postaci modelu markowa

Jeżeli obliczyliśmy już wszystkie prawdopodobieństwa możliwe jest znalezienie


ścieżki, podobnie jak to się odbywało na etapie analizy leksykalnej, za pomocą np. al­
gorytmu Viterbiego, dla której maksymalizowana jest wartość prawdopodobieństwa.

Analiza semantyczna
Analiza semantyczna podobnie jak poprzednie etapu służy do ograniczenia liczby
możliwych odpowiedzi systemu, poprzez minimalizację prawdopodobieństwa wy­
stąpienia pewnych sekwencji słów. Analiza semantyczna polega na badaniu kontekstu
całej wypowiedzi i bazowaniu na wcześniej uzyskanych informacjach. Przykładowo
jeżeli wiemy, że mówca opowiada właśnie o jego nowym motorze, możemy
ograniczyć lub też zwiększyć prawdopodobieństwa wystąpienia wypowiedzi charak­
teryzujących pojazdy a zminimalizować prawdopodobieństwa wypowiedzi
charakteryzujących ludzi.

2 Korpus – zbiór reprezentatywnych tekstów dla danego języka.

8
Omówione poszczególne etapy rozpoznawania mowy, na zakończenie warto podsu­
mować przedstawione wcześniej informacje. Na rysunku 11 znajduje się ogólny
schemat działania systemu rozpoznawania mowy [5].

Rysunek 11: Model języka w postaci modelu markowa

4. Pakiet rozpoznawania mowy SPHINX 4


Na rynku dostępne jest już dość sporo programów umożliwiających rozpoznawanie
mowy, za większość z nich niestety musimy zapłacić dość znaczną kwotę, a metody
w nich użyte objęte są tajemnicą. Dla zainteresowanych badaniami w dziedzinie roz­
poznawania mowy z pomocą przychodzi jednak pakiet SPHINX który poza tym że
posiada bardzo dokładną dokumentacje jest systemem open sourcowym. Składa się
on również z modułów które mogą być niezależnie wymieniane i poprawiane. Sche­
mat budowy SPINXa 4 przedstawiony jest na rysunku 12.

9
Rysunek 12: Schemat budowy systemu SPHINX 4

Trzy najważniejsze jego moduły to:


• FronEnd – przetwarzający sygnał wejściowy w ciąg cech, za pomocą zesta­
wu filtrów, mamy pełną możliwość konfigurowania zarówno jakie filtry
chcemy wykorzystywać jak również w jakiej kolejności (rys. 13). Moduł ten
zaimplementowane najczęściej wykorzystywanych filtry typu MEL, FIR, od­
wrotne transformaty kosinusowe, dyskretne transformaty fouriera, odwrotne
dyskretne transformaty fouriera i wiele innych.
• Linguist – moduł odpowiedzialny za rozpoznawanie wzorców oraz przy­
gotowanie drzew przeszukiwań.
• Search Manager – odpowiedzialny jest za przeszukiwanie przestrzeni możli­
wych rozwiązań zdefiniowanych za pomocą SearchGraphów i wybranie tych
najbardziej prawdopodobnych.

Rysunek 13: Schemat działania modułu FrontEnd

Moduł Linguist składa się z następujących modułów:


• AcousticModel – odpowiedzialny jest za rozpoznawanie sygnałów akustycz­
nych, co domyślnie robione jest to za pomocą ukrytych modeli markowa.
• Dictionary – zawiera zestaw słów rozpoznawany przez system oraz dla
każdego słowa określa zestaw jednostek składowych (pochodzących z Aco­
usticModel) oraz reguły ich łączenia.
• LanguageModel – zawiera reguły gramatyczne danego języka. Moduł ten

10
może wykorzystywać słowniki n-gramowe, gramatyki bezkontekstowe,
transduktory skończenie stanowe itp.

Wynikiem działania modułu Linguist jest graf przeszukiwań SearchGraph przedsta­


wiony na rysunku 14.

Rysunek 14: Schemat budowa grafu przeszukiwań

Graf ten trafia następnie do modułu Decoder a dokładniej SearchManager od­


powiedzialnego za wyszukanie najlepszego dopasowania danego ciągu obserwacji do
odpowiedniej ścieżki w SearchGraphie. Do tego celu wykorzystywane mogą być al­
gorytmy A*, DeepFirst lub też algorytm Viterbiego. Za ocenę poszczególnych
rozwiązań odpowiedzialny jest moduł Scorer, natomiast moduł Pruner odpowiada za
usuwanie z grafu SearchGraph wierzchołków, których prawdopodobieństwo, że na­
leżą do rozwiązania jest zbyt małe.

Literatura:
[1] An Overview of Speech Recognition: lecture 12,
http://www.cs.rochester.edu/u/james/CSC248/Lec12.pdf
[2] Rozpoznawanie izolowanych słów języka polskiego
http://www.cin.pojan.net/sris/sem.pdf
[3] A tutorial on hidden markov models and selected application in speech reco­
gnition, Lawrence R. Rabiner, Procedings of the IEEE, vol. 77, NO. 2, February 1989
[4] Sphinx IV: A flexible open source framework for speech recognition, Willie Wal­
ker, Paul Lamere, Philip Kwok, Bhiksha Raj, Rita Singh, Evandro Gouvea, Peter
Wolf, Joe Woelfel
[5] Speech recognition for voice based control, Y. S. Naous, G. F. Choueiter, M. I.
Ohannessian and M. A. Al-Alaoui

11

You might also like