Nous inaugurons, avec cet article, un mois thématique : le mois du chatbot ! Nous allons nous intéresser à ces agents conversationnels, à leurs mécanismes de conception et leurs finalités ; vous allez voir que certains aspects sont très proches de la fiction interactive ! Nous commençons cette semaine par un article un peu général sur les chatbots, puis on enchaînera avec des articles portant plus spécifiquement sur les liens entre chatbots et fiction interactive. On terminera par des interviews de personnes qui travaillent sur le sujet et nous apporteront des éclairages intéressants sur la question !

Capture d'écran d'Eliza.

Qu’est-ce qu’un chatbot ? Le nom désigne traditionnellement des agents conversationnels, des programmes créés pour être capables de faire la conversation à un humain de façon convaincante. Et quand on parle de conversation, historiquement, on parle de taper quelque chose au clavier et d’obtenir une réponse écrite ; mais on peut également envisager des commandes données à l’oral, et même des réponses orales (plus ou moins personnalisées, voire originales si on utilise du text-to-speech).

En tous les cas, la méthode d’interaction libre (écrite ou orale) n’a pas vraiment d’importance dans la question des chatbots. La question centrale est plutôt : « comment faire pour générer des réponses cohérentes et appropriées à la conversation ? ». C’est un problème qui est très difficile et irrésolu dans le cas général. Traditionnellement, la question se pose sous la forme du « jeu d’imitation » proposé par Alan Turing dans un article de 1950, qui a été reformulé en « test de Turing » : si vous communiquez avec quelqu’un via un ordinateur, pouvez-vous déterminer si vous êtes en train de communiquer avec un humain ou avec une machine ? Si vous ne savez plus faire la différence, c’est qu’on a résolu la question des chatbots !

La question de savoir générer des réponses appropriées à l’input d’un humain est une question que tous les créateurs de fiction interactive avec analyseur syntaxique connaissent bien ! On s’arrache les cheveux à faire en sorte que les réponses aux commandes soient cohérentes et bien prises en charge, à plusieurs niveaux : en faisant des réponses par défaut plus précises ou plus naturelles, en reconnaissant plus de verbes, plus de noms, plus de synonymes, des tournures de phrase plus complexes…
C’est la promesse originelle de la fiction interactive à parser : « il vous suffit de dire à l’ordinateur ce que vous voulez faire, et il vous comprendra » — et quand ça marche, c’est un objet d’émerveillement, que ce soit dans les années 80 ou aujourd’hui ! Mais soyons honnêtes, ça ne marche pas souvent : les joueurs ont plutôt tendance à se casser la tête sur des barrières qui ne devraient pas être là, mais qui y sont car nos outils, artisanaux, ne prennent en charge que ce à quoi le programmeur a pensé… D’où l’idée de cette série d’articles : que se passe-t-il dans le domaine, plus large, et cousin, des chatbots, et est-ce qu’on peut en tirer de l’inspiration ?

Un des chatbots les plus importants historiquement, et l’un des plus connus, est ELIZA, créé en 1966 par Joseph Weizenbaum. Ce chatbot se place dans le contexte d’une psychothérapie : ELIZA est votre psy, et répond à vos questions dans ce contexte. Ce programme fut l’objet d’une sensation médiatique sans précédent à sa sortie, avec plusieurs personnes qui clamèrent alors que ce programme était un véritable psychologue, capable d’avoir des conversations extraordinaires ; si ma mémoire est bonne, des extraits de conversation (choisis, bien entendu) ont même été publiés dans le New York Times à l’époque pour montrer à quel point le programme était performant. Par contre, il est intéressant de noter que son créateur ne l’a jamais présenté comme tel, allant jusqu’à dire quelque chose comme « on s’esbaudit, puis on continue à explorer, puis on comprend les ficelles, puis on dit “j’aurais pu le faire”. ».

Si les recettes de cuisine d’ELIZA vous intéressent, le code source a été traduit dans de nombreux langages, dont Inform 6. Pour faire une analyse rapide de pourquoi ce chatbot marche, il y a plusieurs ingrédients : l’établissement d’un contexte particulier (la psychothérapie, où la conversation se concentre sur le patient et où on lui pose des questions), la reconnaissance de certains mots et parfois même leur réemploi au sein de la réponse, et les réponses vagues et passe-partout. On en reparlera, mais ces choses-là sont devenues très classiques dans le domaine du chatbot.

