- Inspiriert vom Mark V. Shaney-Programm aus den 1980er-Jahren wurde mit rund 30 Zeilen Python-Code ein einfacher Markov-Textgenerator namens Mark V. Shaney Junior entwickelt
- Dieses Modell sagt das nächste Wort probabilistisch auf Basis von drei Wörtern (Trigramm) voraus und nutzt mehr als 200 Blogbeiträge (rund 200.000 Wörter) als Trainingsdaten
- Die erzeugten Sätze werden als sinnfreies Kauderwelsch (gibberish) ausgegeben, das Wörter aus Blogthemen wie Lisp, Emacs, Mathematik und Programmierung vermischt
- Erhöht man die Ordnung (order) des Modells, werden die Sätze konsistenter, aber ab 5 zitiert es den Originaltext praktisch wörtlich und verliert seine Kreativität
- Auch im Zeitalter großer Sprachmodelle (LLMs) wird die strukturelle Klarheit einfacher Markov-Modelle als guter Ausgangspunkt zum Verständnis von Sprachgenerierung vorgestellt
Überblick über das Programm Mark V. Shaney Junior
- Mark V. Shaney Junior ist ein Textgenerator, der den virtuellen Usenet-Nutzer Mark V. Shaney aus den 1980er-Jahren nachahmt
- Das Original war ein Programm, das mithilfe eines Markov-Modells automatisch Beiträge erzeugte
- Diese Umsetzung ist eine vereinfachte Minimalversion dieser Idee und wurde auf GitHub veröffentlicht
- Der gesamte Code umfasst etwa 30 Zeilen Python und stellt Einfachheit über Effizienz
- Selbst wer zum ersten Mal mit Markov-Modellen zu tun hat, kann ihn in weniger als 20 Minuten verstehen
Experimentelles Programmieren als Hobby
- Der Autor programmiert gern zur Erkundung von Ideen und nicht zur Lösung eines konkreten Problems
- Dabei wurden mehrfach Markov-Ketten mit unterschiedlichen Zustandsräumen ausprobiert
- Solche Experimentiercodes werden gesammelt und auf GitHub oder Codeberg geteilt
- Mark V. Shaney Junior ist ebenfalls eines dieser Experimente und ein Beispiel für eine ausgearbeitete Veröffentlichung
Textgenerierung mit Blogdaten
- Nach einem Testtraining mit Charles Dickens’ „A Christmas Carol“ wurden
24 Jahre Blogbeiträge (mehr als 200 Beiträge, rund 200.000 Wörter) als Eingabedaten verwendet- Kommentare (rund 40.000 Wörter) wurden ausgeschlossen
- Die erzeugten Sätze erscheinen als unlogische Sätze, in denen sich Programmierbefehle, mathematische Begriffe und Editor-Kommandos vermischen
- Beispiel: Sätze, die Emacs-Befehle, Lisp-Code und mathematische Begriffe zufällig kombinieren
- Manche Sätze übernehmen Wörter aus bestimmten Blogposts und formen daraus bedeutungslose Kombinationen
- Beispiel: „Lisp source file“ und „self-esteem“ werden aus verschiedenen Beiträgen entnommen und kombiniert
Markov-Eigenschaften und Algorithmusstruktur
- Die Grundeinstellung basiert auf Trigrammen (3 Wörtern) und verwendet eine Map-Struktur,
in der die ersten beiden Wörter als Schlüssel (key) und das dritte Wort als Wert (value) gespeichert werden - Ablauf der Textgenerierung
- Auswahl eines zufälligen Wortpaars → gleichverteilte Auswahl eines der möglichen Folgewörter
- Mit dem neu gewählten Wort und dem vorherigen Wort wird ein neues Paar gebildet und der Vorgang wiederholt
- Beendet wird, wenn kein Folgewort mehr existiert oder das Limit von 100 Wörtern erreicht ist
- Wenn dasselbe Trigramm mehrfach vorkommt, wird das entsprechende Folgewort mehrfach in der Liste gespeichert,
sodass die wahrscheinlichkeitsbasierte Auswahl proportional zur Auftretenshäufigkeit erfolgt - Dieser Prozess ist ein stochastischer Übergang, der nur vom aktuellen Zustand abhängt,
mathematisch dargestellt als P(Xₙ₊₁ | Xₙ, Xₙ₋₁, …, X₁) = P(Xₙ₊₁ | Xₙ)- Diese Gedächtnislosigkeit (memoryless) ist der Kern der Markov-Eigenschaft
Weitere Experimente und Anpassung der Modellordnung
- Die Standard-Ordnung (order) ist 2 und kann per Kommandozeilenargument geändert werden
- Erhöht man die Ordnung auf 3 bis 4, werden die Sätze konsistenter und natürlicher
- Beispiel: relativ logische Sätze, in denen sich IRC-Befehle und mathematische Konzepte mischen
- Wird die Ordnung jedoch auf 5 erhöht, neigt das Modell dazu, den Originaltext direkt zu kopieren,
wodurch das kreative Kauderwelsch (gibberish) verschwindet - Auch mit einem Anfangsprompt lässt sich Text generieren
- Beispiel: Gibt man einen Satzanfang wie „Finally we“ vor, entsteht ein langer Satz mit gemischten Begriffen aus Emacs, MATLAB und GNU bash
Bedeutung einfacher Modelle
- Im Jahr 2025 dominieren zwar große Sprachmodelle (LLMs),
doch Markov-Modelle können globale Struktur oder langfristige Abhängigkeiten nicht erfassen - Trotzdem sind sie dank ihres einfachen Designs und der klaren Implementierung
als Einsteigermodell zum Erlernen von Sprachgenerierung weiterhin wertvoll - Der Autor bezeichnet dieses Modell als das „Hello, world“ der Sprachmodelle
1 Kommentare
Hacker-News-Kommentare
Ein Markov-Modell ist eine statistische Version einer Zustandsmaschine, die den nächsten Token nur aus dem aktuellen Zustand probabilistisch erzeugt
Man muss die Beziehung zwischen Zustand und Token klar definieren, damit eine sinnvolle Diskussion möglich ist
Wenn der Zustand zum Beispiel eine Funktion der letzten k Beobachtungen ist, nennt man das eine Markov-Kette k-ter Ordnung
Ein RNN kann als erweiterte Form gesehen werden, bei der der Zustand als Funktion vorheriger Zustände und jüngster Tokens definiert ist
Zustandsübergangswahrscheinlichkeiten können deterministisch oder probabilistisch sein, und auch die Kontextlänge kann variabel definiert werden
Aber nicht jedes Markov-Modell ist lernbar
Ich erinnere mich, dass ich 1992 bei Egghead Software für 3 Dollar ein Programm dieser Art gekauft habe
Ich habe Texte wie meine Tagebücher aus fünf Jahren hineingeworfen und über die Ergebnisse gelacht
Als altes Beispiel kann man auf Babble 1.0.20 und den zugehörigen Forenbeitrag Software Spotlight: Babble verweisen
Nachdem ich den Beitrag gelesen hatte, habe ich selbst ein wenig mit Markov-Modellen experimentiert
Ich habe auf Zeichenebene angefangen, aber selbst mit einem Modell zweiter Ordnung gab es keinen großen Unterschied
Bei dritter Ordnung (Trigramm) wurde es etwas natürlicher
Danach habe ich ein Markov-Modell erster Ordnung auf mit BPE (Byte Pair Encoding) tokenisierten Text angewendet, und das Ergebnis war etwas konsistenter
Als ich aber auf zweite Ordnung erhöht habe, wurde der Originaltext einfach kopiert — weil BPE wiederholte Tokens entfernt hatte und die Übergänge dadurch deterministisch wurden
Als ich die Zahl der Tokens begrenzt habe (z. B. 894 → 800), wurde es wieder nichtdeterministisch, und der Text wirkte etwas natürlicher
Wenn man zu hoch geht (z. B. fünfte Ordnung), wirkt der Text trocken und nur aus Fakten zusammengesetzt
Insgesamt sind Markov-Modelle einfach, aber ziemlich unterhaltsame Werkzeuge zum Experimentieren
Es könnte helfen, Ketten zu entfernen, die nur einen Folgetoken haben, aber dabei besteht das Risiko, auch grammatische Strukturen zu zerstören
Ich suche noch nach einer besseren Methode, um lange einzelne Ketten zu vermeiden
Wenn es nur einen möglichen Pfad gibt, reduziert man zum Beispiel auf vier Wörter
Oder vielleicht sind wir einfach allein und es ist nur ein Effekt des Geistes, der im Chaos Ordnung finden will
Früher habe ich auch einmal ein ähnliches Experiment gemacht
Ich habe rund 500.000 Wörter Fantasy- und SF-Texte aus 20 Jahren in ein Markov-Modell gesteckt und mit einem 2- bis 5-Gramm-Schieberegler angepasst
Es war ein Werkzeug wie ein „Brunnen der Träume“, das ich immer wieder hervorgeholt habe, wenn ich Inspiration brauchte
Es fühlte sich an wie eine Fortsetzung meiner kindlichen Gewohnheit, zufällig eine Seite im Wörterbuch aufzuschlagen, um Schreibanregungen zu finden
Mit so einem Korpus könnte das ein ziemlich interessantes Projekt werden
Es gibt auch ein Vortragsvideo
Könnte man ein eigenes Modell bauen, indem man alle persönlichen Texte darauf trainiert?
Welche Modelle und Tools sollte man verwenden, und ob es auch ohne System-Prompt in meinem eigenen Stil schreiben könnte, würde mich interessieren
Darüber hinaus frage ich mich, ob es auch natürlich auf Telefonanrufe oder Discord-Nachrichten reagieren könnte
Es gibt eine mit einer Markov-Kette erzeugte Harry-Potter-Fanfiction
Der Titel lautet Harry Potter and the Portrait of What Looked Like a Large Pile of Ash
Man kann sie unter diesem Link auf botnik.org lesen
Schon der erste Satz wirkte auf mich wie leerer Text
Ich finde, er hat noch weniger Emotion oder Bedeutung als das schlechteste von Menschen geschriebene Buch
Versuche wie „I Fed 24 Years of My Blog Posts to a Markov Model“ sind etwas, das bereits viele LLMs wiederholt getan haben
Eine Autorin wie Barbara Cartwright, die über 700 ähnliche Liebesromane geschrieben hat, ließe sich vermutlich mit einem Markov-Modell nachbilden
Meine Frau kauft manchmal sogar einen Roman noch einmal und liest ihn erneut, obwohl sie ihn schon gelesen hat
Ich erinnere mich, Mitte der 2000er im IRC Markov-Chain-Bots gesehen zu haben
Vor GPT gab es nichts, was wirklich besser war
Das ist eigentlich eher ein Trigramm-Modell als ein Markov-Modell
Wenn man es auf 4-Gramme oder mehr erweitert, würden deutlich natürlichere Sätze herauskommen
Früher gab es Forschung zu riesigen n-Gramm-Modellen namens „infini-gram“, die in einigen Domänen angeblich Leistungen nahe an LLMs erreicht haben
Danke, dass du 24 Jahre an Erfahrungen und Gedanken mit uns geteilt hast
In einer Zeit wie heute, in der es überall nur Konsum und Reizüberflutung gibt, ist so ein aufrichtiger Austausch etwas Besonderes