Tech Talk: Hoe e-mailclassificatie automatiseren met AWS

Een groot bedrijf met veel klanten, zoals een bank, een verzekeringsmaatschappij, een onderlinge verzekeringsmaatschappij, een overheidsinstelling, etc., ontvangt dagelijks een enorme hoeveelheid e-mails van hun klanten. De e-mails worden bijvoorbeeld meestal naar een algemeen contactadres gestuurd. Vervolgens worden de e-mails handmatig geclassificeerd zodat ze kunnen worden verzonden en verwerkt door de bevoegde afdeling. Met dit project ging het bedrijf op zoek naar een slimmere manier om e-mail automatisch te classificeren.

De handmatige classificatie vormt een knelpunt in de klantenservicestroom. Het maakt niet uit of de afdelingen snel zijn met het verwerken van klantverzoeken als het een eeuwigheid duurt om ze te verwerken. Daarom kan een geautomatiseerde e-mailclassificatie de efficiëntie van de klantenservice verhogen en daarmee ook de klanttevredenheid.

Dit artikel behandelt de aanpak om een e-mailclassificatiemodel te implementeren voor een van onze klanten en om het model in productie te nemen met Amazon Web Services(AWS). Het doel was om inkomende e-mails te classificeren in twee categorieën. Het probleem was dat er geen historische classificatie van e-mails was. Er was echter wel een geschiedenis van 1,5 miljoen geclassificeerde opmerkingen van het telefonische servicecentrum. Deze opmerkingen waren al geclassificeerd in categorieën om te worden gebruikt als een proxy voor de e-mails.

Hoe is het model getraind?

We hebben besloten om Naïve Bayes te gebruiken voor deze tekstclassificatietaak omdat het snel voorspellingen doet en goed werkt als het getraind is op veel gegevens.

Voordat we de ingevoerde tekst naar Naïve Bayes sturen, moeten we de tekst eerst omzetten in numerieke gegevens. Daarom gebruikten we de termfrequentie-inverse documentfrequentie(TF-IDF) methode om de tekst om te zetten in numerieke gegevens. Om te voorkomen dat er te veel gewicht wordt toegekend aan veelvoorkomende Franse woorden, ontvangt TF-IDF een lijst met Franse stopwoorden (uit de Spacy-bibliotheek) waarmee het geen rekening moet houden.

Vervolgens gebruikten we randomized search kruisvalidatie om de beste parameters te vinden voor de pijplijn gemaakt door TF-IDF en gevolgd door Naïve Bayes. De nauwkeurigheid op e-mails was ongeveer 80%, zelfs als we het model trainden op opmerkingen van het telefoonservicecentrum. Het model leerde sectorspecifiek jargon uit deze commentaren en bracht de kennis over op de e-mails.

Hoe zet ik het model in productie in AWS?

AWS biedt alle middelen om een model uit te voeren in een stack. Deze enkele eenheid kan de netwerkregels, beveiligingsregels, databases en rekenbronnen bevatten om je model uit te voeren. Het is de beste gewoonte om een stack per use case/model te gebruiken. Het volgende schema definieert de architectuur:

De architectuur van AWS voor geautomatiseerde e-mailclassificatie

In het kort ziet het proces er als volgt uit:

  1. De data engineer plaatst de te classificeren e-mail als een .parquet bestand in de input bucket. We kunnen de stack ook testen met een voorbeeld van een e-mail die door de lambda-proef wordt gegenereerd.

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

  3. De lambda-trigger krijgt de asset-naam aan de hand van de bestandsnaam. Vervolgens wordt de bijbehorende asset stack gevraagd om de gegevens in de invoeremmer te verwerken.

  4. De asset stack verwerkt de voorspellingen en voert ze uit in de output bucket.

  5. De data engineer laadt deze uitvoer vervolgens in het Enterprise Data Warehouse.

De hoofdstapel bevat de lambda trial, de lambda trigger, de input/output bucket, het netwerk en de rekenbronnen.

Diepe duik in een AWS-architectuur voor geautomatiseerde e-mailclassificatie

Laten we eens kijken hoe deze componenten samenhangen en zijn opgebouwd! De volgorde van uitvoering structureert de beschrijvingen van de componenten. Het eerste element dat wordt beschreven, is het eerste element dat wordt uitgevoerd door de code.

App.py voor automatische e-mailclassificatie

De uitvoering begint met een script (app.py genaamd) dat als doel heeft om de stacks aan te roepen. Het moet eerst de basisconfiguraties instellen die worden gebruikt om de omgeving en de tags voor elke stack te bouwen. Een basisconfiguratie is een woordenboek dat AWS gebruikt om de applicatie te identificeren:

  • Stadium: Het stadium van ontwikkeling (dev, test, prod)

  • Regio

  • Naam app

  • Account-id

  • Accountnaam

