At Dynaris, we process thousands of voice call transcripts for training and evaluation, so this tension between PII removal and contextual preservation is something we deal with directly. The rule that's worked best for us: redact entity values but preserve entity types.
The failure mode of naive redaction is replacing everything sensitive with a blank. You end up with: "I need to reschedule my appointment because [REDACTED]." That destroys the conversational pattern — you can no longer train a model to understand scheduling intent with contextual reasons. The data becomes useless.
Our rule: replace the specific value with a typed placeholder that preserves semantic structure. So "My name is Maria Chen and I'm at 415-882-9000" becomes "My name is [PERSON_NAME] and I'm at [PHONE_NUMBER]." The intent, syntax, and conversational flow remain intact. A model trained on this still learns what a scheduling confirmation or address confirmation sounds like — it just never sees real identifiers.
For speech datasets specifically, we run a two-pass process: first, an automated NER pass using a fine-tuned spaCy model identifies candidates. Second, a human review step checks any redaction that altered sentence structure in unexpected ways (usually compound names, business names that contain personal names, or contexts where the type tag doesn't preserve meaning).
The review step is the real safeguard. Automation gets you 90% there; the remaining 10% requires a human who understands what the downstream training task actually needs.