Le mois de novembre est le rendez-vous annuel du projet d'écriture NaNoWriMo, (pour l'anglais « National Novel Writing Month », que l'on peut traduire en « mois national d'écriture de roman »). Les participants se donnent l'objectif de produire un texte narratif de 50 000 mots, en l'espace d'un mois. Inauguré en 1999 par 21 volontaires, l'événement a désormais une portée internationale, et compte plusieurs centaines de milliers de participants, dont un dixième déclare atteindre l'objectif des 50 000 mots chaque année.

En guise d'illustration, voici quelques extraits d'un texte écrit pour l'édition de 2019, en prenant pour modèle le livre de Georges Perec, Je me souviens :

Je me souviens de ma première visite à San Francisco.

Je me souviens qu'au cours de mon voyage de classe de huitième année au musée, les enseignants ont demandé à la classe de créer un animal imaginaire afin de montrer comment les animaux interagissaient les uns avec les autres.

Je me souviens que, en descendant des montagnes ce jour-là, j'avais un sentiment d'euphorie.

Je me souviens d'un jour, à la fin d'une journée de 18 heures, je me suis endormie et je me sentais tellement épuisée et déprimée que j'ai cru ne pas vouloir me réveiller.

Je me souviens que les yeux de ma mère étaient un peu vitreux et que je restais un peu seule.

Je me souviens d'un jeu auquel j'ai joué au collège, un jeu multijoueur en ligne appelé Battlefield 1942.

Je me souviens de l'époque où nous faisions des sandwiches au bacon, à l'oignon et aux olives, et beaucoup de choses étaient un peu chères, mais c'était si bon que nous étions prêts à les laisser aller pour un repas.

Georges Perec (1936 – 1982). Image : Paille / Flickr

Bon. La réalité est légèrement autre : ce texte n'a pas été produit pour l'édition 2019 du NaNoWriMo, mais pour l'édition 2019 du NaNoGenMo. À la différence du « mois national d'écriture de roman », ce projet consiste en un « mois national de génération de roman » (d'où le changement de l'acronyme en NaNoGenMo). À l'aide d'outils informatiques, les participants œuvrent durant le mois de novembre pour produire artificiellement un texte de 50 000 mots. Le code qui a produit l'exemple ci-dessus est disponible ici. Le texte complet est disponible .

Aujourd'hui, nous revenons sur les méthodes informatiques de générations de texte.

Génération automatique de textes

Certains passages de cet article sont volontairement assez techniques ; n'ayez crainte, il ne s'agit pas d'en comprendre les rouages, mais d'en apprécier la forme. C'est par la démonstration concrète du cœur de ces systèmes qu'ils deviendront plus palpables, moins effrayants, presque communs. 😉

Dans l'exemple d'introduction, le choix manuel des phrases extraites donne une impression de qualité, supérieure à la moyenne du texte. Dans les faits, un lecteur rigoureux ne devrait pas avoir de mal à identifier les fautes et les incohérences. Il semble néanmoins très possible pour un lecteur non attentif de se laisser berner, et de ne pas remarquer la supercherie ; l'algorithme produisant ce texte pourrait alors passer le fameux test de Turing, car il imite suffisamment bien l'expression humaine pour se faire passer pour un humain.

Dans la littérature scientifique actuelle, la tâche effectuée par cet algorithme porte un nom précis : la génération automatique de textes. Dans cette appellation, « texte » fait référence à une « expression sous forme textuelle, syntaxiquement et sémantiquement correcte, de la représentation formelle d'un contenu ». La formule est verbeuse, en voici les points importants :

  • le texte généré est structuré : il respecte une grammaire, en permettant la compréhension ;
  • le texte généré a du sens : il utilise un vocabulaire et des expressions cohérents et vecteurs d'information.

Cela permet de cerner un peu mieux l'objectif ; on omettra, par exemple, des productions plus humoristiques telles que Meows, lors de l'édition 2014 du NaNoGenMo, qui transforme un texte déjà écrit en miaulements (voir le texte complet) :

Mew "meeow" me meeooow meoooow mew meow. Me meeow me me,mew meeeeeoooow me mew meow "meow". Me meoow meeeeeoow meow m meooow meoow meow Meeooow Meeeeeoow. Me meoow'm meooow, me meow me me'm mew+ meoow.

Utiliser la grammaire comme un gabarit

