Wszystko o rozpoznawaniu mowy
Streszczenie odcinka:
⚫️ Przedstaw się proszę i powiedz parę słów o sobie
⚫️ Czym się zajmujesz na co dzień?
⚫️ Jaki jest związek między ASR i NLP?
⚫️ Czy ASR to już rozwiązany problem? Jak to wygląda dla polskiego?
⚫️ Jakie rozwiązania technologiczne są zwykle wykorzystywane w kontekście ASR?
⚫️ Jakie są obecnie wyzwania dla ASR?
⚫️ Jak wygląda kwestia syntezy mowy?
⚫️ Czy są jakieś narzędzia open source i zasoby ogólnodostępne, które realizują te zadania?
⚫️ Czy na podstawie tych zasobów każdy może zaimplementować własny system ASR?
⚫️ Czym jest CLARIN?
⚫️ Gdzie można Cię spotkać/znaleźć w Internecie?
Materiały powiązane z odcinkiem:
Kontakt z Danijelem:
– Twitter
– GitHub
Biblioteki i zasoby związane z ASR:
– HTK
– Kaldi
– Sphinx
– RASR
– deepspeech
– wav2letter
Transkrypcja odcinka:
Cześć, z tej strony Łukasz Kobyliński. Witajcie w kolejnym podcaście Stacja IT. Dzisiaj porozmawiamy o tajemniczym skrócie ASR (ang. Automatic Speech Recognition), czyli rozpoznawaniu mowy. A o tym bardzo dużo powie nam Danijel Korzinek.
Cześć, Danijel!
Cześć!
Dzięki, że zgodziłeś się z nami porozmawiać. Na początek powiedz kilka słów o sobie.
A propos rozpoznawania mowy, skrót ASR jest rzeczywiście nazwą, która mi się najbardziej podoba i z której korzystam; czasami spotykać można polski skrót: ARM, czyli automatyczne rozpoznawanie mowy. Czasami ludzie używają zwrotu „rozpoznawanie głosu” czy „voice recognition” – to mi się już trochę mniej podoba, bo jest dosyć mylące. Tym ASR-em zajmuję się praktycznie od licencjatu, w latach 2005–2006 trochę się już tym interesowałem. Pojechałem z kolegą na praktyki do IBM, napisałem na ten temat magisterkę oraz doktorat. W międzyczasie uczestniczyłem w licznych projektach – zajmowaliśmy się przeróżnymi tematami związanymi z rozpoznawaniem mowy. Wtedy w Polsce jeszcze nie było tego tak dużo. Jeden z pierwszych projektów dotyczył ZTM-u w Warszawie, w którym ten system cały czas jest jeszcze używany. W tym czasie zajmowaliśmy się także analizą nagrań radiowych, telewizyjnych. Mieliśmy też osobny projekt dotyczący polskiego parlamentu, czyli Sejmu, Senatu itd. W innym, większym projekcie zajmowaliśmy się tłumaczeniami, czyli rozpoznawaniem w sytuacjach turystycznych – jak ktoś gdzieś idzie i korzysta z aplikacji mobilnej, do której może mówić w jednym języku, a ona odpowiada w drugim. Tak więc dotykaliśmy różnych tematów. Cały czas się tym fascynuję. Obecnie bardzo dużo osób, praktycznie ze wszystkich branż, interesuje się tym tematem.
Jakie projekty ciebie w tej chwili zajmują: te bardziej naukowe czy bardziej komercyjne?
Powiedziałbym, że pół na pół, ale, niestety, w praktyce jest tak, że 75% w jednym, 75% w drugim, a 75% w trzecim – w sumie ponad 200%. W każdym razie tematy, jakimi się zajmujemy, są głównie z dziedziny telefonicznej, czyli takie duże call center. Poza tym pracuję w projekcie Clarin, który jest projektem bardziej naukowym, nastawionym na naukowców zajmujących się badaniem języka w dziedzinach humanistycznych, socjologicznych i też potrzebującym przetwarzania dużych ilości danych. Jestem również kierownikiem naukowym w projekcie, który pracuje nad stworzeniem asystenta głosowego, który ma być używany w call center, żeby pomagać agentom lepiej rozmawiać z klientami.
Powiedzmy kilka słów na temat projektu Clarin. Powiedziałeś, że bierzesz w nim udział, bo efekty tego projektu są dostępne dla wszystkich, są open source’owe, więc to może zainteresować wszystkich, którzy korzystają bądź chcą korzystać z tego rodzaju metod. Co w ramach takie Clarinu się dzieje?
Clarin to taki projekt, który praktycznie od 2013 r. nieprzerwanie jest rozwijany i od samego początku zajmuje się rozpoznawaniem mowy. W obecnej wersji jest częścią sieci projektów europejskich i jest całkowicie finansowany przez państwo, przez rząd, więc wszystkie efekty i działania, które powstają i są dostępne publicznie, mogą być używane. Może nie wszystkie, bo niektóre dane są czasami zbyt wrażliwe, więc trzeba mieć jakieś uprawnienia, jeśli ktoś pracuje w jednostkach badawczych, naukowych, ma dostęp do trochę większej ilości informacji, ale na pewno większość efektów pracy, przede wszystkim aplikacji, narzędzi, które tworzymy, udostępnianych jest w internecie za darmo. Ich przeznaczeniem jest robienie badań na danych, które badacze posiadają w dużych ilościach, ale których nie potrafią do końca wykorzystać. Konkretnie w dziedzinie rozpoznawania mowy mamy taką sytuację, że wielu badaczy, czy to lingwistów, czy socjologów, czasami psychologów, zbiera duże ilości nagrań i potrzebuje dużo czasu, żeby je przeanalizować – jest to zrobienie transkrypcji czy szczegółowej anotacji. I okazuje się, że 90% tych nagrań nawet nie nadąża z ich przetwarzaniem. One są gromadzone i nie wiadomo, co z nimi zrobić. Więc wiadomo, że te automatyczne metody nie zawsze spełniają wysokich standardów nauki, żeby wyniki pobrane sposobem automatycznym można było używać jednoznacznie, szczególnie w takich dziedzinach jak psychologia czy medycyna. Czyli musimy mieć bardzo wysoki poziom ufności, jeśli chodzi o anotację tych danych. Niemniej przy tak dużej ilości danych czasami się rzeczywiście opłaca automatycznie je przetworzyć, żeby można było wyciągnąć wnioski w skali masowej. Dotąd w Polsce to nie było robione, w innych krajach więcej robiono na ten temat. Staramy się przenieść niektóre z tych mądrości, które tam poznaliśmy, ale też wymyślać własne rozwiązania, tak żeby badacze mogli wyciągać ciekawe wnioski ze swoich danych.
Omawiając pojęcie ASR, powiedziałeś, że funkcjonują różne jego nazwy, jak np. voice recognition, które już nie jest takie trafne. Co tak naprawdę wchodzi w skład tego, czym zajmuje się ASR?
ASR jest częścią dziedziny o nazwie technologia mowy, która z kolei wchodzi w skład szerszej dziedziny, jaką jest technologia języka. Tak jak tu w podcaście pokazywano wiele innych rozwiązań z dziedziny NLP, to jest to częścią jednego dużego koszyka, jednakże mowa traktowana jest jako odrębny dział, ponieważ mówiąc, nie wykorzystujemy takiej struktury gramatycznej jak w tekście pisanym, używamy wielu skrótów, zdania praktycznie nigdy się nie kończą. Podobnie w technologii mowy są pewne zależności, czyli trzeba znać się troszkę na anatomii, fonetyce, akustyce, żeby całkowicie pojąć ten temat. Te tematy związane z technologiami są trochę zrzucane na bok, aczkolwiek wewnątrz tego też mamy różne poddziedziny.
Problem rozpoznawania mowy definiowany jest tylko w taki sposób, że na podstawie nagrania dźwięków, w którym musi być jakaś zrozumiała treść, interesuje nas wyłącznie transkrypcja tekstu i nic więcej. Czyli jeśli mamy jakiekolwiek inne potrzeby, jak np. rozróżnianie mówców, to staramy się rozdzielać to jako inny problem. Czyli rozpoznawanie mowy definiujemy tylko jako proces zamiany zapisu audio nagrania jakiejś mowy do transkrypcji treści tego tekstu. I ta transkrypcja zazwyczaj jest definiowana jako sekwencja słów. Słowo to podstawowa jednostka w każdym języku czy w większości języków, która nas interesuje na wejściu takiego rozwiązania. I to jest zdefiniowane właśnie jako rozpoznawanie mowy.
Inne pokrewne dziedziny dotyczą rozpoznawania mówców. Też się tym zajmujemy, mamy duże zapotrzebowania na tego typu technologie, ale staramy się to traktować jako inny problem. I tak samo, jak mówimy w drugą stronę, czyli ludzie często zastanawiają się, jaki jest związek między syntezą mowy i rozpoznawaniem mowy, więc, owszem, mamy tu do czynienia z podobnymi modalnościami, z konwersją pomiędzy tekstem a mową, ale problem jest z definicji zupełnie inny. Takim podstawowym problemem jest to, że rozpoznawanie mowy jest o tyle trudne, że ono musi sobie poradzić z dowolnym wejściem. Wejście pochodzi ze świata, jest bardzo zanieczyszczone, więc problem danych wejściowych jest o wiele trudniejszy, a później problem oceny tego jest bardzo prosty, ponieważ mając transkrypcję tego, co rzeczywiście zostało wypowiedziane, i tego, co zwrócił system, wystarczy to porównać.
W przypadku syntezy mowy sytuacja jest troszkę odwrotna, ponieważ zrobienie takiego syntetyzatora, który byłby zrozumiany przez większość osób, jest stosunkowo łatwe. Takie syntetyzatory istniały jeszcze w XIX w., kiedy to ludzie robili takie urządzenia, które potrafiły syntezować dźwięk podobny do ludzkiej mowy. Więc to nie jest nic trudnego. Pytanie: w jaki sposób to zrobić, żeby to było ładne, naśladowało człowieka czy naturalną mowę. Więc sposób oceny syntezy mowy jest bardziej złożony, stąd właśnie wynikają te różnice i podejścia między znalezieniem odpowiedniego systemu.
Powiedziałeś, że zadaniem ASR-a jest dokonanie transkrypcji mowy. W jaki sposób ten zakres ASR-a wiąże się czy przecina z przetwarzaniem języka naturalnego? Czy można powiedzieć, że gdzieś się kończy ASR a zaczyna analiza lingwistyczna języka jako takiego?
Tak. ASR jest taką technologią, która łączy ze sobą wiele różnych dziedzin. Zaczynając od takiego podstawowego poziomu samych danych wejściowych, mamy do czynienia z jakimś niskopoziomowym przetwarzaniem sygnałów, do czego też bardzo nam się przydaje wiedza na temat anatomii człowieka. I ludzie zajmujący się rozpoznawaniem mowy, jej syntezą, wiedzą sporo na temat fonetyki, tego, jak działa nasz słuch. Może się to wydawać trochę mało optymalne, ale często staramy się naśladować naturę właśnie w tworzeniu tego typu systemów. Z drugiej strony mamy takie podejście, w którym uważamy, że ten język ewolucyjnie został stworzony po to, żeby był wygodny w wymawianiu i w rozumieniu przez innych ludzi, więc naśladowanie człowieka jest taką strategią, która często daje najlepszy efekt.
Ale jak już przejdziemy przez fonetykę, rozpoznawanie cech akustycznych i dojdziemy do samych słów, to wtedy przechodzimy dokładnie w problemy typowe dla przetwarzania języka, ponieważ nie wystarczy rozpoznać same sekwencje fonemów, głosek i same dźwięki, żeby skutecznie transkrybować mowę. Żeby dostać skuteczną transkrypcję, bardzo istotny jest kontekst wyrazowy, zdaniowy i całego języka. Dobrym przykładem jest głośna dyskoteka, w której słyszymy co drugi czy co trzeci wyraz. Często jesteśmy w stanie złożyć z tego całe zdanie i zrozumieć, o co chodziło drugiej osobie, ponieważ sam fakt posiadania tej akustyki nie jest konieczny, żeby zrozumieć, o co chodzi. I tutaj sięgamy do tej informacji językowej, żeby ułożyć te zdanie w jakąś konkretną całość.
Czy byłbyś w stanie tak obrazowo wyjaśnić, z jakich elementów składa się system ASR? Co tak naprawdę potrzebujemy, żeby tę mowę rozpoznawać? Bo jak mówisz o fonemach, a z drugiej strony o kontekście całego zdania czy w ogóle języka, to można sobie wyobrazić modele, które są związane z fonetyką, modele językowe. Jakie elementy muszą istnieć w takim systemie, żeby to dobrze razem działało?
To jest oczywiście trochę problem, bo w dzisiejszych czasach pewnie spotykacie się też w innych dziedzinach NLP z takim problemem i coraz bardziej popularne stają się systemy end to end. Czyli mamy taką sytuację, w której część osób w ogóle nie stara się nie rozdzielać tych wszystkich elementów, tylko bierze jakąś ogromną sieć neuronową, wpycha dane wejściowe w jedną stronę i trzyma kciuki, żeby im po drugiej stronie wyszło coś fajnego. Ale oczywiście rozpoznawanie mowy przeszło ogromną ewolucję i wydzielono historycznie kilka najbardziej potrzebnych kroków do zrobienia systemu rozpoznawania mowy. Pomijając rzeczy związane z preprocessingiem, skupiając się tylko na rozpoznawaniu mowy, mamy generalnie takie kroki, że dźwięk na wejściu nagrywamy w odpowiedniej częstotliwości próbkowania i analizujemy, zamieniamy na taki zestaw cech, które najlepiej opisują tę zawartość. I jest kilka takich algorytmów, które w sposób skuteczny przetwarzają ten dźwięk na coś, z czego można wyciągnąć informacje o głoskach, które się w środku zmieniają. Jak mamy takie cechy, robimy coś, co nazywa się „model akustyczny”, czyli żeby w tym strumieniu, tej sekwencji cech rozpoznać jakieś jednostki fonetyczne. I tu specjalnie mówię o jednostkach fonetycznych, bo najprostszą taką jednostką jest fonem. Często fonemy jako takie nie są używane, używane są natomiast zbitki fonemów: difony, trifony; można sobie wyobrazić, że wychodzi z tego opis fonetyczny tego, co dzieje się w danym nagraniu. Ten model akustyczny tradycyjnie był rozpoznawany na podstawie mieszanek Gaussowskich, czyli takiego mechanizmu generatywnego do rozpoznawania treści, właściwie do analizowania dowolnych treści rzeczywistych.
Z czasem ludzie zaczęli kombinować bardziej z sieciami neuronowymi. W dzisiejszych czasach już praktycznie we wszystkich systemach do tego celu używane są jakieś głębokie sieci neuronowe. Mając wyjście z takiej sieci neuronowej, która rozpoznaje fonemy, trzeba je później przetworzyć na jakieś hipotezy, na jakieś potencjalne wyrazy. Oczywiście to nie jest takie proste, ponieważ wiadomo, że daną sekwencję fonemów można na różne sposoby złączyć w wyrazy. I z tego generowana powstaje lista potencjalnych wyrazów w każdej chwili w czasie. I te sekwencje potencjalnych wyrazów są oceniane modelem akustycznym, ale dodatkowo też modelem języka. A model języka jest definiowany jako taki, który ocenia prawdopodobieństwo następowania po sobie jakichś sekwencji słów. I taki model może być zaimplementowany na różne sposoby. Najczęściej używane są modele statystyczne, modele n-gramowe, które działają bardzo szybko, bo to są praktycznie takie tablice, takie lookup tables, aczkolwiek pojawiają się też coraz częściej modele oparte na sieciach rekurencyjnych czy inne. I na tej podstawie mamy do czynienia z sytuacją, w której centralnym elementem takiego systemu rozpoznawania mowy jest tzw. dekoder, czyli maszyna, algorytm, który wśród różnych hipotez wyszukuje najbardziej prawdopodobną sekwencję słów i jest odpowiedzialny za to, jak szybko i jak wydajnie taki system będzie pracował. Jak zatem widać, rozpoznawanie mowy jest to połączenie wielu różnych dziedzin. W zespołach zajmujących się rozpoznawaniem mowy staramy się mieć ludzi o różnych specjalizacjach i z różnych dziedzin, żeby to wszystko jakoś skleić razem.
Powiedziałeś, że sama dziedzina ma długą historię, a syntezie mowy jeszcze dłuższą, bo sięgającą XIX w., czyli rozpoznawaniem mowy ludzie zajmują się już długo. Ale czy to po prostu działa i można z tego zawsze komercyjnie skorzystać? Pewnie nie, skoro zajmujesz się tym też badawczo, więc coś tutaj jest jeszcze do zrobienia. Zresztą sami widzimy, że urządzenia, które teoretycznie rozpoznają mowę, jak np. telefony, albo nie robią tego w ogóle dla języka polskiego, albo nie tak dobrze, jak byśmy chcieli. Jakie problemy należy tu jeszcze rozwiązać i gdzie w ogóle jesteśmy w tym procesie doskonalenia metod rozpoznawania mowy?
Najpierw szybko wspomnę o tej właśnie historii. Ludzie nie są tego świadomi. Wiele osób, szczególnie tych młodych, które urodziły się po roku dwutysięcznym, nie jest świadomych tego, że praktycznie wszystkie technologie i rozwiązania, których dzisiaj używamy, mają zazwyczaj o wiele dłuższą historię, niż nam się wydaje. W przypadku rozpoznawania mowy najwcześniejsze przykłady, jakie mi się udało znaleźć, sięgają lat 40. I 30. XX w. Już wtedy ludzie wyobrażali sobie i robili nawet patenty, prototypy takich systemów, które miały zastosowanie praktycznie w tych samych dziedzinach, o których dzisiaj mówimy. To, co dzisiaj tworzymy, już niedługo będzie liczyło 100 lat.
Dużą rewolucją było właśnie wprowadzenie pojęcia ukrytych modeli Markowa w połączeniu z mieszankami Gaussowskimi, takiego bardzo statystycznego podejścia do rozpoznawania mowy w latach 70. Wtedy bardzo znane były dwa takie nazwiska, jedno to Frederick Jelinek – znany z NLP, pracował w firmie IBM – a drugie dr Baker, który stworzył firmę Dragon Sisters. Firma ta w latach 90. osiągnęła bardzo duże sukcesy. System rozpoznawania mowy o nazwie Dragon był najbardziej znanym, jeśli nie najlepszym, najlepiej działającym na świecie. I niestety przez różne problemy natury finansowej, ekonomicznej ta firma zbankrutowała i już praktycznie nikt o niej nic nie wie.
Od lat 70. do lat 90. nastąpił prawdziwy rozkwit różnego rodzaju rozwiązań. W latach 90. praktycznie rozwiązano większość z tych problemów, o których dzisiaj rozmawiamy. Wtedy już istniały systemy do dyktowania, do sterowania, asystenty też istniały. Oczywiście miały one ograniczone możliwości, trzeba pamiętać, że ówczesne komputery miały o wiele mniejsze możliwości, pecety miały może kilka czy kilkadziesiąt mega RAM-u, procesory były kilkuset megahercowe, ale wszystko działało i wszystko się dało na nich zrobić. Ludzie nie siedzą i nie odmrażają starych pomysłów, które zostały wtedy wymyślone, bo zmieniło się to, że starają się dzisiaj rozwiązywać coraz to trudniejsze problemy związane z rozpoznawaniem mowy, czyli w nauce cały czas wymyślają bardziej złożone problemy do rozwiązania. To, co w latach 90. wyobrażano sobie za cel, to były problemy, w których mieliśmy w miarę jasną sytuację, jasne warunki akustyczne, ludzie siedzieli w takich pokojach, jak my teraz siedzimy, że nie było żadnego hałasu, mieli bardzo dobre mikrofony. Z kolei to, co dzisiaj próbują rozwiązać, to takie rozpoznawanie: jest jakiś jeden mały mikrofon ukryty w jakimś pudełku, który znajduje się 20 m od osoby, czyli to, co mamy w tych urządzeniach typu Google Home i podobnych. Tak samo inne dziedziny, np. telefoniczne, spotkania. To są nadal problemy, które słabo działają w przestrzeni komercyjnej, czyli w takich gotowych produktach. Są wyzwaniami tak naprawdę dla naukowców. Szczególnie jest taki problem cocktail party problem czy skrótowo: cocktail speech, chodzi o sytuację, w której wiele osób mówi naraz. Jesteśmy w jakimś pokoju, w których wszyscy gadają w tym samym czasie, a musimy wydobyć informację o jednym konkretnym głosie, który nas interesuje. Jeśli jest to zaburzone jakimś hałasem, jednorodnym, przewidywalnym albo przynajmniej z jakiegoś innego źródła, to można próbować to w jakiś sposob odfiltrować, ale jeśli to są inne głosy, które mają podobną charakterystykę dźwiękową do tego, co próbujemy rozpoznać, to wiadomo, że dochodzi do dużych zaburzeń przepływu informacji i ciężko jest z tego coś sensownego wydobyć.
A jak to wygląda, jeśli chodzi o porównanie przetwarzania różnych języków? Czy zauważasz różnice np. podczas ewaluacji różnych metod dla języka angielskiego, niemieckiego, polskiego czy innych języków słowiańskich? Czy dostrzegasz znaczące różnice w dokładności rozpoznawania mowy, a jeśli tak, to z czego one wg ciebie wynikają?
Tak, oczywiście. Jednym z głównych problemów jest przede wszystkim ta nierówność i niesprawiedliwość, że na świecie mamy ten jeden język, który jest najbardziej wałkowany, czyli angielski, a wszystkie inne są w tle. To rzeczywiście jest duży problem i to widać. Nie będę specjalnie powtarzał, bo wydaje mi się, że od czasu do czasu są robione analizy. Kiedyś mieliśmy taką fajną książkę, wydaną przez konsorcjum Meta-Share, które porównywało różne języki europejskie w różnych dziedzinach, również rozpoznawania mowy. I tam było dokładnie widać, jaki język jest na jakim poziomie. Język polski nie jest najgorszy, są o wiele gorsze. Niestety w dziedzinie rozpoznawania mowy, tak samo zresztą jak w większości dziedzin, nie ma zbyt wielu informacji, które można zapożyczyć z innych języków. Jeśli rozwiążemy czeski, to pomysł możemy przenieść do języka polskiego, ale modeli to już raczej nie. Raczej wszystko musimy robić od nowa. Musimy mieć własne korpusy, własne systemy do trenowania i później własne systemy, które z tego będą korzystały.
Nawet jak mamy do czynienia z językiem angielskim, z dużą ilością danych, mamy problem z dziedzinami. Czyli nie ma czegoś takiego jak ogólny system oparty o uczenie maszynowe, który będzie dorównywał człowiekowi i rozwiązywał wszystkie problemy zawsze i wszędzie. Może są jakieś problemy, ale jakoś takich nie kojarzę. Na pewno jest tak, że jeśli mamy jakąś konkretną dziedzinę, np. chcemy rozpoznawać podcasty, to możemy spróbować użyć jakiegoś ogólnego modelu, który został wytrenowany na jakichś innych nagraniach, np. bardzo popularnym źródłem danych są audiobooki, które są ogólnodostępne i posiadają przede wszystkim transkrypcje. Są bardzo dobrze poanotowane. I na podstawie audiobooków można rozpoznawać podcasty. Ale prawdą jest to, że gdybyśmy mieli korpus zrobiony na podcastach, to model, który by powstał z tego korpusu dziedzinowego, byłby niewątpliwie dużo, dużo lepszy niż taki model ogólny.
Pewnie na podcastach z danej dziedziny, pewnie dobrze da się trenować na podcastach o ekonomii czy o finansach.
I na tym polega różnica między rozpoznawaniem mowy a innymi problemami językowymi, że nie chodzi wyłącznie o dziedzinę językową, bo owszem, język jest bardzo ważny, ale chodzi także o dziedzinę akustyczną, czyli mamy dwa takie elementy, dwa takie podstawowe modele: model języka i model akustyczny, i każdy z nich optymalizowany w zasadzie osobno. Te dwie informacje muszą być uwzględnione, czyli tutaj się już robi ilość dziedzin do rozwiązania do kwadratu w porównaniu z innymi problemami NLP.
Na ile takie systemy do języka polskiego są czy mogą być dobre? Czy można tu rzucić jakimiś liczbami, może dla jakiejś konkretnej dziedziny? Mówiłeś o analizie wystąpień w Parlamencie, na ile dokładne są takie systemy? Czy to jest tak, że 70% zdań czy 80% słów jest poprawnie rozpoznawanych? Na jaką jakość takiego systemu możemy obecnie liczyć?
Zacznijmy od tej jakości. Jedną z takich podstawowych miar, która jest używana w ocenie rozpoznawania mowy, jest właśnie stopa błędu oparta o wyrazy, czyli tzw. word error rate. I tak jak mówiłem, wyraz jest podstawową jednostką zazwyczaj dla rozpoznawania mowy. Więc na tym opierają się wszystkie metryki związane z dokładnością. Jest to bardzo uśredniona miara w przypadku innych problemów, więc warto zawsze patrzeć na to sceptycznie, tak jak ze wszystkim w życiu. Jednym z problemów tej miary jest to, że traktuje ona każde słowo tak samo, a wiadomo, że w języku nie zawsze zależy nam na tym, żeby wszystkie słowa były tak samo poprawnie przetranskrybowane, tzn. niektóre błędy są gorsze od innych, tutaj każdy błąd liczony jest w ten sam sposób.
Drugim problemem są oczywiście referencje, czyli zbiór referencyjny, na podstawie którego coś takiego liczymy. Jak sobie wejdziemy do jakiejś firmy, spytamy, jaki mają wynik, to oni oczywiście powiedzą: „panie, 5% błędu”, czy nawet mniej, czasami nawet 2–3% błędu, to jest w ogóle żaden błąd, tam w ogóle nic takiego się nie dzieje. Ale wiadomo, że firmy będą w taki sposób próbowały dokonywać tych testów, żeby wynik był zawsze jak najlepszy. Więc zawsze można wybrać taki zbiór danych, który da nam jakiś zadowalający wynik. Te wszystkie rzeczy warto traktować bardzo sceptycznie.
Tak zupełnie uczciwie rzecz biorąc, mamy kilka własnych eksperymentów, zbiorów referencyjnych, które publikowaliśmy w różnych miejscach. Na przykład zaczynając od Parlamentu, to dosyć dawno robiliśmy te eksperymenty. I wtedy stopa błędów wychodziła gdzieś na poziomie 20%. Wydaje mi się, że w dzisiejszych czasach moglibyśmy zejść spokojnie do 10–15%, w tej chwili nie powiem tego dokładnie. Z drugiej strony, mając zbiór mowy czystej, jeden z naszych podstawowych korpusów referencyjnych jest nagrany w studiu, w którym ludzie po prostu czytali zdania w sposób poprawny, czyli staraliśmy się, żeby wymawiali wszystko poprawnie, by nie robili żadnych błędów w tych zdaniach, bo zależało nam na tym, żeby transkrypcja odpowiadała nagraniu w jak najwyższym stopniu. I na tego typu nagraniach spokojnie możemy osiągnąć błędy na poziomie od 3% do 7%.
Pytanie: co te błędy oznaczają? Myślę, że ludzi to często interesuje. I to wszystko zależy od zastosowania. Jeśli mówimy o dyktowaniu, to wtedy zależy nam, żeby tych błędów było jak najmniej. Stąd pojawia się ten cały pomysł na stopy błędów na poziomie słów, bo kiedyś głównym zastosowaniem rozpoznawania mowy było dyktowanie. Zależy nam na tym, żeby zrobić jak najmniej edycji ręcznych oraz rozpoznawania mowy, żeby później mieć poprawną transkrypcję. Stąd chcemy, żeby tych błędnych słów było jak najmniej w tej transkrypcji.
Z kolei jeśli mówimy o problemach typu wyszukiwanie jakiejś informacji, gdzie chcemy tylko mniej więcej rozpoznać treść, ale żeby tam się znajdowały mniej więcej jakieś tam słowa, powiedzmy, że zadaniem jest jakaś kategoryzacja nagrań i chcemy zrobić taką chmurę tagów w powiązaniu z jakimś nagraniem, to wtedy wiadomo, możemy sobie pozwolić na dużo wyższą stopę błędów, wiele wyrazów możemy olać. I tam stopy błędów na poziomie 30% się do tego jak najbardziej nadają. Ja zazwyczaj mówię w taki sposób, że między 10% a 20%, jest to taka stopa błędu, z którą w pesymistycznym przypadku można żyć. Jeśli nie mamy czasu i bardzo chcemy, żeby coś działało i żeby to miało jakąkolwiek wartość komercyjną, to trzeba się postarać, żeby to było co najmniej w takich granicach 10–20%. Poniżej 10% to już są takie rozwiązania, którym poświęciliśmy trochę czasu, żeby działały. I poniżej 10%, szczególnie w nagraniach telefonicznych, to jest coś, do czego zawsze dążymy. Oczywiście jeśli chcemy mieć produkt z najwyższej półki, który daje bardzo dobre wyniki i będzie ceniony, to powinniśmy dążyć do miary poniżej 5%. Wszystkie te wartości są bardzo uogólnione, ale mniej więcej odpowiadają wartościom, do których dążymy.
To daje jakieś pojęcie na temat tego, co te systemy teraz mogą nam dać i gdzie ewentualnie można walczyć o lepsze wyniki.
Wspomniałeś o różnych zastosowaniach, o Parlamencie, o ZTM-ie, tych projektach, w których brałeś udział, ale też teraz o systemach telefonicznych. Powiedzmy więcej o tym, gdzie ASR jest w tej chwili najczęściej wykorzystywany, gdzie się najlepiej sprawdza, ewentualnie gdzie te poziomy błędnego rozpoznania wyrazów są bardziej istotne, a gdzie mniej.
Jednym z takich pierwszych zastosowań było właśnie dyktowanie. Geneza jego jest taka, że kiedyś każdy biznesman miał sekretarkę, która stała obok niego i notowała wszystko to, co on mówi. Nie każdy, ale oczywiście każdy szef dużej korporacji, CEO. Chodziło o to, żeby dać spokój tej sekretarce, aby mogła poświęcić się innym zadaniom. I stąd właśnie powstały produkty typu dyktowanie, ze szczególnym nastawieniem na słownictwo biznesowe. Pojawiły się też inne dziedziny, które się dobrze sprzedawały. W tamtych czasach byli to prawnicy, bo oni mieli dużo kasy i bardzo dużo musieli notować, i lekarze; przynajmniej w Stanach Zjednoczonych już od bardzo długiego czasu lekarze mają obowiązek zapisywać wszystko w postaci cyfrowej, i te rzeczy trafiają do jakichś archiwów i są zapominane, ale to wszystko musi być archiwizowane; więc takie usługi transkrypcyjne dla lekarzy były, są i jeszcze bardzo długo będą czymś bardzo potrzebnym. I stąd pojawiły się takie trzy podstawowe dziedziny, jeśli chodzi o dyktowanie.
Od samego początku ludzie mieli świadomość, że bardzo ważną dziedziną są generalnie problemy związane ze sterowaniem, z komunikacją, z komputerem. I tutaj nawet nie muszę przywoływać przykładów z Odysei kosmicznej czy Star Treka, które, jak wiadomo, mają bardzo długą historię. Więc w latach 60. czy nawet wcześniej, kiedy te pomysły pierwszy raz pojawiały się w głowach autorów, ludzie mieli świadomość, że coś takiego może istnieć, że coś takiego powstanie. Więc od początku próbowano robić takie rozwiązania, w których można głosem sterować różnymi urządzeniami. I ten problem wpada w taką dziedzinę, która nazywa się komunikacja: człowiek – komputer, human computer interaction. Tę komunikację można przeprowadzać na różne sposoby i w dzisiejszych czasach zazwyczaj korzystamy z myszki, klawiatury, ale od początku ludzie mieli ochotę, żeby również używać głosu. W jakim stopniu to się udało, poznajemy po tym, że co jakiś czas są podchody do tego, żeby zachęcić do tego ludzi. Jest dużo użytkowników tego typu rozwiązań, szczególnie dzisiaj, aczkolwiek jeszcze to się nie stało na tyle powszechne, żeby można było całkowicie pozbyć się klawiatury, myszki czy ekranu dotykowego, jest to taka rzecz, która nadal wymaga dopracowania, żeby stać się bardzo powszechną.
Kolejna dziedzina, która jest coraz bardziej popularna, to różnego rodzaju chatboty, dialogi. I takie chatboty można umieścić w różnych kontekstach. Może to być asystent głosowy, z którym porozmawiamy na urządzeniu, interaktywny formularz na stronie internetowej albo po prostu automatyczna usługa w jakimś centrum telefonicznym. Tutaj chodzi o połączenie kilku różnych technologii, czyli rozumienia, rozpoznawania i syntezy mowy, generowania odpowiedzi. Jest to bardzo złożony problem, nawet jeśli mamy tylko do czynienia z chatbotem tekstowym, wiadomo, że jest to problem nietrywialny, a jeszcze jak dodamy do tego głos, to sobie tylko utrudniamy bardziej tę całą dziedzinę. Niemniej takie rzeczy też powstają.
I mamy jeszcze takie dziedziny, o których warto nie zapominać. Jest bardzo dużo rzeczy, bo jak tak rozmawiamy i jak ludzie się zastanawiają, w co warto wejść, to bardzo nastawiają się na tych użytkowników końcowych, na produkty, które można sprzedać na rynku w pudełku albo na jakimś play storze, a zapominają, że jest bardzo dużo takich rozwiązań czysto biznesowych, takich B2B, które warto też rozwijać. Jednym z takich niesamowicie istotnych gałęzi jest transkrypcja różnych treści multimedialnych, w tym np. filmów, programów telewizyjnych. I tutaj np. Polska jeszcze jest bardzo w tyle za światem. Generalnie istnieją takie regulacje europejskie i polskie, które zobowiązują nadawców telewizyjnych do generowania napisów dla osób niesłyszących. Te obietnice, że to zostanie zrobione na jakimś poziomie cenowym, cały czas są niedotrzymywane. I tutaj bardzo dużo jest jeszcze do zrobienia, żeby np. przyspieszyć i zautomatyzować tego typu rozwiązania.
Faktycznie dla języka polskiego w niewielu miejscach to działa, a jedną z zabaw moich znajomych jest włączanie transkrypcji w takich komunikatorach, z jakich teraz korzystamy, np. w Google Meet, które jest przystosowane do rozpoznawania angielskiego, i rozmawianie po polsku, ażeby zobaczyć, jaka transkrypcja pojawi się na żywo. To jest bardzo wesołe zajęcie. Ale faktycznie, ta transkrypcja jest czymś istotnym, a nie wygląda na to, żeby była podjęta przez poszczególne instytucje, które miałyby w tym interes.
Gdyby ktoś był zainteresowany, jak mógłby podjąć się rozpoznawania mowy? Czy w związku z tym są takie narzędzia, z których można skorzystać samodzielnie? Załóżmy, że jestem programistą czy nawet zajmuję się analizą danych, ale do tej pory akurat dźwiękiem się nie zajmowałem, to czy mogę skorzystać z jakichś gotowych bibliotek czy rozwiązań, które przyspieszą mi ten start, dadzą mi jakiś punkt wyjścia do dalszych badań?
Czekałem na to pytanie. To jedna z rzeczy rzeczywiście bardziej skomplikowanych. W ogóle jak pojawia się pytanie: „Jak mam w to zacząć?”, to jest to bardzo kontrowersyjny temat, bo problem nie jest łatwy do rozwiązania. Niewątpliwie jeśli ktoś ma ochotę zrobić produkt i nie ma potrzeby, żeby inwestować w to zbyt dużo własnego wysiłku i czasu, powinien rozważyć jakieś usługi, rozwiązania gotowe. I o ile kiedyś było bardzo dużo rozwiązań, które można było sobie kupić, zainstalować u siebie, to w dzisiejszych czasach przeważnie takie rozwiązania są dostępne w chmurze i to za całkiem przystępną cenę. Nie jest to drogie, bo godzina takiej transkrypcji kosztuje mniej niż dolar, a już nie mówiąc o tym, że ludzie i tak korzystają z tych usług chmurowych, więc w pakiecie to się wszystko jakoś uda zbilansować. Niestety, nie zawsze można z czegoś takiego korzystać. Są np. takie sytuacje, w których mamy takiego klienta jak np. bank czy kogoś, kto nie chce, żebyśmy ich nagrania przepuszczali przez jakąś chmurę w jakimś obcym państwie, i generalnie nie ma szans, żeby z czegoś takiego korzystać. Więc takie rozwiązania, których można używać u siebie, owszem, istnieją, tylko zazwyczaj są bardzo drogie. Firmy w Polsce nie są w stanie konkurować z firmami światowymi, bo nie mają takiego budżetu, żeby zapłacić, bo to są zazwyczaj ceny rzędu kilku tysięcy euro czy dolarów na jeden kanał. Czyli jeśli chcemy obsługiwać równolegle wiele strumieni takich informacji, to bardzo szybko to się duplikuje. Takie duże call center bez problemu może pochłonąć tysiące takich strumieni równolegle. I tutaj mówimy oczywiście o jakiejś subskrypcji, więc ta cena oczywiście jest na jakąś tam jednostkę czasu. Jest to niewątpliwie kłopot, ale jeśli chcemy sami w to wejść, to problemem jest to, że żeby to wszystko dobrze zrozumieć, trzeba mieć doświadczenie w kilku różnych dziedzinach. Takie super gotowe rozwiązania w internecie, jakie istnieją, zazwyczaj mają modele, które zostały wytrenowane na czymś, co często ma biznesowo małą wartość. Wiadomo, że nikt, kto na czymś może zarabiać, nie wrzuci tego za darmo do internetu. Dobrym przykładem jest to, z czym ostatnio się spotkałem, jest to mianowicie analiza sentymentu. Ile osób np. próbowało robić coś tak trywialnego jak analiza sentymentu i opierać swoje wszystkie wyniki na korpusie IMDb? To jest chyba jedyna rzecz, która jest tak powszechnie dostępna, a wiadomo, że recenzje filmowe do takich celów biznesowych mają się dosyć średnio. Nie jest to rzecz porównywalna. I tego typu przykładów rozpoznawania mowy też mamy bardzo dużo.
Od czasu do czasu staramy się udostępniać takie bardziej ogólne systemy rozpoznawania mowy, ale oczywiście wynik z tego będzie zawsze inny. Więc ja podam tutaj kilka takich nazw, które warto rozważyć, których można dalej poszukać w internecie, z tym zastrzeżeniem, że droga nie jest taka prosta. Jeden z najbardziej popularnych systemów, z których my również korzystamy, nazywa się Kaldi. Jest on obecnie jednym z najbardziej rozwijanych i popularnych systemów open source’owych, który ma najwięcej użytkowników. Oprócz niego w różnych dystrybucjach i stronach internetu na pewno znajdziemy taką nazwę jak Sphinx, robiony przez Uniwersytet Carnegie Mellon, który ma bardzo długą historię, ale Sphinx, o ile jest to takie rozwiązanie na dosyć wysokim poziomie inżynieryjnie, w sensie takim, że ma odpowiedni set up czy można go zainstalować na dowolnym UNIXie, ma sensowne wsparcie, to wykorzystuje trochę bardziej przestarzałą technologię niż to, co mamy w systemie Kaldi czy w innych, bardziej nowoczesnych systemach. Niemniej, żeby to szybko postawić, to można spróbować.
Inny system, który jest jeszcze starszy, nazywa się HTK. Zainspirował on m.in. Kaldi i wiele innych systemów. To jest bardzo stary system, który ma strasznie dużo takich rzeczy historycznych. Ale ciekawe jest to, że ostatnio znowu został odświeżony. Więc jeśli ktoś chce zaczynać od czegoś, może również rozważyć taką opcję, bo tam się pojawiają nowe rozwiązania.
Są inne systemy, konkurencyjne, bardzo podobne do Kaldi. Na przykład jest taki system robiony w Niemczech o nazwie RASR, który został zrobiony przez RWTA Aachen, i też jest konkurencyjny, jeśli chodzi o możliwości, do Kaldiego. Ale z tymi systemami jest znowu ten problem, że ilość użytkowników i wsparcia technicznego jest odpowiednio niższa. I to są takie klasyczne systemy, które wszyscy znamy, które są rozwijane, popularne. A od kilku lat pojawia się coraz więcej takich systemów opartych na sieciach neuronowych. I one powstały z kilku powodów, m.in. dlatego, że firmy, które zrobiły systemy do modelowania sieci neuronowych typu Google, Facebook itd., chciały zademonstrować, że rozpoznawanie mowy można robić również w ich rozwiązaniach. Niemniej wyniki, jakie można wygenerować tego typu systemami, są dosyć wysokie. I te systemy są end to end. I nazwy, po których można je wyszukać, to np. „deep speech”, tak jak wszystkie inne rzeczy oparte na „deep”. Niedawno Facebook wypuścił bibliotekę o nazwie wav2letter. Pojawiła się jeszcze biblioteka o nazwie Espresso, która jest oparta na PyTorch. Czyli czy korzystamy z TensorFlow, czy z Torcha, jakieś tam rozwiązania się znajdą.
Jaki jest problem z tymi systemami end to end? Problem jest taki, że one zazwyczaj wymagają wielkich zbiorów danych. Czyli z jednej strony mamy ten problem, że język polski w ogóle jest niekonkurencyjny, jeśli chodzi o ilość danych, z drugiej – nawet jeśli mamy dużo danych ogólnych, to jeśli chcemy taki system dotrenować do jakiejś konkretnej dziedziny, to niestety mamy z tym zazwyczaj jakiś kłopot. Tak więc warto wziąć to pod uwagę. Takie rozwiązania są bardzo atrakcyjne, ale mogą być bardzo kosztowne, czyli wymagają od nas przygotowania wielkich zbiorów danych i potrzebują ogromnej mocy obliczeniowej do wytrenowania i przygotowania ich do zastosowania komercyjnego.
W Polsce istnieje kilka firm. I to, co jest ciekawe i mnie też cieszy, to to, że takich rozwiązań komercyjnych, które wykorzystują wszystkie z tych technologii, zarówno te bardziej tradycyjne, jak i bardziej nowoczesne. Rozmawiałem z różnymi firmami, które oferują takie usługi w Polsce, więc można się ich dopytać, z czego korzystają, jakie będą koszty takiego rozwiązania. Wybór zawsze jest.
A jak to wygląda, jeśli chcielibyśmy tak bardziej bezpośrednio zastosować coś do języka polskiego? Powiedziałeś o systemach opierających się na głębokich sieciach, że wymagałoby to wytrenowania na dużych ilościach danych. Czy dostawcy tych rozwiązań też przygotowują modele dla różnych języków czy trzeba to zrobić samemu? Jak to wygląda np. w przypadku Kaldi – czy tutaj też jest potrzebny jakiś model czy to po prostu działa?
Model jest jak najbardziej potrzebny, więc sytuacja jest taka, że danych zupełnie darmowych, publicznie dostępnych trochę jest. Nie ma ich bardzo dużo na język polski, ale coś tam można znaleźć. Przede wszystkim problem polega na tym, że prawo autorskie nam nie pozwala wszystkich danych publicznie udostępniać w internecie. Jest taka ciekawa sytuacja z Parlamentem, że o ile same jego posiedzenia należą do domeny publicznej i można z nimi robić, co się chce, bo to jest dokument prawny, który nie ma żadnego właściciela, jest z definicji dobrem publicznym, to te same nagrania audio video, które zostały stworzone przez Telewizję Polską, będącą spółką akcyjną, są zastrzeżone prawami autorskimi. Więc oczywiście można znaleźć te dane, one są dostępne za darmo, ale ich nie można rozpowszechniać. Czyli trochę się trzeba napracować, żeby zdobyć większe ilości tych danych.
Takie korpusy, jakie można znaleźć w internecie, dochodzą do stu godzin. Teraz jesteśmy w tracie przygotowania wniosku, projektu, który może zaowocuje większymi ilościami tego typu darmowych danych, które udostępnimy w internecie. Tak w ogóle jeśli chodzi o język polski, to wszystkich danych, które ja znam osobiście, a trochę się tym zajmuję, jest kilka tysięcy godzin. Taki największy korpus, który jest dostępny, używany, ale niepublicznie, sięga do 700–800 godzin. I w połączeniu ze wszystkimi innymi korpusami – mamy do czynienia z kilkoma tysiącami godzin. Oczywiście różne firmy posiadają własne dane, o których ilościach nie wiemy i o których ilościach się nie mówi publicznie. W porównaniu z danymi, które obracają się w języku angielskim, gdzie taki jeden paper, wykorzystuje np. 10 tys. czy 20 tys. godzin, jakbyśmy zebrali wszystkie dane angielskie, to nie zdziwiłbym się, jakbyśmy przekroczyli 100 tys. godzin na język angielski porównywalnie.
Czyli dużym wyzwaniem jest zgromadzenie odpowiednio dużego materiału treningowego, najlepiej pod konkretną dziedzinę.
Tak. Aczkolwiek jeśli chodzi o modele, często faktycznie ja udostępniam kilka modeli do danych, których nie mogę udostępnić, więc oczywiście warto się popytać. Można znaleźć gotowe modele wytrenowane, tylko że one zazwyczaj będą dotyczy takich dziedzin, które nie mają dużej wartości komercyjnej, więc zawsze trzeba traktować to z przymrużeniem oka, ewentualnie liczyć się z tym, że takie modele trzeba dotrenować itd.
Danijel, dzięki za to spojrzenie na ASR. Myślę, że szczególnie ten polski kontekst jest dla wielu osób interesujący. Na pewno jest tu wiele innych aspektów związanych właśnie z ASR, których nie poruszyliśmy – to jest tylko wierzchołek góry lodowej. Powiedz, gdzie można cię znaleźć w internecie, gdzie można znaleźć materiały, które udostępniasz, czy ewentualnie z tobą porozmawiać, to będzie też wartościowe dla naszych słuchaczy.
Ja jestem cały czas dostępny. Ewentualne namiary zostawię w opisie podcastu, bo pracuję na uczelni i przez uczelnię zawsze bardzo chętnie odpowiadam na pytania. Poza tym od dłuższego czasu staram się utrzymywać takie repozytorium na GitHubie, w którym umieszczam różnego rodzaju pomysły, eksperymenty własne. Niedawno zacząłem korzystać z Twittera. Przyznaję, że dopiero niedawno się do tego przekonałem. Więc również tam będę od czasu do czasu zaglądał. Nie doceniałem jeszcze tego źródła informacji, ale może to się zmieni. To są moje główne miejsca, w których można mnie złapać, czyli email, GitHub i Twitter.
Dzięki jeszcze raz i mam nadzieję, że do usłyszenia w kolejnym podcaście.
Dzięki, cześć.