No. 04 · 30 October 2026 · Privacy · AI

Does PII masking survive a different document generator?

A sub-1% leak rate measured on documents from the engine's own generator says little about anyone else's documents. This is a plan to find out, and an account of what the numbers can and cannot say.

If you don't work in security, here is the short version.

Some organizations send working documents, here a security team's incident tickets, to outside AI services: the large language models (LLMs) behind chatbots. Such documents carry personal details, which privacy people call PII (personally identifiable information): names, ID numbers, bank details, addresses. One fix is to swap each detail for a placeholder such as [PERSON_1] before the text leaves, keep the key to the swap in a locked local file (the "vault"), and put the real details back into the AI's answer when it returns. Masking on the way out, restoration on the way back: a round trip.

pii-roundtrip

is a free, open-source tool that does this for UK English and Russian documents. Its author, Vladimir Beskorovainyi, published it in 2026 with a benchmark paper reporting leak rates below 1% 1, 2. Those rates were measured on test documents made by the same program that made the documents the tool was developed on. This essay asks whether they hold on documents from a different source and sets out how to test that. Nothing has been run yet.

Why it matters to you: the details in documents like these belong to ordinary people, and the question is whether they stay behind.

This essay proposes an independent-generator evaluation of pii-roundtrip v0.5.0. None of it has been built or run yet: there is no second generator, no corpus and no results. What follows is the plan, and a reading of the numbers that already exist. The objective would be to measure pii-roundtrip masking fidelity and round-trip restoration accuracy on an independently generated synthetic corpus of 600 documents, distinct from the engine- development and held-out document sets of the original research. The method would freeze the pii-roundtrip v0.5.0 release and patched versions, run baselines (existing masking tools, for comparison) including pii-guard RU, GLiNER Guard Omni UK and prespecified Presidio configurations with identical wrappers, and use the released leak scorer for comparability. Prior work measured round-trip restoration on held-out data from the same generator, reporting sub-1% leak claims, but this evaluation would test generalization under structural distribution shift. The legal context (the UK GDPR, Britain's data-protection law) distinguishes an Article 6 lawful basis for personal-data processing from the additional Article 9 condition required when special-category data is processed, noting that leak rate is a risk-assessment input rather than a statutory threshold. The proposal specifies decision rules for testing whether the benchmark's sub-1% leakage results transfer to independently generated SOC-style synthetic documents (made-up documents shaped like the incident tickets of a security operations center, or SOC); production-ticket generalization would require a separate evaluation.

back from development, made by the same program as the development data). The external 0.7% RU and 4.0% UK figures describe baseline tools, not the engine 1, 3.

Summary claims about pii-roundtrip masking fidelity tend to blur one distinction: held- out synthetic documents versus external datasets. The reported sub-1% engine leak estimates come from Set 7. The original acceptance thresholds were at most 2% document leakage and at least 99% restoration; this proposal's 1% leakage target is a new, stricter criterion. On held-out Set 7, the baselines recorded 60.8% leak (RU pii-guard ) and 58.3% leak (UK GLiNER ) 1. Those figures describe the tools on data generated by the same implementation that produced the training set or the specific synthetic set used for evaluation.

The external datasets tell a different story from the held-out Set 7 figures. RU pii-guard showed 0.7% leak on the hivetrace dataset, and UK GLiNER showed 4.0% leak on theNemotron-PII dataset1. The gap shows how sensitive the masking tools are to the distribution of their input. GLiNER Guard Omni recorded 99.6% leak on Russian Set 7, but 58.3% on UK Set 7 1. The 99% figure in the project's documentation is a different animal: a restoration threshold, not a leak rate. The "99% restoration threshold" describes how accurately masked placeholders are replaced with original values during the round trip, not the percentage of PII successfully hidden during the initial masking phase 1.

The Same View Twice. The traveller reports that abroad was very much like home.

