La semaine dernière, on avait parlé de deep learning, et le fait que la FI peut apparaître comme un bon moyen d’apprendre, via le deep learning, à une intelligence artificielle à manipuler et à interagir avec le monde réel. Faisons maintenant un tour d’horizon sur les difficultés potentiellement rencontrées par une telle IA !

Commandes saisies

Premièrement, on devrait se poser la question : est-ce que c’est possible ? La seule façon de le savoir avec certitude est d’essayer de la construire ; et vu qu’il y a quelques articles de recherche qui vont dans ce sens, c’est plutôt bien parti. Le deep learning a beau être une technique intéressante et puissante, il y a beaucoup de questions à résoudre. Par exemple, la syntaxe des commandes : normalement, il s’agit juste d’un verbe et d’un objet, mais certains verbes ont des prépositions (poser X sur Y, questionner X sur Y), ce qui complique les choses car la syntaxe n’est pas la même pour chaque verbe. Et d’ailleurs, est-ce que ça ne voudrait pas dire que le système devrait d’abord déduire ce qu’est un verbe ? Ou même ce qu’est un mot valide ?

En généralisant à partir de différents essais de création d’intelligence artificielle pouvant jouer à des jeux vidéo, le processus ressemblerait à ceci : un système nouveau-né ignorerait sans doute l’invite de commande pendant un très long moment, puis découvrirait que taper quelque chose et appuyer sur entrée est une idée intéressante, puis taper absolument n’importe quoi pendant un long moment jusqu’à trouver qu’une commande commençant par « x » fait quelque chose, puis chercher à examiner n’importe quoi jusqu’à trouver un mot qui convient, en espérant qu’il apprenne aussi que taper des mots qui apparaissent dans le texte donne une plus grande chance d’avoir des réponses intéressantes. Mais comment peut-il trouver le mot « prendre » alors que la plupart des jeux n’en parlent pas ? Une alternative pour accélérer le processus est d’obliger le système à n’utiliser que des mots dans une liste choisie — par exemple, tous les verbes standards, plus n’importe quels mots lus dans le texte du jeu. Avec cela, le système a « juste » besoin de se rendre compte que >NAGER ne donne jamais rien d’intéressant, alors que >EXAMINER ou >NORD, oui.

Même avec ça, on parle de centaines de verbes, de centaines de noms et un nombre encore plus grand de mots dans le texte du jeu, alors que les efforts pour programmer des ordinateurs qui puissent jouer aux jeux vidéo se sont concentrés sur des jeux vidéo sur console, qui ont une demi-douzaine de choix à chaque image du jeu, au lieu de dizaines de milliers. Cet énorme espace de possibilités veut simplement dire qu’il faudrait plus de calcul pour trouver tout ça. En théorie, l’ordinateur finirait par trouver, si on lui donne assez de temps, de puissance de calcul, et de mémoire — mais tout ça est vraiment loin d’être trivial.

Renforcement de l’apprentissage

Mais continuons, et partons maintenant du principe qu’on a un système qui sait qu’il doit taper des mots. Vient ensuite la question de la « fonction objectif », des retours, de la rétroaction qui ferait que le système se modifie lui-même en voyant le résultat : quelles sont les choses que le système doit rechercher, et quelles sont les choses qui lui indiqueraient qu’il est sur la bonne piste ? Premièrement, il semblerait que nous devrions nous restreindre aux jeux avec au moins un état final préférable (ou gagnant), ou notre pauvre machine sera déboussolée en essayant de trouver ce qu’il faut faire pour finir le jeu. On peut donc éliminer Aisle et Galatea. (Mais est-ce qu’un ordinateur qui essaie de jouer à Galatea ne serait pas la chose la plus « méta » qu’on puisse faire ?)

Cependant, ça pourrait être très intéressant d’entraîner une IA jusqu’au bout, puis la laisser jouer à ces jeux : est-ce que le système tournera en boucle à l’infini en cherchant plus de fins, ou s’arrêtera-t-il à un moment en disant « ouaip, c’est bon, j’ai trouvé la meilleure fin » ? Et laquelle choisira-t-il ?

