guneeshvats/REDACT-PII-Benchmark

17

stars

6

commits

Python

primary language

Aug 23, 2026

updated

README

REDACT

A Systematically Controlled Multilingual Benchmark for Personal Information Detection

Accepted to the EMNLP 2026 Industry Track

EMNLP 2026 arXiv Hugging Face Code Dataset Terms

13,427 records · 324,078 entity annotations · 51 canonical entity types · 25 languages · 9 scripts · 4,127 surface-form patterns

Paper · Dataset · Schema · Evaluation · Generation


Why REDACT?

REDACT is a multilingual benchmark for evaluating character-span detection and canonical PII type classification under controlled variation. Rather than treating PII detection as a single aggregate score, REDACT is designed to expose where detectors succeed and fail across language, entity type, disclosure form, and policy-sensitivity slices.

Controlled coverageMultilingual breadthDisclosure-aware analysis
9 generation axes with strength-2 pairwise coverage25 languages across 9 scriptsGold disclosed, disclosure_form, and sensitivity_tier metadata
51 canonical entity types453-621 records per languageF5 recall by disclosure form and F6 recall by sensitivity tier
4,127 surface-form patternsNative-script and code-switched examplesAggregate, per-type, and per-language F1

At a glance

RecordsEntity annotationsEntity typesLanguagesScriptsSurface-form patterns
13,427324,078512594,127

Benchmark results

All five systems were evaluated on the same locked, language-stratified 1,000-record split with 40 records per language. Partial-overlap micro-F1 is the primary aggregate metric.

DetectorPartial micro-F1Macro F1Exact micro-F1
Presidio0.1950.0630.145
GLiNER-multi0.3200.2240.293
OpenAI Privacy Filter0.5120.2540.171
GPT-4.10.5970.5650.558
Claude Sonnet 4.60.6360.6190.602

REDACT also reports two gold-stratified diagnostic views:

  • F5: recall by disclosure form
  • F6: recall by sensitivity tier

These slices reveal detector-specific failure structure that aggregate F1 can hide. Precision and F1 remain the primary metrics for aggregate, per-entity-type, and per-language evaluation.

[!NOTE] The obfuscated disclosure-form slice contains only 15 gold entities in the locked evaluation split, so those recall values should be interpreted descriptively.

Support counts in the locked 1,000-record evaluation split
Sensitivity tierCompletePartialObfuscatedTotal
HIGH3,83324754,085
MEDIUM14,909110715,026
LOW5,078735,088
Total23,8203641524,199

The canonical camera-ready detector report is reports/11_stratified_f1_v2.json.


What is released?

ResourceDescription
data/pii_benchmark_full.jsonFull 13,427-record benchmark corpus
data/pii_benchmark_sample1000.jsonLocked 1,000-record detector evaluation split
data/schema.mdRecord, entity, and metadata schema
catalog/PII_Pattern_Catalog_v4_MASTER.md4,127-pattern surface-form catalog
evaluation/Detector evaluation and scoring code
generation/Generation prompts, samplers, and pipeline artifacts
reports/Precomputed corpus and detector reports

The 1,000-record subset is the official evaluation split used for the five reported detector systems. The remaining 12,427 records are also released as part of the benchmark corpus.

The large JSON files are stored with Git LFS. The Hugging Face mirror is usually the easiest way to download the corpus.


What does a REDACT annotation contain?

The headline task is character-span detection plus classification into one of 51 canonical entity types.

Each gold entity additionally carries:

FieldValuesMeaning
disclosedtrue, falseWhether the mention is an actual disclosure in context
disclosure_formcomplete, partial, obfuscatedHow completely the entity value is surfaced
sensitivity_tierHIGH, MEDIUM, LOWOperational benchmark label used for stratified analysis

These metadata fields are gold analysis attributes. Systems are not required to predict them in the headline detector experiment.

Example entity annotation:

