Le Blog Amazon Web Services

Améliorer les performances d’une plateforme de chatbot grâce à Amazon SageMaker

Cet article est réalisé par Enzo Lebrun, Data Scientist, et Pierrick Filippi, CEO & CTO chez Like A Bot, en collaboration avec Davide Gallitelli, Solutions Architect Specialist AI/ML chez AWS.

Like a Bot est une entreprise spécialisée dans la création de chatbots et agents conversationnels depuis plusieurs années. Pour une parfaite maîtrise technique des technologies mise en œuvre, notamment autour des problématiques d’Intelligence Artificielle, Like a bot a fait le choix de développer sa propre plateforme de chatbots et son propre Chatbot Builder.

Like a Bot a 2 enjeux forts :

  • Proposer une plateforme capable d’héberger des centaines de chatbots et d’absorber des pics de plusieurs milliers d’utilisateurs écrivant en simultané,
  • Mettre au point leurs propres modèles de traitement du langage naturel (Natural Language Processing NLP & Natural Language Understanding NLU) et pouvoir déployer des versions mises à jour de ces derniers en production de façon automatique et simple, et sans interruption de service.

Architecture initiale

Au lancement de Like a Bot, l’équipe a commencé avec l’architecture suivante :

  • l’entraînement se faisait en local sur un serveur avec des unités de traitement graphique (GPU, Graphical Processing Units)”,
  •  L’hébergement des modèle se faisait ensuite sur une instance Amazon Elastic Compute Cloud (Amazon EC2).

Cette architecture avait l’avantage d’être très simple à développer et gérer, avec un seul composant et aucun élément à modifier en fonction du contexte. En revanche, très rapidement l’équipe de Like a Bot a été confrontée à diverses problématiques. Sur le plan de l’infrastructure, ils avaient des problèmes de scalabilité, principalement au niveau de l’augmentation du nombre de modèles en production ou de la demande en ressources croissante liée à l’évolution des technologies NLP / NLU. Ils avaient également des inquiétudes quant à la résilience d’une telle architecture. Si l’instance Amazon EC2 tombe, toute la solution est indisponible le temps qu’une nouvelle instance Amazon EC2 puisse se relancer, télécharger les modèles depuis Amazon S3 et charger les modèles en RAM.

Cette architecture leur a néanmoins permis de répondre aux besoins variés des projets de leurs clients, avec un écueil cependant : il était impossible de rendre le processus de création, entraînement et d’amélioration continue du modèle transparent aux utilisateurs finaux, notamment pour améliorer les performances des Chatbots. De plus, les problèmes de scalabilité rendaient chaque ajout de modèle périlleux pour la stabilité de l’ensemble du système.

Par ailleurs, l’entraînement en local leur permettait d’avoir une souplesse sur le scripting permettant de faire plusier “Proofs of concept” (POCs) ou projets spécifiques via Jupyter Notebook. Malheureusement, ces travaux passaient difficilement en production, car l’architecture était trop rigide pour accueillir des projets aussi spécifiques.

En parallèle de ces sujets, Like a Bot a développé un outil d’annotation des phrases issues des Chatbots au sein de leur produit, Chatbot Builder : le gestionnaire du chatbot,  Chatbot Master, annote directement les données en fonction des intentions qu’il trouve dans les phrases. Ces données annotées sont ensuite contrôlées et réintégrées pour pouvoir après manuellement relancer l’entraînement des modèles pour améliorer ses performances.

Cette architecture imposait donc une intervention manuelle pour l’entraînement et la validation des performances. Une fois ces actions réalisées, l’équipe Like a Bot faisait un rapport à ses clients pour leur indiquer s’il fallait continuer à annoter des phrases ou si le modèle était apte à être mis en production. En général ces retours étaient trop abstraits, car ils n’étaient pas en mesure d’apporter des résultats suffisamment régulièrement pour que l’utilisateur puisse voir l’impact de ses annotations sur les performances des modèles.

