Zum Inhalt springen
Menü

GLiNER - DSGVO-konforme KI durch lokale PII-Erkennung

Kurz gesagt

GLiNER (Generalist and Lightweight Named Entity Recognition) ist ein frei verfügbares Modell zur Named Entity Recognition (NER), also zum Erkennen von Namen, Adressen und anderen Angaben in Texten, das lokal auf eigener Hardware läuft. Es wird genutzt, um personenbezogene Daten zu finden und zu anonymisieren oder zu pseudonymisieren, bevor ein Text an ein externes Sprachmodell geht.

Kategorie Datenschutz-ToolsLesezeit etwa 5 Minuten8 Abschnitte

GLiNER (Generalist and Lightweight Named Entity Recognition) ist ein Open-Source-Modell zur Erkennung von Named Entities, das vollständig lokal ausgeführt wird. Es bildet die Grundlage für DSGVO-konforme KI-Anwendungen, bei denen personenbezogene Daten (PII) vor der Verarbeitung durch externe LLMs geschützt werden müssen.

Das Problem

Wenn Dokumente mit personenbezogenen Daten an LLMs wie GPT-4 oder Claude gesendet werden, verlassen diese Daten den eigenen Server. Das ist datenschutzrechtlich problematisch und kann gegen die DSGVO verstoßen. GLiNER löst dieses Problem durch lokale PII-Erkennung vor dem API-Aufruf.

Erkannte Entitäten (PII-Typen)

  • Personennamen: Vor- und Nachnamen, Titel
  • Adressen: Straße, Hausnummer, PLZ, Stadt, Land
  • Kontaktdaten: Telefon, E-Mail, Fax
  • Finanzielle Daten: IBAN, BIC, Kreditkartennummern
  • Identifikatoren: Personalausweis, Reisepass, SVN
  • Gesundheitsdaten: Versicherungsnummern, Diagnosen
  • Unternehmensdaten: Firmennamen, Handelsregisternummern
  • Digitale IDs: Benutzernamen, IP-Adressen

Zwei Strategien: Anonymisierung vs. Pseudonymisierung

Je nach Anwendungsfall setzen wir GLiNER in zwei verschiedenen Architekturen ein:

Strategie A: Dauerhafte Anonymisierung

PII wird entfernt und NICHT wiederhergestellt

Eingabe → GLiNER → PII entfernen → LLM → Anonymer Output

Geeignet für:

  • Chatbots und Kundenservice
  • Allgemeine Fragen und Recherchen
  • Dokumentenanalyse ohne personalisierte Antwort
  • Szenarien, wo der Output keine Namen enthalten muss

Beispiel:

Eingabe: "Herr Müller aus München hat eine Frage zu seiner Rechnung #12345"

An LLM: "Ein Kunde hat eine Frage zu seiner Rechnung"

LLM-Antwort: "Für Rechnungsfragen empfehle ich folgende Schritte..."

Vorteile
  • Maximale Sicherheit - PII existiert nicht mehr
  • Keine Mapping-Tabelle nötig
  • Einfache Architektur
  • Kein Risiko durch Datenlecks
Einschränkungen
  • Output kann nicht personalisiert werden
  • Nicht für Briefe/E-Mails geeignet

Strategie B: Pseudonymisierung mit Re-Personalisierung

PII wird ersetzt, verarbeitet und wiederhergestellt

Eingabe → GLiNER → Pseudonymisieren → LLM → Re-Personalisieren → Personalisierter Output

Geeignet für:

  • Automatisierte E-Mail-Generierung
  • Personalisierte Briefe und Dokumente
  • Vertragsvorlagen mit Kundendaten
  • Support-Antworten mit direkter Anrede

Beispiel:

Eingabe: "Schreibe eine Erinnerungs-E-Mail an Max Mustermann, Musterstraße 42, 80331 München. Offener Betrag: 1.250,00 EUR"

An LLM: "Schreibe eine Erinnerungs-E-Mail an [PERSON_1], [ADRESSE_1]. Offener Betrag: [BETRAG_1]"

LLM generiert: "Sehr geehrter [PERSON_1], wir möchten Sie freundlich an die offene Rechnung über [BETRAG_1] erinnern..."

Re-personalisiert: "Sehr geehrter Max Mustermann, wir möchten Sie freundlich an die offene Rechnung über 1.250,00 EUR erinnern..."