Dans le temps, la plupart des jeux avaient un système de score qui vous récompensait en vous donnant des points pour les quêtes, les objectifs remplis, les secrets, etc. Ce genre de retours sur la performance du joueur paraît être un candidat naturel pour entraîner notre IA : plus votre score est haut, plus vous êtes proche de la fin, et si votre score est maximal vous avez gagné le jeu complètement. De plus, peut-être que des sections de jeu en temps limité apprendront à l’IA qu’il ne faut pas gaspiller de temps et que le nombre de tours devrait être aussi bas que possible. Mais au bout d’un moment, notre système devra jouer à des jeux modernes, avec des énigmes mais pas de score ; comment est-ce que le système réagira à ce genre de jeux ? Bien sûr, il continuera à jouer, mais il errera sans doute un peu partout, sans se concentrer sur rien. Peut-être qu’à un moment il trouvera d’autres signes, plus encourageants mais plus subtils — réussir à prendre un objet, réussir à entrer dans une salle qui était inaccessible auparavant, un PNJ qui dit « merci » — et à ce moment-là, l’IA commencerait à réfléchir comme un joueur !

Au passage, on ne peut pas parler des choses qui vous signalent si vous êtes sur la bonne ou mauvaise piste sans évoquer l’échelle de cruauté, ou « cruelty scale » en anglais. Les  jeux « merciful » (miséricordieux) et « polite » (poli) semblent être les meilleurs pour notre système, puisque dès qu’il aura compris qu’on ne peut rien faire quand on meurt à part recommencer, il aura appris que mourir n’est pas souhaitable. Les jeux « tough » (Rude) semblent un peu plus compliqués : le jeu donnera des avertissements avant l’action qui peut faire en sorte que le jeu devienne impossible à gagner, mais si le système ne l’enregistre pas, il fera cette action, puis continuera à jouer pendant des milliers de tours sans jamais pouvoir gagner. Les jeux « nasty » (méchants) et « cruel » (cruels) sont encore pire, mais après tout, ces jeux sont très difficiles même pour les joueurs humains ! Le simple fait de détecter si on est bloqué est un problème très difficile : comment peut-on savoir que le jeu ne nous laissera jamais gagner, comment savoir qu’il y a une petite action non triviale qu’on a oublié de faire ? On résout souvent le problème en regardant une solution — ce qui bien entendu n’est pas une possibilité dans notre cas. Ainsi ce problème semble être particulièrement épineux.

Objets

Une chose dont on n’a pas encore parlé est la relation avec les objets, qui est cruciale dans un jeu avec parser. Nous les humains acquérons avant notre deuxième anniversaire la permanence de l’objet, c’est-à-dire le processus mental qui dit que les objets existent même si on ne les voit pas ; si on reformule, c’est une capacité que les humains mettent deux ans à apprendre ! Mais puisque les jeux à parser traditionnels se concentrent principalement sur la manipulation d’objets, ils semblent être la meilleure façon d’enseigner ce concept à une machine, et c’est sans doute utile dans un grand nombre d’applications où la machine doit avoir un peu de « bon sens ».

On peut penser que cela voudra dire que, pendant un long moment, le système ira dans le lieu où le troll monte la garde devant le pont et demande un poisson pour libérer le passage, cherchera un poisson dans ce lieu, ira dans le lieu suivant, verra un poisson, et ne fera pas le lien entre ces informations étant donné que le troll n’est plus visible. À un niveau encore plus basique, le concept de l’inventaire devrait être très difficile à comprendre pour la machine ! Rendez-vous compte : vous avez besoin d’un objet, mais vous avez tapé « prendre » et maintenant l’objet a disparu. Ça ne semble pas être une bonne chose, n’est-ce pas ? Mais au bout d’un moment, le système devrait pouvoir apprendre que l’objet réapparaît lorsqu’on tape « inventaire » — et encore mieux, que si on prend un objet dans une salle et qu’on se déplace, l’objet est toujours dans l’inventaire.

Cela devrait constituer une grande avancée pour ce système et, de plus, c’est nécessaire pour résoudre des énigmes (ou même juste découvrir que prendre des objets est une bonne chose et pas une mauvaise chose !). Je ne doute pas du fait qu’apprendre cette compétence représente un grand pas vers l’obtention d’un ordinateur avec « du bon sens ».

Énigmes

