Paste some text or click an example, and press Find personal data. The first run downloads the model once (about 177 MB with its tokenizer); after that it is cached on this device and the next visit starts in a few seconds. You get the text with each item marked, and a redacted copy with placeholders such as [PHONE].
The same in your code
Same model and the same decoding, on any CPU, from one Python file.
pip install onnxruntime tokenizers numpy huggingface_hub
wget https://huggingface.co/amyrmahdy/decima-pii/resolve/main/decima_pii.py
from decima_pii import DecimaPII
pii = DecimaPII.from_pretrained("amyrmahdy/decima-pii")
pii.find("My name is Sara Ahmadi and my card is 5185 5272 2255 5565.")
# [{'start': 11, 'end': 22, 'label': 'PERSON_NAME', 'text': 'Sara Ahmadi'},
# {'start': 38, 'end': 57, 'label': 'CARD', 'text': '5185 5272 2255 5565'}]
pii.redact("Merhaba, ben Ayşe Yılmaz, telefonum 0532 123 45 67.")
# 'Merhaba, ben [PERSON_NAME], telefonum [PHONE].'
On a test set I did not make
MultiGraSCCo (Baroud et al., LREC 2026) is a set of clinical letters translated into ten languages by other researchers. decima-pii never trained on it. Scored on the five types it shares with this model (names, phones, emails, addresses, dates of birth; 1,814 spans), relaxed typed F1 as in their paper:
| decima-pii | OpenAI privacy-filter | |
|---|---|---|
| All four languages | 0.870 | 0.647 |
| English | 0.957 | 0.901 |
| Arabic | 0.843 | 0.581 |
| Persian | 0.805 | 0.508 |
| Turkish | 0.889 | 0.626 |
Not a pure first look: an earlier version was tested on this set, and its mistakes led me to add clinical-letter-style training text. That earlier version scored 0.652. Only these five types are measured on outside data; national IDs, IBANs, cards, passports and IP addresses are measured only on our own synthetic test. Urdu has no outside test yet. The model card has strict scores, the limits, and how it was made.