{
  "entity_type": "Full_Name",
  "entity_string": "María García",
  "start": 19,
  "end": 31,
  "mention_index": 0,
  "disclosed": true,
  "disclosure_form": "complete",
  "sensitivity_tier": "MEDIUM"
}

Sensitivity tiers are operational benchmark labels for controlled analysis. They should not be interpreted as universal re-identification-risk rankings or legal advice.


Construction pipeline

REDACT controls nine record-level axes: domain, format, difficulty, length, density, code-switching, language, adjacency, and co-occurrence pattern.

flowchart LR
    A["Sampling<br/>9 controlled axes"] --> B["Generation<br/>16 hard rules"]
    B --> C["Deterministic<br/>span alignment"]
    C --> D["Conditional<br/>verification"]
    D --> E["Repair and<br/>normalization"]
    E --> F["Near-duplicate<br/>filtering"]
    F --> G["Release<br/>audits"]
    G --> H["13,427<br/>records"]

A strength-2 covering array produces 5,510 configurations, and paired-sweep mode contributes 890 additional configurations, giving 6,400 planned configurations per run.

Release lineage
6,400 configurations/run x 3 planned runs
        = 19,200 planned generation slots
                    |
                    v
             14,285 loaded
                    |
        - 814 structurally invalid records
                    |
                    v
             13,471 records
                    |
        - 44 near duplicates
                    |
                    v
             13,427 released

Generation uses 16 hard rules. The prompt artifact contains 10 core few-shot anchors plus one paired-sweep-specific example. Historical generation artifacts are preserved for provenance; publication-facing definitions in this README and data/schema.md should be treated as the current benchmark documentation.

See generation/README.md for the reproducibility overview.


Quality assurance

The release combines deterministic checks, model-based assessment, and human validation.

CheckResult
Final offset alignment99.657%
Canonical entity-type compliance after structural filtering100%
Minimum records per canonical type50+
Realized pairwise axis-value coverage98.2%
Manual entity validation510 entities, 10 per type
Entity-type agreement with gold99.1%
Span agreement with gold99.1%
disclosed agreement with gold99.7%
Disclosure-form agreement with gold99.8%
Inter-annotator raw agreement96.4%
Sensitivity-tier agreement90.5%
Missed-entity rate in separate 25-record audit< 3.3%

The G-Eval quality panel uses three model families: GPT-5.2, Claude Sonnet 4.6, and Gemini 2.5 Pro.


Evaluation protocol

See evaluation/README.md for the full scoring and reproducibility protocol.

Three span-matching modes are supported:

ModeCriterion
ExactCoincident character-span boundaries
PartialAny same-type span overlap, used as the primary metric
FuzzyAt least 50% overlap of the shorter span

Reported analyses include:

  • aggregate micro-F1 and macro-F1
  • per-entity-type F1
  • per-language F1
  • F5 recall by disclosure form
  • F6 recall by sensitivity tier

Quick start

Clone with Git LFS

git lfs install
git clone https://github.com/guneeshvats/REDACT-PII-Benchmark.git
cd REDACT-PII-Benchmark
git lfs pull

Or download the corpus from Hugging Face after accepting the dataset terms.

Load the corpus

import json

with open("data/pii_benchmark_full.json", encoding="utf-8") as f:
    records = json.load(f)

print(len(records))  # 13427

record = records[0]
print(record["axes"]["language"])
print(record["entities"][0])

Languages

REDACT contains 25 language variants across 9 scripts:

AR · CS · DA · DE · EN · ES · FI · FR · FR_CA · HE · HI · HU · IT · JA · KO · NL · NO · PT_BR · PT_EU · RU · SV · TH · TR · ZH_CN · ZH_TW

Each language contributes 453-621 records to the released corpus.


Repository map