Une première façon de générer du texte consiste à utiliser des règles grammaticales comme gabarit qui l'on remplit à l'aide d'un lexique. Considérons tout d'abord une grammaire avec quelques règles, que l'on peut écrire ainsi :

phrase = sujet + verbe
sujet = déterminant + nom

Pour créer une phrase, la règle stipule qu'il nous faut un sujet et un verbe. Le verbe, nous pourrons le prendre dans un lexique. Par exemple :

mange : verbe
marche : verbe
pense : verbe
aboie : verbe

Le sujet peut être formé à partir d'un déterminant et d'un nom. Là encore, nous pouvons chercher de tels mots dans un lexique :

un : déterminant
une : déterminant
le : déterminant
la : déterminant
chien : nom
chat : nom
voiture : nom

En assemblant le tout, nous pouvons générer quelques phrases (précisément, dans cet exemple, 48). On choisit au hasard un déterminant (ex. le) et un nom (ex. chien) pour obtenir un sujet (le chien). On choisit enfin un verbe (ex. aboie). Le tout donne :

(1) le chien aboie

Essayez par vous-même à l'aide de cette petite page de démonstration :

Éditez les règles grammaticales et le lexique à votre guise pour essayer d'améliorer la qualité des phrases produites !

On parle ici d'approche symbolique. Elle tient son nom de ces symboles, règles de grammaire et mots du lexique, utilisés pour la génération. On peut recommencer avec d'autres mots :

(2) un chat mange

Ces phrases sont correctes grammaticalement (hormis le manque de majuscule et de point), et possèdent un sens, tout aussi correct. Mais ce même système peut aussi produire des phrases étranges, voire fausses. Par exemple :

(3) la chien aboie

(4) une voiture pense

La phrase (3) est incorrecte grammaticalement mais a du sens, là où la phrase (4) est correcte grammaticalement mais est totalement absurde. Pour y remédier, il faudrait ajouter des règles ; par exemple, différencier les noms masculins des noms féminins et nécessiter l'accord du déterminant. En étoffant peu à peu la grammaire et le vocabulaire, on pourrait se rapprocher de l'expression humaine, en théorie du moins.

En effet, il faudrait pour cela énormément de règles et de mots. Et à mesure que le nombre de symboles croît, la complexité du système explose, dépassant vite la capacité de calcul d'un humain, puis celle d'un ordinateur personnel, puis celle d'un serveur de Google, ... Il devient vite impossible d'exécuter le programme en un temps raisonnable (i.e. inférieur à plusieurs fois l'âge de l'univers).

Ainsi, l'état de l'art en synthèse de langage naturel repose en pratique sur des approches moins formelles : les modèles de langage.

L'État de l'art : les modèles de langage

Un modèle de langage est une « loi de probabilité ». Étant donné une suite de mots, on cherche à prédire le mot suivant. Pour chaque mot candidat, ce modèle nous donne la « probabilité » que ce mot vienne compléter la séquence. Par exemple, considérons le début de phrase :

Luke, je suis ton ...

Grammaticalement, beaucoup de mots seraient acceptables : frère, professeur, ami, etc. Mais certains ont plus de chances que d'autres d'apparaître, notamment « père », du fait de la référence au cinquième volet de la saga Star Wars. À l'inverse, « immeuble » n'a quasiment aucune chance d'apparaître : la phrase « Luke, je suis ton immeuble » n'a sûrement jamais été prononcée ou écrite par des humains, du fait de son absurdité. Le modèle formalise cette notion de chance en associant un nombre (une probabilité) à chaque mot candidat. Par exemple :

Ces probabilités sont le reflet de la fréquence d'utilisation de ces termes. La phrase « Luke, je suis ton père » est bien plus utilisée par les humains que la phrase « Luke, je suis ton ami ».

Le texte utilisé en exemple dans l'introduction, inspiré de Georges Perec, a été généré à l'aide d'un modèle de langage. On a demandé au modèle de compléter plusieurs fois la suite de mots « Je me souviens ».

Pour fonctionner, un modèle de langage a donc besoin de faire des associations, entre les mots déjà écrits et les mots qu'il faudrait écrire à la suite. Pour former ces liens, on donne un corpus de textes au modèle, qui va l'analyser et en extraire les associations qu'il considère pertinentes, via des méthodes statistiques. Ce processus s'appelle l'entraînement.

Un Exemple d'associations simples : les prédictions du clavier

xkcd - Swiftkey
Strip : Swiftkey sur xkcd