Het roept eerst de MainStack aan, die de bronnen voor de andere stacks instelt.

MainStack voor geautomatiseerde e-mailclassificatie

Het MainStack stelt de volgende elementen in:

  • Emmer voor invoer, uitvoer en configuratie

  • Virtuele privécloud (VPC) en subnetten

  • Computermiddelen

  • Vacature wachtrij

  • Lambda-proef en lambda-triggers

De buckets worden opgebouwd aan de hand van de account-id, de app-naam en het stadium. Dit betekent dat we meerdere buckets aanmaken, afhankelijk van het aantal gedefinieerde stages. Het is beter om de ontwikkel-, test- en productiefasen zoveel mogelijk te scheiden.

De computermiddelen kunnen het minimum en maximum aantal CPU's definiëren dat we willen toewijzen aan de stacks.

De jobwachtrij gebruikt de VPC, subnetten en de geïnitialiseerde computermiddelen zelf. Het doel is om taken in een wachtrij te plaatsen en de taak met de hoogste prioriteit uit te voeren.

De lambda trial heeft als doel een testparketbestand aan te maken in de input bucket om de stacks te testen. Vervolgens stuurt de lambda-trigger een opdracht met de sleutelnaam van het bestand en de emmer van de gebeurtenis. Bovendien moet de hoofdstapel ook rolbeleid toevoegen aan elke lambda en de bron van de emmer aan de lambda-trigger.

Daarnaast is het essentieel om emmerpermissies toe te kennen aan de lambdas-functie. Anders kunnen ze geen acties uitvoeren met de emmers.

Hulpmiddelen en stappen voor automatische e-mailclassificatie

Een docker image 'containeriseert' elke stack. We definiëren de volgende bronnen binnen de stackklasse:

  • Docker-afbeelding

  • Log configuratie: Deze zorgt ervoor dat de logs in CloudWatch komen.

  • Taakrol: Hiermee wordt toestemming verleend aan de taak om toegang te krijgen tot andere AWS-bronnen.

  • Container voor taakdefinitie: een wrapper rond de docker image assets.

  • Taakdefinitie: Hiermee wordt de taak gedefinieerd met behulp van de container Taakdefinitie, de rol en de logboeken.

De docker image bevat de scripts die in de container moeten worden uitgevoerd. We kunnen de stack in de volgende stappen samenvatten:

  1. Maak een contextwoordenboek van de omgevings- en configuratie-informatie

  2. Haal de invoergegevens uit de invoeremmer

  3. Haal het model uit de emmer

  4. Controleer of de invoergegevens de juiste indeling en kolommen hebben.

  5. Gebruik het model om de categorieën van de invoergegevens te voorspellen.

  6. Maak een dataframe met de voorspelde categorieën van de invoergegevens

  7. Upload het uitvoergegevensframe naar de uitvoerbak

Meer over de configuratie van de e-mailstapel

Alle stacks beginnen met het ophalen van de omgevingsvariabelen en de configuratievariabelen. De variabelen worden in een woordenboek gezet dat wordt doorgegeven tussen de functies van de stacks. De omgevingsvariabelen bevatten de invoerbak, de uitvoerbak en de bestandssleutel. De configuratievariabelen bevatten variabelen met statische informatie, zoals de sleutel van het model of de modelnaam. Om de gegevens van een emmer in AWS op te halen met Python, gebruiken we de boto3 bibliotheek.

De invoergegevens bestonden uit ongeveer 1 miljoen rijen. Je (Elastic Container 2) EC2 kan een geheugenfout geven omdat er niet genoeg geheugen is om die hoeveelheid gegevens in één keer te verwerken. De oplossing is dus om je gegevens in kleinere brokken te verdelen. Vervolgens kunt u uw preprocessing-functie toepassen op uw gegevens. Om de voorbewerkingstijd te versnellen, raden we aan de vectorisatiefunctie van NumPy te gebruiken.

Conclusie

Gefeliciteerd! Je hebt nu het complete plaatje van het implementeren van een classificatiemodel in AWS. In ons voorbeeld verwerkt het geautomatiseerde e-mailclassificatiemodel dat we in productie hebben genomen dagelijks ongeveer 500.000 e-mails. Stelt u zich eens voor wat uw bedrijf zou kunnen doen met een dergelijke capaciteit.

Vorige
Vorige

Tech Talk: Hoe documentfoutdetectie uit vergoedingsaanvragen automatiseren

Volgende
Volgende

Waarom segmentering een comeback maakt