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 Nachrichtmove_email: Verschiebt eine klassifizierte Nachricht in einen Ordnerlogout: 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¶
Hugging Face – Transformers-Bibliothek https://huggingface.co/docs/transformers/index