- 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
Noch keine Kommentare.