Ein Kunde fragt nach dem Stand einer Zahlung. Seine Nachricht enthält
eine IBAN und eine E-Mail-Adresse. Mit Bowden-PII kann eine Anwendung
diese Werte durch [IBAN_1] und [EMAIL_1]
ersetzen, bevor sie den Text zur Zusammenfassung an einen KI-Dienst
sendet.
Damit beginnt das Projekt. Die Erkennung läuft lokal, die Originalwerte bleiben dort, und der Text enthält anschliessend Platzhalter. Die erste öffentliche Version 0.0.1 bietet eine Python-API und eine Kommandozeile, mit denen Entwickler eigene Texte verarbeiten können.
Warum der Name Caspar Bowden?
Caspar Bowden untersuchte, wer auf Daten bei Cloud-Diensten zugreifen kann, auch im Rahmen staatlicher Überwachung. Er war Mitgründer der Foundation for Information Policy Research und leitender Datenschutzberater bei Microsoft für Europa, den Nahen Osten und Afrika. EDRis Nachruf beschreibt seine Arbeit und Unabhängigkeit.
Seine Arbeit gibt Anlass zu der Frage, welche Daten eine Anwendung überhaupt an einen Cloud-Dienst senden sollte. Bowden-PII setzt bei den unterstützten Kennungen an und entfernt sie vor der Übertragung. Der Name ist eine unabhängige Würdigung, ohne Verbindung zu oder Unterstützung durch seinen Nachlass.
Was mit dem Text passiert
Die regelbasierte Engine prüft Schweizer AHV/AVS-, UID/CHE- und MWST-Kennungen, IBAN, QR-IBAN und Kreditkartennummern. Wo das Format eine Prüfsumme vorsieht, kontrolliert sie diese. Hinzu kommen E-Mail-Adressen, konservative Schweizer Telefonnummernmuster, URLs, IP- und MAC-Adressen.
from bowden_pii import redact
result = redact("Kontakt: mia@example.ch", policy="strict")
print(result.redacted)
# Kontakt: [EMAIL_1]
Kommt derselbe normalisierte Wert zweimal vor, erhält er innerhalb
dieses Ergebnisses denselben Platzhalter. Eine separate Zuordnung
enthält die Originalwerte. Bewahren Sie diese lokal auf. Auch die
vollständige CLI-Ausgabe mit --json enthält die
Zuordnung. Verwenden Sie result.redacted, wenn Sie den
maskierten Text weitergeben wollen. Die Audit-Zusammenfassung lässt
die Originalwerte weg.
Die Richtlinie bestimmt, welche Kennungen die Engine ersetzt.
strict umfasst alle unterstützten regelbasierten Klassen.
balanced lässt URLs unverändert.
permissive erhält zusätzlich IP-Adressen, MAC-Adressen
und eigenständige UID-Werte.
Ein frühes Modell meldete falsche Treffer
Namen, Adressen und OCR-Fehler brauchen mehr als Formatregeln. Der experimentelle MiniLM-Klassifikator sagt voraus, welche Textstellen Kennungen enthalten. Die hybride Engine kombiniert diese Vorhersagen mit Regeltreffern. Bei Überschneidungen haben validierte Regeln Vorrang.
Ein frühes Modell meldete Kennungen in 38 von 40 Testtexten, die laut Annotation keine Kennungen enthielten. Nach der Aufnahme von Negativbeispielen ins Training sank diese Zahl im nächsten Lauf auf null, gemessen am selben zurückgehaltenen Testdatensatz. Die Datensätze waren klein und synthetisch. Trotzdem zeigten sie einen Fehler, den wir vor dem grösseren Training beheben mussten.
Der grössere Lauf minilm-large-v1 absolvierte drei
Epochen mit 12 000 synthetischen Trainingszeilen. Die Daten enthalten
deutsche, französische, italienische und englische Beispiele. Für die
Evaluation kamen separate generierte Datensätze und ein kuratierter
Stresstest mit 120 Zeilen zum Einsatz.
Der grössere Lauf bestand die dokumentierten Prüfungen des Projekts. Die Aussagekraft bleibt begrenzt. Der Hybridbericht vergleicht die Anzahl der erkannten Kennungsklassen. Eine richtige Anzahl kann also eine falsche Textgrenze verdecken. Bevor wir zuverlässige Erkennung über Sprachen und Dokumenttypen hinweg behaupten, brauchen wir breitere Tests mit unabhängig annotierten echten Dokumenten.
Die regelbasierte Laufzeit, 36 gezielte Tests, ein kleiner synthetischer Benchmark und experimentelle hybride Schnittstellen. Trainierte Gewichte und Trainingsdatensätze sind nicht enthalten. Der MiniLM-Adapter endet standardmässig nach 256 Tokens und teilt lange Eingaben noch nicht in Abschnitte auf.
Die regelbasierte Engine ausprobieren
Laden Sie den Quellcode oder das Wheel herunter und installieren Sie es mit Python 3.11 oder neuer. Die Standard-Engine benötigt kein Modell, keine Laufzeitabhängigkeiten und keine Netzwerkverbindung. Eigene Texte verarbeiten Sie über die API oder Kommandozeile. Die Website zeigt ausschliesslich vorberechnete Beispiele.
Als Nächstes arbeiten wir an besseren Evaluationen mit öffentlichen Dokumenten und OCR-Texten, zusätzlichen Kennungen und der Verarbeitung langer Texte. Für eine Veröffentlichung der Modellgewichte brauchen wir ausserdem eine dokumentierte Evaluation des ausgelieferten Modells.
Wird eine Kennung übersehen oder harmloser Text maskiert, erstellen Sie ein GitHub-Issue mit einem synthetischen Beispiel und dem erwarteten Ergebnis. Persönliche und vertrauliche Daten gehören nicht in die Fehlermeldung.