Ich studiere Spracherkennung, insbesondere die Verwendung von MFCC zur Merkmalsextraktion. Alle Beispiele, die ich online gefunden habe, tendieren dazu, eine Reihe von MFCC grafisch darzustellen, die aus einer bestimmten Äußerung wie folgt extrahiert wurden (Grafik, die ich mit der Software erstellt habe, die ich schreibe):
Wie Sie in der obigen Grafik sehen können:
- Die x-Achse wird für jeden der MFC-Koeffizienten verwendet (in diesem Beispiel von 1 bis 12).
- Die y-Achse wird für die Werte der Koeffizienten verwendet (in diesem Beispiel im Bereich von -12 bis 42).
- Sie haben so viele Zeilen wie Frames oder Feature-Vektoren, die Sie extrahiert haben (140 in diesem Beispiel).
Das macht für mich nicht allzu viel Sinn, denn was wir hier sehen, ist die Überlagerung aller Merkmalsvektoren auf einmal, wobei Zeitinformationen verloren gehen. Es fällt mir schwer zu verstehen, wie nützlich diese Darstellung ist.
In meinen Gedanken würde ich die extrahierten Vektoren wie folgt darstellen (wieder ein von mir erzeugter Graph):
In der obigen Grafik:
- Die x-Achse ist die Rahmen- oder Vektornummer (1 bis 140).
- Die y-Achse sind die Koeffizientenwerte (wiederum von -12 bis 42 ungefähr).
- Sie haben eine Zeile für jede Funktion (12).
Für mich sollte diese Darstellung nützlicher sein, da Sie die zeitliche Entwicklung der einzelnen Funktionen sehen können und dies meiner Meinung nach einen stärkeren Einfluss darauf haben sollte, wie Vergleichsalgorithmen auf gesprochene Wörter angewendet werden.
Vielleicht sind die beiden Darstellungen für verschiedene Zwecke gleichermaßen gültig und nützlich, ähnlich wie wenn Sie ein Signal im Zeitbereich oder im Frequenzbereich untersuchen müssen, aber im Fall der Spracherkennung würde ich die zeitliche Entwicklung jedes Einzelnen erwarten Merkmal, um aussagekräftiger zu sein als die Wertedichte für jedes Merkmal (und vielleicht irre ich mich völlig: P).
Also zwei Fragen in der Tat:
- Warum ist die erste Darstellung diejenige, die weit verbreitet zu sein scheint, und nicht die zweite?
- Wenn Sie zwei Sätze extrahierter MFCCs vergleichen möchten, z. B. mithilfe von Dynamic Time Warping - DTW, und sich auf dieses Thema beziehen, vergleichen Sie die Merkmalsvektoren (dh 140 Vektoren mit 12 Merkmalen) oder die Rahmen (12 Vektoren mit 140 Rahmen) )? (Mit anderen Worten, MxN oder NxM?)
Vielen Dank!
quelle
Antworten:
MFCCs werden immer verwendet, indem sie in den Klassifikator eingespeist werden. Dies kann Frame für Frame (
12x1
Vektor) oder durch Verketten (12xN
) erfolgen - genau wie bei einem Spektrogramm.Daher müssen Sie für DTW die Klassifizierung durchführen, indem Sie den Abstand zwischen 12D-Vektoren berechnen. Es ist eine dynamische Zeit Warping, so muss die Differenz zwischen den Bildern in berechnen Zeitdomäne, nicht zwischen den Proben in einer „Single - Feature - Domain“.
Hier ist eine grafische Darstellung davon:
Nur ein Nachtrag zum MFCC-Plotten. Es macht keinen Sinn, das Liniendiagramm aller zusammen gestapelten MFCC-Vektoren zu betrachten (erstes Bild), und es ist nicht wirklich nützlich, die zeitliche Entwicklung aller MFCCs zu betrachten (zweites Bild). Für MFCCs gibt es kein Konzept für die richtige grafische Darstellung, es sei denn, Sie möchten etwas Bestimmtes erreichen.
Zunächst kann eine Verteilung (Histogramm) jedes MFCC aufgezeichnet werden, um die typischen Werte usw. zu ermitteln. Insbesondere wenn Sie ein GMM-Modell für ein Signal trainiert haben, können Sie die Verteilung der Testprobe und die Überlagerung mit einem PDF von GMM darstellen in dieser Dimension.
Der zweite Ansatz wäre, die MFCCs ähnlich wie ein Spektrogramm zu zeichnen (wie im obigen Bild gezeigt). Man könnte es für eine "schöne Darstellung" verwenden oder die allgemeinen Trends und Muster sehen. Aber es ist fast unmöglich zu sagen, welches Signal sich hinter einer solchen Darstellung verbirgt.
Hier ist zum Beispiel ein MFCC-Diagramm eines sehr einfachen Signals. Welches Signal ist das? Wenn Sie bereit sind, bewegen Sie den Mauszeiger über das gelbe Feld.
War es leicht zu sagen? Beim Betrachten des Spektrogramms war dies definitiv sofort offensichtlich. Vielleicht gibt es nur wenige Leute, die es erraten haben, seit sie zuvor mit solchen Beispielen gespielt haben. Nun etwas komplizierteres:
Bereit?
Ich denke kaum, dass diese MFCC-Darstellung von Nutzen ist, außer den Raum zu füllen. Jetzt mögen nur wenige Leute das Signal anhand eines Spektrogramms erraten, aber es ist unmöglich, dies anhand von MFCCs zu tun.
Wenn Ihnen also jemand sagt, dass er anhand der "dekorrelierten Kosinusanpassungen der logarithmischen Energien in dreieckigen Filterbänken im Frequenzbereich" sagen kann, was mit dem Signal passiert, dann ist er entweder ein Lügner (mit einem Prior von99,9 % ) oder einen Computer. Sehr selten gibt es Fälle, in denen die Betrachtung von MFCC-Rohwerten nützlich ist - wie Debugging und Überprüfung der Integrität (sind Koeffizienten, die für stationäre Signale konstant sind).
quelle