Confirming these numbers means checking the paper's Section 3.3 (External datasets) and Section 4 (Held-out results). The paper discloses that the engine's checksum rules and the generator share one implementation, and that 2,696 of 3,249 (83%) UK external identifiers in Nemotron-PII were injected by the author's generator 1. So even the "external" datasets may share structural artifacts with the development generator, which complicates any assessment of true generalization 1. External, here, may not mean what you think it means. To separate the specific benchmark numbers from general performance claims, run bench/eval/leak_breakdown.py on Set 7 against pinned v0.5.0 code to check whether it reproduces the 0.2% and 0.3% rates 1, 6.

Then there's the 99.8% that turns up in summaries of the tool's results. Two different metrics happen to round to 99.8%: the UK document-level non-leak rate, corresponding to 998 of 1,000 documents, and the UK fragment-level masking precision. The documentation labels the document count explicitly; readers should not equate it with masking precision 1, 2. The document-level count corresponds to the 0.2% document leak rate on held-out Set 7, whereas fragment-level masking precision is the fraction of predicted masking spans that overlap any annotated PII (99.8% for UK English; 98.4% for Russian); it does not measure how much non-PII text each span also covers 1, 2. Same digits, different denominators. Blending them obscures how the tool performs on individual entity instances, so keep document-level success rates and span-level precision apart when reading the risk profile 1, 2.

The "Benchmark Trap" is the habit of relying on held-out data that shares the distributional properties of the training data. In machine learning, generalization error is generally expected to increase when the test distribution shifts away from the development distribution. The engine was developed over six earlier held-out sets from the same generator; the baseline tools were never tuned on that generator. If a production environment uses a different document structure, the leak rate may rise significantly above the sub-1% benchmark results. We hypothesize, without supporting data, that the baseline tools (pii-guard for Russian, GLiNER Guard Omni for UK English, plus any prespecified Presidio configurations) could show ≥ 40% leak on an independent corpus if structural features (headers, JSON) differ. Mind the direction, though: the external-dataset figures (0.7% RU, 4.0% UK) are lower than the Set 7 baseline figures (60.8% RU, 58.3% UK) 1. The ≥ 40% baseline prediction for the independent corpus is the essay's own hypothesis, not derived from these external results.

The Perfect Fit. Every pair passed inspection on the last it was made on.

Testing generalization under structural distribution shift needs a test set that mimics incident tickets without sharing checksums, morphology rules, or generator logic with pii-roundtrip. We propose 600 synthetic documents, 300 UK English and 300 Russian, from a separately implemented generator. Neither the generator nor the corpus exists yet. The aim is to simulate the structural distribution of production incident tickets with no direct lineage to the generator behind the original benchmark data.

We propose a two-sample classifier test on prespecified structural features rather than t- SNE visualizations. Classifier AUC (a score from 0.5, a coin toss, to 1, perfect, for how well a program tells two sets of documents apart) puts a number on distributional difference; t-SNE is primarily a visualization technique and may not reliably quantify shift. An AUC above 0.8 would meet our chosen separability target: a classifier can tell the original generator's documents from the independent corpus. It would not establish that the differences are causal, practically relevant, or adequately isolated, and 0.8 is a working diagnostic threshold to be justified before the run, not a universal significance gate.

TAB (Text Anonymization Benchmark) is an annotated corpus of European Court of Human Rights judgments 9. Seeding from it, or from external corpora like it, should in our view be preceded by a privacy audit, because those published judgments contain real personal information annotated for masking 9. Real PII in testing needs strict controls against accidental exposure or misuse. The corpus generation script must be validated as not sharing checksum logic with the author's generator, and the evaluators must check that independence. A hand-audit of 50 documents per language is planned, to check for missed PII spans and correct entity density.

Testing the Lake. The sample was found to be entirely representative of the bucket.

