La grammaire m’a tuer

“Le Nombre imaginaire” ou les mathématiques comme terrain de jeu où l’imagination seule fixe les limites.

Depuis l’avènement de l’informatique, dès les années 1940, et surtout depuis l’apparition d’ordinateurs généralistes réellement programmables, ingénieurs et chercheurs ont rêvé de programmer une large variété d’opérations humaines, que ce soit le raisonnement, le jeu d’échecs ou la conversation, tout cela débouchant sur ce domaine de l’informatique appelé Intelligence Artificielle (IA) si populaire à l’heure actuelle – au point qu’on pourrait croire que la discipline a été inventée hier et non il y a 70 ans.

Dans la gamme des actions traditionnellement humaines que les chercheurs en IA ont cherché et cherchent encore à conquérir, la traduction automatique se distingue par la médiocrité (parfois hilarante) de ses premiers résultats, mais aussi par les progrès qu’elle a effectués depuis quelques années. Explorons un peu ses fondements, ses échecs, ses succès relatifs et ses limites de principe – ne fut-ce que sur nous rassurer quant à l’avenir de nos chers traducteurs en chair et en os !

La première tâche est d’essayer de représenter sous forme mathématique puis informatique les concepts dont nous avons besoin. Un traducteur traduit un énoncé d’une langue dans une autre. Comment pouvons-nous modéliser cela ? Avant tout, qu’est-ce qu’un énoncé ? Comme nous le verrons, et c’est assez triste, les outils de traduction automatique qui marchent actuellement le mieux sont paradoxalement ceux qui en savent le moins là-dessus. Mais creusons un peu ce sujet tout de même.

Qu’est-ce donc qu’un énoncé ? Même en nous cantonnant à la langue écrite, nous trouvons déjà une grande variété de réponses. Un énoncé n’est pas toujours, par exemple, une suite de mots séparés par des espaces ou des éléments de ponctuation ; de nombreuses langues ne fonctionnent pas comme cela. Quand bien même, un mot n’est généralement pas une entité isolée ayant un unique sens. Des mots distincts ont souvent une racine commune ; un mot peut être modifié pour porter un genre, une pluralité ou un rôle dans l’action ; certaines langues autorisent la création de mots composés qui en combinent d’autres, de manière plus ou moins fréquente. La structure d’un mot décomposée en lettres – quand elle existe – peut aussi contenir des indications quant à sa nature ou à son usage ; en français, un nom propre commence par une majuscule, et un substantif qui se termine par un « s » est invariable.

Au-delà, l’assemblage des mots en séquence est soumis à des règles grammaticales dont le respect est indispensable pour que l’énoncé puisse se comprendre, par exemple, comme une suite de phrases en français. Mais, à l’inverse, de nombreuses phrases grammaticalement incorrectes sont régulièrement écrites et comprises.

Enfin, même un ensemble de phrases grammaticalement correctes peut être totalement dénué de sens. On a besoin de pouvoir attribuer un sens à ce qui est dit.

Traditionnellement, en informatique, on représente un langage (qu’il soit humain ou de programmation) par trois concepts de base : le lexique, la syntaxe et la sémantique.

Le lexique contient les éléments de base du langage considéré, qui peuvent être des mots, des éléments de ponctuation (espace, virgule, point…) ou des éléments de mots telles que les racines et les terminaisons. Un lexique du français, par exemple, pourrait contenir le mot « chien » mais aussi la terminaison « s » du pluriel ou la terminaison « ra » pour la troisième personne du singulier au futur des verbes. Chaque mot ou élément de mot du lexique est typiquement associé à un symbole qui le représente et qui peut être utilisé par les règles de grammaire ; par ailleurs le lexique regroupe souvent certains éléments de base (comme les chiffres ou les lettres majuscules) en catégories. Par exemple, le symbole CHIEN pourrait représenter le mot « CHIEN », le symbole ESPACE l’espace (« ») , le symbole MARQUE_FEMININ la terminaison féminine « e », et le symbole PLURIEL_REGULIER la terminaison « s ».

Une grammaire détermine ensuite la syntaxe du langage. Elle donne un ensemble de règles qui définissent des entités formées à partir d’éléments du lexique ou d’entités grammaticales plus simples. Voici un exemple de grammaire pour un « micro-français » capable de représenter quelques phrases très simples écrites en majuscules :

<article_masculin> ::= LE | UN
<article_féminin> ::= LA | UNE
<nom_masculin> ::= CHIEN | CHAT | HIBOU | CAILLOU | VENT
<nom_féminin> ::=  SOURIS | VACHE | FLEUR
<adjectif_masculin> ::= VERT | GRIS | NOIR | BLEU 
<adjectif_féminin> ::= <adjectif_masculin> MARQUE_FÉMININ
<verbe> ::= MANGE | AIME |  REGARDE
<groupe_nominal_masculin> ::=
    <article_masculin> ESPACE <nom_masculin> [ESPACE <adjectif_masculin>]
