Zum NN: das ist kein Hexenwerk.
Die FFT liefert bei Schwebungen /Tönen / Geräuschen ja Spikes, die den Grundfrequenzen entsprechen (0 bis zur Nyquist Frequenz).
Für Stimmenklang bei gesprochenen Wörtern sind wie bereits erwähnt die tiefen Frequenzen sicher weniger entscheidend (- oder doch? - müsste man vorab testen!), sodass man sich auf die Spikes der höheren oder zumindest weniger typischer Frequenzen konzentrieren kann (das sei jetzt mal so dahin gestellt), das sind dann sicher nicht mehr so schrecklich viele.
Die Verteilung der Spikes lässt sich als Input-Signal isolierter, diskreter digitaler Sensoren betrachten, und die können in ein neuronales Netz eingespeist werden.
Datenbank für den Vergleich ("alle mit allen") sind sämtliche gesprochene bekannte Wörter von allen Probanden.
Angenommen, du betrachtest die 100 höchsten (oder "wichtigsten") Frequenzspikes bis zur Nyquist Frequenz, dann hast du 100 Inputs für Input-Neuronen.
Angenommen, du hast 6 Personen, die erkannt werden sollen, dann hast du 6 Output-Neuronen.
Jede Person hat dabei sicher ein paar aussergewöhnliche FFT-Spike-Kombinationen, die trainiert werden können.
Da nicht auszuschließen ist, dass auch XOR-Kombination auftreten, scheidet ein Feed-Forward-Netz aus und man braucht daher mehrschichtige Netze.
Rückkopplung ist nicht notwendig, da nicht auf zeitlichen Kontext geachtet werden muss.
Also reicht ein normales Backpropagation-Netz aus Sensor-Schicht (100) , verdeckter Schicht (30-40, schätze ich, müssten reichen) und Ausgangs-Schicht (6).
Das in dieser Komplexität zu trainieren habe ich bereits mit einem Arduino Due geschafft - das einzige "Problem" ist der extreme Zeitaufwand, der Wochen oder Monate dauern kann.
Wenn du hier eine Automatisierung einprogrammieren kannst (bei ausreichendem *.wav Basis-Sound-Material), lässt du das Teil einfach ein paar Wochen lang Tag und nach durchlaufen, fertig.
Hier wird einfach ständig wiederholt:
a) ein .wav Sound eines bekannten Probanden wird randomisiert ausgewählt, die FFT erzeugt, dann die höheren Frequenzspikes ins NN eingespeist und dann das Netz aktiviert.
b) Der Netz-Output wird kontrolliert und solange das Netz im Lernmodus moduliert, bis Ist-Output mit Soll-Output (der bekannten aktuellen Person) übereinstimmt.
c) Dann kommt der nächste Zufalls-Sound dran.
d) Dann schließlich wird mit "Life-Sounds" getestet und trainiert
e) Das Lernen ist erledigt, wenn die Erkennungsrate z.B. bei den letzten 200 Sounds unterhalb einer selbst gewählten, akzeptablen Fehlergrenze liegt (z.B. 0,01 == 1%)
- das war's.
Prinzipiell ist auf diese Weise auch ein NN mit den Wörtern / Wortbedeutungen selber zu füttern, aber dann wächst die Netz-Komplexität ins exponentielle:
Du musst dann ALLE Spikes einspeisen (z.B. 4000), und hast 2 Outputbereiche,
Bereich 1: 1-6 für die Person und
Bereich 2: 7-wasweissich für die Anzahl der trainierbaren Wörter (z.B. 50).
Auch die Verdeckte Schicht ("Hidden Layer") wächst dann proportional zur Input-Schicht ("Sensor-Layer").
Sätze sind dann aber immer noch nicht möglich, dafür werden erneut weitere Module erforderlich.
Das macht zunächst eine Syntax-Analyse, z.B. per P-Marker:
S - Satz,
NP - Nominalphrase,
VP - Verbalphrase,
ART – Artikel,
N - Nomen,
V -Verb
(Konjunktionen, Präpositionen, Pronomen, Attribute u.a.m. hier noch ganz außen vor!)
z.B.:
"Hannah jagt die Katze "
[ S [NP [N Hannah ] ] [VP [V jagt] [NP [ART die] [N Katze] ] ] ]
und daraus wird dann die "Bedeutung" generiert, wozu zunächst dann die Kasusmarkierung erforderlich ist (wer jagt wen?), was hier nicht ganz trivial ist (denn beide Nomen könnten theoretisch hier sowohl im Nominativ als auch im Akkusativ stehen, d.h. Subjekt oder Objekt sein, für Hannah kämen auch zusätzlich Dativ und Vokativ in Frage, Dativ fällt allerdings raus, weil "jagt" eine konjugierte Form von "jagen" ist, welches transitiv ist), daher kommt hier auch eine Satzstellungsanalyse zum Tragen.
Der nächste Gesichtspunkt wäre ggf. Verb-Konjugation ( "Hannah jagt die Katze" versus "Hannah jagte die Katze") sowie Informations-Ebene versus Appell-Ebene ("Hannah jagt die Katze" versus "Hannah jage die Katze") -
.... was jetzt aber schon extrem ins Gebiet der Lingustik hinein reicht.
Lesezeichen