.
├── README.md
├── LICENSE
├── DATASET_TERMS.md
├── data/
│   ├── pii_benchmark_full.json
│   ├── pii_benchmark_sample1000.json
│   └── schema.md
├── catalog/
│   ├── PII_Pattern_Catalog_v4_MASTER.md
│   ├── pattern_seed_data_v4.json
│   └── co_to_v4_mapping.json
├── generation/
│   ├── README.md
│   ├── prompts/
│   ├── samplers/
│   ├── seed/
│   └── sygra_graph/
├── evaluation/
│   ├── README.md
│   ├── scripts/
│   ├── judge/
│   └── manual_validation/
├── docs/
│   ├── methodology.md
│   ├── metrics_reference.md
│   ├── generation_guide.md
│   ├── runbook.md
│   └── PROVENANCE.md
└── reports/
    ├── README.md
    ├── 06_stats.json
    └── 11_stratified_f1_v2.json

Licensing and intended use

The repository uses separate terms for code and data:

  • Code and general repository documentation: MIT License, see LICENSE.
  • Dataset artifacts and pattern catalog: REDACT Dataset Terms, see DATASET_TERMS.md.

The dataset is intended for research, evaluation, auditing, education, and defensive privacy work. The corpus contains synthetic identifiers rather than real personal data, but some formats are deliberately realistic because detector evaluation requires structural plausibility.


Citation

If you use REDACT, please cite:

@inproceedings{vats2026redact,
  title     = {REDACT: A Systematically Controlled Multilingual Benchmark for Personal Information Detection},
  author    = {Guneesh Vats and Anubha Agrawal and Shikha Singhal and Ajita Dash and Praison Selvaraj and Vidhan Jhawar and Ranga Prasad Chenna and Bharadwaj Y M G},
  booktitle = {Proceedings of the 2026 Conference on Empirical Methods in Natural Language Processing: Industry Track},
  year      = {2026},
  note      = {To appear}
}

Preprint: arXiv:2606.19881


Authors

Guneesh Vats · Anubha Agrawal · Shikha Singhal · Ajita Dash · Praison Selvaraj · Vidhan Jhawar · Ranga Prasad Chenna · Bharadwaj Y M G

If REDACT is useful in your work, please consider citing the paper and starring the repository.

Contributors

guneeshvats

6 commits

guneeshvats/REDACT-PII-Benchmark

17

stars

6

commits

Python

primary language

Aug 23, 2026

updated

README

REDACT

A Systematically Controlled Multilingual Benchmark for Personal Information Detection

Accepted to the EMNLP 2026 Industry Track

EMNLP 2026 arXiv Hugging Face Code Dataset Terms

13,427 records · 324,078 entity annotations · 51 canonical entity types · 25 languages · 9 scripts · 4,127 surface-form patterns

Paper · Dataset · Schema · Evaluation · Generation


Why REDACT?

REDACT is a multilingual benchmark for evaluating character-span detection and canonical PII type classification under controlled variation. Rather than treating PII detection as a single aggregate score, REDACT is designed to expose where detectors succeed and fail across language, entity type, disclosure form, and policy-sensitivity slices.

Controlled coverageMultilingual breadthDisclosure-aware analysis
9 generation axes with strength-2 pairwise coverage25 languages across 9 scriptsGold disclosed, disclosure_form, and sensitivity_tier metadata
51 canonical entity types453-621 records per languageF5 recall by disclosure form and F6 recall by sensitivity tier
4,127 surface-form patternsNative-script and code-switched examplesAggregate, per-type, and per-language F1

At a glance

RecordsEntity annotationsEntity typesLanguagesScriptsSurface-form patterns
13,427324,078512594,127

Benchmark results

All five systems were evaluated on the same locked, language-stratified 1,000-record split with 40 records per language. Partial-overlap micro-F1 is the primary aggregate metric.

DetectorPartial micro-F1Macro F1Exact micro-F1
Presidio0.1950.0630.145
GLiNER-multi0.3200.2240.293
OpenAI Privacy Filter0.5120.2540.171
GPT-4.10.5970.5650.558
Claude Sonnet 4.60.6360.6190.602

REDACT also reports two gold-stratified diagnostic views:

  • F5: recall by disclosure form
  • F6: recall by sensitivity tier

