Chatbots : creez votre premier agent conversationnel

Par :
fdursus
jeu, 13/10/2016 - 19:16
Niveau :
Expert

Ces derniers mois nous assistons à une effervescence autour des agents conversationnels, aussi appelés chatbots. Un chatbot est un programme avec lequel on interagit via langage naturel, qu'il soit parlé ou écrit. Google a même été jusqu'à intégrer un assistant virtuel au sein même de toutes les conversations qui ont lieu sur sa nouvelle appli de messagerie, Google Allo. Google Assistant, c'est son nom, est un agent auquel il est possible de poser des questions, de faire effectuer des recherches online ou encore de  jouer à des petits jeux textuels. Il y a fort à parier qu’il permettra également à l’avenir de réserver des places de spectacle ou encore de restaurant.

Outre celle de Google, toutes les applications de messagerie s'ouvrent petit à petit aux bots via des API : un développeur qui le souhaite peut ainsi créer des bots sur Kik, Skype ou encore sur Facebook Messenger. En Avril dernier, Facebook a annoncé le lancement de la Messenger Platform, un ensemble d'outils permettant à tous les développeurs de créer des chatbots. Nous vous proposons ici de comprendre les étapes nécessaires à création de la base d'un bot via la plateform Wit.

Fonctionnement

Un chatbot sera composé de deux parties principales :

  • La première brique sera un script serveur chargé de recevoir les messages envoyés depuis Facebook Messenger (ou toute autre messagerie) par l’humain, les transmettre à un moteur d’Intelligence Artificielle (IA), et renvoyer une réponse dans la conversation Messenger.
  • La seconde brique sera le fameux moteur d’IA, chargé de comprendre le langage naturel. C’est cette brique qui est au cœur de la démarche de Facebook pour démocratiser l'usage desbots,  car elle est de loin la plus complexe.

Ce moteur d’IA est disponible et utilisable entièrement gratuitement à l’adresse suivante :

http://wit.ai .Contrairement à ce que l’on pourrait croire, rien ne bride son utilisation à Facebook Messenger. Elle peut ainsi très bien être utilisée avec tout autre messagerie proposant une API pour envoyer/recevoir des messages.

Voici un schéma représentant le workflow de données lors d’une conversation avec un chatbot :

Nous nous concentrerons dans la suite de cet article sur la brique d’IA proposée par Facebook afin de comprendre la philosophie de son fonctionnement. Aussi, les exemples resteront volontairement très simples afin de rester aussi concis que possible, mais il faut savoir que dans 99% des cas un chatbot sera sensiblement plus complexe car il devra entre autres interroger des API externes (données Météo, récupération de news, données client,etc...), récupérer et stocker des informations dans une base de données, etc...

Création de l’application

La première étape consiste à créer une application sur Wit.ai que l’on nommera pour notre exemple « LeProgrammeur » et qui sera en langue Française :

Nous allons ensuite devoir définir ce que l’on souhaite que notre chatbot soit capable de faire. Ou, autrement dit, à quelles requêtes on veut qu’il soit capable de répondre.

Pour cet exemple nous ne gèrerons que des choses simplistes en décidant que le bot ne soit capable de répondre que lorsque :

  • On le salue
  • On lui demande comment il va

Wit appelle ces différents cas des « stories ».

Scénarios et entités

Cliquez sur « Create a story » pour créer notre premier scénario.

Il va maintenant falloir comprendre le concept d’entité qui est au cœur du fonctionnement de Wit. Une entité représente une intention utilisateur comme « saluer », « convertir une devise », « réserver une place de cinéma », « rechercher un article », etc... Et une story sera donc composée de 1 à N succession d’entités.

Voici par exemple une story pour demander la météo à un bot pourrait se faire de la manière suivante :

Créons maintenant notre première entité.

Pour cela, écrivez « Bonjour » dans le champ « User says... ».

Sélectionnez ensuite le texte avec la souris et écrivez, par exemple, « greetings » dans le champ « Create an entity for "Bonjour" » et appuyez deux fois sur la touche Entrée afin de créer une entité personnalisée.

