knowledge-base/raw/other/2026-09-19_rampart-model-card.md

135 lines
8.1 KiB
Markdown
Raw Normal View History

---
type: other
source_url: https://github.com/nationaldesignstudio/rampart/blob/master/MODEL_CARD.md
retrieved: 2026-09-19
title: "Rampart — Model Card (nationaldesignstudio/rampart)"
author: "National Design Studio"
tags: [rampart, pii, redaction, privacy, onnx, minilm, client-side, agentcloak, model-card]
---
# Rampart — Model Card (abgerufen 19.09.2026)
## Quellenkontext
Model-Card des Modells `nationaldesignstudio/rampart`, abgerufen über https://raw.githubusercontent.com/nationaldesignstudio/rampart/master/MODEL_CARD.md (HTTP 200, 28.608 Byte). Das Modell wird von AgentCloak Desktop als lokale Detektionskomponente eingesetzt (siehe `raw/blog/2026-09-18_agentcloak-desktop-launch.md`).
## Modell (Fakten der Model-Card)
| Feld | Wert |
|------|------|
| Model-ID | `nationaldesignstudio/rampart` |
| Architektur | [`nreimers/MiniLM-L6-H384-uncased`](https://huggingface.co/nreimers/MiniLM-L6-H384-uncased), fine-tuned mit 35-Label-BIO-Head (17 Entitätstypen) |
| Parameter | ≈18,5 Mio. (19.730-WordPiece-Vokabular) |
| Quantisierung | 4-bit MatMul + INT8 Embedding (`onnx/model_q4.onnx`) |
| Artefaktgröße | 14,7 MB |
| Max. Sequenz | 512 Token |
| Sprachen | Englisch, Spanisch, Französisch, Deutsch, Italienisch, Portugiesisch, Niederländisch (alle Latin-Script) |
| Runtime | ONNX Runtime Web (WASM/WebGPU) via `transformers.js` |
| Lizenz | CC BY 4.0 |
| Herausgeber | National Design Studio |
| Card-Version | 1.0 (initial public release) |
| Training | 3 Epochen, Batch 32, LR 5e-5, AdamW, Apple M-series MPS, ~3,5 h Wandzeit |
Die Model-Card beschreibt das Modell als **„the on-device half of Rampart, a defense-in-depth client-side redaction system"**. Das ausgelieferte Artefakt läuft zusammen mit einer deterministischen Erkennungsschicht für strukturierte Identifier.
## Zweck
Lokale Redaktion nutzergeschriebenen Texts in AI-Assistenten und Intake-Flows — Ersetzung identifizierender Werte durch stabile Platzhalter, bevor Daten an einen Modellanbieter, Server oder Log-System gehen. Beispiele in der Card: `[GIVEN_NAME_1]`, `[SSN_1]`, mit Rehydration auf dem Client.
Ausdrücklich **außerhalb des Anwendungsbereichs** (Angaben der Card):
- eigenständige Erkennung von Regierungs-IDs
- indirekte/inferenzielle Identifier (Beispiel der Card: „rare disease + 5-digit ZIP" kann re-identifizieren)
- adversarische Robustheit als Sicherheitsgarantie
- Nicht-Latin-Schriften — Koreanisch, Han-Chinesisch, Japanisch, Arabisch, Kyrillisch und Devanagari erreichen laut Card ~14 % im Aggregat
## Label-Taxonomie
Standardmäßig redigiert, von der **deterministischen Schicht** (vor dem Modell maskiert):
| Label | Beschreibung |
|-------|--------------|
| `SSN` | US-Sozialversicherungsnummern — strukturelle Validierung |
| `CREDIT_CARD` | Zahlungskartennummern — Luhn-geprüft |
| `EMAIL` | E-Mail-Adressen |
| `URL` | URLs in Nutzerinhalten |
| `IP_ADDRESS` | IPv4 / IPv6 / MAC-Adressen |
Vom **Token-Classification-Modell** emittiert: `GIVEN_NAME`, `SURNAME`, `PHONE`, `TAX_ID`, `BANK_ACCOUNT`, `ROUTING_NUMBER`, `GOVERNMENT_ID`, `PASSPORT`, `DRIVERS_LICENSE`, `BUILDING_NUMBER`, `STREET_NAME`, `SECONDARY_ADDRESS`.
Standardmäßig **behalten**: `CITY`, `STATE`, `ZIP_CODE`. Die Card begründet das: grobe Geografie bleibt, die genaue Straßenzeile wird redigiert. Die Keep-Liste ist ein Compile-Time-Set (`KEEP_LABELS` in `src/types.ts`), kein Runtime-Flag.
Die Taxonomie ist bewusst **atomar** — kein grobes `PERSON`, `STREET_ADDRESS`, `ADDRESS`, `ORGANIZATION`, `LOCATION`, kein Catch-all `SECRET`. Daten, Alter und Einkommen werden absichtlich **nicht** als PII modelliert (Over-Redaktion ohne Privacy-Gewinn laut Card).
## Evaluationsergebnisse (Fakten der Card)
Gepunktet wird das **Gesamtsystem** (Modell + deterministische Schicht) auf dem End-to-End-Pfad.
Held-out OpenPII-Testset, sieben Sprachen (30.000 Zeilen; 131.707 private Terme; 87.207 public Terme):
| Slice | Private Recall (Wilson 95 %) | Public Retention | Span F1 strict | Latenz p50 |
|-------|------------------------------|------------------|----------------|------------|
| **Alle sieben Sprachen** | **98,42 % [98,35; 98,49]** | 91,69 % | 0,528 | 6,6 ms |
| Englisch (11.569 Zeilen) | 98,85 % | 90,5 % | — | 6,6 ms |
| Spanisch (3.234 Zeilen) | 98,84 % | 91,6 % | — | 6,6 ms |
| Englisch + Spanisch | 98,85 % | 91,0 % | — | 6,6 ms |
Die Card beziffert die Leaks selbst: **2.082 von 131.707 privaten Termen** auf dem Sieben-Sprachen-Test (1 von 64 Termen rutscht durch, bevor nachgelagerte Verteidigungen greifen).
Latenz: 6,6 ms p50 (Node ONNX/CPU über das 30k-Set); im Browser **3,9 ms p50 auf WebGPU** (Apple Metal, p95 9,3 ms) und **12,6 ms auf WASM** (p95 35,5 ms).
Pro Sprache liegen alle sieben im Band 9799 %; **Niederländisch ist mit 97,21 % das niedrigste** und laut Card für die nächsten Trainingszyklen markiert.
Handkuratierte Suites:
| Suite | Fälle | Private Recall | Public Retention |
|-------|-------|----------------|------------------|
| Domain intake | 20 | 96,97 % [84,68; 99,46] | 93,2 % |
| Adversarial (Homoglyph / Zero-Width / Leet / Splits / NFC-NFD / Casing / Prompt-Injection) | 20 | 86,36 % [66,66; 95,25] | 83,3 % |
| Fairness (Faker × 15 Namens-Traditionen × 5 Templates) | 1.875 | 65,44 % [63,26; 67,56] | 90,0 % |
## Bekannte Schwächen (Angaben der Card)
**Fairness über Namens-Traditionen** (1.875 Faker-Fälle, nur der Name variiert, Kontext konstant):
| Tradition | Locale | Recall |
|-----------|--------|--------|
| Anglo | en_US | 99,9 % |
| Hispanic | es_MX, es_ES | 99,9 % |
| Francophone | fr_FR | 99,9 % |
| Germanic | de_DE | 99,9 % |
| Romance (Italian) | it_IT | 99,9 % |
| Lusophone | pt_BR | 99,9 % |
| Turkic | tr_TR | 99,9 % |
| Vietnamese | vi_VN | 99,2 % |
| Japanese | ja_JP | 45,6 % |
| Korean | ko_KR | 15,2 % |
| Han Chinese | zh_CN | 8,8 % |
| South Asian (Hindi) | hi_IN | 5,6 % |
| Arabic | ar_AA | 4,8 % |
| Slavic (Russian) | ru_RU | 2,4 % |
Aggregiert nach Schrift: Latin-ASCII ~100 % (695/695), Latin mit Diakritika 99,8 % (429/430), **Nicht-Latin-Schriften 13,7 % (103/750)**. Die Card nennt das „the most important regression we have identified" und hat die Fairness-Suite als stratifizierten Regressionstest in die Eval-Pipeline eingebaut.
**Regierungs-IDs (nur Modell):** Regierungs-IDs, Medicare-artige Identifier, USCIS-Receipts, A-Nummern, Pässe und Lizenzen tragen keine Checksumme — die deterministische Schicht erkennt sie **nicht**. Sie hängen vollständig am Modell, das laut Card **~67,6 %** in einer strukturierten Probe fängt. Ausdrücklicher Hinweis: „Consumers should not assume the deterministic layer covers government IDs the way it covers SSNs and cards."
**Adversarische Robustheit:** Nicht zuverlässig gefangen werden Zero-Width-Zeichen zwischen jeder Ziffer einer SSN, Prompt-Injection-Text innerhalb des PII-Spans und kombinierte Angriffe. Rahmen der Card: „designed to protect users entering their own information in good faith from incidental disclosure to downstream services, not to defeat a motivated user actively trying to smuggle their own PII past the filter."
**Wort-Fragmentierung bei langen Namen:** Namen mit fünf oder mehr Subwords können fragmentieren und Recall auf dem letzten Subword verlieren.
**Kalibrierung:** ECE auf dem 30k-Testset **0,291** (Gesamtsystem) gegen **0,018** (Modell allein). Die Card erklärt den Unterschied als Artefakt der Vereinigung — die deterministische Schicht emittiert immer Score 1,0, was die Score-Verteilung bimodal macht.
## Reproduzierbarkeit
Modellgewichte, deterministische Schicht und der TypeScript-Evaluationsharnisch stehen unter **CC BY 4.0**. Nutzung im Code laut Card:
```ts
import { createGuard } from "@nationaldesignstudio/rampart";
const guard = await createGuard();
const { text } = await guard.protect("My name is Alex Rivera and my SSN is 472-81-0094.");
// → "My name is [GIVEN_NAME_1] [SURNAME_1] and my SSN is [SSN_1]."
```
Trainingsdaten: drei Quellen — ein hauseigenes synthetisches Chat-Korpus (~250.000 Konversationen), ein hauseigenes OCR-Dokument-Korpus und das öffentliche [`ai4privacy/pii-masking-openpii-1.5m`](https://huggingface.co/datasets/ai4privacy/pii-masking-openpii-1.5m) (vollständig, ~1,4 Mio. Trainingszeilen + 100.000 held-out).