Vorteile
  • Personalisierte Outputs möglich
  • PII verlässt nie den eigenen Server
  • LLM sieht nur Platzhalter
  • Volle Automatisierung möglich
Zu beachten
  • Mapping-Tabelle muss sicher gespeichert werden
  • Etwas komplexere Architektur
  • Mapping nur für Session-Dauer halten

Technische Implementierung: Re-Personalisierung

Der Pseudonymisierungs-Workflow besteht aus drei Phasen:

Phase 1: PII-Erkennung und Pseudonymisierung

// GLiNER erkennt alle PII im Text
const erkannteEntitäten = gliner.analyze(eingabeText);

// Ergebnis:
[
  { text: "Max Mustermann", type: "PERSON", start: 32, end: 46 },
  { text: "Musterstraße 42", type: "ADDRESS", start: 48, end: 63 },
  { text: "80331 München", type: "ADDRESS", start: 65, end: 78 },
  { text: "1.250,00 EUR", type: "MONEY", start: 98, end: 110 }
]

// Pseudonymisierung: Ersetze PII durch Platzhalter
const mapping = new Map();
let pseudonymisierterText = eingabeText;

erkannteEntitäten.forEach((entity, index) => {
  const platzhalter = `[${entity.type}_${index + 1}]`;
  mapping.set(platzhalter, entity.text);
  pseudonymisierterText = pseudonymisierterText.replace(entity.text, platzhalter);
});

// Mapping (nur im RAM, nie persistiert!):
// [PERSON_1] → "Max Mustermann"
// [ADDRESS_1] → "Musterstraße 42"
// [ADDRESS_2] → "80331 München"
// [MONEY_1] → "1.250,00 EUR"
      

Phase 2: LLM-Verarbeitung

// Der pseudonymisierte Text geht an das LLM
const llmResponse = await openai.chat.completions.create({
  model: "gpt-4",
  messages: [{
    role: "system",
    content: "Du schreibst professionelle Geschäftsbriefe. Platzhalter wie [PERSON_1] werden später ersetzt - verwende sie exakt so im Text."
  }, {
    role: "user",
    content: pseudonymisierterText
  }]
});

// LLM sieht NUR:
// "Schreibe eine Erinnerungs-E-Mail an [PERSON_1], [ADDRESS_1], [ADDRESS_2].
//  Offener Betrag: [MONEY_1]"

// LLM antwortet mit Platzhaltern:
// "Sehr geehrte/r [PERSON_1], wir möchten Sie freundlich daran erinnern..."
      

Phase 3: Re-Personalisierung

// Ersetze alle Platzhalter durch die Original-PII
let finalerOutput = llmResponse.choices[0].message.content;

mapping.forEach((originalWert, platzhalter) => {
  finalerOutput = finalerOutput.replaceAll(platzhalter, originalWert);
});

// Mapping sofort löschen - nie persistieren!
mapping.clear();

// Ergebnis: Vollständig personalisierter Text
// "Sehr geehrter Max Mustermann, wir möchten Sie freundlich daran erinnern..."
      

Sicherheitsarchitektur

Kritische Sicherheitsregeln für Re-Personalisierung

  1. Mapping nur im RAM: Die Zuordnung von Platzhalter zu PII wird nie in einer Datenbank oder Datei gespeichert
  2. Session-gebunden: Das Mapping existiert nur für die Dauer der Anfrage und wird danach sofort gelöscht
  3. Keine Logs: Weder Eingabe noch Mapping noch finaler Output werden geloggt
  4. Verschlüsselte Übertragung: Alle Kommunikation über HTTPS/TLS
  5. Isolierte Verarbeitung: Jede Anfrage hat ihr eigenes Mapping - keine Vermischung

Datenfluss-Diagramm

