--- 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 97–99 %; **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).