De nos jours, les chatbots sont un peu différents d’ELIZA. Ils ne cherchent pas à passer le test de Turing, et ne sont pas forcément conçus comme un programme déterministe. En effet, la compréhension du langage naturel par les ordinateurs s’est grandement améliorée, grâce à des systèmes basés sur des réseaux neuronaux, des systèmes d’intelligence artificielle entraînés avec du deep learning pour traduire la phrase de l’utilisateur en quelque chose de plus compréhensible. Il y a aussi une grande différence d’échelle par rapport à ELIZA : Siri, Cortana, Alexa et Google Home ont été créés et raffinés par des dizaines voire centaines de programmeurs, et sont capables de faire beaucoup plus de choses.

Types de chatbots

Une question intéressante est aussi celle du champ de connaissances de l’agent conversationnel. Est-ce que l’agent conversationnel sait tout sur tout, comme Watson (le système d’IBM) ou Siri ? Ou est-ce qu’il en sait juste assez pour paraître humain (pour passer le test de Turing) quitte à refuser de parler de baseball en disant qu’il préfère le basket ? Ou est-ce qu’il n’en saura pas tant que ça, mais sera capable de cacher cette ignorance en paraissant suffisamment naturel ?

La réponse à cette question dépend bien entendu du but du chatbot : est-ce un programme qui cherche à berner un humain et lui faire croire qu’il est humain ? Est-ce une interface sur le monde et sur le savoir illimité ? Est-ce une interface qui permet de guider sur quelques choix bien précis, comme commander un billet de train, et qui répond « je ne suis pas payé pour ça » à toute autre question ? Est-ce un personnage, avec ses propres émotions et motivations, voire objectifs, créé notamment pour un jeu vidéo ? Quelle est la puissance de calcul que vous avez à disposition ? Toutes ces questions sont cruciales, vitales dans la conception du chatbot, et les techniques à utiliser sont très différentes.

Je propose, de façon un peu hasardeuse, une classification des chatbots en trois catégories : compagnons, personnages, ou interfaces.

  • Assistants : je rangerais dans cette catégorie tous les chatbots qui sont créés dans le but non pas de faire la conversation à un utilisateur, mais dans le but de donner une information à l’utilisateur. Dans cette catégorie, je rangerais tous les assistants de type Alexa, Siri, Cortana, etc., qui utilisent leur capacité à comprendre les phrases, ainsi que leur accès au savoir d’Internet, pour vous permettre d’éteindre les lumières ou de faire une addition, ou répondre à une question : en clair, pour démultiplier vos possibilités. Mais on peut aussi ranger dans cette catégorie tous les chatbots que vous avez pu voir sur certains sites web, qui sont là pour vous orienter ou vous aider à accomplir une tâche ; ils représentent l’évolution des FAQ ou des menus à choix multiples qu’on vous donne au téléphone, mais avec un visage plus sympa et plus accessible.
  • Personnages : ces chatbots sont là pour vous faire la conversation avec un certain point de vue, une certaine personnalité, voire des objectifs. Leur but est essentiellement ludique ou artistique : la conversation est là soit pour se suffire à elle-même (« regardez, je suis en train de parler à Shakespeare ! »), soit pour faire avancer une histoire (un PNJ de jeu vidéo qui a une quête, ou qu’il faut persuader, par exemple). Typiquement, puisqu’on se place dans un cadre ludique, ces systèmes ne doivent pas forcément être parfaits : on comprendra et pardonnera tout à fait que ce genre de chatbots répondra parfois à côté. Parmi ces systèmes, j’ai envie de parler de ceux d’Emily Short, qui a passé une grande partie de sa carrière à développer des personnages et des systèmes pour créer des personnages avec des conversations longues et des émotions complexes : Galatea, mais aussi les systèmes Versu et, plus récemment, le Character Engine (qu’elle vient de quitter après 3 ans dans la boîte). Bien entendu, il y en a d’autres, comme par exemple le jeu Façade, qui a fait des vagues (notamment dans le milieu universitaire) à l’époque de sa sortie ; et je ne connais pas bien les jeux vidéo récents, mais je suis prêt à parier qu’il y en a d’autres !
  • Compagnons : une catégorie plutôt hypothétique ici, puisqu’il n’y a aucun exemple réel, que des fantasmes ! Cela désigne un système capable de converser comme un humain, et sans forcément qu’il y ait de but derrière la conversation ; on peut également envisager que ce compagnon aura un point de vue situé, une certaine personnalité. Concrètement, pas forcément un système connecté au monde entier (il pourra très bien dire « je ne sais pas, demande à Siri »), mais un système qui fait une conversation plaisante, sans cadre narratif pour cadrer les limitations. Bien entendu, si l’on veut simuler un compagnon, il faudra que le système soit suffisamment avancé, voire passe le test de Turing (d’où le « hypothétique » !). Les questions bien sûr sont aussi « qu’est-ce qu’une personnalité ? », « est-ce qu’elle apparaîtra naturellement si je crée un agent conversationnel suffisamment puissant ? », « comment est-ce que l’ordinateur choisit sa personnalité ? ». Ce sont encore une fois des questions à laquelle la science-fiction a tenté de répondre maintes fois ; récemment, les films Ex Machina et Her sont ceux qui se rapprochent le plus de notre thématique.

