Comprendre les chatbots

Par Cyril Canete, le 15.09.2016

Au cours des derniers mois les chatbots ont investi le devant de la scène tech. Tous les grands noms du secteur ont apporté leur pierre à l’édifice, que ce soit au travers d’une nouvelle interface conversationnelle ou bien en développant une intelligence artificielle. Depuis Slack, qui a démocratisé le concept de bot avec son Slackbot, à la volonté de Google de prendre le leadership dans le domaine de l’intelligence artificielle, les annonces dans le domaine sont quasi-quotidiennes.

Les chatbots sont une nouvelle manière d’interagir avec des services existants, une expérience utilisateur novatrice qui laisse entrevoir de nombreuses opportunités. Déjà présents sur IRC il y a 20 ans de cela, il est légitime de se questionner sur ce regain d’intérêt soudain sur mobile. Cela s’explique notamment par le fait que, depuis fin 2015, l’utilisation des applications de messagerie a surpassé celle des réseaux sociaux. Cette présence massive, et croissante, des utilisateurs sur ces interfaces conversationnelles est donc un nouvel Eldorado pour les marques. Cependant, les applications de messagerie ne sont pas la seule explication de cette démocratisation. L’intelligence artificielle est au coeur de la plupart des services conversationnels et au cours des précédentes années, ce domaine de l’informatique a considérablement progressé, entraînant avec lui les chatbots.

L’engouement autour des chatbots repose sur 2 facteurs principaux : les progrès de l’intelligence artificielle et l’avènement des applications de messagerie.

Qu’est-ce qui se cache derrière un bot ?

On distingue principalement trois composants dans l’architecture d’un bot :

  • l’interface utilisateur, à travers laquelle les utilisateurs peuvent interagir avec le bot. Il peut s’agir de Messenger, Slack, une application de SMS…
  • le moteur, qui traite les messages des utilisateurs et qui fonctionne sur le même principe que nos autres back-end, avec une base de données pour stocker les données des utilisateurs, des appels à des services externes, etc
  • le moteur de Traitement Automatique du Langage Naturel (NLU), qui transforme les entrées des utilisateurs en actions exécutables par le moteur

Cette structure ressemble une architecture classique avec d’un côté un front-end et de l’autre un back-end qui expose une API. La grande différence est la présence du moteur NLU.

Interagir avec eux

Les applications de messageries telles que Slack, Messenger, WeChat et maintenant Skype, ouvrent progressivement leurs interfaces aux développeurs, leur permettant de créer des discussions plus riches. Cependant, rien n’oblige à passer par ces plateformes bien connues pour construire un bot. Il suffit d’utiliser n’importe quelle interface conversationnelle, comme les SMS par exemple. Ces plateformes fournissent souvent une API, mais ne traitent généralement pas la partie intelligence artificielle : leur principal avantage est de toucher un grand nombre d’utilisateurs.

Du texte et plus encore

Si l’échange de messages textuels est la méthode la plus évidente pour “discuter” avec un bot, de nombreux autres types d’interactions sont possibles pour proposer une meilleure expérience utilisateur : cliquer sur un bouton, envoyer une localisation GPS ou utiliser un menu contextuel peut être plus rapide que taper un long message. Il est en fait plus juste de voir ces messages envoyés par les utilisateurs comme des événements, puisqu’ils peuvent notamment contenir des méta-informations à propos de la conversation, ou une action liée à un bouton. Par exemple, on peut recevoir un événement quand un utilisateur se connecte ou quand il a lu un message.

Comment choisir ?

