Instructions to use Swisscoding-Technologies/pii-IT-name-filter-149M with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Swisscoding-Technologies/pii-IT-name-filter-149M with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("token-classification", model="Swisscoding-Technologies/pii-IT-name-filter-149M")# Load model directly from transformers import AutoTokenizer, AutoModelForTokenClassification tokenizer = AutoTokenizer.from_pretrained("Swisscoding-Technologies/pii-IT-name-filter-149M") model = AutoModelForTokenClassification.from_pretrained("Swisscoding-Technologies/pii-IT-name-filter-149M", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Swisscoding Name Filter
Swisscoding Name Filter is a family of ModernBERT-base token classifiers for detecting personal names. Each model is deliberately focused on this single important use case to maximize performance. Choose the multilingual model or a monolingual model for English, German, French, or Italian.
Benchmarks
MultiGraSCCo contains 63 semi-structured and unstructured hospital-to-GP clinical summaries per language and was prepared by researchers from Technische Universität Berlin and the German Research Center for Artificial Intelligence (DFKI). Its German source annotations were manually labeled by human annotators; translated annotations were automatically preserved, and the translations were reviewed by medical professionals.
Nemotron PII is a synthetic PII dataset released by NVIDIA.
| Model | Precision | Recall | F1 |
|---|---|---|---|
| MultiGraSCCo - Multilingual (German, French, Italian, English) | |||
pii-name-filter-149M | 97.92 | 98.76 | 98.34 |
OpenMed/OpenMed-PII-SuperClinical-Large-434M-v1 | 93.85* | 84.36* | 88.85* |
openai/privacy-filter | 79.47* | 71.19* | 75.10* |
| MultiGraSCCo - English | |||
pii-EN-name-filter-149M | 100.00 | 99.72 | 99.86 |
pii-name-filter-149M | 100.00 | 99.16 | 99.58 |
OpenMed/OpenMed-PII-SuperClinical-Large-434M-v1 | 98.39* | 94.82* | 96.57* |
openai/privacy-filter | 97.73* | 90.15* | 93.79* |
| MultiGraSCCo - German | |||
pii-DE-name-filter-149M | 97.20 | 99.10 | 98.14 |
pii-name-filter-149M | 96.92 | 99.40 | 98.14 |
OpenMed/OpenMed-PII-German-SuperClinical-Large-434M-v1 | 98.07* | 56.36* | 71.58* |
OpenMed/OpenMed-PII-SuperClinical-Large-434M-v1 | 93.13* | 75.35* | 83.31* |
openai/privacy-filter | 68.35* | 66.03* | 67.17* |
| MultiGraSCCo - French | |||
pii-FR-name-filter-149M | 99.35 | 97.68 | 98.51 |
pii-name-filter-149M | 97.43 | 97.04 | 97.24 |
OpenMed/OpenMed-PII-French-SuperClinical-Large-434M-v1 | 97.21* | 44.59* | 61.13* |
OpenMed/OpenMed-PII-SuperClinical-Large-434M-v1 | 93.30* | 85.91* | 89.45* |
openai/privacy-filter | 78.87* | 67.37* | 72.67* |
| MultiGraSCCo - Italian | |||
pii-IT-name-filter-149M | 96.90 | 99.59 | 98.23 |
pii-name-filter-149M | 98.31 | 99.59 | 98.95 |
OpenMed/OpenMed-PII-Italian-SuperClinical-Large-434M-v1 | 95.22* | 35.14* | 51.34* |
OpenMed/OpenMed-PII-SuperClinical-Large-434M-v1 | 91.65* | 86.43* | 88.97* |
openai/privacy-filter | 81.16* | 68.55* | 74.32* |
| Nemotron PII | |||
pii-EN-name-filter-149M | 94.56 | 99.70 | 97.06 |
pii-name-filter-149M | 93.94 | 99.58 | 96.68 |
OpenMed/OpenMed-PII-SuperClinical-Large-434M-v1 first_name | 99.48 | 99.51 | 99.50 |
OpenMed/OpenMed-PII-SuperClinical-Large-434M-v1 last_name | 99.42 | 99.29 | 99.35 |
We evaluated the MultiGraSCCo scores for OpenMed and Privacy Filter locally; they are not official results published by the respective organizations.
On Nemotron PII, OpenMed uses separate first_name and last_name labels, while the Swisscoding models use a single PERSON label. The results are therefore not an apples-to-apples comparison.
Size
Total parameter count of the evaluated models.
* OpenAI Privacy Filter uses a mixture-of-experts (MoE) architecture and reports 50M active parameters out of 1.5B total parameters. Only total parameters are plotted.
For operational context, our separate throughput comparison used the Hugging Face Transformers implementations on an NVIDIA A100 in BF16 with 1,000 randomly selected Nemotron examples processed one at a time without batching. The English Swisscoding Name Filter achieved 39.00 examples/second, OpenMed SuperClinical Large achieved 22.13 examples/second, and OpenAI Privacy Filter achieved 0.29 examples/second (3.42 seconds/example). Throughput is implementation- and hardware-dependent, so we do not use it as the primary cross-model comparison.
How to use
Each model supports input windows of up to 8,192 tokens. For longer documents, split the text into overlapping chunks.
We evaluated the Swisscoding Name Filter models using a 0.5 decision threshold. Treat this as a practical starting point and tune it on representative validation data to balance missed names against false positives.
from transformers import pipeline
model_id = "Swisscoding-Technologies/pii-IT-name-filter-149M"
threshold = 0.5
name_detector = pipeline(
"token-classification",
model=model_id,
aggregation_strategy="simple",
)
text = "La paziente Alice Rossi è stata inviata dal Dr Marco Weber per un controllo."
entities = name_detector(text)
names = [entity for entity in entities if entity["score"] >= threshold]
print(names)
Intended use
This model is intended to detect personal names in Italian text, especially medical and medical-adjacent documents. It is designed as one component of a broader de-identification workflow and should be validated on representative local data.
Training data and privacy
Training started from de-identified real-world medical documents in Italian, French, and German. We added structured placeholders and synthetic personas, then used Qwen3.5-122B-A10B (Qwen/Qwen3.5-122B-A10B) to translate the documents across English, German, French, and Italian, producing roughly 30,000 examples per language. This provides exact supervision without reintroducing real PII.
Limitations
This model detects names only and is not a complete anonymization system. It may miss uncommon, ambiguous, or unusually formatted names and may over-redact name-like words. Performance may be lower in other languages or outside medical and medical-adjacent text; high-sensitivity deployments should tune the threshold and validate on local data.
Citation
Authors: Paul Roeseler, Aurélien Ferlay, and Matteo Caliandro
@misc{roeseler2026swisscodingnamefilter,
title = {Introducing Swisscoding Name Filter},
author = {Roeseler, Paul and Ferlay, Aurélien and Caliandro, Matteo},
year = {2026},
organization = {Swisscoding Technologies},
url = {https://github.com/PaulRoeseler/name-detector}
}
- Downloads last month
- 45
Model tree for Swisscoding-Technologies/pii-IT-name-filter-149M
Base model
answerdotai/ModernBERT-base