Forum: Digitale Signalverarbeitung / DSP / Machine Learning Verständnissproblem bei Spracherkennung + MFCC + neurales Netzwerk


von Christian G. (grobig)


Lesenswert?

Hallo,
ich schreibe hier mal im offtopic weil ich nicht genau weiß in welche 
Kategorie das hier paßt.
Ich versuche eine Spracherkennung zu programmieren, die ganze kurze 
Worte z.B. Ziffern oder Kommandos, Sprecher unanhängig erkennen soll. 
Nach dem Studium einiger whitepapers die dieses Thema behandeln ist mein 
Ansatz dort folgender :
-Volumengesteuerte Wort(sample) aufnahme (22050Hz Mono 16Bit)
-6dB Verstärkungsfilter
-Aufsplitten des samples in frames (512 Datenpunkte ~20ms, 50% overlap, 
zeor padding)
also für ein kurzes Wort wie "test" erhalte ich ~63 frames.
für jedes frame:
-HammingWindowFunktion
-FFT
-Mel filter (Dreiecks bandpass Filter)
-Log energie
-MFCC (DCT) 12 Koeffizienten (in Zukunft sollen es 26 Koeffizienten 
sein)
so an diesem Punkt heißt es überall : Das NeuraleNetzwerk mit den MFCCs 
füttern und darüber das Wort erkennen.
Hier hänge ich fest... für jedes der 63 frames erhalte ich 12 MFCCs... 
das wären dann schon über 700 inputs für das neurale Netzwerk... und was 
ist wenn ich das selbe Wort etwas schneller oder langsamer spreche, dann 
paßt das ja garnicht mehr mit der Anzahl der Inputs des NN zusammen. Das 
kann also so nicht sein.
Wie kann ich die MFCCs der einzelnen sich überlappenden Frames so 
zusammenfassen das ich eine konstante Menge an Inputs für das NN 
bekomme?
Gibt es da evtl. sowas wie eine Hash-Funktion der ich die ganzen MFCCs 
der frames übergebe und die daraus dann einen x-Stelligen Hashwert 
berechnet welcher dann aber auch nicht 100% eindeutig sein darf wenn man 
halt das selbe Wort nur etwas anders ausspricht?
Oder bin ich da total auf dem Holzweg?

MfG
GrobiG

: Verschoben durch Admin
von Εrnst B. (ernst)


Lesenswert?

Christian G. schrieb:
> so an diesem Punkt heißt es überall : Das NeuraleNetzwerk mit den MFCCs
> füttern und darüber das Wort erkennen.
> Hier hänge ich fest... für jedes der 63 frames erhalte ich 12 MFCCs...
> das wären dann schon über 700 inputs für das neurale Netzwerk... und was
> ist wenn ich das selbe Wort etwas schneller oder langsamer spreche, dann
> paßt das ja garnicht mehr mit der Anzahl der Inputs des NN zusammen.

Evtl: TDNN mit 12 Eingängen, die Frames nacheinander reinfüttern?

von Christian G. (grobig)


Lesenswert?

Εrnst B✶ schrieb:
> Evtl: TDNN mit 12 Eingängen, die Frames nacheinander reinfüttern?

vielen Dank! Das werde ich mir genauer anschauen!

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Das Problem bei Sprache ist, dass die MFCC-Features für ein Wort zwar 
eine charakteristische Reihenfolge haben, aber fast beliebig in der 
Länge gestreckt sein können. Die Daten irgendwie in eine Black Box 
(künstliches neuronales Netz) zu füttern und zu hoffen dass dieser 
Zusammenhang "automatisch" erkannt wird ist utopisch. Besser ist es das 
vorhandene Wissen über die Daten schon beim Design der Modellstruktur zu 
berücksichtigen. State of the art ist heute das Hidden Markov Model 
(HMM), früher hat man Dynamic Time Warping verwendet. Mit den 
Stichwörtern findest du beliebig viel Bücher, Papers und 
Open-Source-Software.

von Christian G. (Gast)


Lesenswert?

also das mit dem Wunder Netzwerk das alles erkennt kann man sich echt 
abschminken lese mich gerade in Continuous Density Hidden Markov Model 
ein, hört sich auch vielversprechend an.

von BöserFisch (Gast)


Lesenswert?

