- 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
Aucun commentaire pour le moment.