These slices reveal detector-specific failure structure that aggregate F1 can hide. Precision and F1 remain the primary metrics for aggregate, per-entity-type, and per-language evaluation.

[!NOTE] The obfuscated disclosure-form slice contains only 15 gold entities in the locked evaluation split, so those recall values should be interpreted descriptively.

Support counts in the locked 1,000-record evaluation split
Sensitivity tierCompletePartialObfuscatedTotal
HIGH3,83324754,085
MEDIUM14,909110715,026
LOW5,078735,088
Total23,8203641524,199

The canonical camera-ready detector report is reports/11_stratified_f1_v2.json.


What is released?

ResourceDescription
data/pii_benchmark_full.jsonFull 13,427-record benchmark corpus
data/pii_benchmark_sample1000.jsonLocked 1,000-record detector evaluation split
data/schema.mdRecord, entity, and metadata schema
catalog/PII_Pattern_Catalog_v4_MASTER.md4,127-pattern surface-form catalog
evaluation/Detector evaluation and scoring code
generation/Generation prompts, samplers, and pipeline artifacts
reports/Precomputed corpus and detector reports

The 1,000-record subset is the official evaluation split used for the five reported detector systems. The remaining 12,427 records are also released as part of the benchmark corpus.

The large JSON files are stored with Git LFS. The Hugging Face mirror is usually the easiest way to download the corpus.


What does a REDACT annotation contain?

The headline task is character-span detection plus classification into one of 51 canonical entity types.

Each gold entity additionally carries:

FieldValuesMeaning
disclosedtrue, falseWhether the mention is an actual disclosure in context
disclosure_formcomplete, partial, obfuscatedHow completely the entity value is surfaced
sensitivity_tierHIGH, MEDIUM, LOWOperational benchmark label used for stratified analysis

These metadata fields are gold analysis attributes. Systems are not required to predict them in the headline detector experiment.

Example entity annotation:

{
  "entity_type": "Full_Name",
  "entity_string": "María García",
  "start": 19,
  "end": 31,
  "mention_index": 0,
  "disclosed": true,
  "disclosure_form": "complete",
  "sensitivity_tier": "MEDIUM"
}

Sensitivity tiers are operational benchmark labels for controlled analysis. They should not be interpreted as universal re-identification-risk rankings or legal advice.


Construction pipeline

REDACT controls nine record-level axes: domain, format, difficulty, length, density, code-switching, language, adjacency, and co-occurrence pattern.

flowchart LR
    A["Sampling<br/>9 controlled axes"] --> B["Generation<br/>16 hard rules"]
    B --> C["Deterministic<br/>span alignment"]
    C --> D["Conditional<br/>verification"]
    D --> E["Repair and<br/>normalization"]
    E --> F["Near-duplicate<br/>filtering"]
    F --> G["Release<br/>audits"]
    G --> H["13,427<br/>records"]

A strength-2 covering array produces 5,510 configurations, and paired-sweep mode contributes 890 additional configurations, giving 6,400 planned configurations per run.

Release lineage
6,400 configurations/run x 3 planned runs
        = 19,200 planned generation slots
                    |
                    v
             14,285 loaded
                    |
        - 814 structurally invalid records
                    |
                    v
             13,471 records
                    |
        - 44 near duplicates
                    |
                    v
             13,427 released

Generation uses 16 hard rules. The prompt artifact contains 10 core few-shot anchors plus one paired-sweep-specific example. Historical generation artifacts are preserved for provenance; publication-facing definitions in this README and data/schema.md should be treated as the current benchmark documentation.

See generation/README.md for the reproducibility overview.


Quality assurance

The release combines deterministic checks, model-based assessment, and human validation.

CheckResult
Final offset alignment99.657%
Canonical entity-type compliance after structural filtering100%
Minimum records per canonical type50+
Realized pairwise axis-value coverage98.2%
Manual entity validation510 entities, 10 per type
Entity-type agreement with gold99.1%
Span agreement with gold99.1%
disclosed agreement with gold99.7%
Disclosure-form agreement with gold99.8%
Inter-annotator raw agreement96.4%
Sensitivity-tier agreement90.5%
Missed-entity rate in separate 25-record audit< 3.3%

