Jeden z moich weekendowych projektów wprowadził mnie w głębokie wody przetwarzania sygnałów. Podobnie jak w przypadku wszystkich moich projektów kodu, które wymagają trochę matematyki, cieszę się, że majsterkuję, aby znaleźć rozwiązanie pomimo braku teoretycznego uziemienia, ale w tym przypadku nie mam żadnego i chętnie poradzę na mój problem , a mianowicie: Staram się dowiedzieć, kiedy publiczność śmieje się podczas programu telewizyjnego.
Spędziłem sporo czasu czytając metody uczenia maszynowego do wykrywania śmiechu, ale zdałem sobie sprawę, że to więcej wspólnego z wykrywaniem indywidualnego śmiechu. Dwieście osób śmiejących się jednocześnie będzie miało znacznie różne właściwości akustyczne, a moją intuicją jest to, że można je odróżnić dzięki znacznie bardziej brutalnym technikom niż sieć neuronowa. Jednak mogę się całkowicie mylić! Byłbym wdzięczny za przemyślenia na ten temat.
Oto, co do tej pory próbowałem: podzieliłem pięciominutowy fragment z ostatniego odcinka Saturday Night Live na dwa sekundy. Następnie oznaczyłem te „śmiechem” lub „śmiechem”. Korzystając z ekstraktora funkcji MFCC firmy Librosa, uruchomiłem klaster K-Means na danych i uzyskałem dobre wyniki - dwa klastry bardzo dobrze odwzorowane na moich etykietach. Ale kiedy próbowałem iterować przez dłuższy plik, prognozy nie miały wpływu na wodę.
Co spróbuję teraz: Będę bardziej precyzyjny w tworzeniu tych klipów śmiechu. Zamiast ślepego podziału i sortowania, zamierzam ręcznie je wyodrębnić, aby żaden dialog nie zakłócał sygnału. Następnie podzielę je na ćwierć sekundy klipów, obliczę ich MFCC i wykorzystam do wyszkolenia SVM.
Moje pytania w tym miejscu:
Czy coś z tego ma sens?
Czy statystyki mogą tutaj pomóc? Przewijałem się w trybie widoku spektrogramu Audacity i widzę dość wyraźnie, gdzie dochodzi do śmiechu. W logogramie mocy mowa ma bardzo charakterystyczny „zmarszczony” wygląd. Natomiast śmiech obejmuje szerokie spektrum częstotliwości dość równomiernie, prawie jak normalny rozkład. Możliwe jest nawet wizualne odróżnienie oklasków od śmiechu dzięki bardziej ograniczonemu zestawowi częstotliwości reprezentowanych w oklaskach. To sprawia, że myślę o standardowych odchyleniach. Widzę, że istnieje coś, co nazywa się testem Kołmogorowa – Smirnowa, czy to może być pomocne tutaj? (Na powyższym zdjęciu widać śmiech jako ścianę pomarańczy uderzającą w 45% do środka.)
Wydaje się, że spektrogram liniowy pokazuje, że śmiech jest bardziej energiczny na niższych częstotliwościach i zanika w kierunku wyższych częstotliwości - czy to oznacza, że można go zakwalifikować jako różowy szum? Jeśli tak, to czy mogłoby to być przeczucie problemu?
Przepraszam, jeśli niewłaściwie użyłem żargonu, jestem na Wikipedii dość często i nie zdziwiłbym się, gdyby mi pomieszano.
źródło
Odpowiedzi:
Na podstawie obserwacji, że spektrum sygnału jest dostatecznie rozróżnialne, możesz użyć tego jako funkcji do klasyfikowania śmiechu od mowy.
Istnieje wiele sposobów spojrzenia na problem.
Podejście nr 1
W jednym przypadku możesz po prostu spojrzeć na wektor MFCC. i zastosuj to do dowolnego klasyfikatora. Ponieważ masz wiele koefektywnych w dziedzinie częstotliwości, możesz przyjrzeć się strukturze Kaskadowych klasyfikatorów z algorytmami wzmacniającymi, takimi jak Adaboost, na tej podstawie, możesz porównać klasę mowy z klasą śmiechu.
Podejście nr 2
Zdajesz sobie sprawę, że mowa jest zasadniczo sygnałem zmieniającym się w czasie. Jednym ze skutecznych sposobów jest przyjrzenie się zmienności czasowej samego sygnału. W tym celu możesz podzielić sygnały na partie próbek i spojrzeć na widmo dla tego czasu. Teraz możesz zdać sobie sprawę, że śmiech może mieć bardziej powtarzalny wzór przez określony czas, w którym mowa z natury posiada więcej informacji, a zatem zmienność widma byłaby raczej większa. Możesz zastosować to do modelu typu HMM, aby sprawdzić, czy konsekwentnie pozostajesz w tym samym stanie dla pewnego spektrum częstotliwości, czy ciągle się zmieniasz. Tutaj, nawet jeśli od czasu do czasu spektrum mowy przypomina śmiech, będzie więcej czasu.
Podejście nr 3
Wymuś zastosowanie kodowania typu LPC / CELP na sygnale i obserwuj pozostałość. Kodowanie CELP tworzy bardzo dokładny model produkcji mowy.
Z referencji tutaj: TEORIA KODOWANIA CELP
Mówiąc najprościej, po tym, jak cała mowa przewidywana z analizatora jest usuwana - pozostaje pozostałość, która jest transmitowana w celu odtworzenia dokładnego kształtu fali.
Jak to pomaga w twoim problemie? Zasadniczo, jeśli zastosujesz kodowanie CELP, mowa w sygnale jest w większości usuwana, co pozostaje resztą. W przypadku śmiechu większość sygnału może zostać zachowana, ponieważ CELP nie będzie w stanie przewidzieć takiego sygnału za pomocą modelowania dróg głosowych, gdzie jako indywidualna mowa będzie miała bardzo mało pozostałości. Możesz także przeanalizować tę pozostałość z powrotem w dziedzinie częstotliwości, aby sprawdzić, czy jest to śmiech czy mowa.
źródło
Większość urządzeń rozpoznających mowę wykorzystuje nie tylko współczynniki MFCC, ale także pierwszą i drugą pochodną poziomów MFCC. Zgaduję, że w tym przypadku początek byłby bardzo przydatny i pomógłby odróżnić śmiech od innych dźwięków.
źródło