<groupe_nominal_féminin> ::=
    <article_féminin> ESPACE<nom_féminin> [ESPACE <adjectif_féminin>]
<groupe_nominal> ::= <groupe_nominal_masculin>|<groupe_nominal_féminin>
<phrase> ::= <groupe_nominal> ESPACE <verbe> ESPACE <groupe_nominal> POINT
<énoncé> ::= <phrase>+

Déchiffrons un peu ce charabia. La première règle définit un nouveau symbole (appelé un « non-terminal » par les experts), conventionnellement noté entre chevrons, <article_masculin>. Le symbole « ::= » sépare un symbole et sa définition. À sa droite, on trouve une liste de symboles tirés du lexique, séparés par des barres verticales « | » qui indiquent un choix. La première règle se lit donc ainsi : « un article masculin est soit le mot LE, soit le mot UN ». Les quatre règles suivantes se lisent de la même manière.

Celle d’après, qui définit les adjectifs féminins, utilise le symbole <adjectif_masculin> précédemment défini ; elle indique qu’on obtient un adjectif féminin en ajoutant la terminaison « e » du féminin à un adjectif masculin. Cela nous empêche certes d’utiliser les adjectifs ROUGE, ORANGE et BLANC, mais cette simplification nous fait gagner de la place ; croyez-moi sur parole, les exceptions sont faciles à traiter.

Un groupe nominal masculin est défini comme la succession d’un article masculin, d’un nom masculin et d’un adjectif masculin optionnel, séparés par des espaces. Les crochets droits [  ] indiquent une partie optionnelle.

Un groupe nominal, comme on s‘y attendrait, est soit un groupe nominal masculin soit un groupe nominal féminin.

Une phrase spécifie en succession un groupe nominal (le sujet), un verbe et un autre groupe nominal (le complément d’objet), séparés par des espaces et suivis d’un point.

