Tech Talk: e-mailclassificatie automatiseren met AWS

Thumbnail van blogartikel: Tech Talk: e-mailclassificatie automatiseren met AWS

Een automatisch e-mailclassificatiemodel voor een klant implementeren en met AWS in productie brengen.

Een automatisch e-mailclassificatiemodel voor een klant implementeren en met AWS in productie brengen.

Een groot bedrijf met veel klanten, zoals een bank, verzekeraar, ziekenfonds of overheidsdienst, ontvangt dagelijks enorm veel e-mails. Die komen meestal binnen op een algemeen contactadres. Vervolgens worden ze manueel ingedeeld om ze naar de bevoegde afdeling te sturen en te verwerken. Voor dit project zocht het bedrijf een slimmere aanpak met automatische e-mailclassificatie.

De manuele classificatie vormt een knelpunt in de klantendienst. Het helpt niet dat afdelingen klantvragen snel behandelen als het doorsturen eindeloos duurt. Automatische e-mailclassificatie kan de klantendienst daarom efficiënter maken en zo de klanttevredenheid verhogen.

Dit artikel beschrijft hoe we voor een klant een e-mailclassificatiemodel implementeerden en in productie brachten met Amazon Web Services (AWS). Het doel was inkomende e-mails in twee categorieën in te delen. Het probleem: er was geen historiek van geclassificeerde e-mails. Wel waren er 1,5 miljoen geclassificeerde opmerkingen van de telefonische klantendienst. Die waren al in categorieën ingedeeld en konden als vervangende trainingsdata voor de e-mails dienen.

Hoe werd het model getraind?

We kozen voor Naïve Bayes voor deze tekstclassificatie, omdat het snel voorspellingen maakt en goed werkt wanneer het op veel data is getraind.

Voordat we tekst aan Naïve Bayes geven, moeten we die omzetten in numerieke data. We gebruikten daarvoor term frequency-inverse document frequency (TF-IDF). Om veelvoorkomende Franse woorden niet te zwaar te laten wegen, krijgt TF-IDF een lijst Franse stopwoorden uit de Spacy-bibliotheek die het buiten beschouwing moet laten.

Vervolgens gebruikten we randomized search cross-validation om de beste parameters te vinden voor de pipeline van TF-IDF gevolgd door Naïve Bayes. De accuracy op e-mails lag rond 80%, hoewel we het model op opmerkingen van de telefonische klantendienst trainden. Het model leerde het sectorjargon uit die opmerkingen en paste die kennis toe op de e-mails.

Hoe brengt u het model in productie in AWS?

AWS bundelt alle middelen om een model te draaien in een stack. Die ene eenheid kan netwerkregels, beveiligingsregels, databases en rekencapaciteit bevatten. Een stack per toepassing of model is een best practice. Het volgende schema toont de architectuur:

De AWS-architectuur voor automatische e-mailclassificatie

Kort samengevat verloopt het proces zo:

  1. De data engineer plaatst de te classificeren e-mail als .parquet-bestand in de inputbucket. We kunnen de stack ook testen met een voorbeeldmail die de lambda trial genereert.

  2. Een event detecteert het nieuwe bestand en stuurt de metadata naar de lambda trigger.

  3. De lambda trigger haalt de assetnaam uit de bestandsnaam en vraagt de bijbehorende asset stack om de data in de inputbucket te verwerken.

  4. De asset stack verwerkt de data en schrijft de voorspellingen naar de outputbucket.

  5. De data engineer laadt die output vervolgens in het Enterprise Data Warehouse.

De hoofdstack bevat de lambda trial, de lambda trigger, de input- en outputbucket, het netwerk en de rekenmiddelen.

Dieper in de AWS-architectuur voor automatische e-mailclassificatie

We bekijken hoe die onderdelen samenhangen en samen worden opgebouwd. De beschrijving volgt de uitvoeringsvolgorde. Het eerste beschreven onderdeel wordt dus ook als eerste door de code uitgevoerd.

App.py voor automatische e-mailclassificatie

De uitvoering begint met een script, app.py, dat de stacks aanroept. Eerst stelt het de basisconfiguratie voor de omgeving en de tags voor elke stack in. Een basisconfiguratie is een dictionary waarmee AWS de toepassing identificeert:

  • Stage: de ontwikkelfase (dev, test, prod)

  • Region

  • App name

  • Account id

  • Account name

