pii-detection / README.md
iamleonie's picture mlabonne's picture
claude opus 4.8 (1m context)
Initial public commit
f645508
|
Raw History Blame Contribute Delete
1.78 kB
---
title: PII Detection
emoji: 🕵️
colorFrom: purple
colorTo: blue
sdk: docker
app_port: 7860
header: mini
pinned: false
private: true
short_description: Multilingual PII detection with LFM2.5, server-side CPU
---
# PII Detection
Server-side PII detection powered by [`LiquidAI/LFM2.5-Encoder-350M-PII-Detector`](https://huggingface.co/LiquidAI/LFM2.5-Encoder-350M-PII-Detector): a bidirectional LFM2.5 encoder (354M) with a token-classification head, covering 40 PII types across 16 languages. It runs on the Space's CPU; the browser only sends text to `/api/detect` and highlights the returned spans, so nothing is downloaded to the visitor.
## How it works
- `pii.py` — loads the model via its custom modeling code (`trust_remote_code`) and runs the model's own inference-time **hybrid regex decode** (`pii_hybrid_decode.py` + `context_cued.py`, fetched from the model repo): the token classifier locates PII, a validator-gated regex layer owns format-bound types (email/IBAN/credit-card/JWT/…), and cue-gated rules recover structure-less IDs. Spans are enriched with a domain (color), a pretty label, and a redaction tag.
- `app.py` — Flask server: loads the model once, serves the page, and answers `POST /api/detect {text}` with `{spans, redacted, count, ms}`.
- `index.html` / `style.css` — the UI: highlight or redacted view, a per-domain legend, and detection stats.
f32 on CPU (not fp16: x86 has no fast half path; not int8: token-classification boundaries are precision-sensitive) — the same reasoning as the spellchecker / policy-linting Spaces. Threads are matched to the container's CPU quota.
## Setup
The model repo is private, so the Space needs an **`HF_TOKEN`** secret with read access to `LiquidAI/LFM2.5-Encoder-350M-PII-Detector`.