Schau Dir sonst mal die "Kohonen"-Implementationen neuronaler Netzwerke 
an, die sind sehr gut geeignet, um Phoneme sinnvoll zu unterscheiden. 
Für die Erkennung eines Wortes reichen allg. zwei, eins "lernt" das 
Spektrum eines Lautes, das zweite die zeitliche Änderung der 
detektierten Phoneme. Das allein ist aber schon genug Forschungsarbeit, 
es hat bei mir schon Wochen gedauert, die Netzwerke sinnvoll 
implementiert zu bekommen, ganz zu schweigen von der sinnvoll 
gefensterten FFT-Analyse.

von Hagen R. (hagen)


Lesenswert?

Christian G. schrieb:
> Hier hänge ich fest... für jedes der 63 frames erhalte ich 12 MFCCs...
> das wären dann schon über 700 inputs für das neurale Netzwerk... und was
> ist wenn ich das selbe Wort etwas schneller oder langsamer spreche, dann
> paßt das ja garnicht mehr mit der Anzahl der Inputs des NN zusammen. Das
> kann also so nicht sein.

Doch passt: du musst recurrente NNs benutzen, dh. du fütterst diese 
sequentiell mit den 63 Frames a 12 Inputs. Recurrente NNs haben "ein 
Gedächtnis" und können somit sequentielle Muster erkennen.

Was anderes macht auch garkeinen Sinn. Denke mal drüber nach: du 
zerlegst ein sequentiell gesprochenes Wort in 63 Frames und legst diese 
in  parallel am NN an. Wozu ? Soll dieses NN irgendwas verwürfeltes 
erlernen ? Wie soll das NN lernen das diese 63 Segment nur in dieser 
einen Reihenfolge korrekt sind ? Ergo: recurrrente NN und sequentiell 
diese Frames füttern.

Nächstes Problem: was ist wenn das Wort mehr oder weniger als 63 Frames 
hat ? Dann würde sich bei deinem Vorgehen ja die Anzahl der 
Inputneuronen veränderlich gestalten müssen. Bei RNNs ist das hinfällig 
da diese mit X beliebig langen Sequenzen von Mustern umgehen können und 
denoch die sequentielle Abhängigkeiten der Muster in korrekter 
Reihenfolge erlernen.

Suche mal nach "Recurrent Cascade Correlation Neuronal Network", auf 
dieser These aufbauend hatte ich mein Netzwerk programmiert und gute 
Erfolge damit erzielt (Handschrift Erkennung usw.)

Gruß Hagen

Gockel erster PDF Link:
http://www.google.com/url?sa=t&rct=j&q=Recurrent+Cascade+Correlation+Neuronal+Network&source=web&cd=1&ved=0CC0QFjAA&url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.34.1831%26rep%3Drep1%26type%3Dpdf&ei=zkk-T_PKI8WVswah_-DvBA&usg=AFQjCNH9YojKWTem63JmV7KlLURRyfTKCA

PS: Kohonen NNs kannst'e vergessen und das HMM hat den Nachteil das man 
selber viel Intelligenz investieren muß und nicht das NN für sich daran 
arbeiten lässt. TDNNs können das was RCCs schon von Hause aus viel 
besser können da RCCs das auf Neuronenebene/Layerebene schon können, 
damit sind TDNNs anfällig auf Planungsfehler beim Design der 
zeitverzögerten Netzwerke und abhängig vom festgelegten Delay. das 
entfällt bei RCCs.

von Hagen R. (hagen)


Lesenswert?

Ein interessantes Projekt damals war ein Ratespiel bei dem der Mensch 
sich für die Antworten JA/NEIN frei entscheiden konnte. Mit diesen 
Antworten wurde ein RNN live trainiert und es gab eine Tip ab was die 
naächste Antwort des Menschens (JA/NEIN) sein könnte. Die Anzahl der 
positiven Treffer wurde dem RNN gebucht und bei falscher Vorhersage dem 
Menschen. nach ca. 100 Tipps des Menschen (ohne Wissen wie der 
gegenspieler funktioniert) gewann das RNN mit 70% Wahrscheinlichkeit.

Hintergrund der Sache war zu "beweisen" das der Mensch

1. nicht zufällig wählen kann
2. seine "zufällige" Wahl von seinen vorherigen Wahlmöglichkeiten, 
Entscheidungen und Antworten des NNs abhängig sind
3. ein minimales Bespiel für die Fähigkeiten der RNNs zu konstruieren

Gruß Hagen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.