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

Generalnie w przypadku małych systemów (np. rozpoznawanie tylko kilku podstawowych komend przez robota) stosuje się rozpoznawanie całych wyrazów. Czym większy zbiór danych chcemy rozpoznawać, tym jednostka do rozpoznawania musi być coraz mniejsza. Ja skupiłem się na rozpoznawaniu fonemów, ponieważ system taki jest dużo bardziej uniwersalny. Możemy np. uniezależnić się od długości wypowiadanego słowa poprzez pomijanie powtarzających się fonemów. Trzeba też pamiętać, że w języku polskim jest ponad 2500 sylab i 150 tysięcy wyrazów z tym, że po uwzględnieniu fleksji jest tego 500 tysięcy! Natomiast w przypadku rozpoznawania fonemów mamy tylko ok 60 klas. Na świecie stosuje się wiele metod rozpoznawania fonemów. Można np. śledzić występowanie formantów (tylko w dźwięcznych głoskach), momenty widmowe (przydatne przy analizowaniu spółgłosek szumowych, tak jak dla formantów i teraz można kreślić mapy zmienności momentów; bez trudu można określić spółgłoski szumne i wszystkie samogłoski)), wyznaczać capstrum, oraz zastosować predykcję liniową (ma siłę 3 poprzednich metod).

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: W celu pobrania próbek wzorcowych został napisany osobny skrypt, który po nagraniu sampli wycina odpowiednie fragmenty danych, robi oknowanie, wylicza moc widma i zapisuje do plików. Natomiast samo uczenie sieci odbywa się zawsze na początku programu głównego. Ze względu na ilość metod identyfikacji skupiłem się na rozpoznawaniu ciszy, oraz samogłosek (łącznie 7 klas).

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_iuuueyyeoeeouuyoooey
Niestety 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",
- R. Tadeusiewicz - "Sygnał mowy",
- M. Kurzynski - "Rozpoznawanie obiektów - metody statystyczne",
- T. Zieliński - "Cyfrowe przetwarzanie sygnałów: od teorii do zastosowań",
- D. Stranneby - "Cyfrowe przetwarzanie sygnałów: metody, algorytmy, zastosowania",
- D. Rutkowska, M. Piliński, L/ Rutkowski - "Sieci neuronowe, algorytmy genetyczne i systemy rozmyte",
- B. Mrozek, Z. Mrozek - "Matlab i simulink: poradnik urzytkownika",
- artykuły poświęcone wybranym zagadnieniom rozpoznawania mowy.


Grzegorz Podolewski © 2008
Valid HTML 4.01 Transitional