Un type très simple d'association consiste à lier entre eux les mots qui sont souvent écrits l'un après l'autre. C'est comme cela que fonctionne beaucoup d'outils de prédictions pour les claviers de téléphones portables : sont proposés les mots souvent tapés après le dernier mot que l'on a écrit. Le clavier est entraîné au fur et à mesure que l'on tape du texte. Si l'on tape « suis » après avoir tapé « je », la prochaine fois que l'on va taper « je », le clavier va sûrement proposer d'écrire « suis », et ainsi de suite.

Un jeu simple consiste à écrire un message uniquement à partir des propositions du clavier. On met ainsi en évidence les associations les plus évidentes que le clavier aura pu remarquer, ce qui donne également une idée de nos habitudes d'écriture. Cela donne par exemple chez moi :

Bien que tu as une idée de la levure chimique de la levure chimique de la levure chimique de la levure chimique de la ...

Le début semble correct, mais rapidement, l'algorithme entre dans une boucle et ne fait plus que parler de levure chimique...

Extraction d'associations depuis un texte

Pour améliorer un tel modèle, on peut l'entraîner sur un texte plus long. Dans cet exemple, ce sera le premier tome des Misérables de Victor Hugo. On analyse les paires consécutives de mots, en gardant en mémoire le nombre d'occurrences de telles paires. Voici une représentation du résultat :

Seules les 3 associations les plus fréquentes sont représentées, à partir du mot « il ». Dans 10% des cas, le mot suivant est « y ». Dans 7% des cas, c'est « se », et dans 6% des cas, c'est « était ». En poursuivant la représentation, on obtient ceci :

On commence à voir comment se forment les phrases, à partir de tournures courantes. On peut continuer ainsi et complexifier notre modèle :

Pour les intéressés, ces associations sont formalisées sous le terme de chaînes de Markov, et possèdent des applications dans de nombreux domaines. Pour les amateurs et les curieux, le code écrit pour effectuer cette analyse est disponible ici.

Vers des associations plus complexes

Pour être crédible et ressembler au véritable langage humain, un modèle de langage a besoin d'utiliser des associations plus complexes que l'apparition consécutive de deux termes. Les problèmes à résoudre sont des problèmes statistiques, auxquels s'attaquent des mathématiciens. Ces derniers développent des systèmes complexes permettant d'extraire et de représenter des associations profondes présentes implicitement dans le langage humain.

La dernière avancée majeure en la matière fut l'introduction des transformeurs, en 2017. Ces outils sont particulièrement performants pour trouver des associations, même éloignées dans le texte. En voici un, produit par GPT-2, un modèle de langage reposant sur ces transformeurs (le texte original est en anglais, il est traduit manuellement pour cet article) :

Le texte donné au modèle en introduction (écrit par un humain, donc) était :

Découverte choquante : un scientifique a découvert un troupeau de licornes vivant dans une vallée isolée, jusque-là inexplorée, dans la cordillère des Andes. Le fait que les licornes parlaient parfaitement anglais est d'autant plus surprenant pour les chercheurs.

À partir de là, on interroge le modèle pour prédire la suite. Voici les trois premiers paragraphes que le modèle a produit, un mot après l'autre :

Le scientifique a nommé cette espèce, d'après sa corne distinctive, la Licorne d'Ovide. Ces licornes, à quatre cornes, blanches argentées, étaient auparavant inconnues de la science.

Maintenant, après presque deux siècles, le mystère de ce qui a déclenché ce phénomène étrange est enfin résolu.

Le Dr. Jorge Pérez, un biologiste évolutionniste de l'Université de La Paz, et plusieurs collègues, exploraient la cordillères des Andes lorsqu'ils ont trouvé une petite vallée, [...].

Si un humain peut tout de même remarquer qu'une licorne à quatre cornes est assez suspect, le résultat est de très bonne qualité. Fascinant même, lorsque l'on sait comment fonctionne un tel modèle. Particulièrement, la référence au docteur Jorge Pérez. Le modèle avait comme information en entrée que la scène se situait dans la cordillère des Andes, il a donc choisi un nom à consonance espagnole, précédé de la mention « Dr. » comme c'est le cas pour de nombreux scientifiques. Jorge Pérez est décrit comme un biologiste évolutionniste, ce qui est cohérent vis-à-vis de la découverte d'une nouvelle espèce animale. Enfin, les scientifiques sont souvent mentionnés suivis de leur université. Le modèle a aussi fait cette association, et a proposé celle de La Paz, capitale administrative de la Bolivie, où passe la cordillère des Andes. Ces éléments très cohérents montrent à quel point le modèle a su identifier les éléments importants à soulever dans son texte.

