Wann setzt die Lachspur ein?

14

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:

  1. Ist irgendetwas davon sinnvoll?

  2. 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? Log-Power-Spektrogramm (Sie können das Lachen auf dem obigen Bild als eine orangefarbene Wand sehen, die 45% des Weges nach innen trifft.)

  3. 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? Spektrogramm

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.

Erik
quelle
1
Ich bin damit einverstanden, dass "kein neuronales Netz benötigt wird, um einen soliden Detektor für Lachspuren zu erhalten". Ich stimme auch auf Sie Kolmogorov am Signal zu werfen, wenn man bedenkt , dass , wenn Sie Recht haben, und das Lachen Spur die (gewichtet) Summe von iid lacht, sollten Sie normale Eigenschaften bekommen einige Art. Vielleicht möchten Sie noch die Frequenzauflösung erhöhen. Übrigens, für jemanden, der DSP "nicht mag", ist Ihr Jargon in Ordnung :) Leider bin ich kein Audio-Typ, daher bin ich wahrscheinlich nicht sehr hilfreich.
Marcus Müller
Ich helfe gern. Hast du irgendwelche Daten für das Training? Eines der wichtigsten Dinge ist die Datenkennzeichnung. Müll rein - Müll raus. Einer der einfachsten und effektivsten Ansätze wäre es, einen Bag-of-Frames-GMM zu trainieren und die Wahrscheinlichkeit zu bewerten.
Jojek
Vielleicht möchten Sie zuerst überprüfen, ob Sie Lachen von Stille trennen können, indem Sie die Leistung / Amplitude Ihres Signals zu bestimmten Zeiten überprüfen. Geben Sie die Möglichkeit, Momente einzuschränken, in denen "etwas" passiert. Dann könnten Sie versuchen, die Häufigkeitsverteilung zu untersuchen. Zum Beispiel kann Sprache einige markante scharfe Spitzen haben (es ist egal, wo genau diese Spitzen sind, nur dass sie existieren), während das Lachen, wie Sie sagten, gleichmäßig ist. Wenn Sie dies verfolgen, erhalten Sie möglicherweise einen Wert, mit dem Sie entscheiden können, ob es sich um Lachen handelt. (Sie benötigen die Volume-Informationen, um sicherzustellen, dass Sie nicht nur gleichmäßige Stille haben)
user6522399

Antworten:

0

Basierend auf Ihrer Beobachtung, dass das Spektrum des Signals ausreichend unterscheidbar ist, können Sie dies als eine Funktion verwenden, um Lachen von Sprache zu klassifizieren.

Es gibt viele Möglichkeiten, wie Sie das Problem betrachten können.

Ansatz Nr. 1

In einem Fall können Sie sich nur ansehen Vektor des MFCC betrachten. und wende dies auf einen beliebigen Klassifikator an. Da Sie im Frequenzbereich viele Koeffizienten haben , sollten Sie sich die Cascade Classifiers- Struktur mit darauf basierenden Boosting-Algorithmen wie Adaboost ansehen , um zwischen Sprach- und Lachklasse zu vergleichen.

Ansatz 2

Sie erkennen, dass Ihre Sprache im Wesentlichen ein zeitvariables Signal ist. Eine der effektivsten Möglichkeiten ist es, die zeitliche Variation des Signals selbst zu betrachten. Zu diesem Zweck können Sie Signale in Stapel von Samples aufteilen und das Spektrum für diese Zeit betrachten. Nun können Sie feststellen, dass das Lachen für eine festgelegte Dauer ein sich wiederholenderes Muster aufweisen kann, wenn die Sprache von Natur aus mehr Informationen enthält und daher die Variation des Spektrums eher größer ist. Sie können dies auf anwenden HMM- Modelltyp festzustellen , ob Sie für ein bestimmtes Frequenzspektrum ständig im selben Status bleiben oder sich ständig ändern. Hier ändert sich die Zeit, auch wenn das Sprachspektrum gelegentlich dem des Lachens ähnelt.

Ansatz 3

Erzwingen Sie das Aufbringen einer LPC / CELP-Codierung auf das Signal und beobachten Sie den Rückstand. Die CELP-Codierung bildet ein sehr genaues Modell der Sprachproduktion ab.

Aus der Referenz hier: THEORIE DER CELP-CODIERUNG

Die Redundanzen im Sprachsignal werden nach der Kurzzeitvorhersage und der Langzeitvorhersage des Sprachsignals fast beseitigt, und der Rest weist nur noch eine sehr geringe Korrelation auf. Dann wird eine Anregung gesucht, die die Sprache synthetisiert, und der Codebuchindex und die Verstärkung werden aus dem festen Codebuch gesucht. Das optimale Auswahlkriterium für den Codebuchindex basiert auf der MMSE zwischen der lokal synthetisierten Sprache und dem ursprünglichen Sprachsignal.

Einfach ausgedrückt, nachdem die gesamte vom Analysator vorhergesagte Sprache entfernt wurde, verbleibt der Rest, der übertragen wird, um die exakte Wellenform wiederherzustellen.

Wie hilft das bei deinem Problem? Wenn Sie die CELP-Codierung anwenden, wird die Sprache im Signal größtenteils entfernt, und es verbleiben Reste. Im Falle eines Lachens kann ein Großteil des Signals erhalten bleiben, da CELP ein solches Signal bei der Stimmtraktmodellierung nicht vorhersagen kann, da die individuelle Sprache nur sehr geringe Rückstände aufweist. Sie können diesen Rückstand auch im Frequenzbereich analysieren, um festzustellen, ob es sich um Lachen oder Sprache handelt.

Dipan Mehta
quelle
0

Die meisten Spracherkenner verwenden nicht nur die MFCC-Koeffizienten, sondern auch die erste und die zweite Ableitung der MFCC-Pegel. Ich vermute, dass die Ansätze in diesem Fall sehr nützlich wären und Ihnen helfen, ein Lachen von anderen Klängen zu unterscheiden.

Bob
quelle