1er constat : Les bots standards du marché font à la fois les questions et les réponses en fonction de données préenregistrées dans un arbre fixe, qui aura été construit préalablement en back office. Ceci s’avère utile et intéressant dans un environnement ciblé et fermé mais dans un contexte évolutif, avec des changements réguliers liés au produit ou service objet du bot, cette approche induit un coût humain (MAJ permanentes) non négligeable.

L’innovation apportée par nos data scientists consiste donc à dépasser les simples règles de décision fixes pour implémenter un algorithme génératif capable de construire lui même des réponses à des questions et ce mot par mot. Le Chatbot générera par conséquent une réponse stable à différentes formulations possibles d’une même question par les utilisateurs. Il a aussi comme caractéristique d’être générique à 80% et transposable à différents contextes.

Pour ce faire, nous faisons appel à des techniques de Deep Learning et plus particulièrement des réseaux des neurones récurrents. Un réseau récurrent bien particulier est le « Sequence to sequence » qui a fait son apparition en 2017 et sur lequel s’est porté notre choix. Schématisé ci-dessous, il est construit sur « une paire » de réseaux : un encodeur pour « comprendre » la question et un décodeur pour générer la réponse mot par mot.

Nous nous appuyons également en amont sur des techniques de traitement de langage naturel ou Natural Language Processing (NLP) et en aval à de l’API REST pour aller chercher les informations ponctuelles (à intégrer dans la réponse) depuis des services tiers. Il en résulte l’architecture suivante :

Préalablement à l’entraînement, nous procédons à une phase d’augmentation des données en entrée de l’algorithme pour donner au modèle plus d’adaptabilité face aux styles d’écriture des utilisateurs ainsi que le rendre capable de détecter le sens d’une question, quelle que soit la manière dont on la pose. A cette phase d’augmentation s’ajoute également une phase de nettoyage (ou Data Preprocessing). Nous enlevons les caractères spéciaux, faisons appel à une représentation Word2vec pour réduire la dimensionnalité, détectons la présence d’expressions régulières particulières qui correspondent à des informations sur l’utilisateur connecté, etc. L’entraînement du réseau se fait par la suite grâce à la technique de la Back Propagation qui est une tâche coûteuse en matière de calcul et qui a motivé notre choix d’utiliser la puissance GPU pour l’exécuter. Il se réalise en plusieurs étapes :

Bien évidemment, nous évaluons notre modèle avant de le déployer en testant sa capacité à mémoriser l’information issue des données d’entraînement (inversement proportionnelle au Training Loss ci-dessous) ainsi que sa capacité à répondre à des questions qu’il n’a pas traitées pendant l’entraînement (inversement proportionnelle au Validation Loss ci -dessous). Plus on avance dans l’entraînement (nombre d’ « epochs »), plus ces erreurs décroissent et leur convergence vers un minimum est un indicateur du bon fonctionnement de l’entraînement ainsi que de la bonne capacité du modèle à se généraliser.

Une fois que notre Chatbot est entraîné, il est capable de se généraliser donc répondre à des questions qui ne sont pas forcément dans la base d’entraînement. Le Chatbot récupère la question posée, effectue son Preprocessing et génère la réponse mot par mot (sans aucun arbre de décision : c’est l’innovation clé !) La réponse générée est un « Template » de réponse qui sera souvent complété d’informations récupérées en post parsing, venant des services tiers (API Rest). Cette réponse « Template » est sémantiquement complète mais manque d’éléments qui peuvent relever par exemple de la localisation géographique, de montants financiers, etc.

Le Chatbot décide des outils à requêter pour compléter les réponses qu’il fournit (Non seulement il sait parler « comme un grand », mais il sait également entretenir des relations avec les autres applications ?)

Nous vous proposons un aperçu des premiers résultats de « DAVE », notre Chatbot, sur la base de scénarios différents attestant de sa capacité à s’adapter à plusieurs contextes. La vidéo suivante montre le résultat de la génération de « template de réponse » par un réseau entraîné sans faire appel à l’API REST. Le contexte en question est la demande de renseignements sur des opérations effectuées sur un compte bancaire, et les patterns xxxtarifxxx et xxxlibelléxxx indiquent que le modèle doit chercher ces infos en requêtant des services tiers.

Et voilà maintenant la génération complète avec l’API qui se connecte à un service simulé en interne.

Aussi, notre moteur peut traiter un contexte de géolocalisation, notamment d’agences bancaires à proximité d’une adresse, et ce en comprenant toute question où on cherche à géolocaliser une agence, en générant les réponses et requêtant l’API Google Maps.

Que se passe-t-il si l’adresse n’est pas assez précise ? Notre modèle est assez intelligent pour requérir des précisions et les prendre en compte dans son analyse.

Augmenté de l’UX / UI de Colorz et de ses directeurs artistiques, vous avez le top des agents conversationnels.
Next Step : introduction de la reconnaissance vocale. A bientôt pour le 2ème épisode des aventures de « DAVE ».