The proposed corpus is synthetic and must not be called real incident tickets. Synthetic generators may not capture the full complexity of human-written incident reports; the goal is to mimic the structural distribution of such tickets without the legal and privacy risks that come with real data. We will audit generator provenance and implementation independence while retaining valid identifier standards and grammatical forms. To isolate structural effects, we will also compare paired layouts with entity values, density, and noise held constant. A second generator on its own changes too much at once: entity prevalence, identifier formatting, Russian grammatical case, document length, noise, JSON serialization, token truncation, and LLM competence can all move together. So the paired comparison renders the same fictional entities and annotations twice, once in an original- style layout and once in an independent SOC-style layout, with values, density, and processing settings fixed, and measures the paired leak-rate difference. Separate strata then vary entity density, morphology, document length, and noise. Generator seeds and software hashes would be recorded. Verification would include inspecting generator provenance to establish implementation independence and independently validating Russian name forms; the paired structural comparison keeps the same valid entity forms in both layouts.

Once generator B exists, a structural layout comparison between it and the original generator would document the shift. Separability would be evaluated on held-out documents, with related template or seed groups kept from crossing classifier training and test splits. AUC above 0.8 meets our chosen diagnostic target; AUC below 0.8 means only that this classifier and feature set did not meet it. Neither result predicts the direction of leakage change. That's the paired masking experiment's job.

The Pinboard. Every card is in its place. None of them says anything.

Synthetic evaluation data sits in a different legal context from production data. UK GDPR Article 9 requires conditions for processing special category data, and leak rate informs the risk assessment under Article 32 8. Processing wholly fictional or effectively anonymous evaluation data does not require an Article 6 lawful basis for that data. The test is whether it relates to identified or identifiable living people, including through reasonably likely linkage or inference—not merely whether a reversible mapping exists. Processing real seed or audit data still requires an applicable lawful basis and safeguards. Reversibly pseudonymized data, however, remains personal data for the key-holder (Recital 26) 8, 2. For wholly fictional data that cannot be related to identifiable people, production-like vault controls are an operational choice rather than a GDPR obligation. Any real personal data used to seed or audit the corpus requires its own safeguards.

The question for this section: does masking leakage on the independent corpus rise significantly above the engine's sub-1% Set 7 results? Those are measured results, not the paper's acceptance criterion, which was at most 2% document leakage; this proposal's 1% target is new and stricter. Our untested hypothesis is that the independent corpus increases the underlying document-leak probability: elevated leak, not a fixed rate above 50%. We will estimate the rate difference and its uncertainty rather than read a high upper bound as observed degradation. The comparison point is the historical benchmark of 0.2% (UK) and 0.3% (RU) on held-out Set 7 1.

Once there are results, a bar chart would show the gap between the benchmark and the new evaluation, with 95% CI error bars to help judge whether any increase in leak rate is statistically significant. The decision turns on the confidence bounds, not the point estimate. An upper confidence bound at or above 1% means the experiment has not established leakage below 1%. An interval spanning 1% is inconclusive; evidence of exceeding the target requires the lower bound to exceed 1%. (Yes, a perfect run can land in that middle ground too; the zero-leak arithmetic in the TL;DR says so.) Getting the upper bound below 1% with zero leaks takes about 381 independent documents per language, and shared templates or seeds shrink the effective sample further. So the 300-document run is a pilot: it finds failure modes and verifies the scoring harness. Configurations, features, and endpoints would then be frozen before a separate confirmatory corpus is scored. Layouts picked because they failed in the pilot would not be reused to estimate the generalization penalty; that would be afterwit passed off as foresight.

The Wide Finish Line. The runner has finished. The officials are not yet prepared to say so.

The evaluation script bench/eval/leak_breakdown.py must be run on the new corpus with the released scorer, which keeps the method consistent with the original. Pin the v0.5.0 source and the resolved runtime settings rather than relying on current main or later patches, and document how the leak_breakdown.py entry point relates to the scoring module cited here 6. The released scorer detects specified annotated value leaks using type-specific matching rules, not every possible disclosure. Report its benchmark- compatible score separately from extended SOC coverage, including IP addresses, hostnames, and usernames. The leak-breakdown script reads saved detector predictions and corpus annotations to calculate leakage; running detectors, generating LLM answers, and scoring restoration are separate stages.

