knowledge-base/raw/other/2026-09-19_rampart-model-card.md
Hector b0742cbdb4 ingest(blog): agentcloak desktop + rampart model card (PII cloaking)
raw: business-wire launch PM, rampart model card, roemmele quote-tweet
wiki: tools/agentcloak-desktop (new), people/peter-yared (new),
institutions/incountry (new), people/brian-roemmele (update),
index (230. update), log
2026-09-19 15:15:38 +02:00

134 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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).