🎙️ Rozpoznawanie mowy — dekodowanie HMM Viterbiego na żywo
Obserwuj, jak ukryty model Markowa dekoduje syntetyczną sekwencję cech akustycznych na najbardziej prawdopodobną ścieżkę fonemów za pomocą prawdziwego algorytmu Viterbiego, z żywą wizualizacją kraty.
O rozpoznawaniu mowy
Zanim zapanowały sieci neuronowe typu end-to-end, praktycznie każdy produkcyjny system rozpoznawania mowy był zbudowany na tym samym matematycznym szkielecie pokazanym tutaj: ukrytym modelu Markowa, którego stany to fonemy (lub jednostki podfonemowe), z macierzą przejść kodującą, jak fonemy następują po sobie, oraz modelem akustycznym oceniającym, jak dobrze każda klatka dźwięku pasuje do każdego fonemu. Mając sekwencję obserwacji akustycznych, algorytm Viterbiego znajduje jedyną najbardziej prawdopodobną ścieżkę fonemów w czasie proporcjonalnym do długości sekwencji razy liczba stanów — zamiast wykładniczo wielu ścieżek, które musiałoby sprawdzić naiwne przeszukiwanie — wypełniając kratę bieżących wyników najlepszej ścieżki kolumna po kolumnie i zapisując w każdej komórce, który poprzedni stan wygenerował ten najlepszy wynik.
Ta symulacja implementuje ten dokładny algorytm, bez skrótów: prawdziwy 5-stanowy fonemowy HMM od lewej do prawej (SIL → K → AE → T → S, kształt słowa „cats”) z rzeczywistą macierzą przejść i rozkładami emisji dla każdego stanu nad 8-symbolowym zdyskretyzowanym alfabetem akustycznym, syntetyczną wypowiedzią próbkowaną przez rzeczywiste przejście przez łańcuch Markowa i losowanie z niego zaszumionych obserwacji oraz od podstaw zbudowanym programem dynamicznym Viterbiego w domenie logarytmicznej z prawdziwymi wskaźnikami wstecznymi. Naciśnij odtwarzanie, by obserwować, jak krata wypełnia się od lewej do prawej, gdy przejście w przód oblicza bieżące maksimum logarytmu prawdopodobieństwa każdej kolumny, a następnie obserwuj, jak zwycięska ścieżka jest śledzona wstecz przez wskaźniki wsteczne — i porównaj ją, klatka po klatce, z białym konturem oznaczającym prawdziwą sekwencję fonemów, która faktycznie wygenerowała dane.
Najczęściej zadawane pytania
Czym jest ukryty model Markowa i co jest w nim „ukryte”?
Ukryty model Markowa (HMM) zakłada, że system przechodzi przez sekwencję nieobserwowalnych (ukrytych) stanów zgodnie z łańcuchem Markowa — kolejny stan zależy tylko od bieżącego, poprzez ustaloną macierz prawdopodobieństw przejść — jednocześnie emitując w każdym kroku czasowym obserwowalny symbol wylosowany z rozkładu emisji charakterystycznego dla danego stanu. W tej symulacji ukrytymi stanami są fonemy (SIL, K, AE, T, S), przez które naprawdę przechodzi mówiący, a obserwacjami są zdyskretyzowane symbole cech akustycznych zastępujące skwantowane skupienia spektralne wyekstrahowane z sygnału audio. Nigdy nie widzisz bezpośrednio sekwencji fonemów — jedynie zaszumione symbole akustyczne, które wygenerowała — co jest dokładnie problemem estymacji, który rozwiązują prawdziwe systemy automatycznego rozpoznawania mowy (ASR).
Co dokładnie oblicza algorytm Viterbiego i jak wiąże się z tym krata?
Algorytm Viterbiego znajduje jedyną najbardziej prawdopodobną sekwencję stanów ukrytych, mając daną sekwencję obserwacji i ustalony HMM, używając programowania dynamicznego zamiast sprawdzania każdej możliwej ścieżki (co byłoby wykładnicze względem długości sekwencji). Krata to sama tabela DP: jeden wiersz na stan ukryty, jedna kolumna na krok czasowy. Każda komórka delta[t][s] przechowuje logarytm prawdopodobieństwa najlepszej ścieżki kończącej się w stanie s w czasie t, obliczany jako maksimum po poprzednim stanie z (wynik poprzedniej komórki + logarytm prawdopodobieństwa przejścia) plus logarytm prawdopodobieństwa emisji bieżącej obserwacji w stanie s. Wskaźnik wsteczny zapisuje, który poprzedni stan wygenerował to maksimum. Po wypełnieniu każdej kolumny cofanie się przez wskaźniki wsteczne od komórki końcowej o najwyższym wyniku odzyskuje jedyną najlepszą ścieżkę w jednym liniowym przejściu.
Czemu pracować w logarytmach prawdopodobieństw zamiast surowych prawdopodobieństw?
Mnożenie wielu prawdopodobieństw razem (jedno na krok czasowy, dla długiej wypowiedzi) kurczy iloczyn ku zeru tak szybko, że zwykłe liczby zmiennoprzecinkowe ulegają niedomiarowi do dokładnie 0,0 już po zaledwie kilkudziesięciu klatkach, niszcząc wszystkie informacje o tym, która ścieżka była lepsza. Wzięcie logarytmów zamienia każde mnożenie w dodawanie, co jest numerycznie stabilne dla sekwencji dowolnej długości i, ponieważ logarytm jest monotoniczny, dokładnie zachowuje tożsamość ścieżki o maksymalnym prawdopodobieństwie. Dlatego każda praktyczna implementacja Viterbiego, w tym ta, działa całkowicie w przestrzeni logarytmicznej i dopiero na końcu przekształca wynik z powrotem na prawdopodobieństwo, jeśli potrzebna jest liczba czytelna dla człowieka.
Co właściwie zmienia suwak szumu i jak wpływa na dokładność dekodowania?
Suwak szumu ustala prawdopodobieństwo, że w danej klatce czasowej obserwacja zostanie zastąpiona jednostajnie losowym symbolem akustycznym zamiast uczciwie wylosowanego z rozkładu emisji prawdziwego ukrytego fonemu — modelując niedopasowanie akustyczne, takie jak szum tła, zniekształcenia mikrofonu czy efekty kanału. Przy szumie 0 dekoder Viterbiego, który używa dokładnie tego samego modelu przejść i emisji, jaki wygenerował dane, powinien niemal idealnie odzyskać prawdziwą ścieżkę fonemów. W miarę wzrostu szumu coraz większa część klatek niesie dowody akustyczne wskazujące na niewłaściwy stan, a dekoder musi mocniej opierać się na strukturze prawdopodobieństw przejść (fakcie, że niektóre sekwencje fonemów są po prostu bardziej prawdopodobne niż inne), by pozostać na właściwej ścieżce — więc dokładność dekodowania pogarsza się stopniowo, a nie katastroficznie, co jest dokładnie tą łagodną degradacją, jaką wykazują prawdziwe zaszumione systemy ASR.
Czemu macierz przejść jest od lewej do prawej (Bakis) zamiast pozwalać dowolnemu stanowi następować po dowolnym?
Klasyczne systemy rozpoznawania mowy oparte na HMM modelują każde słowo lub głoskę jako łańcuch od lewej do prawej (topologia Bakis): stan może zapętlać się na sobie (pozwalając fonemowi trwać przez zmienną liczbę klatek, ponieważ ludzie mówią z różną prędkością), przejść do następnego fonemu lub okazjonalnie pominąć jeden do przodu (modelując fonem, który zostaje połknięty lub skoartykułowany), ale czas nigdy nie płynie wstecz w obrębie wypowiedzi. 5-stanowy łańcuch SIL-K-AE-T-S w tej symulacji używa dokładnie tej topologii, z przejściami o zerowym prawdopodobieństwie (przechowywanymi jako minus nieskończoność w logarytmie) dla każdej pary stanów, których prawdziwa mowa fizycznie nigdy nie produkuje, co jednocześnie odpowiada rzeczywistej praktyce ASR i sprawia, że krata jest wizualnie interpretowalna jako przejście w przód.
Jak to się ma do sposobu, w jaki prawdziwe asystenty głosowe rozpoznają mowę?
Produkcyjne systemy ASR historycznie używały dokładnie tego szkieletu HMM + Viterbi — modeli akustycznych typu mieszanina Gaussa lub głęboka sieć neuronowa, generujących prawdopodobieństwa stanów dla każdej klatki, HMM fonemów i wymowy połączonych w grafy słów i zdań oraz Viterbiego (lub jego przybliżenia przeszukiwaniem wiązkowym, stosowanego, ponieważ prawdziwe słowniki czynią pełną kratę zbyt dużą) dekodującego najbardziej prawdopodobną sekwencję słów — a hybrydowe systemy HMM/DNN pozostają w użyciu produkcyjnym do dziś obok nowszych podejść neuronowych typu end-to-end. Ta symulacja upraszcza model akustyczny do małego, ręcznie zbudowanego rozkładu dyskretnego, a słownik do pięciu fonemów, tak by cały program dynamiczny, kratę wskaźników wstecznych i decyzję dekodowania można było obserwować komórka po komórce, ale algorytmiczny rdzeń — programowanie dynamiczne w domenie logarytmicznej nad probabilistyczną maszyną stanów — jest identyczny z tym, co przez dekady stosowano w prawdziwych systemach rozpoznawania.
Jaka jest różnica między logarytmem wiarygodności zdekodowanej ścieżki a dokładnością dekodowania pokazaną w panelu statystyk?
Logarytm wiarygodności zdekodowanej ścieżki to własny wewnętrzny wynik algorytmu Viterbiego: suma każdego logarytmu prawdopodobieństwa przejścia i logarytmu prawdopodobieństwa emisji wzdłuż jedynej najbardziej prawdopodobnej znalezionej ścieżki, co jest cechą wyłącznie modelu i obserwacji i można to obliczyć nawet bez znajomości prawdziwej ścieżki generującej. Dokładność dekodowania z kolei porównuje zdekodowaną ścieżkę klatka po klatce z prawdziwą ukrytą ścieżką, która faktycznie została użyta do wygenerowania syntetycznej wypowiedzi — informacją, do której prawdziwy system rozpoznawania nigdy nie ma dostępu, ale którą ta symulacja może pokazać, ponieważ pełni też rolę „generatora prawdy podstawowej”. Wysoki logarytm wiarygodności nie gwarantuje wysokiej dokładności (model może być pewnie w błędzie przy dużym szumie), dlatego właśnie obie liczby są pokazywane obok siebie.
Prawdziwy 5-stanowy fonemowy HMM od lewej do prawej (macierz przejść + rozkłady emisji dla każdego stanu nad 8-symbolowym alfabetem akustycznym) generuje syntetyczną wypowiedź, próbkując prawdziwą ukrytą ścieżkę i zaszumione obserwacje z niej, a od podstaw zbudowany program dynamiczny Viterbiego w domenie logarytmicznej — z prawdziwymi wskaźnikami wstecznymi w każdej komórce kraty — dekoduje najbardziej prawdopodobną ścieżkę fonemów, śledzoną na żywo względem dokładności dekodowania i logarytmu wiarygodności ścieżki.
3D · renderer Three.js / WebGL · cel 60 FPS · działa w całości w przeglądarce, bez instalacji