Comment Amazon SageMaker a permis à Like a Bot de déployer des modèles NLP/NLU spécifiques avec souplesse et efficacité ?

Avant d’utiliser Amazon SageMaker, les instances Amazon EC2 de prédiction hébergeaient directement les modèles, et donc le code de ces instances dépendait directement de la technologie utilisée. Un changement de technologie impliquait donc de modifier le code du service (assez souvent connu comme “Model Serving“) de cette instance et imposait des mises en production fréquentes.

SageMaker a permis de résoudre ce problème via deux caractéristiques principales:

  • Compatibilité avec les architecture  Microservices : Amazon SageMaker permet d’exposer tout modèle entrainé peu importe sa nature (BERT, GPT, ResNet, LSTM, etc) via des endpoints accessibles via le protocole HTTP, ce qui permet de les intégrer facilement à d’autres services existants dans une architecture Microservices,
  • Création d’un Docker personnalisé : comme les technologies NLP/NLU évoluent régulièrement, l’équipe de Like a Bot avait besoin d’une méthode simple pour déployer différents types de modèles tout en se préservant de devoir changer tout le code de l’environnement. Pour pouvoir permettre aux utilisateurs d’utiliser les frameworks, les images et les scripts qu’ils souhaitent, Amazon Sagemaker s’appuie sur la technologie des conteneurs Docker. Il suffit de structurer le répertoire de travail de la façon suivante :
    • Un Dockerfile qui contient la définition de l’image du conteneur notamment, et en permettant l’installation des modules nécessaires,
    • Un fichier train qui contient les instructions pour la boucle d’entraînement du modèle et qui peut être dans plusieurs langages R, python, selon vos besoins,
    • Un fichier serve qui permet à Amazon SageMaker de comprendre comment faire des prédictions à partir d’un modèle et des inputs.

Une fois un conteneur construit, il suffit de le stocker sur Amazon Elastic Container Registry (Amazon ECR) afin de pouvoir le versionner et ensuite l’importer sur Sagemaker. On peut ensuite appeler les différentes méthodes API afin d’entraîner, valider et déployer le modèle à partir de ce conteneur. Une liste complète est disponible sur la documentation de SageMaker, mais vous allez sans doute utiliser certains appels API :

  • La méthode d’entraînement est CreateTrainingJob : ici, nous spécifions le jeu de données à utiliser, les hyperparamètres nécessaires, et la ou les instances que SageMaker va utiliser pour l’entraînement. SageMaker s’occupe de les allumer, copier les scripts et les données sur ces instances, exécuter ces scripts, stocker le modèle une fois l’entraînement terminé sur Amazon S3, et enfin éteindre les instances pour éviter de payer des ressources que ne sont plus utilisées. Le workflow se résume alors au diagramme suivant :

  • La dernière étape est de rendre disponible sur des endpoints gérés par Amazon SageMaker les modèles entraînés, de façon à ce qu’ils soient accessibles par des requêtes HTTP(S) et intégrables dans la plateforme via des microservices : pour cela, Amazon SageMaker expose l’API CreateModel et CreateEndpoint.

Comment SageMaker a permis à Like a Bot d’inclure leurs clients dans la phase d’amélioration continue ?

Revenons brièvement sur le module NLU intégré au module Chatbot Builder développé par Like a Bot. Il se compose de deux parties opérées par leurs clients :

  • La partie Teach qui permet de créer des labels. Grâce à l’interface de Teach, l’annotateur associe ces labels à des phrases, la répétition d’annotations par ces labels permet la création de datasets. Via ces datasets, le client entraîne une première version de modèles NLP.  Chaque modèle NLP est soumis à une évaluation classique pour laquelle sont fournis l’accuracy, la precision, le recall ainsi que la matrice de confusion. Tant que les scores de ces métriques ne sont pas satisfaisants, l’annotateur doit ajouter de nouveaux labels aux données pour améliorer ses modèles. Une fois les performances désirées atteintes, les modèles sont prêts à passer en production.

