Wissensextraktion
Warum dieser Schritt
Warum benannte Entitäten erkennen
Die Klassifikation hat die Email in eine Kategorie eingeordnet. Jetzt geht die Pipeline einen Schritt tiefer und zieht Namen, Dinge und Zahlen aus dem Text.
Eine Email enthält oft konkrete Bezugspunkte: einen Ansprechpartner, eine Firma, eine Rechnungsnummer, einen Termin. Diese Bezugspunkte heißen in der Welt der Sprachverarbeitung "benannte Entitäten". Sie aus dem Text herauszuziehen und als eigenständige Datensätze zu speichern, ist die Aufgabe des nächsten Pipeline-Schritts. Dieses Unterkapitel zeigt, was so eine Entität überhaupt ist, wozu das System sie braucht, welche Typen erkannt werden und wann der Schritt gar nicht erst aktiv wird.
Was eine Entität ist
Stellt man sich eine Email vor als eine Wand aus Text, sind Entitäten die kleinen Schilder, die einzelne Stellen markieren: "hier steht ein Personenname", "hier steht eine Firma", "hier steht ein Geldbetrag". Für jedes Schild merkt sich das System zwei Dinge: den genauen Text, der dort steht, und den Typ des Schilds.
Beispiel: Eine Email enthält den Satz "Die Rechnung 2025-0042 von der Firma Müller GmbH über 1.250 Euro ist eingetroffen." Daraus zieht der Schritt drei Entitäten: 2025-0042 vom Typ Rechnungsnummer, Müller GmbH vom Typ Organisation, 1.250 Euro vom Typ Geldbetrag. Drei Schilder, drei Datensätze in der entities-Tabelle.
Wozu Entitäten in dieser Pipeline
Klassifikation und Thread-Zuordnung waren grobe Sortierungen. Entitäten gehen feiner: sie geben jeder Email konkrete Anker, an denen man später wieder hängenbleiben kann. Ein paar typische Folgewirkungen:
- Verknüpfung von Mails: taucht "Müller GmbH" in dreißig Mails auf, lassen sich diese dreißig Mails zu einer einzigen Auflistung zusammenfassen. Der Filter ist ein einfaches WHERE auf der entities-Tabelle.
- Suche im Inhalt: wer alle Mails zur Rechnungsnummer 2025-0042 sucht, findet sie über die Entitäten, ohne den Volltext durchsuchen zu müssen. Schneller und präziser.
- Wissensgraph: die Entitäten werden später in einem Graphen mit Beziehungen vernetzt (zum Beispiel "Müller GmbH stellte Rechnung 2025-0042"). Daraus entstehen ganze Beziehungsnetze, die eine Email allein nicht hergibt.
- RAG-Kontext: bei der späteren Antwort-Generierung kann das System gezielt nach Mails suchen, die dieselben Entitäten erwähnen, und sie als Hintergrund mitliefern.
Ohne Entitäten wäre das System auf Stichwortsuche im Volltext angewiesen. Mit Entitäten wird aus einer losen Sammlung von Texten eine vernetzte Wissensbasis.
Die Typen, die das System kennt
Im Prompt für die Entitäten-Erkennung sind die Typen festgelegt. Diese werden vom Sprachmodell exakt so zurückgegeben, alle anderen Begriffe werden ignoriert.
- PER (Person): Vor- und Nachnamen, Anreden, namentlich genannte Personen.
- ORG (Organisation): Firmennamen, Vereine, Behörden, Institutionen.
- LOC (Location): Städte, Länder, Adressen, Orte.
- PHONE: Telefonnummern in jeder Schreibweise.
- EMAIL: Email-Adressen im Text.
- INVOICE_NR: Rechnungsnummern, oft im Format Jahr-Lfd oder ähnlich.
- CONTRACT_NR: Vertragsnummern, Auftragsnummern.
- DATE: Datumsangaben in Worten oder Zahlen.
- AMOUNT: Geldbeträge mit Währung.
Die Auswahl ist bewusst eng gehalten: lieber neun klare Typen, die sich verlässlich erkennen lassen, als dreißig vage Typen, die dauernd verwechselt werden. Was nicht in dieses Raster passt, taucht gar nicht auf, oder das Modell ordnet es zwangsweise einem der festgelegten Typen zu.
an fester Position in der Pipeline in der Pipeline und die Body-Pflicht
Der NerStep ist Pipeline-an fester Position in der Pipeline. Vor ihm: Parse, Attachment, Contact, Thread, Rule, Classify. Nach ihm: Relations, GraphSync, Chunk, Rag, Draft. Wer ihm vorausging, hat die Email zerlegt, eingeordnet und mit einer Kategorie versehen. Erst jetzt geht es an den Inhalt im Detail.
Eine wichtige Vorbedingung: der Body-Text muss vorhanden sein. Im Code prüft NerStep::process() direkt am Anfang, ob $ctx["parsed"]["body_text"] nicht leer ist. Ist der Body leer, kehrt der Schritt sofort zurück und macht nichts. Das verhindert sinnlose Sprachmodell-Aufrufe für Mails ohne Textinhalt, etwa reine Anhang-Mails oder leere Werbe-Pings.
Was diese Vorprüfung nicht abfängt: Mails, deren Body lediglich aus einer Signatur oder einem Disclaimer besteht. Die laufen ganz normal durch den NerStep. Das Sprachmodell findet dann typischerweise die Personen aus der Signatur und ein paar Pflichtangaben aus dem Impressum.
Damit ist klar, was eine Entität ist und warum sie überhaupt erkannt wird. Im nächsten Unterkapitel geht es um den Prompt, mit dem das Sprachmodell zur Mitarbeit gebeten wird.