Tech Talk : Comment automatiser la classification des courriels avec AWS
Une grande entreprise ayant de nombreux clients, telle qu'une banque, une assurance, une mutualité, une administration publique, etc., reçoit quotidiennement un grand nombre de courriels de ses clients. Par exemple, les courriels sont généralement envoyés à une adresse de contact générale. Ensuite, les courriels sont classés manuellement afin d'être envoyés et traités par le service compétent. Dans le cadre de ce projet, l'entreprise a commencé à chercher une solution plus intelligente pour la classification automatisée des courriels.
La classification manuelle constitue un goulot d'étranglement dans le flux de l'assistance à la clientèle. Il importe peu que les services soient rapides pour traiter les demandes des clients s'il faut des heures pour les traiter. Par conséquent, une classification automatisée des courriels peut accroître l'efficacité de l'assistance à la clientèle et, par conséquent, la satisfaction des clients.
Cet article présente l'approche adoptée pour mettre en œuvre un modèle de classification des courriels pour l'un de nos clients et pour mettre le modèle en production avec Amazon Web Services(AWS). L'objectif était de classer les courriels entrants en deux catégories. Le problème était qu'il n'y avait pas d'historique de classification des emails. En revanche, il existait un historique de 1,5 million de commentaires classés provenant du centre de service téléphonique. Ces commentaires ont déjà été classés en catégories pour servir de substitut aux courriels.
Comment le modèle a-t-il été formé ?
Nous avons décidé d'utiliser Naïve Bayes pour cette tâche de classification de texte, car elle est rapide pour faire des prédictions et fonctionne bien lorsqu'elle est entraînée sur un grand nombre de données.
Avant d'envoyer un texte d'entrée à Naïve Bayes, nous devons d'abord transformer le texte en données numériques. Nous avons donc utilisé la méthodeTF-IDF (term frequency-inverse document frequency) pour transformer le texte en données numériques. Pour éviter de donner trop de poids aux mots français courants, la méthode TF-IDF reçoit une liste de mots vides (provenant de la bibliothèque Spacy) qu'elle ne doit pas prendre en compte.
Ensuite, nous avons utilisé la validation croisée par recherche aléatoire pour trouver les meilleurs paramètres pour le pipeline réalisé par TF-IDF et suivi par Naïve Bayes. La précision sur les courriels était d'environ 80 %, même si nous l'avons entraîné sur les commentaires du centre de service téléphonique. Le modèle a appris le jargon spécifique au secteur à partir de ces commentaires et a transféré ces connaissances dans les courriels.
Comment mettre le modèle en production dans AWS ?
AWS fournit toutes les ressources nécessaires à l'exécution d'un modèle dans une pile. Cette unité unique peut inclure les règles de mise en réseau, les règles de sécurité, les bases de données et les ressources de calcul pour exécuter votre modèle. La meilleure pratique consiste à utiliser une pile par cas d'utilisation/modèle. Le schéma suivant définit l'architecture :
En bref, le processus est le suivant :
L'ingénieur des données place le courrier électronique à classer sous forme de fichier .parquet dans le seau d'entrée. Nous pouvons également tester la pile à l'aide d'un échantillon de courrier électronique généré par l'essai lambda.
Un événement détecte ce nouveau fichier et envoie les métadonnées du fichier au déclencheur lambda.
Le déclencheur lambda obtient le nom de l'actif à l'aide du nom du fichier. Il demande ensuite à la pile d'actifs correspondante de traiter les données dans le bac d'entrée.
La pile d'actifs traite et produit les prédictions dans le panier de sortie.
L'ingénieur des données chargera ensuite ce résultat dans l'entrepôt de données de l'entreprise.
La pile principale comprend l'essai lambda, le déclencheur lambda, le seau d'entrée/sortie, le réseau et les ressources informatiques.
Plongée dans une architecture AWS pour la classification automatisée des courriels
Voyons comment ces composants sont liés et construits ensemble ! L'ordre d'exécution structure les descriptions des composants. Le premier élément décrit est le premier élément à être exécuté par le code.
App.py pour la classification automatisée des courriels
L'exécution commence par un script (appelé app.py) qui a pour but d'appeler les piles. Il doit d'abord mettre en place les configurations de base utilisées pour construire l'environnement et les tags pour chaque stack. Une configuration de base est un dictionnaire qu'AWS utilise pour identifier l'application :
Stade : Le stade de développement (dev, test, prod)
Région
Nom de l'application
Identifiant du compte
Nom du compte
Il appelle d'abord la pile principale, qui mettra en place les ressources pour les autres piles.
MainStack pour la classification automatisée des courriels
La pile principale met en place les éléments suivants :
Seau d'entrée, de sortie et de configuration
Nuage privé virtuel (VPC) et sous-réseaux
Ressources informatiques
File d'attente
Essai Lambda et déclencheurs Lambda
Les groupes sont constitués à partir de l'identifiant du compte, du nom de l'application et de l'étape. Cela signifie que nous créerons de multiples groupes en fonction du nombre d'étapes définies. Il est préférable de séparer autant que possible les phases de développement, de test et de production.
Les ressources informatiques peuvent définir le nombre minimum et maximum de CPU que nous souhaitons allouer aux piles.
La file d'attente des travaux utilise le VPC, les sous-réseaux et les ressources de calcul qu'elle a elle-même initialisés. Son objectif est de mettre en file d'attente les travaux et d'exécuter celui qui a la priorité la plus élevée.
L'essai lambda vise à créer un fichier parquet de test dans le seau d'entrée afin de tester les piles. Ensuite, le déclencheur lambda envoie un travail en utilisant le nom de la clé du fichier et le seau de l'événement. En outre, la pile principale doit également ajouter une politique de rôle à chaque lambda et la source du seau au déclencheur lambda.
En outre, il est essentiel d'accorder des autorisations sur les buckets à la fonction lambdas. Dans le cas contraire, elle ne peut pas effectuer d'actions avec les buckets.
Ressources et étapes de la pile de courriels pour la classification automatisée des courriels
Une image docker "conteneurise" chaque pile. Nous définissons les ressources suivantes dans la classe de la pile :
Image Docker
Configuration du journal : Elle permet de s'assurer que les journaux seront dans CloudWatch.
Rôle de l'emploi : Il autorise l'emploi à accéder à d'autres ressources AWS.
Conteneur de définition des tâches : une enveloppe autour des actifs de l'image Docker.
Définition du travail : Elle définit le travail à l'aide du conteneur de définition du travail, du rôle et des journaux.
L'image docker contient les scripts à exécuter dans le conteneur. Nous pouvons résumer la pile par les étapes suivantes :
Créer un dictionnaire contextuel composé des informations relatives à l'environnement et à la configuration
Récupérer les données d'entrée dans le bac d'entrée
Récupérer le modèle dans son bac
Vérifier si les données d'entrée ont le bon format et les bonnes colonnes.
Utilisez le modèle pour prédire les catégories des données d'entrée.
Créer un cadre de données avec les catégories prédites des données d'entrée
Chargement du cadre de données de sortie dans le bac de sortie
En savoir plus sur la configuration de la pile de courrier électronique
Toutes les piles commencent par récupérer les variables d'environnement et de configuration. Elles placent ces variables dans un dictionnaire qui sera transmis entre les fonctions des piles. Les variables d'environnement contiennent le seau d'entrée, le seau de sortie et la clé du fichier. Les variables de configuration comprennent des variables contenant des informations statiques, telles que la clé ou le nom du modèle. Pour récupérer les données d'une base de données dans AWS à l'aide de Python, nous utilisons la fonction boto3 pour récupérer les données d'un seau dans AWS à l'aide de Python.
Les données d'entrée sont composées d'environ 1 million de lignes. Votre (Elastic Container 2) EC2 pourrait produire une erreur de mémoire parce qu'il n'y a pas assez de mémoire pour traiter cette quantité de données en une seule fois. La solution consiste donc à découper vos données en morceaux plus petits. Ensuite, vous pouvez appliquer votre fonction de prétraitement à vos données. Pour accélérer le temps de prétraitement, nous recommandons d'utiliser la fonction de vectorisation fournie par NumPy.
Conclusion
Félicitations ! Vous avez maintenant une vue d'ensemble du déploiement d'un modèle de classification dans AWS. Dans notre exemple, le modèle de classification automatisée des courriels que nous avons mis en production traite environ 500 000 courriels par jour. Imaginez ce que votre entreprise pourrait faire avec une telle capacité.