4. E-Mail-Klassifikation mithilfe des BART-Models

4.1. Einleitung

Im dritten Versuch des DVA-Praktikums wurde eine Anwendung zur automatischen Kategorisierung von E-Mails entwickelt. Ziel ist es, eingehende Nachrichten anhand ihres Inhalts einer vordefinierten Kategorie zuzuordnen und anschließend automatisiert in entsprechende IMAP-Ordner zu verschieben.

Zum Einsatz kommt hierbei ein sogenannter Zero-Shot-Classifier, der auf einem vortrainierten Sprachmodell basiert und Texte ohne zusätzliches Training klassifizieren kann. Zusätzlich wird ein IMAP-Client genutzt, um mit dem SOGO-Mailserver zu kommunizieren und Nachrichten zu verarbeiten.

4.2. Modulübersicht

Die Anwendung besteht aus folgenden Modulen:

  • EmailClassifier: Führt die Klassifikation auf Basis eines vortrainierten Modells durch (facebook/bart-large-mnli)

  • Konfiguration: Zugangsdaten werden über eine TOML-Datei verwaltet

  • Sogo: Ein Client zur Verbindung mit dem IMAP-Mailserver (HS-Augsburg)

  • Main-Skript: Steuert den Ablauf – Verbindungsaufbau, Klassifikation, ggf. Verschieben der Mails

4.3. IMAP

IMAP (Internet Message Access Protocol) ist ein Standardprotokoll zum Abrufen von E-Mails von einem Mailserver. Im Gegensatz zu POP3, bei dem E-Mails standardmäßig vom Server gelöscht und lokal gespeichert werden, verbleiben bei IMAP die Nachrichten auf dem Server, bis der Nutzer sie löscht.

Das ermöglicht die Synchronisation und den gleichzeitigen Zugriff über mehrere Geräte hinweg.

Vorteile:

  • Zentrale Speicherung auf dem Server

  • Ideal für Multi-Device-Nutzung

  • Ordner- und Status-Synchronisation (z. B. „Moodle“, „Claudia Bäurle“)

  • Kein Datenverlust bei Gerätewechsel

4.4. BART – Zero-Shot-Learning für Sprache

BART (Bidirectional and Auto-Regressive Transformers) ist ein transformerbasiertes Sprachmodell, das von Facebook AI entwickelt wurde. Es kombiniert zwei Architekturprinzipien:

  • Den bidirektionalen Encoder ähnlich wie BERT, der den Kontext in beide Richtungen analysiert

  • Den auto-regressiven Decoder wie GPT, der Text generiert

BART eignet sich dadurch gut für Aufgaben wie Textzusammenfassung, Klassifikation, Fragebeantwortung und Zero-Shot-Learning.

Vorteile:

  • Hohe Genauigkeit bei komplexen NLP-Aufgaben

  • Einsetzbar um neue Aufgaben ohne spezifisches Training zu lösen (Zero-Shot)

  • Unterstützt lange Kontexte und komplexe Sprachmuster

  • Gute Transferierbarkeit auf viele Textarten, z. B. E-Mails

4.5. Einsatz von Zero-Shot-Klassifikation

Die Klassifikation erfolgt mit einem Modell aus der HuggingFace-Transformers-Bibliothek. Hierbei wird ein vortrainiertes Modell verwendet, das Wahrscheinlichkeiten für vordefinierte Labels zurückgibt. Das Modell ist in der Lage, Texte zu klassifizieren, ohne dass es zuvor auf die spezifischen Kategorien trainiert wurde.

from transformers import pipeline

class EmailClassifier:

    def __init__(self,
                candidate_labels: list[str],
                model_name: str = "facebook/bart-large-mnli"):
        self.zero_shot = pipeline(
            "zero-shot-classification",
            model=model_name,
            device=-1
        )
        self.labels = candidate_labels

    def classify(self, text: str) -> dict:

        result = self.zero_shot(text, self.labels)
        return {
            "sequence": result["sequence"],
            "labels": result["labels"],
            "scores": result["scores"],
        }

Das Modell bewertet den Text anhand der angegebenen Labels – „Montagsmail“, „Moodle“ oder „Claudia Bäurle“ – und gibt eine Score-Verteilung zurück. [huggingface.co]

4.6. Verbindung zum E-Mail-Server

Die Klasse Sogo übernimmt die Anbindung an den Mailserver via IMAP.

class Sogo:
    def __init__(self, user, password):
        ...
        self.mail = self.connect_imap()

    def connect_imap(self):
        mail = imaplib.IMAP4_SSL(IMAP_HOST, IMAP_PORT)
        mail.login(self.user, self.password)
        return mail

    def fetch_emails(self, folder="INBOX", limit=10):
        ...

    def parse_email(self, raw_email):
        ...

    def move_email(self, msg_id, dest_folder, source_folder="INBOX"):
        ...

    def logout(self):
        self.mail.logout()
  • fetch_emails: Ruft eine definierte Anzahl von E-Mails ab (UID-basiert)

  • parse_email: Extrahiert Metadaten (Betreff, Absender, Body) aus der rohen Nachricht

  • move_email: Verschiebt eine klassifizierte Nachricht in einen Ordner

  • logout: Trennt die Verbindung zum Server

4.7. Konfiguration des Zugangs

Die Zugangsdaten müssen in einer separaten config.toml-Datei angegeben werden:

[credentials]
user = "username"
password = "password"

Deren Laden erfolgt über das Modul tomllib.

4.8. Fazit

Dieses Projekt zeigt, wie sich moderne NLP-Technologie mit klassischen Netzwerkprotokollen wie IMAP kombinieren lassen, um in einer praktischen Anwendung genutzt zu werden. Ein großer Vorteil ist die Flexibilität des Zero-Shot-Ansatzes – neue Kategorien können jederzeit genutzt werden, ohne ein neues Modell anlernen zu müssen.

4.9. Literaturangaben

[huggingface.co]

Hugging Face – Transformers-Bibliothek https://huggingface.co/docs/transformers/index