From an independent benchmark across four datasets in two languages, six shared entity types, June 2026.
| Detector | Avg F1 | Best dataset | Worst dataset | Degradation | Median latency (CPU) |
|---|---|---|---|---|---|
| Piiranha (86M DeBERTa-v3) | 0.542 | 0.780 | 0.169 | −78% | 118.5 ms |
| GLiNER v1 (209M) | 0.535 | 0.607 | 0.455 | 0% | 161.3 ms |
| Presidio | 0.481 | 0.780 | 0.298 | −17% | 15.1 ms |
| GLiNER v2 (205M) | 0.478 | 0.558 | 0.373 | −20% | 197.7 ms |
| Regex only | 0.171 | 0.297 | 0.000 | n/a | 0.1 ms |
A paired t-test found no statistically significant difference between the top three (p well above 0.10). Do not choose by decimal places.
From PIIBench, 82 entity types across ten source datasets, May 2026: a directly fine-tuned DeBERTa reached F1 0.6476; the strongest previously published comparator on that benchmark reached 0.1723.
Aggregate F1 hides this, which is why Chapter 7 insists on per-entity scoring.
| Entity | Best observed | Worst observed | Comment |
|---|---|---|---|
| 0.996 | 0.553 | Pattern-friendly; Presidio strongest | |
| Phone | 0.874 | 0.606 | GLiNER v1 most consistent |
| Person name | 0.787 | 0.139 | The hardest category by a distance |
| IBAN, card | High with validation | Low without | Appendix A applies |
| Presidio sidecar | Azure AI Language | Native C# rules | |
|---|---|---|---|
| .NET access | REST via HttpClient | Official SDK (Azure.AI.TextAnalytics) | In-process |
| Text crosses your perimeter | No | Yes | No |
| Entity coverage | Broad, extensible | Broad, fixed | Checksummed identifiers only |
| Custom recognisers | Yes | No | Yes |
| Reversible pipeline | Built in | Redaction policies | Build it yourself |
| Latency | ~15 ms plus local hop | Network round trip | ~0.1 ms |
| You operate | A container | A subscription | Nothing |
| Failure mode | Container down | API error, quota | None |
Components: Analyzer (detection), Anonymizer (de-identification operators), Image Redactor (OCR), Structured (tabular and semi-structured data).
Detection method: spaCy or HuggingFace NER, plus regex recognisers, checksum validation, and contextual scoring.
Deployment: Python packages, Docker images, Kubernetes, direct Python and PySpark integration, Azure App Service, Databricks, Spark.
Governance, as of September 2026: no longer a Microsoft project. Transitioning to community ownership under the Data Privacy Stack organisation. Documentation at presidio.dataprivacystack.org; the old Microsoft URL redirects twice. Much published material still calls it "Microsoft Presidio" and links to the retired address.
.NET client: none official. REST is the route.
Unofficial client: Presidio.SDK by StefH. Version 0.0.2, June 2025, ~5.6K downloads, 14 commits, targets .NET 6.0 and .NET Standard 2.1. Analyzer demonstrated, anonymizer not evidenced. Companion Presidio.SDK.Extensions adds a handful of locale-specific pattern recognisers (~970 downloads). Useful to know about, too thin to build on.
Known issue: 64% reversibility pass rate in the benchmark, from character offset misalignment. Fixable in post-processing, and a reason to assert the round-trip invariant (Chapter 9).
Download the full PDF for free?
Free download — no account required