2 Punkte von GN⁺ 2025-12-15 | 1 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2025-12-15
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 frage mich, was genau mit „lernbar“ gemeint ist
  • 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

    • Ich habe etwas Ähnliches ausprobiert, und das Ergebnis war zur Hälfte lustiger Unsinn und zur Hälfte eine Kopie des Originals
      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
    • Um „trockene“ Ergebnisse zu vermeiden, ist der Trick, die Begrenzung auf fünf Wörter flexibel anzupassen
      Wenn es nur einen möglichen Pfad gibt, reduziert man zum Beispiel auf vier Wörter
    • Bei solchen Ergebnissen hat man fast das unheimliche Gefühl, als wolle da etwas kommunizieren
      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

    • Ich frage mich, ob du schon einmal bei NaNoGenMo mitgemacht hast
      Mit so einem Korpus könnte das ein ziemlich interessantes Projekt werden
    • Ich habe 2015 auch einmal einen Twitter-Bot gebaut, indem ich 20.000 meiner Tweets mit einem Markov-Modell trainiert habe
      Es gibt auch ein Vortragsvideo
    • Ich habe ebenfalls 30 Jahre unvollendete Romanentwürfe, und es wäre interessant, sie auf diese Weise durchlaufen zu lassen
    • Ich meine, Terry Davis habe auch etwas Ähnliches ausprobiert
    • Ich frage mich, wie man so etwas mit einem LLM machen würde
      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

    • Ich weiß nicht, warum man so etwas lesen wollen würde
      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

    • Aber ich weiß nicht, ob man den Unterschied in der Praxis erkennen würde
      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

    • Gemeint ist wahrscheinlich MegaHAL oder das etwas spätere Cobe
    • Ich habe in den 2000ern mit bitlbee auch selbst einen gebaut, das waren wirklich großartige Zeiten
  • 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