Les langages informatiques doivent parler aux humains et aux machines

Le langage n'est pas le propre de l'Homme. En revanche, c'est un domaine où les humains ne se débrouillent pas trop mal vis-à-vis des autres animaux.

Malheureusement, on ne sait pas trop pourquoi. Or, le défi de l'informatique consiste à parler à la fois aux humains et aux machines. Notre manque de compréhension du langage et de la façon dont on l'apprend explique qu'on ait encore du mal à communiquer avec un ordinateur, malgré les progrès récents des LLMs.

Ce court billet ne vous expliquera pas ce que parler veut dire, mais juste à poser le décor : langage et langues.

L'esprit de finesse

Suivant Ferdinand de Saussure et son Cours de linguistique générale de 1916, nous distinguons langage et langue : le langage est la capacité, universelle chez les humains, à communiquer et à exprimer ses pensées, tandis que la langue est un moyen de communication.

L'anglais, rustre, ne distingue pas les deux mots. De nombreux barbarismes en ont profité pour s'immiscer en sciences du logiciel : « langage de programmation », à la place de langue de programmation par exemple.

Ce serait dommage de ne pas se servir de la finesse du français. Dans ce billet et dans les suivants sur le même thème, nous allons donc nous servir du mot « langue » contre l'usage courant en informatique.

Langages

Notre langage est qualifié par les informaticiens de « naturel ». D'après le linguiste Noam Chomsky, c'est une capacité universelle inscrite dans notre biologie. Mieux vaudrait ainsi parler de langage humain, et plus précisément « du » langage humain. Le langage naturel regrouperait ainsi le langage humain et les langages des autres animaux : chimpanzés, corbeaux, baleines, abeilles, collégiens, etc. Au passage, l'étude des langages animaux est récemment facilitée par l'apprentissage automatique (par exemple pour le diamant mandarin).

Étendons légèrement la définition d'un langage à la simple capacité de communiquer, en écartant l'expression des pensées. Un agent conversationnel comme chatGPT, peut alors être considéré comme doté d'un langage, artificiel. Plus limité, un système informatique qui interagit avec un utilisateur pour l'aider à formuler ses requêtes et qui produit des réponses (comme un site web) vérifie aussi la définition. Un grille-pain avec écran ? Peut-être.

Le langage humain a la propriété de formuler sans cesse de nouvelles phrases - la preuve : vous n'avez probablement jamais lu ce paragraphe ailleurs. Le grille-pain avec écran n'a pas cette capacité, mais ce serait cruel de nier sa capacité à communiquer avec nous le matin. Trop de risque qu'il se vexe.

Il existe peut-être d'autres formes de langages artificiels non informatiques ; je ne sais pas. Je renvoie le lecteur à l'article de Laetitia Pill sur le lien entre musique et langage, et à l'essai de Laurent Lafforgue sur celui entre mathématiques et langage.

Langues

Les langues naturelles sont celles que nous employons spontanément pour nous adresser aux autres humains, aux animaux, aux plantes et, parfois, aux objets qui ont décidé de nous nuire. Ces langues ont été élaborées par des communautés d'humains au cours de leurs histoires et de leurs besoins (comme les langues des signes).

Toujours d'après Noam Chomsky, malgré leurs différences, les langues partagent toutes la même grammaire universelle correspondant à notre capacité innée au langage - cette thèse est toutefois l'objet de nombreuses polémiques et la position de Chomsky lui-même sur le sujet varie.

Aux langues naturelles sont opposées d'une part les langues construites (l'espéranto, l'elfique, le schtroumpf, le klingon ou encore le kobaïen), d'autre part les langues formelles.

Les langues formelles sont celles avec des règles explicites, exhaustives et bien définies, comme les langages langues de programmation. Une grande partie de la logique et des sciences du logiciel consiste à étudier ces langues. Elles servent notamment à nous adresser aux ordinateurs, lorsqu'ils font mine de ne pas comprendre nos langues naturelles.