Enfin, un énoncé est une suite d’au moins une phrase (c’est ce qu’indique le signe, qui signifie « au moins un » dans ce contexte.

Nous pouvons maintenant alimenter notre grammaire – plus exactement, le programme informatique qui la manipule – avec une suite de caractères. Le programme en extraira d’abord les éléments lexicaux, en signalant une erreur s’il reçoit une suite de caractères impossible à reconnaître ; puis il appliquera les règles de la grammaire pour s’assurer que les éléments s’enchaînent bien de manière grammaticalement correcte, en signalant une erreur quand ce n’est pas le cas. À l’inverse, la grammaire et le lexique peuvent aussi être utilisés pour fabriquer des phrases.

Notre minuscule lexique et notre grammaire lilliputienne peuvent ainsi reconnaître ou fabriquer des énoncés telles que celui-ci :

LA VACHE MANGE UNE FLEUR BLEUE.
LE CHIEN GRIS REGARDE LA SOURIS VERTE.
LE CHAT MANGE LA SOURIS.

En revanche, la phrase
CHIEN VERTE MANGE GRISE FLEUR.
sera rejetée car elle contient de multiples erreurs (accord de genre, manque d’article, adjectif avant le nom).

Passionnant, n’est-ce pas ? Notre programme peut prétendre au niveau de lecture d’un élève en deuxième mois de CP, soumis au re-confinement et à la méthode globale. Bonne chance pour la suite.

Vous trouvez peut-être que notre répertoire de phrases est trop limité ? Très bien, nous allons modifier un peu nos règles :

<groupe_verbal > ::= <verbe> ESPACE <groupe_nominal>
<groupe_nominal> ::=
      <groupe_nominal_masculin>|<groupe_nominal_féminin>
      [ESPACE QUI ESPACE <groupe_verbal>]
<phrase> ::==
      <groupe_nominal> ESPACE <groupe_verbal> POINT

Nous avons distingué un nouveau concept, le groupe verbal, qui comporte un verbe et un complément. Une phrase est maintenant constitué d’un groupe nominal sujet, d’un groupe verbal et d’un point. Le plus important est que nous avons étendu la notion de groupe nominal : de manière optionnelle, un groupe nominal peut être complété par une proposition relative – un groupe verbal introduit par QUI.

Nous avons maintenant accès à toute une variété de nouvelles phrases telles que

LA VACHE REGARDE LA SOURIS QUI AIME UN CHAT GRIS.
LE CHIEN GRIS QUI MANGE LA FLEUR BLEUE REGARDE LE CHAT.

Mais aussi des phrases à rallonge, de fait une infinité de phrases imbriquées aussi longues que l’on veut :
LE CHAT GRIS QUI AIME LA VACHE QUI MANGE UNE FLEUR REGARDE UN HIBOU QUI MANGE LA SOURIS QUI AIME LE CAILLOU.
Nous pourrions donc, avec un peu d’effort, reproduire la tirade du pompier dans La Cantatrice Chauve. Youpi ! 

Nous avons cependant pour le moins un problème. Cette même grammaire accepte sans ciller :
LA FLEUR MANGE LA VACHE VERTE.
UN VENT NOIR AIME LE HIBOU.
LE CAILLOU REGARDE LE CAILLOU.
Très poétique, certes, et la dernière phrase vous a même un petit air de koan zen. Mais qu’est-ce que ce cela peut bien vouloir dire ?

Il manque un étage à notre programme : c’est celui de la signification, de la sémantique d’une phrase. Pour le créer, il nous faut un modèle du monde, une représentation de ses concepts avec leurs propriétés et les relations qui les lient, que nous puissions ensuite relier aux phrases lues par le programme afin d’établir quelles affirmations ces dernières portent sur le monde.

Les langages informatiques modernes savent représenter des modèles du monde. Une approche parmi d’autres – la plus populaire actuellement – est ce qu’on appelle la programmation orientée objet. On y définit des concepts appelés « classes », qui regroupent des « objets » de même type ayant certaines propriétés ou capacités en commun. On peut par exemple définir une classe d’animaux, en spécifiant qu’un animal peut manger ou aimer quelque chose, et une classe d’objets inanimés qui n’ont pas cette capacité. On peut ensuite spécifier qu’un chat est un animal et un caillou un objet inanimé (mais qui ne se mange pas). On peut aussi déclarer qu’une souris est un animal qui peut être gris ou blanc, mais pas vert. D’autres langages, parfois d’une grande puissance expressive, existent pour représenter le monde – en particulier ce que l’on appelle les ontologies.

Quoi qu’il en soit, en analysant la phrase « UN CHAT MANGE UNE SOURIS », notre programme peut alors y reconnaître des entités de son modèle du monde (UN CHAT, UNE SOURIS) et les relations qui les lient (MANGE), et ainsi vérifier que l’énoncé se traduit bien dans ce modèle, tandis que « UN CAILLOU MANGE UNE SOURIS VERTE », quoique grammaticalement correcte, viole les règles du modèle (un caillou ne mange pas, une souris n’est pas verte). Le programme créera au passage ce qu’on appelle un « graphe sémantique abstrait », une structure qui résume les entités du modèles et leurs relations telles que décrites par le texte. Il n’est pas abusif de dire que ce graphe sémantique représente la signification de la phrase ou plus généralement de l’énoncé.

Nous avons fait le plus dur. Si nous disposons également d’une grammaire pour le micro-anglais, nous pouvons maintenant repartir dans l’autre sens : parcourir les entités et relations du graphe sémantique que nous avons extrait de la phrase en français, pour fabriquer la phrase correspondante en anglais. A CAT EATS A MOUSE. Formidable !

Cette approche de la traduction automatique paraît bien naturelle : elle s’appuie sur l’intuition que pour traduire il faut comprendre, que la compréhension d’un texte repose sur des niveaux successifs – du plus visuel au plus abstrait –, et qu’elle nécessite des connaissances sur le monde. Cela semble plutôt évident.

Malheureusement (ou pas), cette approche, si elle marche remarquablement bien pour les langages de programmation informatiques – que nous pouvons facilement lire, transformer et très souvent traduire les uns dans les autres –, échoue dans le cas des langues humaines pour peu que l’on s’intéresse à de vrais énoncés de la littérature ou de la vie courante. Il faudrait non seulement que notre programme dispose d’un grand ensemble de connaissances sur le monde réel, d’immenses lexiques et de grammaires très élaborées couvrant aussi la langue familière souvent fautive, mais aussi qu’il sache traiter les homonymes, les ambiguïtés, les sous-entendus, les références approximatives, indirectes ou allusives ; et au-delà l’ironie, les jeux de mots, l’humour, les clins d’œil, les citations, les références culturelles, la poésie, les allitérations, les fautes intentionnelles… Un programme qui comprendrait tout cela et saurait traduire au plus fin, par exemple, « Sarko m’a tuer » en américain ou « the President’s men » en français ne serait pas un « simple » programme de traduction : il serait à mon avis un sujet conscient à part entière, et mériterait le droit de vote. Nous n’en sommes pas là même si c’est un beau rêve, et nous n’y serons peut-être jamais.

C’est ainsi qu’entre en scène l’antithèse de notre programme intelligent : l’idiot utile. Mais ce sera pour la prochaine fois.

Yannick Cras
Le nombre imaginaire