Wrocław, 30 czerwiec 2008
Raport opracowany na zaliczenie przedmiotu:
ARE3513 "Metody i algorytmy sztucznej inteligencji."
Temat:
Automatyczne rozpoznawanie mowy na podstawie pojedynczych fonemów.
Wykonanie:
Grzegorz Podolewski 128203 ARR
Prowadzący:
dr inż. Witold Paluszyński
1. Wstęp i opis zadania.
Projekt polegał na zaimplementowaniu systemu, który byłby zdolny rozpoznawać mowę. Na świecie stosuje się wiele różnych koncepcji rozpoznawania. Ich wady i zalety przedstawiam poniżej:Typ jednostki | Zalety | Wady |
Alofon | - stosunkowo wyraźnie różnią się
akustycznie, - informacja o granicach między słowami, - małe wymagania dotyczące reguł na niskich poziomach |
- trudności w budowie środków technicznych do
wydzielania, - zbyt duża liczba alofonów, - większość ma parametry zależne od otoczenia |
Fonem | - niewielka liczba klas, - bezpośrednio występują w słownikach (transkrypcja fonetyczna) |
- są fonetycznie trudno rozpoznawalne, potrzebne są dodatkowe reguły na niższych i wyższych poziomach rozpoznawania |
Diafon | - uwzględniona informacja o przejściach
międzyfonemowych, - możliwość uzyskania reguł koartykulacyjnych |
- duża liczba diafonów, - trudności ze stosowaniem dużej liczby reguł fonologicznych |
Sylaba | - łatwość rozdziału, - duża liczba reguł koartykulacyjnych, - reguły fonologiczne zawierają warunki odnośnie granic sylab |
- trudności dokładnego określenia
granicy, - duża liczba sylab |
Słowo | - zmniejsza się liczba poziomów rozpoznawania | - złożony zbiór wzorców klas w przypadku
dużych słowników, - trudne do opisu w słownikach reguły fonologiczne |
2. Metoda implementacji i przyjęta strategia.
W założeniu program powinien pracować w czasie rzeczywistym, ale ze względu na swój eksperymentalny charakter został napisany w Matlab'ie. Toolbox'y oferują sporo gotowych funkcji i bardzo przyspieszają całość pracy. Skrypt został napisany tak, aby pobierać 3 sekundowe fragmenty mowy poddawane analizie. Wykorzystałem mikrofon dynamiczny SHURE SM-57, oraz kartę muzyczną E-MU Tracker Pre (22050Hz, 16bit). Do analizy pobieram 512 punktowe wektory danych poddawane oknowaniu Hanninga, a następnie szybkiej transformacie Fourier'a. Wyliczam moc widma pierwszych 256 prążków (aby uwypuklić formanty, czyli maxima obwiedni widma) i poddaje je normalizacji, aby uniezależnić się od głośności wypowiadanych słów. Tak przygotowane dane poddawane są identyfikacji. Postanowiłem przebadać 6 metod rozpoznawania:3. Wyniki działania programu.
Po przetworzeniu 3 sekund informacji program wyświetla na standardowym wyjściu 6 wyników składających się ze 129 liter dla każdego algorytmu identyfikacji. Poniższy przykład jest wynikiem podania na wejście mikrofonu krótkiej ciszy, i samogłosek "i", oraz "a".Korelacja liniowa Pearsona: __a____a________oiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Korelacja monotoniczna Spearmana: oooyoooooyyoooooeooouoouuuuuuuuuuuouououuuuuuuouuuuuouuoueuuiiouuuuuuouuouuuuuuouuuouuuuuuuuuuuuuuuuuuuueyuuyuouuuiuoouuiuuuuyuuo Korelacja monotoniczna Kendalla: oooyoooooyyoooooeooouoouuuouyouuuuouououuyyuuuouuuuuouuoueuoiioiuuiuiouoouoyuuuouuooeuuuuuiuuuuuuuuuieuyeieiyuoiuyiuoouaiiuuuyeui Metoda najblizszego sasiada (metryka euklidesowa): _________________iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiyuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Metoda najblizszego sasiada (metryka miejska): _________________iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiueaaeaeaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Sztuczna siec neuronowa: euoeeououoeoeoueuuoeeouyeuooeeeue_uoueeooeeeyuu_yyeeeeeyouoouoyyeeyeyoeeeooeuoeoeeeeyeeooyueeeyeeueooeeeeoee_iuuueyyeoeeouuyoooeyNiestety korelacje monotoniczne w ogóle nie zdają egzaminu. Sztuczna sieć neuronowa także nie daje satysfakcjonujących wyników. Jest to spowodowane najprawdopodobniej zastosowaniem złej sieci, lub zbyt krótkim czasem jej uczenia. Natomiast całkiem dobre wyniki uzyskujemy z korelacji liniowej, oraz metody najbliższego sąsiada. Kolejny przykład pokazuje jak program radzi sobie z rozpoznawaniem pojedynczej głoski "e":
Korelacja liniowa Pearsona: eeeeeeeeeeeeueeeeeueeeeeeeeeeeeeeeeeeeuueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeueeeeeeeeeeeeeeeeeeeee Metoda najblizszego sasiada (metryka euklidesowa): eeeeeeeeeeeeueeeeeueeeeeeeeeeeeeeeeeieueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeueeeeeeeeeeeeeeeeeeeee Metoda najblizszego sasiada (metryka miejska): eeeeeeeeeeeeueeeeeeeeeeeeeeeeeeeeeeeeeueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeueeeeeeeeeeeeeeeeeeeee
4. Wnioski i założenia na przyszłość.
Zdecydowanie najlepiej program radził sobie z ciszą i głoską "i", natomiast najgorzej z głoską "a". Niestety wystąpiły problemy z siecią neuronową, która powinna dawać najlepsze rozwiązania, ale i tak okazuje się że te proste metody rozpoznawania spisują się dość dobrze. Bez wątpienia największy wpływ na jakość rozpoznawania mają próbki wzorcowe. Przy pierwszych 5 metodach korzystałem z jednej próbki na każdy identyfikowany wzorzec, natomiast sieć neuronowa miała tych próbek 3 razy więcej. Są to liczby bardzo małe i gdyby zastosować większy ciąg uczący wyniki powinny się znacznie poprawić! Korelacja liniowa daje troszkę lepsze wyniki od metody najbliższego sąsiada ale należy pamiętać o tym, że metoda najbliższego sąsiada działa dużo lepiej dla około 3 sąsiadów, a w korelacji liniowej nie możemy już sterować parametrami. Oczywiście poszukiwanie 3 najbliższych sąsiadów zwiększa diametralnie ilość obliczeń, a trzeba pamiętać, że system powinien pracować w czasie rzeczywistym. W celu porównania metod sensowne wydaje się wyznaczenie współczynnika użyteczności danej metody proporcjonalnego do procentowej ilości rozpoznanych fonemów i odwrotnie proporcjonalnego do ilości potrzebnych na to obliczeń. Najwięcej parametrów mają oczywiście sieci neuronowe, ale nie można zapominać, że sama koncepcja rozpoznawania fonemów pociąga za sobą kilka bardzo istotnych parametrów np. wielkość wektora poddawanego FFT, lub częstotliwość próbkowania. Przy obecnych ustawieniach system dzieli sobie każdą sekundę na 43 przedziały, na których dokonuje obliczenia. Przy założeniu, że człowiek jest w stanie wymówić 3-4 wyrazy na sekundę, wydaje się to optymalnym ustawieniem. W celu zmniejszenia ilości obliczeń można np. sporządzić histogram z mocy widma, aby zredukować ilość przedziałów. Z jednej strony redukujemy sobie rozdzielczość, ale z drugiej zabezpieczamy się przed tym, iż sygnał o bardzo podobnej częstotliwości udzieli się w sąsiednim prążku zafałszowując wynik. Powyżej 100 prążka w zasadzie nie otrzymujemy już żadnych istotnych informacji, dlatego warto rozważyć obcinanie mocy widma w tym miejscu co znacząco zredukowałoby ilość obliczeń. Dzieje się tak ponieważ wyższe częstotliwości przenoszą mniejszą moc. Zamiast standardowej FFT możemy zastosować jej zmodyfikowaną wersję o nazwie "Two N-Point Real FFT", co w naszym przypadku powinno dać około 45% przyspieszenie wyliczenia widma! Z takimi ulepszeniami program bez problemów poradzi sobie z rozpoznawaniem mowy w czasie rzeczywistym. W celu zakończenia eksperymentu warto byłoby porównać algorytm 3 sąsiadów z korelacją liniową, oraz sieciami nauronowymi. Rozbudowa systemu powinna polegać na tworzeniu nowych sieci, a nie rozbudowywaniu tej istniejącej. Zdecydowanie trudniej będzie nauczyć sieć rozpoznawania 14 klas, niż nauczyć tego samego 2 sieci o 7 klasach. Ilość obliczeń także zmniejsza się diametralnie w takim przypadku! Aby jednak zbudować taki system trzeba posiadać dodatkową wiedzę o różnicach pomiędzy fonemami. Można np. zbudować 2 osobne systemy dla głosek dźwięcznych i bezdźwięcznych wiedząc, że w głoskach dźwiecznych i tylko w nich występuje obszar koncentracji energii w okolicy 100Hz spowodowany występowaniem podstawowego tonu krtaniowego. Oczywiście nic nie stoi na przeszkodzie, aby tych podsystemów było więcej niż tylko 2. Sposób rozpoznawania mowy oparty na fonemach pociąga za sobą implementację słownika. Głoski "u", oraz "ó" wypowiadamy identycznie i system musi posiadać jakiś pomocniczy słownik, który pomoże wstawić wyraz bez błędów ortograficznych. Dodatkowo bardzo często wypowiadamy różne wyrazy inaczej niż są zapisane np. "kfiat" zamiast "kwiat". Dlatego słownik powinien posiadać zbiór wyrazów zapisanych fonetycznie razem z poprawnymi ortograficznie wersjami. Jak widać do pełnej funkcjonalności systemu jeszcze długa droga, ale przedstawione powyżej przykłady nastrajają optymistycznie. Niestety spółgłoski są trudniejsze do identyfikacji niż samogłoski. Spółgłoska "c" to tak naprawdę nałożenie plozyjnej głoski "t" i szumowej "s", a "r" ma kilka wzorców widma.5. Bibliografia.
- R. Tadeusiewicz - "Rozpoznawanie obrazów",