The G-Eval quality panel uses three model families: GPT-5.2, Claude Sonnet 4.6, and Gemini 2.5 Pro.


Evaluation protocol

See evaluation/README.md for the full scoring and reproducibility protocol.

Three span-matching modes are supported:

ModeCriterion
ExactCoincident character-span boundaries
PartialAny same-type span overlap, used as the primary metric
FuzzyAt least 50% overlap of the shorter span

Reported analyses include:

  • aggregate micro-F1 and macro-F1
  • per-entity-type F1
  • per-language F1
  • F5 recall by disclosure form
  • F6 recall by sensitivity tier

Quick start

Clone with Git LFS

git lfs install
git clone https://github.com/guneeshvats/REDACT-PII-Benchmark.git
cd REDACT-PII-Benchmark
git lfs pull

Or download the corpus from Hugging Face after accepting the dataset terms.

Load the corpus

import json

with open("data/pii_benchmark_full.json", encoding="utf-8") as f:
    records = json.load(f)

print(len(records))  # 13427

record = records[0]
print(record["axes"]["language"])
print(record["entities"][0])

Languages

REDACT contains 25 language variants across 9 scripts:

AR · CS · DA · DE · EN · ES · FI · FR · FR_CA · HE · HI · HU · IT · JA · KO · NL · NO · PT_BR · PT_EU · RU · SV · TH · TR · ZH_CN · ZH_TW

Each language contributes 453-621 records to the released corpus.


Repository map

.
├── README.md
├── LICENSE
├── DATASET_TERMS.md
├── data/
│   ├── pii_benchmark_full.json
│   ├── pii_benchmark_sample1000.json
│   └── schema.md
├── catalog/
│   ├── PII_Pattern_Catalog_v4_MASTER.md
│   ├── pattern_seed_data_v4.json
│   └── co_to_v4_mapping.json
├── generation/
│   ├── README.md
│   ├── prompts/
│   ├── samplers/
│   ├── seed/
│   └── sygra_graph/
├── evaluation/
│   ├── README.md
│   ├── scripts/
│   ├── judge/
│   └── manual_validation/
├── docs/
│   ├── methodology.md
│   ├── metrics_reference.md
│   ├── generation_guide.md
│   ├── runbook.md
│   └── PROVENANCE.md
└── reports/
    ├── README.md
    ├── 06_stats.json
    └── 11_stratified_f1_v2.json

Licensing and intended use

The repository uses separate terms for code and data:

  • Code and general repository documentation: MIT License, see LICENSE.
  • Dataset artifacts and pattern catalog: REDACT Dataset Terms, see DATASET_TERMS.md.

The dataset is intended for research, evaluation, auditing, education, and defensive privacy work. The corpus contains synthetic identifiers rather than real personal data, but some formats are deliberately realistic because detector evaluation requires structural plausibility.


Citation

If you use REDACT, please cite:

@inproceedings{vats2026redact,
  title     = {REDACT: A Systematically Controlled Multilingual Benchmark for Personal Information Detection},
  author    = {Guneesh Vats and Anubha Agrawal and Shikha Singhal and Ajita Dash and Praison Selvaraj and Vidhan Jhawar and Ranga Prasad Chenna and Bharadwaj Y M G},
  booktitle = {Proceedings of the 2026 Conference on Empirical Methods in Natural Language Processing: Industry Track},
  year      = {2026},
  note      = {To appear}
}

Preprint: arXiv:2606.19881


Authors

Guneesh Vats · Anubha Agrawal · Shikha Singhal · Ajita Dash · Praison Selvaraj · Vidhan Jhawar · Ranga Prasad Chenna · Bharadwaj Y M G

If REDACT is useful in your work, please consider citing the paper and starring the repository.

Contributors

guneeshvats

6 commits

Languages

Python

98.1%

Shell

1.9%