Opracowałem system sprawdzania koncepcji rozpoznawania dźwięku za pomocą modeli mfcc i ukrytych marek. Daje obiecujące wyniki, gdy testuję system na znanych dźwiękach. Chociaż system, gdy wprowadzany jest nieznany dźwięk, zwraca wynik z najbliższym dopasowaniem, a wynik nie jest tak wyraźny, aby go wymyślić, jest to dźwięk nieznany, np .:
Wytrenowałem 3 ukryte modele Markowa: jeden do mowy, jeden do wody wydobywającej się z kranu i jeden do pukania na biurko. Następnie testuję je na niewidzialnych danych i otrzymuję następujące wyniki:
input: speech
HMM\knocking: -1213.8911146444477
HMM\speech: -617.8735676792728
HMM\watertap: -1504.4735097322673
So highest score speech which is correct
input: watertap
HMM\knocking: -3715.7246152783955
HMM\speech: -4302.67960438553
HMM\watertap: -1965.6149147201534
So highest score watertap which is correct
input: knocking
HMM\filler -806.7248912250212
HMM\knocking: -756.4428782636676
HMM\speech: -1201.686687761133
HMM\watertap: -3025.181144273698
So highest score knocking which is correct
input: unknown
HMM\knocking: -4369.1702184688975
HMM\speech: -5090.37122832872
HMM\watertap: -7717.501505674925
Here the input is an unknown sound but it still returns the closest match as there is no system for thresholding/garbage filtering.
Wiem, że w wykrywaniu słów kluczowych dźwięk OOV (poza słownictwem) można odfiltrować za pomocą modelu śmieci lub wypełniacza, ale mówi on, że jest trenowany przy użyciu skończonego zestawu nieznanych słów, których nie można zastosować do mojego systemu, gdy don nie znam wszystkich dźwięków, które system może nagrać.
Jak podobny problem rozwiązuje się w systemie rozpoznawania mowy? Jak mogę rozwiązać problem, aby uniknąć fałszywych trafień?
Jest to dość powszechne w dziedzinie rozpoznawania gestów. Odpowiedzią jest stworzenie modelu progowego, jak opisano w artykule Lee i Kima (1999)
Odgrywa tę samą rolę, co model wypełniacza lub śmieci, ale nie trzeba go szkolić osobno, jak mówisz. Możesz stworzyć model progowy, łącząc wszystkie stany samostanowienia z innych modeli i inicjując przejście z jednakowymi prawdopodobieństwami, w pełni łącząc te stany. Proszę spojrzeć na papier, aby zobaczyć, jak można to faktycznie zrobić.
Nawet jeśli twoja biblioteka nie obsługuje modeli ergodycznych, nie powinno to uniemożliwiać ci ręcznego tworzenia modelu o wymaganym rozmiarze i odpowiedniego ustawiania stanów. Jeśli naprawdę potrzebujesz biblioteki do tego celu, implementacje ukrytych klasyfikatorów modeli Markowa, w tym obsługa modeli progowych, są dostępne na przykład w Accord.NET Framework .
Oświadczenie: Jestem autorem tej biblioteki.
źródło
Tak więc zrobiłem: stworzyłem moją uproszczoną wersję modelu wypełniacza. Każdy hmm reprezentujący dźwięk uderzenia, dźwięk stukania i dźwięk mowy to osobny 6-stanowy hmm trenowany przez dźwięki z zestawu treningowego odpowiednio 30, 50, 90 dźwięków o różnych długościach od 0,3 sekundy do 10 sekund. Następnie stworzyłem model wypełniacza, który jest stanem 1mm hmm, składającym się ze wszystkich dźwięków zestawu treningowego do pukania, uderzenia wody i mowy. Jeśli więc wynik modelu hmm jest większy dla danego dźwięku niż wynik wypełniacza - dźwięk jest rozpoznawany, w przeciwnym razie jest to dźwięk nieznany. Tak naprawdę nie mam dużych danych, ale przeprowadziłem następujący test pod kątem fałszywego odrzucenia pozytywnego i prawdziwego odrzucenia niewidocznych dźwięków.
Na podstawie tego szybkiego testu mogę stwierdzić, że takie podejście daje rozsądne wyniki, chociaż mam dziwne wrażenie, że może nie wystarczyć.
źródło