┌─────────────────────────────────────────────────────────────────────────────┐
│                        EIGENER SERVER (Sichere Zone)                         │
│  ┌──────────┐    ┌─────────┐    ┌─────────────┐    ┌──────────────────────┐ │
│  │  Nutzer  │───▶│ GLiNER  │───▶│   Mapping   │    │   Re-Personalisierung│ │
│  │ Eingabe  │    │  (NER)  │    │ (nur RAM!)  │    │                      │ │
│  └──────────┘    └────┬────┘    └──────┬──────┘    └──────────▲───────────┘ │
│                       │                │                      │             │
│                       ▼                │                      │             │
│              ┌────────────────┐        │                      │             │
│              │ Pseudonymisiert│        │                      │             │
│              │ [PERSON_1]...  │────────┼──────────────────────┘             │
│              └───────┬────────┘        │                                    │
└──────────────────────┼─────────────────┼────────────────────────────────────┘
                       │                 │
                       ▼                 │ (Mapping bleibt intern!)
        ┌──────────────────────────┐     │
        │      EXTERNE API         │     │
        │  ┌────────────────────┐  │     │
        │  │   LLM (GPT-4)      │  │     │
        │  │                    │  │     │
        │  │ Sieht NUR:         │  │     │
        │  │ "[PERSON_1] hat    │  │     │
        │  │  eine Frage..."    │  │     │
        │  └────────────────────┘  │     │
        └──────────────────────────┘     │
                       │                 │
                       │ Antwort mit     │
                       │ Platzhaltern    │
                       ▼                 │
              ┌────────────────┐         │
              │ "Sehr geehrter │─────────┘
              │  [PERSON_1]"   │  Mapping wird angewendet
              └────────────────┘
      

Wann welche Strategie?

AnwendungsfallEmpfohlene StrategieBegründung
Chatbot / KundenserviceA: AnonymisierungAntworten müssen nicht personalisiert sein
DokumentenanalyseA: AnonymisierungZusammenfassungen brauchen keine Namen
E-Mail-GenerierungB: Re-PersonalisierungE-Mails müssen Empfänger direkt ansprechen
Brief-/VertragsvorlagenB: Re-PersonalisierungDokumente benötigen echte Namen und Adressen
Interne WissenssucheA: AnonymisierungFaktenwissen, keine Personalisierung nötig
Personalisierte ReportsB: Re-PersonalisierungReports für spezifische Personen/Firmen

Warum GLiNER?

  • 100% lokal: Keine Daten verlassen den Server während der NER-Analyse
  • Open Source: Volle Transparenz und Auditierbarkeit (MIT-Lizenz)
  • Leichtgewichtig: Läuft auf CPU, kein teures GPU-Cluster nötig
  • Multilingual: Unterstützt Deutsch, Englisch und viele weitere Sprachen
  • Zero-Shot NER: Erkennt auch neue Entity-Typen ohne Retraining
  • Schnell: Verarbeitet Dokumente in Millisekunden

DSGVO-konforme KI für Ihr Unternehmen

Wir implementieren GLiNER-basierte Datenschutz-Layer für Ihre KI-Anwendungen. Ob Chat, Dokumentenverarbeitung oder automatisierte Korrespondenz - Ihre Daten bleiben geschützt.

Häufige Fragen

Was ist GLiNER?
GLiNER (Generalist and Lightweight Named Entity Recognition) ist ein Open-Source-Modell zur Named-Entity-Erkennung, das vollständig lokal läuft und personenbezogene Daten (PII) erkennt, bevor Texte an externe LLMs gehen.
Wie hilft GLiNER bei der DSGVO-Konformität?
GLiNER erkennt PII lokal auf dem eigenen Server und entfernt oder pseudonymisiert sie vor dem API-Aufruf. So verlassen personenbezogene Daten nie die eigene Infrastruktur.
Was ist der Unterschied zwischen Anonymisierung und Pseudonymisierung?
Bei der Anonymisierung werden PII dauerhaft entfernt und nicht wiederhergestellt. Bei der Pseudonymisierung werden sie durch Platzhalter ersetzt und nach der LLM-Verarbeitung wieder eingesetzt, etwa für personalisierte E-Mails.
Läuft GLiNER auch ohne teure GPU?
Ja. GLiNER ist leichtgewichtig und läuft auf CPU, ein GPU-Cluster ist für die NER-Analyse nicht erforderlich. Das Modell steht unter MIT-Lizenz zur Verfügung.

Welche Herausforderung wollen Sie mit KI angehen?

30 Minuten, kostenlos, per Video. Wir sprechen über Ihr Vorhaben und geben Ihnen Feedback, wie wir es lösen würden. Wenn es konkret wird, prüfen wir es im Machbarkeits-Sprint an Ihren Daten.