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.

Was im Download von Version 0.0.1 steckt

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.