Il est maintenant temps pour notre système d’essayer de résoudre des énigmes. On a beaucoup écrit ailleurs sur la conception d’énigmes dans les jeux d’aventure, et il est intéressant de réfléchir aux différents conseils qui ont été donnés et les remettre dans notre contexte d’une IA apprenant à jouer à des jeux avec parser.

Pour l’instant, soulignons quelques choses à propos de l’équité. Les énigmes sont souvent qualifiées de « justes » ou « injustes ». Que se passerait-il si notre IA tombait sur une énigme injuste ? Une énigme peut être injuste pour plusieurs raisons, et peut bloquer notre système de plusieurs façons différentes. Les énigmes où on ne vous prévient pas du tout avant que vous mourriez, ou celles où il faut mourir beaucoup et réessayer, pourraient être résolues relativement facilement par le système (une fois qu’il connaît la commande “charger la partie”), puisqu’un ordinateur ne ressentirait pas la même frustration qu’un joueur humain. Les énigmes où on ne vous donne aucun indice sont plus difficiles à résoudre mais, en fin de compte, si la machine est assez intelligente pour éviter de tourner en rond et essayer toujours les mêmes actions, elle pourrait tomber sur la bonne solution au bout d’un moment. On peut dire la même chose des énigmes qui nécessitent des connaissances extérieures ou se fondent sur des private jokes : c’est comme si l’« indice » n’existait pas. Les types d’énigme les plus délicats serait ceux où il faut une formulation très spécifique, un verbe spécifique, ou même ceux pour lesquels il y a une solution qui fait totalement sens mais qui ne marche pas sans qu’on sache trop pourquoi. Ces énigmes sont notoirement frustrantes pour les humains, qui finissent par regarder la solution, et la question de savoir comment une machine résoudrait ces problèmes est intéressante. Il faut peut-être que la machine apprenne des synonymes pour un verbe ou un nom (ce qui est un concept abstrait et de haut niveau), et être suffisamment têtue pour continuer tout en criant (métaphoriquement) « ça devrait marcher ! ». Ainsi — comme pour les humains — il vaudrait mieux éviter les énigmes injustes.

Avant de parler d’énigmes justes, parlons de la question des labyrinthes, puisqu’on ne peut pas les éviter quand on joue à un grand nombre de jeux à parser. Le labyrinthe standard est celui pour lequel on a juste besoin de dessiner une carte ; la conséquence est que le système d’IA doit apprendre ce que c’est que dessiner une carte (à moins qu’il ne sache déjà dessiner une carte car il en a besoin pour se déplacer) et doit avoir assez de mémoire pour la dessiner. On peut alors augmenter la difficulté en ajoutant des salles entre lesquelles les connexions ne vont pas dans le même sens ; et peut-être ajouter un peu de hasard dans les événements, les sorties ou les salles, ce qui augmente pas mal la difficulté. Maintenant, imaginez la confusion de l’ordinateur lorsqu’il tombe sur « un labyrinthe de petits chemins sinueux qui se ressemblent tous » (« a maze of twisty little passages all alike », comme dans Adventure). Il faut qu’il se rende compte que ce sont bien des salles différentes (et pas juste la même salle), et trouver un moyen de les distinguer, pour peut-être redécouvrir la technique où on laisse des objets sur le sol ; cela me paraît être un raisonnement vraiment très avancé. Ensuite, il y a le grand nombre de labyrinthes qui demandent du joueur la réalisation que ça n’est pas un labyrinthe normal et qu’il y a un truc. Ces labyrinthes nécessitent encore plus de déductions logiques, et sans doute une grande expérience dans les labyrinthes, pour que l’IA puisse les résoudre. Ainsi, les labyrinthes semblent être un sujet très complexe, et la résolution de ce problème pourrait sans doute être considéré comme une avancée majeure de la science — imaginez, une IA créée spécifiquement pour résoudre les labyrinthes pour vous ?

