masker-mini / README.md
gotugotu's picture
Release: masker-mini
8b00143
|
Raw
History Blame Contribute Delete
7.53 kB
---
license: other
license_name: offchain-studio-source-license-1.0
license_link: https://ai.basement.dev/license
library_name: transformers
pipeline_tag: token-classification
base_model: amsintelligence/masker
base_model_relation: finetune
datasets:
- ai4privacy/pii-masking-openpii-1m
language:
- bg
- cs
- da
- de
- el
- en
- es
- et
- fi
- fr
- hr
- hu
- it
- lt
- lv
- nl
- pl
- pt
- ro
- sk
- sl
- sr
- sv
tags:
- token-classification
- pii
- pii-detection
- pii-masking
- redaction
- privacy
- on-device
- onnx
- coreml
- distillation
metrics:
- f1
model-index:
- name: masker-mini
results:
- task:
type: token-classification
name: PII span detection
dataset:
name: pii-masking-openpii-1m (validation)
type: ai4privacy/pii-masking-openpii-1m
metrics:
- type: f1
name: Strict span F1
value: 0.965
- type: f1
name: Typed F1
value: 0.991
- type: recall
name: Leak-safe recall
value: 0.998
---
# Masker Mini
**Masker-mini** is the on-device sibling of
[**masker**](https://huggingface.co/amsintelligence/masker): a 6-layer distilled
PII detector for **23 European languages** that keeps ~99% of the teacher's
strict-span F1 while shrinking to as little as **17 MB** (4-bit Core ML).
It runs fully offline, no PII leaves the device.
| artifact | format | size | strict F1 |
| ----------------------------------- | ------------------------ | --------- | --------- |
| `model.safetensors` | PyTorch fp16 | 68 MB | 0.965 |
| `onnx/model_fp16.onnx` | ONNX fp16 (portable) | 68 MB | 0.965 |
| `onnx/model_int4.onnx` | ONNX 4-bit (ONNX Runtime) | **22 MB** | 0.965 |
| `coreml/masker_mini_4bit.mlpackage` | Core ML 4-bit (Apple NE) | **17 MB** | 0.965 |
## Model type & training
Masker Mini is a **6-layer BERT-architecture token classifier** (hidden size 384,
12 heads, ~35.6M parameters), a MiniLM-class encoder. It is trained by **knowledge
distillation** from `masker`.
After distillation the vocabulary was frequency-pruned,
shrinking the embedding table to land the whole network at ~35.6M parameters.
Three deployment artifacts are provided:
- **ONNX fp16** (68 MB): portable, runs anywhere via ONNX Runtime
(Android / iOS / web / server); numerically identical to the PyTorch model.
- **ONNX 4-bit** (22 MB): weight-only block quantization (`MatMulNBits` +
`GatherBlockQuantized`) of the Linear layers _and_ the embedding table. Needs
ONNX Runtime ≥ 1.18 for the 4-bit ops; 99.8% token-faithful to fp16.
- **Core ML, 4-bit palettized** (17 MB): weight-only k-means palettization for
the Apple Neural Engine (iOS 18 / macOS 15+). Palettization is effectively
lossless here (Δ strict F1 = −0.0002 vs fp16).
It emits the **same 12 entity types** as
[masker](https://huggingface.co/amsintelligence/masker) (48 BIOES labels + `O`)
and slots into the same rules-layer pipeline for structured PII.
## Usage
For a plain PyTorch / Transformers quick start, the snippet on the
[masker](https://huggingface.co/amsintelligence/masker) card runs unchanged, just
point it at `amsintelligence/masker-mini`.
What this repo is actually for is the two on-device builds:
**ONNX Runtime** (portable for Android, iOS, web, server)
```python
import onnxruntime as ort, numpy as np
from transformers import AutoTokenizer
tok = AutoTokenizer.from_pretrained("amsintelligence/masker-mini")
sess = ort.InferenceSession("onnx/model_fp16.onnx")
text = "Stuur de factuur naar Sanne de Groot in Utrecht."
feed = {k: v.astype(np.int64) for k, v in tok(text, return_tensors="np").items()}
logits = sess.run(None, feed)[0] # [1, seq_len, 49] BIOES logits -> argmax + decode
```
For the smallest portable build, swap in `onnx/model_int4.onnx` (22 MB, 4-bit) —
same inputs/outputs, needs ONNX Runtime ≥ 1.18.
**Core ML**, add `coreml/masker_mini_4bit.mlpackage` to an Xcode target.
Inputs `input_ids`, `attention_mask`, `token_type_ids`
(`Int32`, fixed length 256); output `logits`. The BIOES→span decode is the same
handful of lines shown on the masker card.
## Evaluation
openpii-1m validation, span-level, boundary-exact. **In-distribution — see
Limitations.** Numbers below are the **4-bit Core ML** build (fp16/PyTorch are
within ±0.001).
**Overall:** strict F1 **0.965** · typed F1 0.991 · leak-safe recall 0.998.
Distillation gap vs the masker teacher (0.982): **−0.007**.
**Per-type strict F1**
| entity | F1 | entity | F1 |
| ------------- | ----- | --------------- | ----- |
| DATE | 0.999 | AGE | 0.969 |
| EMAIL | 0.999 | BUILDING_NUMBER | 0.969 |
| CREDIT_CARD | 0.999 | CITY | 0.954 |
| PHONE | 0.998 | STREET_NAME | 0.922 |
| GOVERNMENT_ID | 0.998 | GIVEN_NAME | 0.910 |
| ZIP_CODE | 0.994 | SURNAME | 0.900 |
**By language**
| split | strict F1 |
| ------------------------------ | ------------- |
| English | 0.974 |
| Non-English (22 langs, pooled) | 0.971 |
| Dutch (flagship) | 0.968 |
| Per-language range | 0.960 - 0.983 |
## Limitations & biases
- **This is a compressed model.** It trails the full-size masker by ~0.7 strict-F1
points, and the loss is not uniform: it lands almost entirely on `GIVEN_NAME` /
`SURNAME`, plus `CITY` / `STREET_NAME` from the reduced 64K vocabulary. Structured
types (email, phone, IDs, cards, dates) stay ≥ 0.99. The one language-specific
soft spot is Dutch person-name boundaries (_tussenvoegsels_). If you need the top
half-point back, use masker.
- Scores are **in-distribution** (synthetic openpii), treat them as an upper
bound, measure on your own text, and design for residual leakage rather than
assuming full coverage.
## Credits & attribution
Distilled from **masker**, which is itself a derivative of:
- **Backbone / tokenizer lineage:** [`microsoft/mdeberta-v3-base`](https://huggingface.co/microsoft/mdeberta-v3-base)
by Microsoft; **MIT License** (masker-mini reuses mDeBERTa's SentencePiece
tokenizer). DeBERTaV3: He, Gao & Chen, 2021
([arXiv:2111.09543](https://arxiv.org/abs/2111.09543)).
- **Training data:** [`ai4privacy/pii-masking-openpii-1m`](https://huggingface.co/datasets/ai4privacy/pii-masking-openpii-1m)
by **Ai4Privacy**; **CC-BY-4.0**. Attribution required; please retain this
credit in downstream use.
## License
Licensed under the **Offchain Studio Source License, Version 1.0**, a
source-available license. Full terms: <https://ai.basement.dev/license>.
Commercial-license requests: `licensing@basement.dev`.
See the accompanying **`NOTICE`** file; its Required
Notice line _MASKER-MINI © 2026 Offchain Studio_ must be retained in
redistribution.
The underlying components keep their own (attribution-only) terms, retained in
Credits above: the mDeBERTa lineage is **MIT** and the openpii training data is
**CC-BY-4.0**.
## Citation
```bibtex
@software{masker_mini,
title = {masker-mini: on-device PII detection for 23 European languages},
year = {2026},
note = {6-layer distillation of masker (mDeBERTa-v3); ONNX + Core ML},
url = {https://huggingface.co/amsintelligence/masker-mini}
}
```