Cet article a été pensé à l’origine pour servir d’exemple à la question de la complexité combinatoire, dans le cadre de mon intervention au TeK’N Seo 2014.
Faute de temps (les ateliers durent 1h15, pas 6h) Tout ce dont je voulais parler ne rentre pas, et j’en profite donc pour publier ce petit exemple.
La question initiale semble simple:
J’ai à ma disposition des singes qui tapent au clavier – de manière supposée aléatoire – et je m’attends à ce que, tôt ou tard, ils m’écrivent un tweet au sujet du Tek’N SEO.
Vont-ils y arriver ? Si oui, en combien de temps ?
Commençons par calculer la probabilité d’écrire juste le mot TEKNSEO.
Si on l’écrit tout en majuscules, qu’on n’utilise donc que 26 lettres majuscules, pour un mot de 7 lettres on a 26x26x26x26x26x26x26 = 8.109 8 milliards de mots différents.
Même si on génère 1 millions de mots par seconde, il faudra 8000 secondes (plus de 2h) pour générer à coup sur TEKNSEO
Si on veut gérer la casse, ce n’est plus 26 mais 52 possibilités à chaque lettre, soit… 10^12 combinaisons.
Mille milliard de mille sabord euh, de mots différents.
Générer un pauvre petit tweet ? 140 signes, parmi 52 lettres minuscules et majuscules, plus des caractères de ponctuation, @ # : disons 7 signes de plus : 59 caractères.
59^140 = 8.3×10^247
La bibliothèque de Babel des Tweets (au sens de Borges) comporte donc 10^247 tweets….
En générant un millions de tweets par seconde, il faut pour générer un tweet donné 2.6×10^234 années.
(Pour mémoire, la fin de notre univers est prévue dans 15.10⁹ années)
Autre difficulté, savoir reconnaitre automatiquement, à la volée, parmi ces millions de tweets chaque seconde, ceux qui ont un sens, qui sont écrits dans la bonne langue;
Qui correspondent à un contexte donné, qui ne sont pas une copie d’un autre, ou une variante à une lettre près d’un autre…
Pour mettre en regard les tweets réels, il y a dans le monde 200 millions de twittos (4.5 millions en France).
Disons qu’ils tweetent 20 fois par jour en moyenne, et que Twitter a une durée de vie de 20 ans.
ça fait 146000 tweets par personne, env. 3.10^13 tweets pour toute l’histoire de Twitter.
En les générant au pif, on a une chance sur 2.7×10^234 de générer un des tweets jamais écrits par un utilisateur de Twitter… Mieux vaut jouer au Loto, non ?
Vous allez me dire: c’est bidon, pourquoi laisser taper des singes alors qu’on a des dictionnaires, on peut n’utiliser que des mots du dictionnaire… Si je prends un dictionnaire conjugué de OpenOffice par exemple, j’ai 230 000 mots.
Si je génère avec ces mots des phrases, je suis sur que c’est du français, je suis sur que les mots existent, ça simplifie nettement le problème non ?
Bon, il me manquera les noms propres, les mentions, et sans doute des lol, ptdr, et des hashtags improbables, mais passons.
Sur une base de 25 mots (moyenne à la louche) par Tweet, sans aucun signe ni ponctuation cela fait tout de même 230000^25=1.1×10^134 tweets différents, à comparer aux 10^12 tweets qui seront jamais écrits en français dans toute l’histoire de Twitter.
Verdict ?
Le hasard et la combinatoire, seuls, sont donc très fort pour générer une complexité folle, mais qui est en fin de compte inutile car la grande majorité des sorties ne veut rien dire.
Mes singes peuvent rêver tant qu’ils veulent de tweeter, ça restera un rêve.
La génération purement aléatoire de textes, non seulement ne peut – statistiquement- produire que de la bouille, et qui plus est se trahit de suite via des méthodes statistiques basiques. Il est très facile de détecter de faux textes (cf les différentes facettes dont dispose Google par exemple)
Pour faire mieux, les singes ne suffisent pas, il va falloir faire entrer Markov…
Aucun singe n’a tweeté cet article