Louphole

Le grand bazar de choses qui devraient exister.

Word-Based Markov

Word-Based Markov est un générateur de texte en PHP à base de chaînes de Markov calculées sur les mots. Le projet est disponible sur GitHub sous la licence MIT.

Chaînes de Markov

Les chaînes de Markov sont un outil mathématique utilisé pour prédire ou générer des résultats sur la base d'un modèle de probabilités qui décrit le comportement hypothétique des résultats. Ce modèle de probabilités peut être, et est souvent, déduit de données déjà existantes qui servent d'échantillon d'entraînement. Dans le cas d'un générateur de texte, les chaînes de Markov vont chercher à produire un résultat qui imite un corpus de texte donné. Une description visuelle et plus intuitive du concept est disponible ici.

Games & Puzzles Traduction : Jeux & puzzles flux(us), Emmett Williams, Bob Watts, Joe Jones, George Brecht, Geoffrey Hendricks, La Monte Young, Larry Miller, Takako Saito, George Maciunas, Ben - (C) Emmett Williams - (C) Droits réservés - (C) Droits réservés - (C) ADAGP, Paris - (C) Droits réservés - (C) La Monte Young - (C) Droits réservés - (C) Droits réservés - (C) George Maciunas - (C) ADAGP, Paris - Photo (C) Centre Pompidou, MNAM-CCI, Dist. RMN-Grand Palais / Philippe Migeat
Algorithme

Pour qu'un algorithme de chaînes de Markov fonctionne, il faut tout d'abord un échantillon le plus grand possible du genre de résultat qui va être généré, pour construire son modèle de probabilités. Le programme découpe les données initialement saisies en petits "objets". Dans le cas de la génération de texte, ces objets peuvent être les lettres ou les mots par exemple. Pour chaque objet, il parcourt l'échantillon et retient l'objet qui lui succède. En comptant ces derniers, le programme calcule une probabilité, pour chaque objet, d'être le successeur d'un objet donné, c'est-à-dire une probabilité que les objets soient consécutifs. Ce processus global créé un modèle statistique des données en entrée, cela suppose que l'échantillon est suffisamment représentatif pour donner une idée de la règle générale que suit le matériau.

Une fois les statistiques calculées, l'algorithme de génération commence par choisir un objet au hasard dans la liste, puis il sélectionne l'objet qui lui succède à l'aide du modèle statistique de l'objet et d'une probabilité générée aléatoirement. Le processus est ensuite répété avec l'objet sélectionné, indéfiniment.

Ordre

L'algorithme prend un paramètre en entrée, en plus de l'échantillon d'entraînement, qui est l'ordre. Dans le calcul des statistiques précédemment décrit, l'ordre définit, pour chaque objet, le nombre d'objets qui lui succèdent qui doivent être pris en compte comme un seul. C'est à dire qu'à l'ordre 3 par exemple, pour chaque mot, on calculera la probabilité du groupe de 3 mots qui le succèdent, et non juste du mot suivant seul. Cela permet, dans le cas de corpus d'entrée assez larges, d'améliorer la structure des résultats (ils seront plus proches du modèle d'entrée) au détriment de l'influence du hasard (moins de variations). Si l'ordre est trop grand, on finit par obtenir un résultat identique aux données d'entrée.

Word-based / Letter-based

Je cherchais initialement un générateur markovien de texte en PHP et le seul que j'ai pu trouver était celui de Hay Kranen qui est "letter-based", c'est à dire calculé au niveau des lettres. C'est à dire que l'algorithme précédemment décrit calcule son modèle statistique sur les possibilités de successions de lettres. C'est une excellente base pour imiter le vocabulaire du texte donné en entrée, pour par exemple créer des mots fictifs qui suivent de près les règles orthographiques et morphologiques. En revanche, pour générer des phrases, un générateur à base de mots plutôt que de lettres (donc "word-based") est plus efficace, car plus proche de l'imitation syntaxique et sémantique.

Exemples

Le quizz Who Wrote It: James Joyce or Markov Chains? illustre une utilisation typique de ce programme dans le but de générer des phrases proches de celles d'un corpus existant, en l'occurrence la dernière partie de Ulysses de James Joyce.