Het script roept eerst MainStack aan, die de middelen voor de andere stacks inricht.

MainStack voor automatische e-mailclassificatie

MainStack richt de volgende onderdelen in:

  • Input-, output- en configuratiebucket

  • Virtual private cloud (VPC) en subnetten

  • Rekenmiddelen

  • Jobwachtrij

  • Lambda trial en Lambda triggers

De buckets worden opgebouwd met account-id, appnaam en ontwikkelfase. Er komen dus meerdere buckets, afhankelijk van het aantal gedefinieerde fasen. U houdt ontwikkeling, test en productie best zoveel mogelijk gescheiden.

Bij de rekenmiddelen kunnen we bepalen hoeveel CPU's we minimaal en maximaal aan de stacks willen toewijzen.

De jobwachtrij gebruikt de VPC, subnetten en rekenmiddelen die werden geïnitialiseerd. Ze plaatst jobs in de wachtrij en voert die met de hoogste prioriteit uit.

De lambda trial maakt een parquet-testbestand in de inputbucket om de stacks te testen. De lambda trigger verstuurt vervolgens een job op basis van de bestandskey en bucket uit het event. De hoofdstack moet ook een rolbeleid aan elke lambda toevoegen en de bucketbron aan de lambda trigger koppelen.

Daarnaast moeten de lambdafuncties toegang tot de buckets krijgen. Anders kunnen ze er geen acties op uitvoeren.

Middelen en stappen van de e-mailstack voor automatische classificatie

Een Docker-image verpakt elke stack in een container. Binnen de stackklasse definiëren we deze middelen:

  • Docker image asset

  • Logconfiguratie: zorgt dat de logs in CloudWatch terechtkomen.

  • Jobrol: geeft de job toegang tot andere AWS-middelen.

  • Job definition container: een wrapper rond de Docker image assets.

  • Jobdefinitie: definieert de job op basis van de Job definition container, de rol en de logs.

De Docker-image bevat de scripts die in de container worden uitgevoerd. We kunnen de stack in deze stappen samenvatten:

  1. Een contextdictionary maken met omgevings- en configuratiegegevens

  2. De inputdata ophalen uit de inputbucket

  3. Het model uit zijn bucket ophalen

  4. Controleren of de inputdata het juiste formaat en de juiste kolommen hebben.

  5. Met het model de categorieën van de inputdata voorspellen.

  6. Een dataframe maken met de voorspelde categorieën van de inputdata

  7. Het outputdataframe naar de outputbucket uploaden

Meer over de configuratie van de e-mailstack

Alle stacks halen eerst de omgevings- en configuratievariabelen op. Ze plaatsen die in een dictionary die tussen de stackfuncties wordt doorgegeven. De omgevingsvariabelen bevatten de inputbucket, outputbucket en bestandskey. De configuratievariabelen bevatten statische informatie, zoals de modelkey of modelnaam. Om met Python data uit een AWS-bucket op te halen, gebruiken we de boto3-bibliotheek.

De inputdata telden ongeveer 1 miljoen rijen. Uw EC2 (Elastic Container 2) kan een geheugenfout geven als er niet genoeg geheugen is om alles tegelijk te verwerken. De oplossing is uw data in kleinere stukken te verdelen. Daarna kunt u uw voorbewerkingsfunctie toepassen. Om die voorbewerking te versnellen, raden we de vectorisatiefunctie van NumPy aan.

Conclusie

Proficiat! U hebt nu een volledig beeld van hoe u een classificatiemodel in AWS uitrolt. Het automatische e-mailclassificatiemodel uit ons voorbeeld verwerkt in productie ongeveer 500.000 e-mails per dag. Stel u voor wat uw bedrijf met die capaciteit kan doen.


Klaar om uw doelen met data te bereiken?

Wilt u uw doelen bereiken door data en AI slimmer te gebruiken? Dan bent u hier op de juiste plek.

Klaar om uw doelen te bereiken met data?

Wilt u uw doelen bereiken door data en AI slimmer te gebruiken? Dan bent u hier op de juiste plaats.

Klaar om uw doelen te bereiken met data?

Wilt u uw doelen bereiken door data en AI slimmer te gebruiken? Dan bent u hier op de juiste plaats.

Klaar om uw doelen te bereiken met data?

Wilt u uw doelen bereiken door data en AI slimmer te gebruiken? Dan bent u hier op de juiste plaats.

© 2026 Agilytic

© 2026 Agilytic