La bibliographie du livre de Victor Papanek (Design for the Real World, Bantam, 1973) est particulièrement abondante, un reflet encore du caractère généreux du personnage. Il admet lui-même que cette liste d’ouvrages est « startlingly long », comportant près de 500 ouvrages classés en 12 catégories. Et il ajoute que s’il avait inclus tous les livres qui l’ont amené à forger ses convictions la liste aurait été encore plus longue, et aurait comporté par exemple la trilogie de Tolkien, et tous les livres de son ami Henry Miller. Toutes les références ne sont pas citées dans le corps de l’ouvrage, même s’il y a énormément de noms jetés au cours des pages. Et parmi ceux-là, il y a George K. Zipf : « The ideal solution to any problem is always to achieve « the mostest with the leastest », or to use George K. Zipf’s happy phrase, « the principle of least effort. » » (Papanek, p. 212, chapitre 9 « The Tree of Knowledge : Bionics »). Cette simple phrase, dans un chapitre qui m’intéresse tout particulièrement, m’a lancée dans une exploration plus longue et complexe que je le pensais au départ. Ayant réussi à me procurer son ouvrage Human Behavior and the Principle of Least Effort, An Introduction to Human Ecology (Addison Wesley, 1949) ainsi que des écrits antérieurs, et bon nombre d’ouvrages et d’articles y afférant, j’ai plongé dans un tourbillon d’interrogations et d’étonnements. Comme beaucoup sans doute, je ne connaissais le nom « Zipf » que par la « loi de Zipf », qui va consituer la première étape de ce parcours. Papanek ne mentionne même pas cette loi, et je me demandais dans un premier temps s’il s’agissait vraiment du même « Zipf », mais il s’avère que c’est bien le cas.
Mais qu’est-ce que la loi de Zipf ?
Il faudrait plutôt dire « une » loi de Zipf, puisqu’elle peut prendre plusieurs formes. Dans sa forme première, elle se présente de la façon suivante : on prend tous les mots distincts d’un texte ou d’une énonciation, on mesure la fréquence d’occurrence de chaque mot, puis on range ces fréquences en ordre croissant et on considère la relation entre le rang r d’une certaine fréquence et la fréquence f(r) elle-même. La relation est alors : f(r) = c / r.
Cela veut dire en particulier que si vous dénombrez tous les mots distincts de n’importe quel texte, et que vous les rangez par nombre décroissant d’occurrences (ou fréquence), vous trouverez par exemple que le 10ème mot est 10 fois plus fréquent que le 1er, le 100ème, encore 10 fois plus, etc. C’est une « loi » dans le sens d’une loi physique, comme l’est la loi de la gravitation universelle. Personne n’oblige les locuteurs à appliquer cette loi, elle se produit d’elle-même. Pourquoi en est-il ainsi est la question qui intéresse Zipf et pour laquelle il met en œuvre son principe du moindre effort, mais je reviendrai sur ce point dans un autre billet.
Il y a plusieurs remarques à faire sur cette loi telle qu’énoncée plus haut. D’abord, le mot « fréquence » employé par Zipf est un peu trompeur : il s’agit en réalité du nombre d’occurrences du mot. Cela ne change pas fondamentalement la loi, mais il faut alors remarquer que la relation concerne des nombre entiers. En conséquence avec un corpus peu étendu cette loi ne sera que très approximative. Ensuite, il est évident que la courbe est décroissante par construction (puisqu’on range les valeurs de cette manière). Le problème est la forme de cette courbe, et à quelle fonction elle peut correspondre. Enfin, sur un corpus important, et étendue à toutes sortes de textes et de langues, cette loi devient une loi statistique.
J’avais rencontré cette loi dans le livre de Benoît Mandelbrot Les objets fractals. Forme, hasard et dimension (Flammarion, 1978), comme exemple d’arbre de hiérarchie, ou distribution fractale. Le chapitre est particulièrement obscur (Mandelbrot, avec tout le respect qui lui est dû, est souvent peu clair), les formules beaucoup plus compliquées que celle de la loi de Zipf mentionnée plus haut. J’y reviendrai, mais dans une courte « esquisse biographique » consacrée à Zipf (Mandelbrot, chapitre XV), il mentionne ceci : « [Zipf] nous offre une armée de figures et de tableaux, martelant sans arrêt la preuve empirique de la validité d’une loi statistique, dont le chapitre XII de cet essai a cité deux applications, et qui en a d’autres, dans d’innombrables domaines des sciences sociales. Si elle a eu de la peine à s’imposer, c’est surtout parce qu’elle heurtait de front le dogme qui dominait alors sans conteste parmi les statisticiens de métier : que tout dans la nature est gaussien. » Je reviendrai sur les rapports de Mandelbrot avec Zipf, mais d’abord, un petit rappel sur les lois statistiques.
Si vous disposez d’un certain nombre de données, leurs probabilités peuvent prendre différentes formes. D’abord, il peut n’y avoir aucune régularité, le phénomène est totalement aléatoire. Ensuite il peut y avoir équiprobabilité : par exemple le nombre d’accouchements qui a lieu chaque mois, ou chaque jour, est plus ou moins le même (et, non, la pleine lune n’affecte pas cette statistique…). Ou alors, on obtient une courbe gaussienne, ou « en cloche », et les statisticiens adorent en effet ce type de distribution (que l’on appelle aussi « loi normale », c’est tout dire…), qui leur donne des outils d’analyse, comme la moyenne, l’écart-type, etc. Typiquement, on rencontre ce type de distribution par exemple pour la taille des individus d’une population donnée, mais c’est le cas aussi de bon nombre de données en physique ou dans les sciences sociales. Une distribution gaussienne, ou « normale » se présente comme ceci (plus l’écart-type est élevé, plus la courbe est « aplatie ») :
Figure 1 : distribution gaussienne; écart-type = 10 (en noir), 7 (en rouge), 17 (en bleu)
Une distribution zipfienne se présente très différemment. Sa formule, rappelons-le, est : f(r) = c / r. Cela signifie que ses points se situe sur l’hyperbole f(x) = c / x. Mais il n’est pas facile de reconnaître une hyperbole à l’œil nu. C’est pourquoi on utilise une représentation log-log. En effet, Log (f(x)) = Log (c / x) se traduit en Log (f(x)) = Log c – Log x, c’est-à-dire tout simplement en une droite de pente -1. Une distribution zipfienne « théorique » avec c = 100 donne alors ceci :
Figure 2 : distribution zipfienne : coordonnées normales (à gauche), logarithmiques (à droite)
Mais ce n’est qu’un cas particulier d’une « loi puissance » dont la formule générale est : f(x) = c/xb, le cas de la loi de Zipf (dans sa première formulation) survenant quand l’exposant b (qui donne son nom à la loi) est égal à 1. Ce type de distribution est rencontré par exemple pour les revenus salariaux d’une population (loi de Pareto), mais est en fait présent aussi dans énormément de phénomènes physiques ou sociaux. Le problème est de ne pas traiter ces cas comme s’ils relevaient d’une loi « normale ». La distribution de la fréquence des tremblements de terre suivant leur magnitude suit une telle loi, mais les moins fréquents de ces événements sont aussi les plus dangereux… Nassim Nicholas Taleb (The Black Swan, Penguin Books, 2007) qualifie de Mediocristan et Extremistan ces deux points vue et attribue les crises financières à la myopie des statisticiens du Mediocristan, trop habitués à la loi « normale »…
Dans la représentation log-log, f(x) = c/xb se traduit par Log (f(x)) = Log c – b Log(x). La pente de la droite en log-log correspond donc à l’exposant (en négatif) de la loi puissance. Ainsi, si f(x) = c / √ x ce qui peut aussi s’écrire f(x) = c / x1/2, on obtient :
Figure 3 : loi puissance b = 1/2
Avec b = 2, cela donne :
Figure 4 : loi puissance b = 2
Avouons qu’il est plus facile d’évaluer la pente de la droite dans les graphiques de droite, que de distinguer les courbes de gauche…
Revenons à Zipf a et à son dénombrement des mots distincts d’un texte. Il a notoirement effectué ce traitement à partir des mots de Ulysses de James Joyce, qui est l’exemple le plus souvent donné. Cet ouvrage comporte 29 899 mots différents pour un total de 260 430 mots. Dans ce cas, il disposait déjà des données, un index ayant été établi par Miles L. Hanley et leur rangement par fréquence d’apparition par M. Joos (notons que Zipf cite explicitement, et avec quelques mots reconnaissants tous les contributeurs à ses travaux, y compris nommément ses étudiants). Il précise ce qui est considéré comme mots distincts, ce qui peut avoir une certaine importance et est examiné très rigoureusement. Les mots sont considérés comme distincts s’ils diffèrent phonétiquement, même si ce sont des inflexions du même mot. Il donne l’exemple de give, gives, gave, given, giving, giver, gift étant considérés comme sept mots distincts. Voici un extrait du tableau des mots et de leur nombre d’occurrences et le graphique (en log-log) que Zipf en déduit :
Figure 5 : Zipf, p. 24
Figure 6 : Zipf, p. 44
On comprend l’excitation de Zipf en voyant ce graphique qui confirmait l’hypothèse construite à partir de ses spéculations sur le principe du moindre effort ! Mais remarquons qu’il ne revendique pas spécialement la paternité de cette distribution, de cette « loi » à laquelle on a donné son nom. Il reconnaît très aisément et avec plaisir les travaux antérieurs qui constataient le même phénomène. Il cite en particulier celui qui est parfois considéré comme un précurseur, Jean-Baptiste Estoup, sténographe à la Chambre des députés, qui dès avant 1912 avait en effet remarqué ce rapport « hyperbolique » entre le rang et la fréquence des mots, et dont on accole parfois le nom à celui de Zipf pour baptiser cette loi. Mais le corpus d’Estoup était très limité alors que Zipf ne s’en est pas tenu à l’exemple d’Ulysses. Déjà sur son premier graphique, on voit le résultat de l’étude consacrée aux 6002 mots distincts rencontrés dans un corpus de 43989 mots présents dans des échantillons tirés de journaux américains, recensés par R. C. Eldridge. Au-delà de Joyce, il a analysé des textes allant chronologiquement de Beowulf (datant d’avant l’an 1000) à T. S. Elliot en passant bien sûr par Shakespear. Zipf ne s’est pas borné à l’anglais, mais s’est attaqué à des langues anciennes ou rares comme le latin, le vieil anglais d’Ælfric d’Eynsham, le gothique et diverses formes de vieil allemand, le Pennsylvania Dutch des mennonites et des amishs, ou encore le yiddish, ainsi qu’à des langues non indo-européennes comme le Nootka,le Plains Cree, les langues Dakota (langues amérindiennes), l’hébreu moderne (de Palestine à l’époque), ou encore le chinois. Il collabore alors avec des spécialistes de ces langues, ou, lorsqu’il en est lui-même spécialiste, il effectue lui-même le comptage des mots. Notons la patience de tous ces linguistes pour effectuer ces recensements sans l’aide des ordinateurs et de la numérisation des textes ! Zipf a aussi analysé le rapport entre nombre de mots ayant la même fréquence et la fréquence, le classement des intervalles entre répétition du même mot, la relation rang-fréquence des morphèmes, des « varimorphes » (variations phonétiques), ou des « holophrases » (mots composés).
Zipf ne prétend pas que la formule initiale découverte pour les mots de Joyce est universelle. Il généralise lui-même sa formule en loi puissance : f(r) = c/rb, avec l’exposant légèrement différent de 1 pour des cas particuliers, comme le langage enfantin, celui des schizophrènes ou encore une langue en formation comme l’hébreu moderne.
Ses analyses, et beaucoup d’autres, sont effectuées aujourd’hui beaucoup plus paresseusement (loi du moindre effort ?) avec un ordinateur. L’étude numérique des mots de Ulysses corrobore ses résultats :
Figure 7 : Creative Commons (le graphique a été étiré en hauteur pour rendre les coordonnées égales et mieux apprécier la pente -1 de la droite)
Mais on trouve quantité d’autres graphiques, en particulier sur la page wikipedia en anglais consacrée à la loi de Zipf, comme cette illustration, qui comporte les données de De la terre à la lune, de Jules Verne :
Figure 8 : Jorge Stolfi, CC BY-SA 4.0, via Wikimedia Commons
Il faut ajouter que les courbes en log-log ne suivent la droite de pente -1 que sur une portion (importante) de la courbe. La partie basse n’est pas significative, car elle porte par définition sur très peu de mots (les moins fréquents). Mais la partie haute donne plus de soucis. Benoît Mandelbrot a amélioré la formule en introduisant un nouveau paramètre a : f(x) = c/(a + x)b. Mais je reviendrai sur les rapports entre Mandelbrot et Zipf dans un prochain billet.
Un peu d’expérimentation…
Les lois statistiques concernent des données du monde réel, mais on peut les modéliser avec des dispositifs aléatoires simples. Pour obtenir une répartition équiprobable, il suffit de lancer un dé un certain nombre de fois, et de noter les résultats. Le nombre d’occurrences de chaque résultat suivra une loi d’équiprobabilité, si le dé n’est pas pipé. On peut même imaginer un dispositif avec un « dé » à 100 faces, et effectuer 100 000 lancers (figure 9, en noir). Si on augmente le nombre de lancers, le nuage de points se rapprochera encore plus d’une horizontale. Pour obtenir une distribution gaussienne, ce n’est pas beaucoup plus difficile. Il suffit de lancer plusieurs dés et de prendre la somme des chiffres comme résultat :
Figure 9 : 100 000 lancers de 2 (en rouge), 3 (en vert) ou 4 (en bleu) « dés » à 100 faces (valeur obtenue en abscisse, nombre de lancers ayant obtenu cette valeur en ordonnée)
Mais comment obtenir une distribution zipfienne avec un mécanisme simple ? Une première question se pose : une distribution zipfienne ne serait-elle qu’une distribution gaussienne déguisée ? En effet, les nombre d’occurrence des résultats de lancers de dés sont rangés suivant la valeur obtenue. Mais que se passerait-il si on les rangeait suivant leur propre valeur, en ordre décroissant ? C’est ce que j’ai réalisé, avec 27000 lancers de 4 « dés » de valeur maximale égale à 70 (ces paramètres sont choisis pour avoir une valeur maximale de nombre d’occurrences sensiblement égale à la valeur maximale de la somme des dés qui est égale à 280) :
Figure 10 : 27000 lancers de 4 « dés » à 70 faces, rangés suivant la valeur du résultat obtenu
Figure 11 : 27000 lancers de 4 « dés » à 70 faces, rangés suivant le nombre d’occurrences des résultats
Cela ressemble un peu plus à distribution zipfienne, mais pour en savoir plus, il fait passer à la représentation log-log :
Figure 12 : 27000 lancers de 4 « dés » à 70 faces, rangés suivant le nombre d’occurrences des résultats, représentation log-log
Cette représentation ne montre pas la droite caractéristique des lois puissance. Une distribution zipfienne n’est donc pas une distribution gaussienne réarrangée. Ce n’est pas une bonne piste pour générer une distribution zipfienne avec un mécanisme aléatoire simple.
Pour continuer à expérimenter, nous allons envisager une loi un peu différente mais similaire à la loi rang-fréquence : la loi rang-taille, qui range les nombres d’items de telle taille suivant cette taille en ordre décroissant. La distribution des valeurs obtenues par lancers de dés vue plus haut était une loi rang-taille, en ordre inverse (ce qui ne change rien puisqu’elle était symétrique), mais bien évidemment ne correspondait pas à une loi zipfienne. Les distributions zipfiennes se rencontrent cependant souvent dans les lois rang-taille, et même pour les mots, puisqu’il se trouve que les mots les plus fréquents sont aussi les plus courts (en inversant le sens des abscisses). Nous allons explorer la question de la génération aléatoire d’intervalles d’un segment de droite.
Une première manière, naïve, de procéder, consiste à juxtaposer des intervalles de longueur aléatoire, inférieure à une valeur maximale donnée, puis de les ranger par ordre décroissant de taille. Avec 500 intervalles, on obtient par exemple ces graphiques :
Figure 13 : 500 intervalles de longueur aléatoire
Figure 14 : 500 intervalles de longueur aléatoire rangés par ordre décroissant de taille
Ce que montre ce graphique c’est que les longueurs des intervalles sont tout simplement équiprobables. On est loin d’une distribution zipfienne.
Une idée un peu plus élaborée consiste à partir d’une ligne de longueur donnée, d’y insérer un certain nombre de points aléatoirement répartis, et d’en déduire les intervalles ainsi générés. On pourrait croire que ces deux protocoles sont identiques, mais pas du tout. Cette nouvelle expérimentation donne ceci :
Figure 15 : 500 intervalles générés par 499 points aléatoires
Figure 16 : 500 intervalles générés par 499 points aléatoires, puis rangés par ordre décroissant de taille
Voilà qui ressemble nettement plus à une distribution zipfienne ! Pour en avoir le cœur net, il faut passer à la représentation log-log :
Figure 17 : 500 intervalles générés par 499 points aléatoires, puis rangés par ordre décroissant de taille, représentation log-log
Ce n’est pas une droite, il n’y a même pas de portion de droite, et donc la distribution n’est pas zipfienne, elle ne suit même pas une loi puissance. Il ne faut pas se fier aux apparences, et les distributions zipfiennes, même si elles apparaissent dans énormément de domaines de la physique ou des sciences sociales, ne se laissent pas si facilement réduire à un mécanisme simple. Cela dit, ce résultat est intéressant comme distribution aléatoire qui n’est ni équiprobable, ni gaussienne, ni zipfienne.
Enfin, tentons une dernière expérimentation. Commençons par choisir un point aléatoirement sur le segment, ce qui génère 2 intervalles. Puis recommençons sur chaque intervalle obtenu, pour créer 4 intervalles, etc. Il s’agit d’un protocole qu’on peut qualifier de récursif. Voici ce que cela donne pour 9 itérations, et donc 512 intervalles :
Figure 18 : 512 segments produits par protocole aléatoire récursif
Figure 19 : 512 segments produits par protocole aléatoire récursif, rangés par ordre décroissant de taille
Figure 20 : 512 segments produits par protocole aléatoire récursif, rangés par ordre décroissant de taille, représentation log-log
Voilà qui est beaucoup plus satisfaisant. Ce pourrait être le graphique rang-fréquence de mots d’un texte, surtout que nous n’avons que 512 intervalles. Ce n’est pas tout à fait une loi puissance, mais la portion de droite est bien là.
Ce dernier protocole fait penser aux procédés fractals mis en lumière par Benoît Mandelbrot, et ce n’est sans doute pas une coïncidence. Les relations entre Zipf et Mandelbrot feront l’objet d’un prochain billet.