2 points par GN⁺ 2025-12-15 | 1 commentaires | Partager sur WhatsApp
  • Inspiré du programme Mark V. Shaney des années 1980, un générateur de texte de Markov simple, Mark V. Shaney Junior, a été créé en environ 30 lignes de code Python
  • Ce modèle prédit probabilistiquement le mot suivant à partir de trois mots (trigramme) et utilise comme données d’entraînement plus de 200 billets de blog (environ 200 000 mots)
  • Les phrases générées prennent la forme d’un charabia (gibberish) mêlant des mots liés à Lisp, Emacs, les mathématiques et la programmation, thèmes récurrents du blog
  • Quand on augmente l’ordre du modèle, les phrases deviennent plus cohérentes, mais à partir de 5 il recopie le texte source tel quel, ce qui fait disparaître la créativité
  • Même à l’ère des grands modèles de langage (LLM), la clarté structurelle de ces modèles de Markov simples est présentée comme un bon point de départ pour comprendre les principes de la génération de langage

Aperçu du programme Mark V. Shaney Junior

  • Mark V. Shaney Junior est un générateur de texte qui imite l’utilisateur virtuel Mark V. Shaney, actif sur Usenet dans les années 1980
    • L’original était un programme qui générait automatiquement des messages à l’aide d’un modèle de Markov
    • Cette implémentation en est une version minimaliste simplifiant l’idée, publiée sur GitHub
  • L’ensemble du code tient dans environ 30 lignes de Python et privilégie la simplicité plutôt que l’efficacité
    • Même une personne découvrant les modèles de Markov pour la première fois peut le comprendre en moins de 20 minutes

La programmation expérimentale comme loisir

  • L’auteur aime programmer non pour résoudre un problème précis, mais pour explorer des idées
    • Il a expérimenté à plusieurs reprises des chaînes de Markov avec divers espaces d’états
    • Il rassemble ensuite ces codes expérimentaux et les partage sur GitHub ou Codeberg
  • Mark V. Shaney Junior est lui aussi l’un de ces essais, publié après avoir été suffisamment peaufiné

Génération de texte à partir des données du blog

  • Après avoir testé le modèle en l’entraînant sur A Christmas Carol de Charles Dickens, il a utilisé comme données d’entrée 24 années de billets de blog (plus de 200, environ 200 000 mots)
    • Les commentaires (environ 40 000 mots) ont été exclus
  • Les phrases produites prennent la forme de phrases illogiques mêlant commandes de programmation, termes mathématiques et commandes d’éditeur
    • Exemple : des commandes Emacs, du code Lisp et des termes mathématiques combinés aléatoirement
  • Certaines phrases reprennent des mots issus de billets précis du blog pour former des combinaisons dénuées de sens
    • Exemple : “Lisp source file” et “self-esteem” sont extraits de billets différents puis assemblés

Propriété de Markov et structure de l’algorithme

  • La configuration de base repose sur un trigramme (3 mots), avec une structure de map qui stocke les deux mots précédents comme clé (key) et le troisième comme valeur (value)
  • Processus de génération du texte
    • Sélection d’une paire de mots aléatoire → choix uniforme d’un des mots suivants possibles
    • Répétition en formant une nouvelle paire avec le mot nouvellement choisi et le mot précédent
    • Arrêt lorsqu’il n’y a plus de mot suivant ou lorsque la limite de 100 mots est atteinte
  • Quand un même trigramme apparaît plusieurs fois, le mot suivant correspondant est stocké en doublon dans la liste, ce qui permet une sélection probabiliste proportionnelle à la fréquence d’apparition
  • Ce processus est une transition probabiliste dépendant uniquement de l’état courant ; sous forme mathématique, il s’écrit
    P(Xₙ₊₁ | Xₙ, Xₙ₋₁, …, X₁) = P(Xₙ₊₁ | Xₙ)
    • Cette propriété sans mémoire (memoryless) est au cœur de la propriété de Markov

Expériences supplémentaires et ajustement de l’ordre du modèle

  • L’ordre par défaut est 2 et peut être modifié via un argument en ligne de commande
    • En portant l’ordre à 3 ou 4, les phrases deviennent plus cohérentes et plus naturelles
    • Exemple : génération de phrases relativement logiques mêlant commandes IRC et concepts mathématiques
  • En revanche, quand l’ordre passe à 5, le modèle tend à reproduire textuellement le texte d’origine, et le charabia créatif (gibberish) disparaît
  • Il est également possible de générer du texte à partir d’un prompt initial
    • Exemple : en fournissant une phrase commençant par “Finally we”, on obtient une longue phrase mélangeant Emacs, MATLAB et GNU bash

L’intérêt d’un modèle simple

  • En 2025, les grands modèles de langage (LLM) dominent, mais les modèles de Markov ne parviennent pas à capturer la structure globale ni les dépendances de long terme
  • Malgré cela, grâce à la simplicité de leur conception et à la clarté de leur implémentation, ils gardent de la valeur comme modèle d’initiation pour apprendre les principes de la génération de langage
  • L’auteur le décrit comme le « Hello, world » des modèles de langage