Outre le fait qu’ils ne visent pas les mêmes catégories d’utilisateurs, les différents services se distinguent par les outils qu’ils proposent aux développeurs. Par exemple, Slack a récemment sorti une nouvelle fonctionnalité : les développeurs peuvent maintenant intégrer des boutons aux conversations, permettant des interactions plus fluides entre utilisateurs et bots. L’application Messenger, quant à elle, propose maintenant de s’authentifier à un service tiers dans une conversation, au lieu de rediriger l’utilisateur vers une page web. Ces fonctionnalités changent la manière de penser la communication avec les bots et plus encore, la manière de les implémenter. Comme il n’existe aucun “standard” pour les conversations, il serait difficile d’adapter le même design d’un service à l’autre.

Connecter votre moteur aux différentes plateformes

Pour recevoir des messages d’un service, le moteur d’un bot a besoin d’exposer une API. De cette façon, le service enverra une requête à cette API à chaque fois qu’un événement géré par le bot se produira. Pour répondre au message après l’avoir traité, il faudra soit répondre à la requête, soit en envoyer une nouvelle, selon le service utilisé.

Les rendre intelligents

Nous avons vu que l’une des raisons de cette nouvelle vague de bots est l’essor de l’intelligence artificielle d’une manière générale et du Natural Language Processing (NLP) en particulier. Un des nombreux sous-domaines du NLP est le Natural Language Understanding (NLU) qui combine intelligence artificielle, informatique et linguistique. Il s’agit d’analyser du contenu pour en extraire l’intention et des méta-données comme les sentiments. Le résultat peut être une expression logique, ou même une action. Par exemple :

Quelle est la plus grande ville de Californie?
  => argmax(λx.city(x) ∧ loc(x, CA), λx.population(x))
Joue une chanson de Rihanna
  => play_music(artist: Rihanna)

Quelques notions de NLU

Comme nous l’avons vu avec Echo au travail, il y a des concepts spécifiques et un vocabulaire associés à la compréhension du langage naturel. Petit rappel :

Entités : elles représentent un concept. Ce peut être une chanson, une date ou une sauce (si vous développez un bot de livraison de pizza).

Intents : il s’agit de l’action ou la fonction que l’application exécute quand l’utilisateur dit quelque chose. Tout comme il existe différentes manières de dire la même chose, une intent peut être déclenchée par différents énoncés. Par exemple, “Je veux écouter une chanson de Flume” ou “Écouter Flume” ou “Joue n’importe qu’elle chanson de Flume” devrait lancer une chanson de Flume sur un lecteur de musique.

La notion la plus importante en compréhension du langage naturel est celle de “contexte”. Lorsqu’un algorithme analyse une phrase, il ne connaît pas l’historique de la conversation. Cela signifie qu’au moment où il reçoit une réponse d’un utilisateur il ne se souvient plus de la question qu’il lui a posée. De fait, pour différencier les phases de la conversation, il faut conserver son état. Ce peut être sous la forme d’un flag comme “écoute-musique” ou de paramètres comme “artiste : ‘Flume’”. Avec ce contexte, les intents peuvent s’enchaîner sans avoir besoin de savoir quelle était la question précédente.
Voici un exemple :

Nous n’en dirons pas plus en ce qui concerne le fonctionnement des algorithmes de compréhension du langage naturel, mais vous pouvez lire cette étude et cette étude pour aller plus loin.

NLU “As A Service”

De nombreux services de NLU qui sont sortis récemment permettent de construire un bot. Pour utiliser l’un d’entre eux, il faut configurer toutes les entités et toutes les intents sur le site du service, ce qui rend la partie NLU agnostique de la logique de l’application qui l’intègre. Pour extraire l’intent et les paramètres d’une entrée utilisateur, il faut l’envoyer à l’API du service. Si elle correspond à l’une des intents configurées, l’intent sera renvoyée avec les paramètres. La plupart des services proposent aussi d’ajouter une “action” aux intents ; il suffit alors d’appeler la méthode associée dans le code.

Notre choix