Dans cet exemple, grâce à la phase d’annotation au sein du modèle Teach, le client a pu créer divers labels et ceux-ci sont par la suite apposés aux phrases provenant de ses chatbots.

Dans cet exemple, grâce à la phase d’annotation au sein du modèle Teach, le client de Like a Bot a pu créer divers labels et ceux-ci sont par la suite apposés aux phrases provenant de ses chatbots.

  • La partie Check : Une fois les modèles en production, les prédictions positives des modèles remontent dans la partie Check du module NLU et sont validées par les clients de Like a Bot, comme étant « vrais positifs » ou « faux positifs », cela permet aux clients de rapidement améliorer les modèles en supprimant un maximum de faux positifs.

Ci-dessus une phase d’annotation Check sur le module NLU, où les prédictions des modèles remontent sur ce module et sont validées par le client.

Les données annotées dans les modules Teach et Check sont exploitées dans un pipeline de traitement global en 6 étapes :

Ci-dessus, un schéma d’orchestration des différentes briques constituantes de la création / amélioration d’un modèle NLP :

  1. Annotation via LikeaBotTeach : L’utilisateur va annoter des données via le module Teach de Like a bot, et pour chaque labels nous obtenons une liste de phrases associées. Dans le cadre d’une classification supervisée, nous utilisons les données positives d’un label comme exemples négatifs des autres labels,
  2. Entraînement d’un modèle, via l’API Training Job d’Amazan SageMaker : nous récupérons les datasets sur Amazon S3 pour entraîner une première version prototype du modèle, dont les performances sont souvent encore améliorables,
  3. Prédictions sur les données non-annotées via Batch Transform d’Amazon SageMaker : Après l’entraînement, nous faisons des prédictions sur les données non annotées, via un batch transform job, afin d’obtenir les prédictions sur ces données. Pendant cette phase de prédiction, le modèle est dans un état intermédiaire dit observateur, où il n’a pas d’impact sur le comportement du chatbot associé,
  4. Annotation via LikeaBot Check : Les prédictions positives remontent sur le module Check de module NLU de LikeaBot afin de proposer des annotations à l’utilisateur de la plateforme. Parmi les phrases, il y aura potentiellement des faux positifs résiduels à corriger avant une mise en production du modèle en question. Via le module Check, l’utilisateur peut donc corriger le comportement des modèles observateurs sans impacter le comportement du chatbot,
  5. Évaluation des performances : Via un tableau de bord, chaque modèle NLP est soumis à une évaluation classique où sont affichés l’accuracy, la precision, le recall ainsi que la matrice de confusion associée au modèle. Tant que les scores de ces métriques ne sont pas satisfaisant pour le client, les clients re-annotent des données (dans les modules Teach et Check) pour les améliorer. Une fois les performances désirées atteintes, les modèles sont prêts à passer en production,

À l’issue des précédentes étapes du processus, si les performances des modèles entraînés ne sont pas satisfaisantes, il est nécessaire d’entrer dans une phase itérative d’amélioration continue. Celle-ci consiste à répéter les tâches précédentes en ajoutant des données et en recommandant des prédictions susceptibles d’êtres des faux positifs. Plus un utilisateur avance dans la phase d’amélioration continue, moins il aura de données à ajouter dans le module LikeaBot Teach. Ce seront donc les modèles observateurs, automatiquement orchestrés par Amazon SageMaker, qui recommanderont des données susceptibles d’être des faux positifs depuis le module Check de LikeaBot. Cette évolution du processus permet de converger vers des performances satisfaisantes tout en optimisant la quantité de données à annoter.

  1. Mise en production, via CreateEndpoint d’Amazon SageMaker : Quand les performances d’un modèle sont suffisantes, l’annotateur peut passer un modèle en production, c’est à dire l’héberger sur Amazon SageMaker pour effectuer des prédictions à la volée. L’annotateur pourra ainsi configurer ses chatbots en conséquence en adaptant le comportement de ce dernier en fonction de l’intention entraînée.

