Sentedel EDI-PHI v1

Fine-tuned token-classification model for detecting PHI spans in healthcare X12 (EDI) text, especially payer-side 837P-style transactions.

This checkpoint is a derivative of openai/privacy-filter (Apache 2.0). It is intended for research, benchmarking, and integration experiments—not as a standalone compliance or anonymization guarantee.

Summary

General-purpose PII models often fragment spans across X12 delimiters and qualifiers. EDI-PHI v1 is trained on synthetic but structurally valid EDI so the model learns where identifiers appear in segment structure, not clinical narrative prose.

Metric Score (synthetic 837P test set, n=500)
Strict recall (exact boundaries) 91.0%
Relaxed recall (≥50% overlap) 100.0%
Strict F1 76.4%

Full methodology, baselines, and limitations: Sentedel blog — PHI Detection for EDI Transactions
Live demo API: Space rrsanjabi/sentedel-edi-phi-api

Base model

  • Base: openai/privacy-filter (~1.5B parameters, MoE token classifier)
  • Task: token-classification with aggregation_strategy="simple"
  • Architecture tag: openai_privacy_filter

Training data (v1)

Item Value
Format Synthetic X12 837P transactions
Scale 5,000 transactions, 110,053 labeled PHI spans
Split 4,200 train / 300 validation / 500 test
Labels S-tag alignment into base model PII categories
Training 3 epochs, lr=3e-4, bf16, dynamic padding
Hardware NVIDIA L4 (24GB)
Training time ~91 minutes

Evaluation emphasizes strict boundary matching (exact start/end) in addition to relaxed overlap, because overlap-based NER scores can hide residual identifiers in delimited EDI.

Usage

Transformers (Python)

from transformers import pipeline

classifier = pipeline(
    "token-classification",
    model="rrsanjabi/sentedel-edi-phi-v1",
    aggregation_strategy="simple",
    device=-1,  # CPU; use 0 for CUDA if available
)

text = """ISA*00* *00* *ZZ*XSDBVFIK       *ZZ*NZEKSPLG       *240523*7647*^*00501*241535182*0*P*:~
GS*HC*XSDBVFIK*NZEKSPLG*20240523*7647*1*X*005010X222A1~
ST*837*0001*005010X222A1~
NM1*IL*1*JOHNSON*MICHAEL*T***MI*XKW123456789~"""

spans = classifier(text)
for s in spans:
    print(s["entity_group"], s["start"], s["end"], s["score"])

Requires a recent transformers build with openai_privacy_filter support (see openai/privacy-filter).

Hosted demo API

curl -s -X POST "https://rrsanjabi-sentedel-edi-phi-api.hf.space/api/redact" \
  -H "Content-Type: application/json" \
  -d '{"text":"Patient Michael Johnson, DOB 19920315, Member ID XKW123456789"}'

Returns redacted, entities, and latency_ms. See the Space README for schema details.

Benchmark context (test set)

On the held-out 500-transaction synthetic test set (13 PHI categories):

  • 11,002 labeled PHI elements total
  • 11,000 detected under relaxed matching (99.98% element-level recall)
  • 91.0% strict boundary recall (exact span boundaries)

Baselines on the same benchmark include GLiNER PII variants and the unfine-tuned OpenAI Privacy Filter. See the blog post for the full table.

Limitations

  • Synthetic training/eval only in v1—production EDI varies by trading partner, implementation guide, and envelope quirks.
  • Not legal/compliance advice—not a HIPAA “safe harbor” or expert-determination tool by itself.
  • English / US-style identifiers in synthetic data; performance on other locales is unknown.
  • Redaction policy follows the base model’s label taxonomy; customize via further fine-tuning if your policy differs.
  • Do not send real PHI to public demos or third-party hosts without a BAA and security review.

License

Apache 2.0, consistent with the base openai/privacy-filter license. You are responsible for how you deploy and for evaluating on your own data.

Citation / links

Downloads last month
14
Safetensors
Model size
1B params
Tensor type
F32
·
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for rrsanjabi/sentedel-edi-phi-v1

Finetuned
(48)
this model

Space using rrsanjabi/sentedel-edi-phi-v1 1