Wit.ai et API.ai, les deux leaders, sont assez similaires en terme de performances. L’avantage d’API.ai réside dans son interface : très simple d’utilisation, elle permet de créer des entités et des intents puis de les lier facilement à des contextes. API.ai met aussi à disposition une conversation intégrée (Domains) qui rend plus rapide le traitement de requêtes liées à un domaine pré-défini, comme le sport, la météo ou l’authentification d’un utilisateur. Finalement, API.ai permet aussi de développer un bot type Siri grâce à un module de reconnaissance vocale (en anglais).

Parlez-vous français ?

Autant le NLU fonctionne très bien pour l’anglais, autant il s’avère moins précis pour les autres langues (par exemple le français) : l’algorithme utilisé pour faire correspondre une entrée utilisateur et une intent échoue si la première n’est pas exactement l’une des quelques phrases données au service comme référence.

Connecter un service de NLU et une interface utilisateur

Si vous avez essayé de construire votre propre bot, vous avez peut-être remarqué que la plupart des services de NLU met à disposition un système pour gérer les réponses qu’ils vous envoient. C’est pratique pour découvrir l’environnement et le service de NLU. Par contre, si vous avez besoin d’utiliser un système externe ou de créer une base de données utilisateurs, vous allez être rapidement bloqués : pour créer une application personnalisée, vous aurez besoin d’un back-end. Vous pouvez utiliser la techno que vous voulez, mais ce sera plus simple si vous en prenez une qui possède des SDKs ou des bibliothèques pour le type d’interface utilisateur et le service de NLU que vous avez choisis.

Gérer les évènements

Comme nous l’avons vu précédemment, les messages textuels ne sont pas le seul moyen d’interagir avec les bots. Quand vous concevez le back-end d’un bot, vous avez besoin de choisir les événements qui sont pertinents pour vous et de les traiter. Par conséquent, vous devez d’abord avoir une couche logicielle qui déclenche le bon contrôleur selon l’événement reçu.

Analyse des évènements

Une fois que vous avez identifié votre événement, vous pouvez en extraire l’intent, s’il y en a une, et les paramètres. S’il s’agit d’un message textuel, c’est à ce moment que vous faites appel à l’API de NLU. Pour les boutons c’est beaucoup plus facile car il suffit souvent de d’appeler la méthode qui correspond à leur action.

Exécuter l’intent

Ensuite, vous n’avez qu’à exécuter le code lié à l’intent et créer (ou pas) une réponse que vous pouvez renvoyer à l’utilisateur. La plus grande partie de votre logique devrait être ici, y compris les actions de la base de données, les appels aux services tiers, l’analyse d’audience etc.

Envoyer la réponse

Vous pouvez enfin envoyer à l’utilisateur la réponse qu’il attend. Selon le service de messagerie que vous utilisez, vous devrez soit répondre à la requête que vous avez reçue, soit faire un nouvel appel. La seconde option est plus flexible car elle permet de renvoyer plus d’un message, par exemple.

Conclusion

Comprendre comment fonctionnent les bots, connaître leurs capacités et leurs limites est crucial quand on décide d’en réaliser un. Intégrer dans votre projet les outils existants est un premier challenge technique, mais ce n’est qu’une partie du travail. Concevoir le bon service, en sélectionnant ces outils avec soin et en les orchestrant de manière intelligente est aussi complexe, si ce n’est plus.

Les bots bénéficient d’une disponibilité immédiate sur toutes les plateformes, sans aucun besoin d’installation. Ils viennent donc comme une bonne réponse à l’app fatigue. Cependant, ils ne conviennent pas à toutes les situations et ne remplaceront pas les applications. Il convient plus de les considérer comme un moyen de compléter la palette des services que vous offrez à vos utilisateurs.

A nos yeux le succès d’un bot passe par deux cas de figure : soit il relève d’une prouesse technologique, soit d’une conception qui l’intègre intelligement au sein de services existants. La première catégorie demande des mois de travail pour une équipe en intelligence artificielle, la seconde un binôme chef de projet / développeur astucieux et créatif. Choisissez votre camp.