1 commentaires

 
GN⁺ 2025-12-15
Réactions sur Hacker News
  • Un Markov Model est une version statistique d’une machine à états qui génère probabilistiquement le token suivant uniquement à partir de l’état courant
    Il faut définir clairement la relation entre états et tokens pour pouvoir avoir une discussion pertinente
    Par exemple, si l’état est une fonction des k dernières observations, on parle alors de Markov Chain d’ordre k
    On peut voir les RNN comme une extension où l’état est défini comme une fonction des états précédents et des tokens récents
    Les probabilités de transition d’état peuvent être déterministes ou probabilistes, et la longueur du contexte peut aussi être définie de manière variable
    Mais tous les Markov Models ne sont pas apprenables

    • Je me demande ce que signifie exactement « apprenable »
  • Je me souviens avoir acheté un programme de ce genre chez Egghead Software en 1992 pour 3 dollars
    J’y avais injecté des textes du type journal intime sur 5 ans, et j’avais bien ri en voyant le résultat
    Pour un vieil exemple, on peut voir Babble 1.0.20 ainsi que ce fil de forum associé : Software Spotlight: Babble

  • Après avoir lu le billet, j’ai moi aussi essayé avec un modèle de Markov
    J’ai commencé au niveau caractère, mais même en passant à un modèle d’ordre 2, il n’y avait pas de grande différence
    En ordre 3 (trigram), c’est devenu un peu plus naturel
    Ensuite, j’ai appliqué un modèle de Markov d’ordre 1 à un texte tokenisé avec BPE (Byte Pair Encoding), et le résultat était un peu plus cohérent
    Mais en passant à l’ordre 2, il copiait le texte source tel quel — parce que le BPE supprimait les tokens répétés et rendait les transitions déterministes
    En limitant le nombre de tokens (par ex. : 894 → 800), c’est redevenu non déterministe, et le texte est devenu légèrement plus naturel
    Quand on monte trop haut en ordre (par ex. ordre 5), le texte donne une impression sèche, purement factuelle
    Au final, les modèles de Markov sont simples, mais restent des outils très amusants pour expérimenter

    • J’ai tenté quelque chose de similaire, et le résultat était pour moitié un charabia drôle, pour moitié un copier-coller du texte d’origine
      Supprimer les chaînes où il n’y a qu’un seul token suivant pourrait aider, mais il y a aussi un risque d’effacer la structure grammaticale
      Je cherche une meilleure façon d’éviter les longues chaînes uniques
    • Pour éviter ce rendu « sec », l’astuce est d’ajuster souplement la limite à 5 mots
      S’il n’existe qu’un seul chemin possible, on réduit par exemple à 4 mots
    • Ce genre de résultat donne parfois une impression inquiétante, comme si quelque chose essayait de communiquer
      Ou alors c’est simplement notre esprit qui cherche de l’ordre dans le chaos, alors qu’en réalité nous sommes seuls
  • J’avais moi aussi fait une expérience similaire autrefois
    J’avais injecté dans un modèle de Markov environ 500 000 mots de fantasy et de SF écrits sur 20 ans, avec un curseur ajustable de 2 à 5-grammes
    C’était une sorte de « puits de rêves » dans lequel je replongeais chaque fois que j’avais besoin d’inspiration
    Ça me rappelait mon habitude d’enfant d’ouvrir une page au hasard dans le dictionnaire pour y trouver une idée d’écriture

    • Je me demande si tu as déjà participé à NaNoGenMo
      Avec un corpus comme ça, il y aurait de quoi faire un projet assez amusant
    • Moi aussi, en 2015, j’avais entraîné un modèle de Markov sur 20 000 de mes tweets pour fabriquer un bot Twitter
      Il y a même une vidéo de présentation
    • J’ai moi aussi 30 ans de brouillons de romans inachevés, et ce serait intéressant de les faire tourner de cette manière
    • Il me semble que Terry Davis avait tenté quelque chose de similaire lui aussi
    • Je me demande comment on ferait ça avec un LLM
      Est-ce qu’on pourrait entraîner un modèle personnel sur l’ensemble de mes écrits ?
      J’aimerais savoir quels modèles et outils utiliser, et s’il pourrait écrire dans mon style sans system prompt
      Et même au-delà, je me demande s’il pourrait répondre naturellement à des appels téléphoniques ou à des messages Discord
  • Il existe une fanfic Harry Potter générée avec une Markov Chain
    Son titre est Harry Potter and the Portrait of What Looked Like a Large Pile of Ash
    On peut la lire via ce lien sur botnik.org

    • Je ne comprends pas pourquoi quelqu’un aurait envie de lire ça
      Dès la première phrase, j’ai eu l’impression de lire un texte creux
      À mon avis, il y a encore moins d’émotion ou de sens que dans le pire livre écrit par un humain
  • Des tentatives du genre « I Fed 24 Years of My Blog Posts to a Markov Model » sont déjà quelque chose que plusieurs LLM répètent depuis un moment

  • Un auteur comme Barbara Cartwright, qui a écrit plus de 700 romans sentimentaux assez similaires, semble pouvoir être reproduit avec un modèle de Markov

    • Mais je ne sais pas si on pourrait vraiment faire la différence
      Ma femme rachète parfois par erreur un roman qu’elle a déjà lu, puis le relit
  • Je me souviens avoir vu des bots à base de Markov chain sur IRC au milieu des années 2000
    Avant l’arrivée de GPT, on n’avait rien de mieux que ça

    • Tu parles probablement de MegaHAL ou, un peu plus tard, de Cobe
    • J’en avais moi aussi bricolé un avec bitlbee dans les années 2000, c’était vraiment une époque formidable
  • En réalité, c’est plus proche d’un modèle trigram que d’un Markov Model
    En l’étendant à des 4-grammes ou plus, on obtiendrait des phrases bien plus naturelles
    Il y a eu autrefois des recherches sur un modèle n-gram géant appelé « infini-gram », qui aurait montré, dans certains domaines, des performances proches de celles des LLM

  • Merci de partager 24 ans d’expérience et de réflexion
    À une époque comme la nôtre, saturée de consommation et de stimulation, ce genre de partage sincère a quelque chose de particulièrement précieux