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
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?
Εrnst B✶ schrieb:
> Evtl: TDNN mit 12 Eingängen, die Frames nacheinander reinfüttern?
vielen Dank! Das werde ich mir genauer anschauen!
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.