Knowing the tool's limits starts with pinning down what causes its restoration errors. Russian name restoration (94.6% accuracy) fails mainly through deterministic morphological inflection, not LLM hallucination corrupting the mapping 1, 3. The mechanics are simple enough. The LLM outputs placeholders (e.g., [PERSON_1]), the local restorer matches them to the vault mapping, and the failure occurs when it applies the wrong morphological inflection while re-inserting the value 1. The benchmark author's manual failure audit flagged 199 occurrences of correctly stored names restored incorrectly: 188 involved pii-guard inflection and 11 the engine's proxy-name handling. pii-guard is on both sides of this comparison: it is one of the baselines, and the engine passes stored names to its inflector 3. A further 82 involved incorrectly stored names, and 8 were evaluator errors 3. That is the author's diagnosis; independent replication remains necessary 1, 3.

The Restored Head. Every piece was returned. The orientation is under review.

Deterministic means predictable and reproducible, given the same input and logic. The restorer is deterministic for a given input and vault state 5, so restoration accuracy should hold steady across runs unless the vault or input text changes. It may still vary when generated answers, sampled documents, configuration, or session state change, and that variability alone does not establish hallucination.

Replicating the author's error breakdown (inflection vs. storage vs. evaluator errors) would show which failure mode to fix first. If inflection errors dominate, the fix lives in the restorer's morphological logic. If incorrectly stored name forms dominate, investigate name parsing, normalization, and session-mapping construction before vault persistence. If evaluator errors dominate, the fix lives in the metric calculation.

A critical security boundary: in the intended deployment, the remote model has no direct access to the local vault 1. The mapping is kept in the local session and used only by the restorer; the LLM processes the masked text without the key-value pairs 5. Recognized placeholders in model-controlled output can nevertheless cause the local restorer to reproduce mapped values, and whether that becomes unauthorized disclosure depends on the surrounding workflow and output boundaries. Nor does the boundary establish end-to- end immunity to disclosure: the LLM still sees surrounding context, and residual direct or indirect identifiers can support inference or re-identification even without access to the vault 1, 10. Four events need keeping apart: a masking failure before the document reaches the external model; a restoration-integrity error on the way back; contextual inference from indirect identifiers left unmasked; and an actual unauthorized release of restored values. A mismatched Russian surname ending is not automatically a breach, and a scorer that detects whole-value leaks does not measure every privacy failure.

The Paper Bag. Nothing about him was disclosed. The dog was recognised at once.

An attack surface remains on the restoration side: the LLM outputs placeholders in new contexts that the local restorer fills with real PII 1. If the LLM emits a placeholder [PERSON_1] in a context that suggests a different entity than the one mapped in the vault, the local restorer may insert the wrong PII value 1. Substitution occurs locally, but the security analysis must cover attacker influence over model output, restoration behavior, and downstream recipients. Local restoration does not itself send the recovered values back to the remote model.

Whether the tool is "really sure" about its restoration accuracy depends on verifying those restoration-side attack surfaces. A successful restoration-side disclosure attack requires an end-to-end demonstration of attacker control, recognized placeholders, local restoration, and an unauthorized downstream recipient. Mapping substitution alone does not establish exfiltration or contextual re-identification. So a restorer error does not automatically establish a personal-data breach; however, a breach of security leading to accidental or unlawful destruction, loss, alteration, or unauthorized access can also qualify without disclosure.

Confirming the mapping lookup mechanism requires a code audit of pii_roundtrip/core.py5. The v0.5.0 pii_roundtrip/vault.py implementation uses AES-256-GCM with scrypt-derived keys (standard strong encryption, with the key derived from a password) and explicitly limits this protection to data at rest; sessions and restored text remain plaintext in memory. The stored vault is encrypted, but the PII exists in plaintext memory during restoration 5. That is by design, so testing the hypothesis that local user-space memory scraping causes leaks is orthogonal to the document-generator distribution shift.