Partons donc du principe que l’on exclut les énigmes injustes. Si l’on met de côté les indices donnés au joueur, on peut penser que les énigmes justes sont celles qui se fondent sur du bon sens et des connaissances de notoriété publique, et qui ont un sens une fois qu’elles ont été résolues. Ceci est un excellent exemple, et peut-être même la raison primordiale pour laquelle les jeux à parser sont une chance inouïe d’apprendre à une AI à avoir du bon sens : en apprenant par le jeu et l’expérimentation, le système remarquera des motifs qui correspondent exactement à ce qu’on appelle le bon sens, et fera l’apprentissage de nouvelles choses, parfois par pure chance. Les choses peuvent démarrer doucement, en apprenant à résoudre mille énigmes de la forme « mesurez 5 litres d’eau avec 2 gobelets de capacité respective… », mais sans doute aussi en apprenant comment récupérer la clé de la serrure avec un fil de fer et un journal. On peut ensuite avancer et essayer des concepts plus complexes, comme les énigmes à base de lumière ou d’utilisation de miroirs : les jeux à caractère simulationniste, comme Zork, peuvent être de très bons exemples pour
enseigner des concepts comme les sources de lumière, les liquides, les objets que l’on peut brûler, ou même les cordes, puisqu’ils permettent beaucoup d’expérimentations et recréent des parties fondamentales de la physique. À condition bien entendu que le jeu n’ait que très peu de bugs, pour que notre IA ne commence pas à penser que ces bugs arrivent aussi dans la réalité. On peut augmenter la difficulté en associant ces concepts entre eux, comme dans la solution du labyrinthe de Photopia ; et enfin, des concepts culturels plus avancés (“déclencher l’alarme à incendie fait que les gens quittent le bâtiment”). Au final, il y a tellement de jeux, et tellement d’énigmes, que la somme de tout le bon sens contenu dans l’IF Archive est probablement suffisante pour faire une intelligence artificielle très intelligente !

Qualité d’implantation

Terminons en parlant du problème de la qualité d’implantation du jeu. Que se passe-t-il si le jeu est truffé de bugs, de fautes d’orthographe, est trop pointilleux sur les questions de formulation, ou n’implante pas les solutions évidentes d’une énigme ? Ou juste quand le jeu n’est pas très complet niveau implantation ? Le joueur humain se met alors à penser « ce jeu est buggué, c’est relou, du coup il va falloir que je sois plus têtu et que je fasse plus attention », c’est-à-dire qu’il va peut-être falloir abandonner ses idées plus lentement qu’avec un jeu dont le degré d’implantation est exceptionnel. Si ce genre de « métajeu » n’est pas pris en compte par le joueur, beaucoup de frustration peut être engendrée : on peut se retrouver à chercher à l’aveugle pendant un long moment, pour se rendre compte au final que la première chose qu’on avait essayée était en fait la bonne solution mais qu’il fallait un petit ajustement pour que ça marche !

Est-ce qu’un système d’intelligence artificielle peut atteindre ce niveau de conscience ? C’est un raisonnement très méta, qui se base sur l’aspect humain de la création d’un jeu vidéo : « ce jeu n’est pas la réalité, c’est quelque chose qui a été créé par un humain, et je sais que penser à toutes les réponses est impossible (ou que cet humain n’a pas été très méticuleux), donc je vais faire en sorte de passer outre et continuer de jouer, mais je garde ça en tête pour pouvoir avancer ». Il peut alors se passer deux choses. La première possibilité est que l’IA ne parvienne pas à cette conclusion, et continue à trébucher sur ces erreurs : elle abandonne les solutions trop vite et ne les essaie plus jamais, ou n’arrive pas à résoudre une énigme dans un jeu car elle a appris d’un autre jeu que cette solution ne marche pas, etc. Des différences dans l’implantation du jeu créent des différentes dans la simulation du jeu et, du point de vue de l’IA, des incohérences dans le « bon sens » qu’elle essaie d’apprendre ; elle devra être suffisamment robuste pour s’en remettre, ce qui est difficile à imaginer puisque son mécanisme principal est d’incorporer le résultat de ses actions dans son cœur. La seconde possibilité est que le système soit véritablement capable de faire cette déduction logique, et se rende compte que ce sont juste des simulations imparfaites créées par des humains (dont le nom apparaît toujours dans le premier paragraphe du jeu). On pourrait alors penser que l’IA adapterait alors son style de jeu en fonction de ce qu’elle perçoit être le style ou la qualité du jeu, ou même de l’auteur ; mais fondamentalement, on en serait au point où nous aurions créé une IA qui en est venue à se rendre compte qu’elle vivait dans une simulation pendant tout ce temps. La science-fiction nous dit alors que ça se finit mal pour les humains — alors s’il vous plaît, pour l’amour de Dieu, peaufinez vos jeux !