En effet, pour avoir une chance de se faire obéir par un ordinateur, il faut formuler ses ordres dans une langue où l'interprétation ne fait aucun doute. Ne pas laisser l'ordinateur deviner au hasard ce qu'on veut. Ce qui demande d'être particulièrement précis.

La souplesse des langues naturelles

Contrairement aux langues naturelles avec lesquelles on peut parler n'importe comment tout en espérant être compris par notre interlocuteur, comme par exemple le fait que le wqt, le zzz, lz ffffifu et le txtxtx sont des animaux aquatiques nocturnes qui flabalbent le volapük, les langues formelles limitent drastiquement nos envolées lyriques. De plus, bizarrement, l'alcool ne facilite pas la communication avec elles.

Les langues naturelles peuvent produire des énoncés ambigus : « Thomas a un chat. Il adore les souris. ». Mais que désigne le pronom « Il » ? Thomas ou son chat ? Cette ambiguïté permet de véhiculer plusieurs sens selon les interprétations. Elle peut être levée (« Il adore les souris. Sans fil ou d'agneau. ») ou entretenue par le contexte (« Il adore les souris. C'est son côté félin. »). Cette ambiguïté est encore plus fréquente pour les langues orales, ce qui permet les jeux de mots foireux.

Les langues naturelles continuent d'évoluer. De nombreux néologismes ou barbarismes viennent les enrichir, ce qui permet par exemple de poser la question « Comment solutionnner l'éco-anxiété ? », peu compréhensible il y a vingt ans disons.

Les langues naturelles sont souples : on peut les écorcher, maltraiter l'orthographe, voire se moquer d'elle, mé kan meme résusir à comnuqiuer.

Les langues formelles aussi reposent sur des conventions sociales et évoluent de ce fait : on parle de moins en moins le vieux Python (version 2) pour passer au Python moderne (version 3). Et ce serait un travail d'archéo-informatique d'analyser du Python antique (version 1), si tant est qu'on retrouve des textes quelque part. Les langues formelles peuvent parfois aussi être ambigues : est-ce que a * b * c est égal à (a * b) * c ou bien à a * (b * c) ? Par contre, pour la souplesse, on repassera : n'oublions pas qu'en informatique l'interlocuteur principal en face de vous peut avoir des neurones artificiels mais pas de cerveau.

Comme on le sait depuis 1964 et le premier agent conversationnel Eliza - bien avant chatGPT -, un langage artificiel peut être conçu pour employer des langues naturelles. Réciproquement, disposer de langues formelles qui possèdent la souplesse des langues naturelles serait particulièrement pratique.

Mots et phrases

Une langue formelle est un ensemble de mots (finis) dont les lettres appartiennent à un alphabet fixé. On donne également la recette pour former les mots à partir de ces lettres. Certaines langues naturelles peuvent être plutôt bien représentées par une langue formelle (comme le sanskrit décrit au cinquième siècle avant J.-C. par la grammaire de Pāṇini), mais la plupart échappent à la modélisation formelle.

Les mots d'une langue formelle ne ressemblent pas toujours à ceux des langues naturelles. En particulier, une phrase d'une langue naturelle correspond à un mot dans une langue formelle. Et l'alphabet d'une langue formelle peut contenir des symboles qui ne sont pas des lettres d'une langue naturelle, comme les espacements ou les signes de ponctuation.

Le Shadok

Dans le cas d'une langue formelle contenant un ensemble fini de mots, la façon la plus pénible de la définir est de lister tous ses mots. C'est bien sûr impossible pour une langue naturelle dont on ne peut dresser l'inventaire des phrases.

Par exemple, les informaticiens utilisent souvent une langue formée des mots foo, bar, baz, qux, quux, corge, grault, garply, waldo, fred, plugh, xyzzy et thud pour nommer des variables sans réfléchir.

