Eines meiner Wochenendprojekte hat mich in die Tiefe der Signalverarbeitung geführt. Wie bei allen meinen Code-Projekten, für die etwas Hochleistungs-Mathematik erforderlich ist, bin ich mehr als erfreut, trotz fehlender theoretischer Grundlagen den Weg zu einer Lösung zu finden, aber in diesem Fall habe ich keine und würde gerne einen Rat zu meinem Problem geben Ich versuche nämlich herauszufinden, wann das Live-Publikum während einer TV-Show lacht.
Ich habe viel Zeit damit verbracht, mich über maschinelles Lernen zum Erkennen von Lachen zu informieren, aber mir wurde klar, dass dies mehr mit dem Erkennen von individuellem Lachen zu tun hat. Zweihundert Menschen, die auf einmal lachen, werden sehr unterschiedliche akustische Eigenschaften haben, und ich habe die Intuition, dass sie durch viel gröbere Techniken als ein neuronales Netz unterscheidbar sein sollten. Ich kann mich jedoch völlig irren! Würde mich über Gedanken zu diesem Thema freuen.
Folgendes habe ich bisher versucht: Ich habe einen fünfminütigen Ausschnitt aus einer kürzlich erschienenen Folge von Saturday Night Live in zwei Sekunden-Clips zerlegt. Ich habe diese dann als "Lachen" oder "Nicht-Lachen" bezeichnet. Mit dem MFCC-Funktionsextraktor von Librosa habe ich dann ein K-Means-Clustering für die Daten durchgeführt und gute Ergebnisse erzielt. Die beiden Cluster wurden sehr genau auf meine Etiketten abgebildet. Aber als ich versuchte, die längere Datei zu durchlaufen, hatten die Vorhersagen kein Wasser.
Was ich jetzt versuchen werde: Ich werde präziser vorgehen, um diese Lachclips zu erstellen. Anstatt blind aufzuteilen und zu sortieren, extrahiere ich sie manuell, damit kein Dialog das Signal verschmutzt. Dann teile ich sie in Viertelsekunden-Clips auf, berechne die MFCCs und trainiere mit ihnen eine SVM.
Meine Fragen an dieser Stelle:
Ist irgendetwas davon sinnvoll?
Können Statistiken hier helfen? Ich habe im Spektrogramm-Ansichtsmodus von Audacity herumgescrollt und kann ziemlich deutlich erkennen, wo Lachen auftritt. In einem logarithmischen Leistungsspektrogramm hat Sprache ein sehr charakteristisches, "gefurchtes" Aussehen. Im Gegensatz dazu deckt Lachen ein breites Frequenzspektrum ziemlich gleichmäßig ab, fast wie eine Normalverteilung. Es ist sogar möglich, Applaus visuell von Lachen zu unterscheiden, indem die Anzahl der im Applaus dargestellten Frequenzen begrenzt wird. Das lässt mich an Standardabweichungen denken. Ich sehe, es gibt so etwas wie den Kolmogorov-Smirnov-Test. Könnte das hier hilfreich sein? (Sie können das Lachen auf dem obigen Bild als eine orangefarbene Wand sehen, die 45% des Weges nach innen trifft.)
Das lineare Spektrogramm scheint zu zeigen, dass das Lachen bei niedrigeren Frequenzen energischer ist und bei höheren Frequenzen nachlässt - bedeutet dies, dass es als rosa Rauschen eingestuft wird? Wenn ja, könnte dies ein Grund für das Problem sein?
Ich entschuldige mich, wenn ich einen Jargon missbraucht habe. Ich war ziemlich oft auf Wikipedia und würde mich nicht wundern, wenn ich ein bisschen durcheinander geraten wäre.