Pour s'amuser un peu avec GPT-2, voici une démonstration en ligne de sa capacité de génération de texte.

Vidéo : OpenAI

La Limite reste à atteindre

Le premier modèle de langage basé sur des transformeurs, BERT, publié en 2018 par Google, avait déjà dépassé tout l'état de l'art. Il a été adapté pour la langue française en 2019, donnant naissance à CamemBERT (oui, oui, camembert). C'est notamment ce modèle qui a été utilisé pour la reprise de Je me souviens en introduction de cet article. En 2019, c'est GPT-2, développé par OpenAI, qui bat à nouveau tous les records.

La raison principale expliquant ces nouveaux succès est la quantité de données ingérable par ces modèles. Les générations précédentes arrivaient rapidement à un seuil, au delà duquel ils ne pouvaient plus progresser. Aujourd'hui, la limite ne semble toujours pas avoir été atteinte : plus on continue d'entraîner ces modèles, plus ils deviennent performant. De plus, les anciens modèles avaient besoin d'être spécialisés dans la réalisation d'une tâche précise (comme la traduction entre deux langues). Ce n'est plus le cas : les modèles actuels sont assez généraux pour performer sur une multitude de tâches sans pour autant y avoir été dédiés ou même préparés.

GPT-3, successeur de GPT-2, en beta depuis juin 2020, est le modèle de langage le plus gros jamais entraîné : il compte 175 milliards de paramètres (là où GPT-2 en comptait 1,5 milliards et BERT 345 millions). Ses capacités sont assez déroutantes. Le modèle est entre autres capable de corriger des fautes d'orthographe courantes, de traduire du texte dans plusieurs langues, ou même d'effectuer des additions et des multiplications.

On pourrait penser que c'est assez simple : à force de voir écrit 2+2=4 dans le texte d'entraînement, lorsque le modèle voit 2+2= il répond 4. Mais les chercheurs ont montré que le modèle était capable de donner le résultat d'opérations qu'il n'avait jamais rencontré dans le texte d'entraînement. À force de voir 2+2=4, 10+7=17, 4+37=41, ..., le modèle a « compris » comment effectuer des additions dans le cas général. Dans les faits, les résultats ne sont pas parfaits ; mais ils montrent tout de même une bonne capacité de généralisation.

Si ces modèles sont de plus en plus performants, leur impact sur la société n'est pas à prendre à la légère. OpenAI, la société en pointe dans ce domaine, avait déjà retardé la publication de GPT-2, et n'a pas publié le code source de GPT-3. L'utilisation de ces modèles pour la génération de fausses nouvelles, de spams ou de contenus complotistes est à craindre. Aussi, ces modèles sont basés sur des textes humains, et laissent transparaître tous nos biais ; si les algorithmes sont racistes ou sexistes, c'est avant tout parce que les données, humaines, utilisées pour les entraîner contiennent ces biais. Les combattre en amont demanderait de filtrer les quantités gigantesques de données dont on dispose, ce qui est assez complexe. Mais les combattre a posteriori l'est tout autant : appliquer une modération totale et juste n'est certainement pas une mince affaire, si tant est que ce soit possible. Du chemin reste donc à parcourir.

Pour aller plus loin

Le sujet étant assez complexe et nouveau, peu de contenu à son sujet existe en français. Le contenu le plus abordable est probablement AI Dungeon. C'est un jeu textuel reprenant les codes du jeu de rôle sur table, mais où le maître du jeu est un modèle de langage basé sur GPT-2. Le jeu n'est disponible qu'en anglais, mais des vidéastes français ont réalisé des vidéos à ce sujet en traduisant leurs actions, notamment le Joueur du Grenier :

Beaucoup des informations dans cet article proviennent des interviews de Robert Miles sur la chaîne Computerphile :

Robert Miles dispose également d'une chaîne YouTube sur laquelle il a présenté comment générer des commentaires YouTube à l'aide de GPT-2 :

Enfin, pour les plus téméraires, voici à quoi ressemblent les articles de recherche qui sont actuellement sous le feu des projecteurs :

Ces articles ne sont pas du tout abordables, même pour des initiés à l'informatique. Mais ils représentent la preuve tangible de la progression de la recherche, et peuvent à ce titre intéresser les curieux. Certaines figures sont même à peu près compréhensibles !

Article précédent Article suivant