Treize mots à lister, ça va. Mais considérons par exemple la langue gabuzomeuse des Shadoks (langue construite), dont tous les mots ont entre une et quatre lettres pris dans l'alphabet Shadok à quatre lettres ᘐ (ga), Ꜿ (bu), ω (zo) et ρ (meu). En suivant la logique Shadok, les phrases formés avec un à quatre mots au plus (espérons ne pas froisser les gabuzomeusistes).

Pour simplifier, supposons que l'espace est le seul signe de ponctuation permettant de distinguer les mots. L'alphabet de la langue formelle associée possède donc 5 éléments : ᘐ, Ꜿ, ω, ρ et l'espace. Il y a donc 340 (4 + 16 + 64 + 256) mots au maximum chez les Shadoks (ce qui force chaque mot à posséder plusieurs sens, selon le contexte) : ᘐ, Ꜿ, ω, ρ, ᘐᘐ, ᘐꜾ, ᘐω, ᘐρ, Ꜿᘐ, ꜾꜾ, Ꜿω, Ꜿρ, ωᘐ, ωꜾ, ωω, ωρ, ρᘐ, ρꜾ, ρω, ρρ, ᘐᘐᘐ, ᘐᘐꜾ, ᘐᘐω, ᘐᘐρ...

Et ainsi, 340 phrases d'un mot, 3402 de deux mots, 3403 de trois mots et 3404 de quatre mots, soit 13 402 779 940 phrases au total. Nombre fini, mais plutôt grand. Définir formellement la langue gabuzomeuse en donnant tous ses mots / toutes ses phrases n'est pas raisonnable. Une autre approche s'impose, comme les expressions régulières.

Aaaaaaaaaaaaaaaaaaaaaaaaaa !

Le unaire est une langue dont l'alphabet se réduit à une seule lettre (disons a). Un mot du unaire est soit vide (le mot vide, souvent noté ε), soit formé avec autant de fois la lettre a que l'on veut. Il y a donc un nombre infini de mots dans cette langue. On peut les lister ainsi : ε, a, aa, aaa, aaaa, aaaaa, ...

Mais les trois points «...» ne sont pas satisfaisants : comment expliquer exactement ce qu'ils désignent ? Pour être plus précis, on décrit le unaire de façon récursive : un mot est soit le mot vide ε, soit la lettre a suivie d'un autre mot (concaténée avec).

La langue unaire est pratique pour compter des petits nombres. La lettre a n'a pas d'importance et toute l'information d'un mot se résume au nombre de répétition de cette lettre : un entier naturel.

Abba ?

Soyons fous, autorisons une seconde lettre, disons b, pour former la langue binaire. Un mot est donc soit vide (ε), soit formé de lettres a ou b, dans n'importe quelle succession. Voici des mots de cette nouvelle langue : a, b, ab, ba, aab, baba, aaaabbbaab, ...

Récursivement, chaque mot est soit vide, soit une des deux lettres a ou b suivie d'un autre mot.

Si nous nous limitons à compter le nombre de a et de b, sans tenir compte de leurs ordres d'apparitions, alors un mot s'identifie à un couple d'entiers naturels. Par exemple, aaaabbbaab correspondrait à (6, 4) : 6 occurrences de la lettre a et 4 de la lettre b.

Cependant, la position des lettres véhicule des informations précieuses. Remplacer a par 0 et b par 1, conduit au binaire qui peut représenter à peu près n'importe quoi. Remplacer a par . (point) et b par - (tiret) amène au code morse. Remplacer aa par « haut », ab par « bas », ba par « gauche » et bb par « droite » et vous obtiendrez une suite de commande pour déplacer un objet sur un damier.

Bref, avoir deux lettres différentes et une notion de succession, c'est énorme. Les ordinateurs le savent. Les Callicebinae aussi : je vous encourage à allez jeter un œil au récent livre de Philippe Schlenker, page 9, pour voir ce qu'ils sont capables de transmettre avec deux sons différents.


Antoine