ELIZA, Alexa, Siri, Cortana, Ava (Ex Machina), Samantha (Her)… Il semble y avoir ce stéréotype ancré dans les esprits qu’un assistant conversationnel doit être une femme. (Je ne suis pas le premier à le remarquer.) Pourquoi ? Quelques idées, en vrac : elles sont créées en majorité par des hommes hétérosexuels ; les rôles qu’on leur attribue sont ceux d’assistantes, de personnes obéissantes, voire serviles, des rôles attribués en majorité aux femmes dans la société actuelle ; la possibilité d’avoir des êtres conscients invoque en filigrane la possibilité de tomber amoureux d’eux, ce qui est traduit dans notre société par « un homme tombe amoureux d’une femme différente » ; les hommes n’aiment pas demander de l’aide ou du soutien à d’autres hommes, etc. Je pense que ça a dû être étudié, et la réponse, c’est le patriarcat.

Comment gérer l’input du joueur de façon cohérente et intéressante ?

Choix multiples

C’est une première possibilité, mais elle casse un peu la promesse du chatbot (« un agent conversationnel qui pourrait passer pour un être humain »), et pour tout dire je ne sais pas si on pourrait véritablement appeler ça un chatbot dans le sens historique du terme… C’est peut-être un abus de langage, mais ça s’utilise parfois comme ça aussi. Concrètement, quand le chatbot pose une question, plusieurs choix sont proposés, et l’utilisateur doit en choisir un pour avancer. Le grand avantage bien sûr pour l’auteur, c’est qu’il n’y a pas de surprise, et que la conception du chatbot se « réduit » à une arborescence et un contrôle de variables. Je mets « réduit » entre guillemets, parce que… la conception d’une fiction interactive à choix multiples, c’est vraiment pas simple tout de même !

Parmi certains exemples, on peut parler de Owlie le chatbot, un bot sur Facebook conçu par des psychologues et des psychiatres, qui permet aux utilisateurs d’obtenir un soutien psychologique, notamment avec un peu d’écoute et des propositions de techniques pour mieux gérer une situation difficile. Vous avez peut-être aussi déjà croisé des chatbots sur des sites internet qui fonctionnent en tant que pré-support client et permettent de répondre aux questions fréquentes ou vous orienter vers le bon service. Si on prend des exemples de fiction, il y a tout un genre de jeux sur mobile où le jeu simule une interaction avec une personne via SMS ou messages, ce qui rentrerait dans cette catégorie : Lifeline, Somewhere, Bury Me My Love, etc. (C’est pour ça que je ne sais pas si on peut parler de chatbot ici !)

En l’ignorant (un peu)

