Dino-Song zerstampft und neu zusammengeleimt

Da ich ja nicht nur Geschichtenschreiber, sondern auch Informatiker bin (oder vielleicht besser umgekehrt...). Ach, ich fange nochmals an.
Also: Computer aus vorhandenen grossen Datenmengen lernen zu lassen, so dass sie dann aufgrund des Gelernten Entscheidungen treffen können, kurz "Machine Learning", ist zurzeit eines der bedeutendsten Forschungs- und Anwendungsgebiete der Informatik. Insbesondere im Bereich der neuronalen Netze / Deep Learning sind in den letzen Jahren beeindruckende Resultate erzielt worden. So beschäftige auch ich mich seit einiger Zeit mit diesem spannenden Fachbereich.
Grund genug also, einmal "Gschichtefritz" und "Neuronale Netze" zusammenzubringen. Die Maschine soll zum Künstler werden und Gschichtefritz soll die "Maschinen-Kunst" vortragen und so die Grenzen zwischen künstlicher Intelligenz und künstlerischer Intelligenz ausloten.

Das Konzept
Mein Song "Dino Stampf Stampf" mit inzwischen 35 Strophen (aus den Kindergeschichten vom Blauen Dino) muss als "grosse vorhandene Datenmenge" / "Big Data" herhalten.
Der Computer soll also aus diesem Text lernen. Er erhält keine weiteren Informationen über Sprache, Wörter, Grammatik oder so.
Anschliessend soll der Computer selber Text generieren.
Das Resultat
Den erzeugten Text habe ich im Video (siehe oben, bzw. https://www.youtube.com/watch?v=466jykoAUdI ) vorgelesen. Ab und zu wurden Wörter oder kurze Phrasen aus dem Original-Text ausgegeben, dann irgendwelche Wort-Mixes oder komplett neue, aber dennoch schweizerdeutsch klingende Wörter generiert. Das Resultat erinnert mich an Dada und ans Totemügerli von Franz Hohler. Mit dem Unterschied, dass der Text nicht von einem Menschen stammt, sondern in Sekundenschnelle von einem Computer geschrieben wurde.
Wie funktioniert das?
Zum Einsatz kam ein zeichenbasiertes Recurrent Neural Network mit Long Short Term Memory - Zellen, kurz ein "LSTM RNN". Zeichenbasiert bedeutet, dass man dem Computer keine Wörter, sondern einzelne Zeichen als Eingabe "füttert". Da es für die Sprache nicht relevant ist, ob etwas klein oder gross geschrieben wird, habe ich als erstes alle Zeichen in Kleinbuchstaben umgewandelt. Aus "Gmües" wird also "gmües", und der ganze Songtext reduziert sich auf ein Zeichen-Vokabular von 38 verschiedenen Zeichen (Klein-Buchstaben "abcdefh...z", Umlaute "üöä", Satzzeichen, Leerzeichen und Zeilenumbruch). Nun wird das neuronale Netz darauf trainiert, den nächsten Buchstaben vorauszusagen, indem man ihm den aktuellen Text und die richtige Antwort zeichenweise vorlegt. Im Bereich des Machine Learning spricht man hier von "Supervised Learning", das heisst, das Netzwerk erhält beim Training eine Eingabe UND die passende Ausgabe.
Hierzu ein Beispiel, Schritt für Schritt: Das Netzwerk soll aus dem Text "gmües iss ich de ganzi tag" lernen.
TRAINING:
1. Der erste Buchstabe ("g") als Eingabe und die "richtige Antwort", d.h. die erwartete Ausgabe, nämlich der zweite Buchstabe "m" aus dem Wort "gmües", wird ans Netzwerk übergeben. So quasi "Wenn Du das, was ich Dir beibringen will, lernen möchtest, musst Du zuerst mal wissen, dass nach dem 'g' ein 'm' kommen sollte."
2. Der zweite Buchstabe "m" wird als Eingabe und "ü" als erwartete Antwort übergeben. So quasi "Wenn Du ein 'm' siehst und zuvor schon ein 'g' gesehen hast, dann solltest Du ein 'ü' ausgeben. Das Netzwerk muss also in der Lage sein, sich in diesem zweiten Schritt daran zu erinnern, dass es im ersten Schritt ein 'g' als Eingabe erhalten hatte. Daher kommt ein "Recurrent Neural Network" zum Einsatz, denn dieses bietet genau die Möglichkeit, die Ausgabe des aktuellen Schrittes nicht nur von der aktuellen Eingabe, sondern auch von der zuvor erhaltenen Eingabe-Abfolge abhängig zu machen. Zum Speichern dieser Kontext-Information dienen die LSTM-Zellen (Long Short Term Memory).
3. Der dritte Buchstabe "ü" wird als Eingabe und "e" als Ausgabe übergeben
4. Der vierte Buchstabe "e" wird als Eingabe und "s" als Ausgabe übergeben
5. Der fünfte Buchstabe "s" wird als Eingabe und das Leerzeichen " " als Ausgabe übergeben. Das Netzwerk konnte nun also bereits das Wort "gmües" lernen - und dass anschliessend ein Leerzeichen folgen sollte.
Das wird nun mit dem ganzen 6662 Zeichen langen Songtext viele Male wiederholt. Den Refrain des Songs hab ich absichtlich weggelassen.

SAMPLING:
Anschliessend wird dem Neuronalen Netz eine Anfangs-Sequenz vorgelegt (z.B. "wa") und dann wieder und wieder nach dem nächsten Zeichen gefragt. So kommt in Sekundenschnelle ein beliebig langer Text zustande.

Wie gut ein Neuronales Netz ist, wird nicht daran gemessen, wie gut die Eingabe auswendig gelernt wurde. Auswendig lernen ist für einen Computer trivial. Das Ziel ist natürlich, etwas Allgemeines daraus zu lernen, also auch aus noch nie zuvor gesehenen Eingaben eine passende Ausgabe erzeugen zu können. Das muss auch beim Training berücksichtigt werden. Sind die verschiedenen Netzwerk-Einstellungen (Hyperparameter) unpassend und wird nicht ausreichend lang trainiert, dann lernt/generalisiert das Netzwerk zu wenig und erzeugt zufällig aussehende, kurze Zeichenfolgen, z.B. "wai se ee i i snnih ". Das andere Extrem wäre, dass sich das Netzwerk zu viel merken kann und zu lange trainiert wurde. Dann generiert es in grossen Zügen den Original-Text, mit welchem es trainiert wurde.
Beim im Video vorgelesenen Text habe ich einen ausgeglichenen Trainingsstand gefunden. Wer den Song kennt, wird einige Original-Phrasen finden, und dazwischen lustig (aber irgendwie schweizerdeutsch) klingende Wörter wie "nürzs" oder "gmüch". Oder Wort-Abwandlungen wie "furke" statt "gurke". Die "denttergine" muss irgendwas mit einer Aubergine zu tun haben. Und eine "himbeerine" würde bestimmt auch der Blaue Dino gerne mal probieren.
Wo gibts mehr?
Eine maxi-Version des Songs "Dino Stampf Stampf" von Gschichtefritz mit 22 Strophen findest Du auf Spotify, iTunes etc. Oder natürlich hier im Shop, wo es neben der Dino-Songs Lieder-CD auch alle Hörgeschichten vom Blauen Dino und vom Roboter Beni gegen freiwillige Bezahlung nach Gutdünken auf mp3 oder CD gibt.
Andrej Karpathy hat einen grossartigen Blogpost geschrieben: "The Unreasonable Effectiveness of Recurrent Neural Networks"
Video Gschichtefritz