En cliquant dans le champ de création d’entité vous verrez que wit propose déjà plusieurs entités déjà éduquées permettant par exemple de récupérer une date, un email, une distance, une somme, etc... Avant de créer une entité personnalisée vérifiez qu’elle n’existe pas déjà dans cette liste.

Comme nous le verrons après, une entité personnalisée aura l’inconvénient de devoir être éduquée par la suite, ce qui n’est pas le cas des entités déjà existantes.

Nous venons de définir ce que l’utilisateur devra écrire, ajoutons maintenant une réponse de la part du bot. Pour cela, cliquez sur le bouton « Bot Sends » et écrivez le message que le bot enverra en réponse.

Vous devriez maintenant avoir quelque chose de similaire à ceci :

Vous pouvez déjà tester le fonctionnement de cette story en cliquant sur le bouton « Press ~ to chat with your bot » en bas à droite de la page qui ouvrira une fenêtre de conversation.

Ecrivez-y « Bonjour », le bot devrait alors vous répondre :

En revanche, comme vous n’avez qu’une seule story, vous verrez que le bot vous répondra dans tous les cas la même chose. Nous allons donc créer une seconde story pour demander au bot « ça va ? » afin d’avoir deux usages différents et de montrer en quoi l’éducation des entités est nécessaire.

Voici notre nouvelle story :

Essayons maintenant de saluer le bot différemment dans la fenêtre de chat, on voit bien que le bot ne répond pas comme nous le souhaiterions :

Le problème c’est que nous avons créé l’entité mais qu’elle n’a pour référence que le texte « Bonjour » avec lequel nous l’avons créée et n’est donc pas capable de comprendre d’autres formulations par manque de références.

Eduquer le bot

Comme nous venons de le voir, il va donc falloir apprendre d’autres manières de comprendre « bonjour » à notre IA. Mais il va également falloir définir ce que l’on appelle une stratégie de recherche pour chaque entité.

Pour cela, il suffit d’aller dans la rubrique « Understanding » dans laquelle nous pouvons trouver nos entités créées précédemment :

La colonne « Search Strategy » est un élément très critique permettant à l’IA de comprendre les choses correctement. Un simple changement dans ces options peut casser le bot il est donc important de bien comprendre leurs différences.

Trait : sera utilisé pour des formulations complexes de phrases dans des cas où on ne peut pas comprendre ce que dit l’utilisateur à partir d’une simple liste de mot-clefs.

Free-text : sera utilisé principalement pour de la recherche en texte libre. Par exemple « trouver des articles parlant de xxx », xxx sera ici du free-text.

Keywords : permettra de définir une liste fermée de mots auxquels devra répondre l’entité. Par exemple « pizza xxx », xxx contiendra les mots clefs : calzone, fromage, 4 saisons, paysanne, orientale, etc…

En cochant « free-text » ET « keyword » on obtient une liste de mots-clefs ouverte. C’est-à-dire qu’on reconnaitra une liste précise de termes tout en étant ouvert à de nouvelles possibilités de mots. C’est ce qui nous intéressera pour l’entité de salutation.

Concernant le « ça va ? » les formulations possibles étant très diverses et variées nous utiliserons par contre un « trait ». Mais si nous mettions seulement cette option l’IA chercherait quand même d’autres entités à l’intérieur donc nous allons aussi cocher « keyword » qui empêchera ceci.

Passons maintenant à l’éducation à proprement parler. En haut de cette page se trouve un champ permettant de tester le bot en écrivant des phrases. Ecrivez « Comment vas-tu ? » dans ce champ, vous verrez alors les entités qu’en a extrait Wit :

On voit bien que le bot n’as pas du tout compris ce qu’on lui a dit, nous allons donc le corriger.

Pour cela, nous allons supprimer les deux « greetings » proposés, sélectionner « Comment vas-tu ? », l’associer à l’entité « howareyou » et valider pour éduquer le bot.

De la même manière nous allons ajouter « Tu vas bien ? », « comment ça va ? », « ça roule ? » et « Comment te sens-tu ? ». Attention, dans certains cas l’IA pourrait vous proposer automatiquement l’entité adéquate (« howareyou ») mais sans l’associer au message. Dans ce cas, supprimez la proposition, sélectionnez le texte avec la souris et ressaisissez l’entité manuellement.