En facilitant ainsi l’automatisation de l’entraînement, l’amélioration continue via BatchTransform et les prédictions en temps réél, Amazon SageMaker permet aux annotateurs non-initiés au machine learning et au traitement du langage naturel d’être impliqués dans un processus d’amélioration continue de modèles NLP/NLU, de façon à ce que ce soit eux qui aient la main sur l’évolution de leurs modèles.

Conclusion

L’utilisation d’Amazon SageMaker a permis à Like a Bot de diviser par 4 le temps de mise au point de modèles NLP/NLU en fluidifiant la phase d’amélioration continue : de 8 semaines en moyenne avant l’intégration d’Amazon SageMaker à 2 semaines actuellement. Cela leur a également permis également de faciliter les changements de technologie et de modèles, notamment pour se tenir à jour sur les dernières nouveautés dans le domaine du NLP/NLU.

Grâce à Amazon SageMaker, l’équipe a aussi pu totalement redéfinir des fonctionnalités pour les phases d’entraînement et validation, en apportant des possibilités dont ils avaient besoin pour mettre à disposition de leurs clients les meilleurs outils pour résoudre leurs problèmes. Sans Amazon SageMaker et le cloud AWS tout ceci n’aurait pas été possible sans une perte conséquente de temps, de ressources humaines, et d’argent.

La nature éphémère des tâches d’entraînement et de validation de dataset (via Batch Transform) leur a permis de pouvoir utiliser des instances puissantes et plus coûteuses uniquement pour le temps strictement nécessaire pour compléter ces tâches. Grâce à cela, Like a Bot a pu réduire considérablement leurs coûts d’entraînement et de validation. Le coût total d’utilisation de telles instances reste donc relativement faible. De plus pour la prédiction en temps réel, Amazon SageMaker propose des instances à faible coût (ml.t2.medium et ml.t2.large, par exemple) qui n’ont pas de GPU mais qui permettent d’avoir des coûts d’hébergement comparable aux instances Amazon EC2 analogues. Cela est parfaitement adapté à la problématique du calcul en temps réel, qui ne nécessite pas une puissance de calcul très élevée, mais où l’instance doit être disponible 24 h/24.

Ainsi, l’équipe Like a Bot a globalement ajouté des fonctionnalités et amélioré les performances de leur plateforme tout en gardant une totale maîtrise des coûts d’infrastructure et de l’hébergement des modèles; ces coûts ont été réduits par rapport à l’infrastructure initiale. Et pour le reste de l’infrastructure, le coût d’allocation des instances reste très faible car ils utilisent celles-ci sur de très courtes durées.

Cerise sur le gâteau : en leur permettant de développer un processus d’amélioration continue aussi complet et flexible, Amazon SageMaker leur a également permis de faciliter le travail d’annotation des données en faisant des suggestions d’annotations au module Chatbot Master. Cela leur a permis de gagner du temps et d’améliorer beaucoup plus rapidement les performances de ses modèles grâce au chatbot builder de Like a Bot. Tout le monde est donc gagnant !

A propos des auteurs

Pierrick Filippi est le co-fondateur de Like a Bird et Like a Bot et occupe le poste de CTO. Il pilote le développement de la plateforme SaaS Like a Bot Builder qui permet de construire des agents conversationnels s’appuyant des algorithmes d’intelligence artificielle pour faciliter la compréhension du langage naturel.

Enzo Lebrun est Data Scientist chez Like A Bot, spécialisé dans les traitements et l’analyse du langage naturel appliqué aux agents conversationnels.

Davide Gallitelli est un Solutions Architect Spécialiste en Machine Learning et Intelligence Artificielle. Il travaille avec des clients de toutes tailles partout en Europe afin de trouver des solutions techniques aux problématiques business spécifiques au domaine du Machine Learning.