Que se cache derrière un Chatbot ?

Mathieu Canzerini
InTech / Innovation & Development
5 min readOct 2, 2017

Les chatbots (assistants conversationnels) c’est la nouvelle tendance de ces derniers mois.

Pour preuve : plus de 100 000 chatbots sont déployés sur FacebookMessenger. Et ce chiffre croit de manière exponentielle.

Mode passagère ou nouveau paradigme d’applications ? Difficile à dire. Quoi qu’il en soit, au delà du fun que peut représenter la réalisation d’un chatbot, c’est aussi et surtout un défi pour les développeurs.

Au travers de cet article et d’un cas d’utilisation simple (la réservation de salles de réunion dans une organisation), nous allons ensemble parcourir l’écosystème qui gravite autour des chatbots et tenter de démystifier ce nouveau concept.

Created by Xb100 — Freepik.com

Étape n°1 : Choisir sa plateforme NLU (Natural Language Understanding) :

C’est peut-être l’enjeu majeur dans le développement d’un chatbot : la compréhension du langage naturel par l’assistant conversationnel.

Je vous propose d’aborder quelques définitions primordiales :

  • NLP (Natural Language Processing) : NLP fait référence à tout système capable de simuler une interaction humaine de telle sorte que l’utilisateur la trouve naturelle.
  • NLU (Natural Language Understanding): NLU est un sous-ensemble du NLP. Son but est de convertir des messages déstructurées reçus en entrée vers un ensemble structuré de données qu’une machine peut comprendre et utiliser.

Exemple : Pour la phrase “Réserve moi une salle pour le 20 octobre 2017” , le robot utilise la NLU pour extraire les données : date=10/20/2017, action=book-room que le système pourra comprendre.

  • intent : C’est l’action que l’utilisateur veut effectuer.
    Ex : Réserver une salle, annuler une réservation, etc
  • entities : Ce sont des attributs qui donnent des détails concernant la tâche à effectuer.
    Ex : Réserver une salle pour six personnes
  • confidence score : C’est un score qui indique la précision du système de NLU vis à vis de la liste d’intents qu’il a produit en sortie.
  • Voici un exemple pour vous aider à comprendre ces définitions :
    entrée : “ J’ai une réunion le 2 novembre matin. Y a-t-il une salle libre ?”
    intent : “search-rooms”
    entities : “date=11/02/2017”, “duration=morning”.
    — confidence score : 0.84

API.ai (acquis par Google) et Wit.ai (acquis par Facebook) sont les deux plateformes principales de NLU dans l’industrie des bots. Fortes de leur notoriété et de leur facilité de prise en main, ces deux solutions semblent séduisantes :

  • hébergement en tant que service cloud ;
  • SDK Node.js et Python & interface REST ;
  • excellente documentation ;
  • support des problématiques de contexte et d’état, ce qui facilite grandement la construction de plateforme conversationnelle.

Le gros point noir de ces outils, c’est qu’ils ont la main mise sur vos données. En d’autres termes : Google & Facebook ont la possibilité de lire chacun de vos messages avant de les analyser. En matière de confidentialité on a vu mieux…

Pas de panique, il existe un outil similaire et cette fois open source : Rasa. Grâce à lui vous pourrez bénéficier d’un service de NLU on premise.

La particularité de Rasa, c’est que l’outil propose une API haut niveau qui repose sur plusieurs NLP et librairies de Machine Learning pour l’extraction d’intents et d’entities. Ces librairies sont appelées backend. En voici une liste non-exhaustive :

  • MITIE : c’est une libraire tout-en-un (libraire NLP pour l’extraction d’entities et libraire ML pour la classification d’intents) ;
  • spaCy + sklearn : spaCy est une libraire de NLP qui extrait des entities. sklearn est utilisé avec spaCy pour ajouter des capacités de ML pour la classification d’intent ;
  • MITIE + sklearn : Le combo parfait. On profite ici de la bonne reconnaissance d’entities de MITIE et la classification efficace d’intents de sklearn.

J’ai utilisé le duo MITIE + sklearn pour entraîner Rasa. Pour notre cas, voici les types de phrases que notre bot doit comprendre :

  • quelles sont les salles libres ?
  • réserve-moi une salle de réunion pour demain matin.
  • j’ai besoin d’une salle pour deux personnes.

Voilà à quoi ressemble un modèle Rasa simpliste répondant à notre problématique :

Ici vous avez un excellent tutoriel sur l’entrainement de Rasa avec un backend MITIE. Pour les plus débutants d’entre vous, je vous renvoie vers cette documentation pour installer Rasa.

Étape n°2 : Le framework de développement de notre robot: HUBOT

Nous avons notre plateforme de compréhension du langage. Très bien. Il faut maintenant simuler un utilisateur dans notre plateforme de messagerie, pour que notre robot soit capable de recevoir des messages, répondre, etc.

Hubot est un kit de développement open source développé par Github et écrit en CoffeeScript. Plusieurs raisons nous ont poussé à utiliser cet outil :

  • le repo est actif et mis à jour régulièrement par Github ;
  • le code est écrit sous Node.js. On peut donc tirer avantage de toutes les librairies de l’écosystème Node ;
  • les plateformes de messagerie les plus célèbres sont supportées (Facebook Messenger, Slack, RocketChat, …).

C’est grâce à ce framework que nous allons pouvoir :

  • simuler un bot dans une messagerie (RocketChat par exemple) ;
  • échanger avec notre NLU (Ici Rasa au travers de call HTTP) ;
  • interroger nos services métiers (Ici MS Exchange par exemple pour la réservation de salles).

Exemple de code CoffeeScript :

La documentation de Hubot est très bien faite et est accessible ici.

Étape n°3 : C’est tout !

En vérité, pour développer un chatbot vous avez besoin :

  • d’une messagerie ;
  • d’un bot de messagerie (i.e un user virtuel dans votre messagerie : hubot dans notre cas) ;
  • d’un outil de NLU.

Ce qui fera la différence, c’est le niveau de maturité de votre NLU, sa précision.
Autre point important : le caractère et la personnalité de votre bot. Donnez-lui un nom, des traits de caractères, des humeurs. En gros, rendez-le humain !

La dernière difficulté, c’est de pouvoir interfacer votre bot avec les données dont vous aurez besoin (ici les salles de réunion). Ces données ne sont pas toujours mises à disposition, mais ça, c’est un autre sujet … ;)

Ci-dessous un schéma représentant nos différents composants :

Les briques techniques derrière un chatbot

Pour aller plus loin :

N’hésitez pas à me contacter si vous avez des remarques ou si vous souhaitez récupérer, utiliser, tester ou modifier ce cas d’utilisation : j’ai sous la main une démo qui tourne.

Les articles desquels je me suis librement inspiré :

--

--

Mathieu Canzerini
InTech / Innovation & Development

Coding, Education, Science, Politics, Series, Video Games, Sport, Karate