Faisons de même pour l’entité « greetings » en ajoutant « coucou », « yo », « salut » puis « hello ». Vous remarquerez peut-être qu’au moment d’écrire « hello », l’IA reconnait correctement l’entité « greetings » sans que l’on ait besoin de le lui apprendre, mais validons-le tout de même afin de renforcer l’apprentissage.

Vous devriez maintenant avoir des entités comme suit :

Essayons de parler au bot à nouveau via la fenêtre de chat et constatons que ses réponses sont déjà bien plus cohérentes même lorsque nous lui disons des choses que nous ne lui avons pourtant pas encore apprises :

Vous l’aurez compris, l’intelligence du bot se fera principalement en fonction de la base de connaissances que nous lui auront fournie. Plus nous lui fourniront d’exemples plus il saura interpoler de nouvelles phrases pour répondre correctement.

Il faut aussi savoir que le fonctionnement de l’IA de Wit fonctionne de 2 manières différentes. La base de fonctionnement restera ce que l’on appelle du Machine Learning, mais tant que sa base de connaissance restera limitée, et donc insuffisante pour faire uniquement du machine learning, il fonctionnera plutôt sur un système dit de « Rules » puis switchera progressivement vers du machine learning pur au fil de l’apprentissage.

Grâce à ce système, il est possible d’avoir un prototype de bot fonctionnel rapidement tout en conservant la possibilité de le faire évoluer de manière transparente simplement en lui apprenant de nouvelles formulations de phrases.

A noter également qu’une « bonne » éducation consiste en plusieurs centaines d’exemples pour une seule entité ce qui représente un travail conséquent.

Pour aider à ceci, la rubrique « Inbox » de Wit listera tout ce qui a été dit au bot (une fois celui-ci connecté à une messagerie) avec la possibilité de valider ou corriger ce que l’IA a compris. Autrement dit, l’apprentissage du bot peut se faire sur la base de simples tests de la part d’utilisateurs lui parlant par exemple sur Messenger.

Un défaut assez important de Wit est qu’il n’est actuellement pas possible de créer de story de fallback. Si un message ne correspond à aucune story, le bot répondra forcément avec une des stories existantes qu’il considérera la moins pire, même si elle n’a aucun rapport.

Il reste possible d’arriver plus ou moins à avoir une story de fallback créant une story sans entité liée mais qui a des chances d’entrer en conflit avec d’autres story et d’empêcher le projet Wit de valider une ou plusieurs de ses stories. Les développeurs de Wit sont au-courant de ce manque et devraient l’adresser dans un avenir plus ou moins proche.

Voici leur roadmap :

https://github.com/wit-ai/wit

Next steps

Nous avons vu ici comment créer des stories très simplistes mais Wit permet évidemment de gérer des scénarios beaucoup plus complexes avec des embranchements, l’exécution de fonctions côté serveur, etc…

Maintenant que vous avez créé la base de votre bot il faudra créer la partie serveur qui fera le lien entre Messenger et Wit.

Wit propose des librairies dans la plupart des langages qui sont disponibles ici pour vous aider à vous lancer :

https://github.com/wit-ai

Vous aurez également besoin de créer une page ainsi qu’une application Facebook afin d’avoir les tokens d’authentification nécessaires à l’utilisation de l’API messenger.

Conclusion

Dans cet article nous avons vu le fonctionnement de Wit mais il existe bien d’autres solutions ayant chacune leurs avantages et inconvénients. Celles fonctionnant sur du machine learning, comme Api.ai de google, et Wit, ont généralement en commun le fait de fonctionner sur ce qui s’apparentera au système d’entités et de scénarios présentés dans cet article.

Ce qui a été appris ici sera donc souvent valable ailleurs à quelques subtilités près.

Nous nous sommes ici concentrés sur Wit car, bien que cette plateforme soit loin d’être récente, elle a bénéficié d'une mise en avant par l’un des plus grands acteurs du web, à savoir Facebook. Et comme Messenger est une des plus grandes plateformes de messagerie (avec pas moins d'1 milliard d'utilisateurs revendiqués), il y a fort à parier que wit sera parmi ceux qui se tailleront la part du lion de ce marché encore balbutiant.

François Dursus