Compliance framing has to keep risk inputs and statutory thresholds apart. UK GDPR Article 9 requires conditions for processing special category data, not a specific leak rate 8. Ordinary technical incident records are not inherently special-category data; Article 9 applies when such data actually appears. Leak rate informs the risk assessment under Article 32, but no numerical threshold exists in the regulation or guidance 8. A measured 5% leak rate is not a statutory pass/fail line. It may indicate that security measures are not appropriate to the risk under Article 32 8. The ICO guidance (from the Information Commissioner's Office, the UK body that upholds information rights and data privacy) distinguishes lawful basis, special-category conditions, and risk-appropriate security 8.

Reversibly pseudonymized data remains personal data for the key-holder (UK GDPR Recital 26; ICO pseudonymisation guidance). Masked or not, the entity holding the keys is considered to be processing personal data 8. Article 32 security controls therefore apply to the whole lifecycle, key management included 5. The keys must be stored securely, with access restricted to authorized personnel 5.

For this proposed SOC evaluation, we define utility to include chronology and correct entity-to-account associations, measured separately from leakage and placeholder restoration. A tool that removes all PII but destroys the relationships between entities may be useless for operational purposes. In incident response, knowing that two entities are related matters as much as knowing who they are. pii-roundtrip aims to preserve that utility by allowing restoration of the original values 1. If restoration accuracy is low (e.g., 94.6% for Russian names), the utility is compromised 1.

The Blindfolded Keyholder. He has no idea what is in the safe. He has the combination.

Once measured, the decision to deploy or not would weigh leak rate against risk tolerance. If the leak rate exceeds the risk tolerance, the tool should not be deployed, or additional controls should be added. If restoration accuracy falls below the operational requirement, the tool should not be deployed for use cases requiring high fidelity. Deployment criteria must account for risks to individuals' rights and freedoms, data sensitivity, processing context, and mandatory safeguards; organizational risk appetite cannot override those obligations.

We recommend consulting legal counsel on Article 32 measures versus benchmark pass rates 8; counsel can interpret the risk assessment in the context of a specific deployment 8. Benchmark pass rates are technical metrics, not legal compliance certifications 8. A technical pass does not guarantee legal compliance, and a technical fail does not guarantee legal violation 8. The risk assessment sits between the two 8.

Operational utility also depends on which identifier types are supported. IP addresses, hostnames, or usernames may be supported by the tool, but this must be verified 1. The checked Russian adapter maps IP types, so IP addresses are not universally unsupported 1. Benchmark coverage is not the same thing as implementation support: a tool may claim to support certain types and still fail to mask them in practice.

The Misplaced Shade. Protection has been fully installed and is available nearby.

RAT-Bench is a re-identification-risk benchmark for text anonymization tools, evaluating tools on synthetic text with direct and indirect identifiers across domains and languages 10. It provides general context for anonymizers but does not measure these tools on this corpus. Performance on the independent corpus has to be measured empirically. In 1, the baselines leaked far less on external datasets than on the engine's Set 7, so the direction of shift effects is tool- and corpus-specific; 1 does not by itself predict that the engine's leak rate will rise on the independent corpus.

  1. H1 (Leak Rate):pii-roundtrip 's benchmark-defined document-leak rate is higher on the independent corpus than on held-out Set 7.
    • Decision rule: Support H1 if the lower 95% confidence bound of the rate difference exceeds zero. Report the independent-corpus rate against this proposal's 1% target separately: below 1% only if the upper bound is below 1%, above 1% only if the lower bound exceeds 1%, otherwise inconclusive. Prespecify sample size through power analysis.
  2. H2 (Restoration): Russian name restoration accuracy is ≥ 95% on independent corpus (v0.5.0 and patched releases scored separately).
    • Decision rule: Find evidence against accuracy of at least 95% if the upper 95% confidence bound is below 95%; support the target if the lower bound is at least 95%; otherwise report inconclusive. Classify error causes separately.
  3. H3 (Baselines): On the same independent-corpus documents, each prespecifiedPresidio and GLiNER configuration leaks more than pii-roundtrip. The ≥ 40% level is a secondary, untested prediction.
    • Decision rule: Support H3 for a configuration if the lower 95% confidence bound of its paired leak-rate difference against pii-roundtrip exceeds zero. Assess the 40% level as H1 assesses the 1% target: a lower bound above 40% supports it, an upper bound below 40% counts against it, otherwise inconclusive. Account for multiple configuration comparisons.
  4. H4 (Attack): Attacker-influenced LLM responses cause local restorer to emit real PII in new contexts.
    • Protocol: Fictional identities and controlled recipients only. Count placeholders as in How to, below. Call an event exfiltration only with demonstrated attacker influence, restoration behavior, and an unauthorized destination.
    • Not demonstrated by: Zero successes in 1,000 trials. For independent trials from a fixed attack distribution, this gives a one-sided 95% upper success-probability bound of about 0.30%, not proof that no successful attack exists. An earlier memory-scraping hypothesis, local user-space scraping of the vault, is dropped as orthogonal to document-generator distribution shift; see §4.

Evaluation Harness Logic (Pseudocode only)

# Evaluation Harness Logic (Pseudocode only)
# Purpose: Measure leakage and restoration accuracy on independent corpus
# Interfaces are illustrative, not pii-roundtrip's API; every intermediate artifact is saved per document.

def run_evaluation(corpus, mask_tool, restore_func, local_llm):
    results = []
    for doc in corpus:
        # 1. Ingest Ground Truth
        ground_truth_spans = doc.get_pii_spans() # Known PII locations
        clean_text = doc.raw_text

        # 2. Masking Phase
        masked_doc = mask_tool.predict(clean_text)
        # Check for leakage immediately using released scorer
        leaked_spans = check_leakage(masked_doc, ground_truth_spans)

        # 3. LLM Simulation (External Service)
        llm_response = local_llm.generate(masked_doc.text) # Illustrative text-only field; keep mapping and session state local

        # 4. Restoration Phase (Local Vault)
        final_doc = restore_func(llm_response, masked_doc.mapping)

        # 5. Measure Integrity
        # Check if placeholders were replaced with original values in correct role
        # Score issued-placeholder restoration against local session state.
        restoration = score_restoration(final_doc, masked_doc.mapping, ground_truth_spans)
        # Evaluate role fidelity and intentional omissions with a separate task-specific rubric.

        # 6. Capture Intermediate Artifacts for Attack Analysis
        # Record if LLM emitted unissued placeholder IDs

        results.append({
            "leak_count": len(leaked_spans),
            "restoration_errors": restoration.errors,
            "llm_placeholder_inventions": count_new_placeholders(llm_response)
        })

    # Retain document, template/seed-group, layout-pair, and configuration IDs in results.
    # Report ordinary Wilson intervals for benchmark comparability separately from
    # prespecified cluster-aware intervals and paired rate-difference intervals.
    return aggregate_metrics(results, analysis_plan=prespecified_analysis_plan)

That's the whole plan. Now somebody has to build generator B.

Claim (short)Footnote(s)Source TypeStatus
Baseline leak rates (Set 7) are 60.8% (RU), 58.3% (UK)[1]PrimaryEstablished
External dataset leak rates differ (0.7% RU, 4.0% UK)[1]PrimaryEstablished
99% is restoration threshold, not leak rate[1]PrimaryEstablished
Original acceptance criterion: ≤ 2% document leak[1]PrimaryEstablished
Corpus would be 600 documents (300 UK, 300 RU)ProposedProtocolAuthor proposal
Classifier AUC > 0.8 as a separability diagnosticProposedProtocolProposed diagnostic threshold
Seeding from ECHR/ TAB requires privacy audit[9]Author recommendationProposed protocol safeguard
pii-roundtrip leak rate higher on independent corpus than on Set 7ProposedAuthor proposalHypothesis
Baselines leak ≥ 40% on independent corpusProposedAuthor proposalUntested prediction
998/1,000 UK non-leak is document metric[1], [2]PrimaryEstablished
Russian name restoration failures are mainly inflection errors[1], [3]Author-reported failure auditPending independent replication
LLM does not see local vault mapping[5]PrimaryEstablished
UK GDPR: Article 6 basis; Article 9 condition only for special-category data; no leak threshold[8]PrimaryEstablished
Reversibly pseudonymised data remains personal data[8], [2]PrimaryEstablished
Utility includes entity- role fidelityProposedProtocolStudy-specific operational criterion
max_length=512, stride=128 are default configpii-guard dependencyTo verify per runEnvironment/ YAML can override
Vault implements AES-256-GCM with scrypt[5]PrimaryEstablished
Production reality limited to synthetic generator transferStudy designProtocol scope limitationNot established by external sources
Version drift may improve Russian restoration[4]PrimaryPossible
Local LLM may not simulate external services[1]PrimaryPlausible confound, to be characterized
The Empty Harness. All equipment is ready. The horse is to follow.

References

  1. 01Vladimir Beskorovainyi. "Reversible Pseudonymisation of Documents Sent to External LLMs: an Open Bilingual Benchmark and an Engine." arXiv preprint 2610.34012, 2026. https://arxiv.org/abs/2610.34012v1 (accessed 2026-10-29).
  2. 02Vladimir Beskorovainyi (GitHub: beskvladimir-create). "pii-roundtrip Documentation." Besk Tech, 2026. https://pii-roundtrip.besk.tech/ (accessed 2026-10-29).
  3. 03Vladimir Beskorovainyi (GitHub: beskvladimir-create). "Technical Report." GitHub, 2026. https://raw.githubusercontent.com/beskvladimir-create/pii-roundtrip/main/REPORT.en.md (accessed 2026-10-29).
  4. 04Vladimir Beskorovainyi (GitHub: beskvladimir-create). "CHANGELOG." GitHub, 2026. https://raw.githubusercontent.com/beskvladimir-create/pii-roundtrip/main/CHANGELOG.md (accessed 2026-10-29).
  5. 05Vladimir Beskorovainyi (GitHub: beskvladimir-create). "Core Restoration Logic and Encrypted Vault," pii-roundtrip v0.5.0. GitHub, 2026. https://raw.githubusercontent.com/beskvladimir-create/pii-roundtrip/v0.5.0/pii_roundtrip/core.py and https://raw.githubusercontent.com/beskvladimir-create/pii-roundtrip/v0.5.0/pii_roundtrip/vault.py (accessed 2026-10-30).
  6. 06Vladimir Beskorovainyi (GitHub: beskvladimir-create). "Evaluation Scoring." GitHub, 2026. https://raw.githubusercontent.com/beskvladimir-create/pii-roundtrip/v0.5.0/bench/eval/metrics.py (accessed 2026-10-29).
  7. 07Redmadrobot RND. "rubert-base-pii-ner Model Card." Hugging Face, 2026. https://huggingface.co/redmadrobot-rnd/rubert-base-pii-ner (accessed 2026-10-29).
  8. 08Information Commissioner's Office. "What are the rules on special category data?" https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/lawful-basis/special-category-data/what-are-the-rules-on-special-category-data/; "A guide to data security." https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/security/a-guide-to-data-security/; "Pseudonymisation." https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/data-sharing/anonymisation/pseudonymisation/; "Guidance on AI and data protection." https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/artificial-intelligence/guidance-on-ai-and-data-protection/. UK GDPR, Article 32. https://www.legislation.gov.uk/eur/2016/679?view=plain (accessed 2026-10-30).
  9. 09Pilán, I., Lison, P., Øvrelid, L., Papadopoulou, A., Sánchez, D., and Batet, M. "The Text Anonymization Benchmark (TAB): A Dedicated Corpus and Evaluation Framework for Text Anonymization." arXiv preprint 2202.00443, 2022. https://arxiv.org/abs/2202.00443 (accessed 2026-10-29).
  10. 10Nata š a Kr č o, Zexi Yao, Matthieu Meeus, and Yves-Alexandre de Montjoye. "RAT-Bench: A Comprehensive Benchmark for Text Anonymization." arXiv preprint 2602.12806, 2026. https://arxiv.org/abs/2602.12806 (accessed 2026-10-29).