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
134 lines
8.1 KiB
Markdown
134 lines
8.1 KiB
Markdown
---
|
||
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).
|