Une approche est… d’ignorer l’entrée de l’utilisateur, et de tenter de répondre de façon à faire croire à l’utilisateur qu’il a été compris. C’est l’approche d’ELIZA, qui répond parfois « je comprends… », alors qu’elle ne comprend absolument rien du tout ! C’est l’« effet horoscope », comme dit Emmanuel Corno, game designer sur Event[0] (et auteur de l’article de la semaine prochaine), ou encore l’« effet Barnum »  : si vous dites quelque chose de suffisamment vague ou large, votre interlocuteur aura tendance à interpréter voire surinterpréter pour voir une cohérence avec le reste de la conversation ou avec ce que vous avez promis. « Quelque chose d’intéressant va se passer aujourd’hui, gardez les yeux ouverts, » dit l’horoscope, et il ne se trompe ainsi jamais !

En regardant les mots

Une approche un peu plus sophistiquée est de scanner la phrase de l’utilisateur et de trouver des mots intéressants ; une approche qui voit la phrase comme un « sac de mots », et qui ne prend pas en compte leur ordre. C’est aussi une approche utilisée par ELIZA : si vous dites « mère » ou « père », ELIZA dira : « parlez-moi de votre famille ». Cela aide le chatbot à faire illusion, en parlant d’un sujet relié, mais cette illusion ne dure pas : les homonymes, les négations, il y a tout un tas de choses qui peuvent conduire à des choses incohérentes.

En interprétant la question grammaticalement

On pourrait aussi essayer de trouver le sens de la phrase prononcée, en regardant sa structure : quels sont les objets, le sujets, le verbe ? Dans les années 80, la structure était contrainte (verbe + nom), même si des structures plus complexes pouvaient aussi être prises en charge. (On pouvait aussi être malin : une règle simple comme « prendre le premier et le dernier mot et ignorer ce qu’il y a entre » permet de faire illusion et de comprendre « assommer cet idiot de garde ») L’analyseur syntaxique d’Inform (6 et 7) permet d’aller plus loin : les mots sont interprétés comme étant dans des grandes catégories (les « tokens », comme « noun », « animate », « edible » ; les articles ; etc.) et des structures de phrase (« mettre X sur Y ») sont spécifiées.

C’est un cas plus général d’un système grammatical à base de règles, comme ceux que l’on pourrait associer à un compilateur, vu que leur but est de comprendre un langage de programmation (cherchez Yacc, les lexers… ça remonte à loin pour moi). Le plus spectaculaire est les langages de programmation en langage naturel, comme Inform 7, mais ces langages ont tout de même une rigidité et des structures particulières, et ne sont pas vraiment en langage naturel (vous ne pouvez pas dire à Inform 7 « je voudrais que quand on attaque le chat il nous griffe »). En tout cas, pour comprendre une vraie conversation en langage naturel, il faudrait beaucoup d’informations sur la langue, les objets, le monde… Très difficile, voire impossible ; en tout cas, ça n’a jamais été fait.

En interprétant la question avec de l’IA

La question plus générale qui se pose est donc celle de la compréhension du langage naturel (en anglais, natural language processing, ou NLP). C’est un champ de recherche actif, et qui a connu un saut qualitatif notable récemment avec l’avènement du deep learning pour l’intelligence artificielle. Ces systèmes sont entraînés avec des millions de phrases, et se chargent d’en comprendre une, c’est-à-dire de la traduire et de la représenter en quelque chose de catégorisé et d’exploitable par un ordinateur.

C’est sans doute la voie du futur, même si elle est un peu frustrante (on ne comprend pas exactement ce qu’il y a dans le cerveau électronique une fois qu’il est entraîné, c’est un peu une boîte noire) ; les assistants de type Siri sont actuellement basés dessus. Une contrainte, cependant : ces systèmes ont besoin de beaucoup de mémoire pour fonctionner, et ne répondent pas forcément instantanément, ce qui rend leur adoption dans les jeux vidéo (par exemple) plutôt hasardeuse. (Il y a plusieurs autres problèmes, et si vous cherchez un point de départ, je vous conseille un texte de FibreTigre sur le sujet.)

Terminons !

Cela conclut notre survol, déjà assez dense, de ce qu’est un chatbot, et des différentes techniques de développement ! Dans les articles qui suivront le reste du mois, nous parlerons notamment des chatbots dans les jeux vidéo et de la conception d’un chatbot, et nous aurons des interviews avec des gens du milieu. Restez branchés !