CoolFace
Modelpublic

hiteshwadhwani/pii-model-indic-v1

sourceHugging Faceapache-2.0updated 6mo agoView on Hugging Face
4likes18downloads
Model Card

PII Detection Model (Indian + US) — IndicBERT

A token classification model for detecting and redacting Personally Identifiable Information (PII) in English, Hindi, Hinglish, and Devanagari text.

Built on top of ai4bharat/indic-bert — a multilingual ALBERT model pretrained on 12 Indian languages.

Supported Languages

  • —English — names, addresses, phone numbers, SSN, etc.
  • —Hindi (Devanagari) — राजेश कुमार, मुंबई, महाराष्ट्र, etc.
  • —Hinglish — "Mera naam Rajesh hai aur main Mumbai mein rehta hoon"
  • —Mixed Devanagari + English — "मेरा phone number 9876543210 है"

Entity Types (31)

EntityDescriptionExample
FIRSTNAMEFirst nameRajesh, राजेश, John
LASTNAMELast nameKumar, कुमार, Smith
MIDDLENAMEMiddle nameKumar
PREFIXTitle/prefixMr, श्री, Dr, श्रीमती
GENDERGendermale, female
SEXSexM, F
AGEAge35
DOBDate of birth15/03/1990
DATEGeneral date14/03/2026
EMAILEmail addresspriya@gmail.com
PHONENUMBERPhone number+91 98765 43210
CITYCityMumbai, मुंबई, Boston
STATEStateMaharashtra, महाराष्ट्र
COUNTYCountyCook County
ZIPCODEZIP/PIN code400001, 02101
STREETStreet nameMG Road, Oak Avenue
BUILDINGNUMBERBuilding number42
SECONDARYADDRESSApt/SuiteFlat 301
COMPANYNAMECompanyInfosys, टाटा कंसल्टेंसी
ACCOUNTNUMBERAccount number9876543210
ACCOUNTNAMEAccount nameTata Consultancy
CREDITCARDNUMBERCredit card4111-1111-1111-1111
CREDITCARDCVVCVV123
CREDITCARDISSUERCard issuerVisa, HDFC
SSNSSN/PAN/Aadhaar123-45-6789, ABCDE1234F
IBANIBANIN89UTIB00001234567890
PINATM/Security PIN4098
PASSWORDPasswordS3cur3P@ss!
USERNAMEUsernamemdavis
URLURLwww.example.com
AMOUNTMoney amount50000

Usage

python
from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline

model = AutoModelForTokenClassification.from_pretrained("hiteshwadhwani/pii-model-indic-v1")
tokenizer = AutoTokenizer.from_pretrained("hiteshwadhwani/pii-model-indic-v1")

ner = pipeline("ner", model=model, tokenizer=tokenizer, aggregation_strategy="first")

# English
results = ner("Mr John Smith lives at 456 Oak Avenue Boston")

# Hinglish
results = ner("Mera naam Rajesh Kumar hai aur main Mumbai mein rehta hoon")

# Hindi (Devanagari)
results = ner("कृपया प्रिया शर्मा को +91 98765 43210 पर call करें")

# Devanagari names
results = ner("राजेश कुमार का account number 1234567890 है")

for entity in results:
    print(f"{entity['word']} → {entity['entity_group']} ({entity['score']:.2f})")

Redaction Example

python
def redact_pii(text, ner_pipeline, threshold=0.85):
    results = ner_pipeline(text)
    entities = [r for r in results if r["score"] >= threshold and r["entity_group"] != "O"]
    entities.sort(key=lambda x: x["start"])

    merged = []
    for ent in entities:
        label = ent["entity_group"]
        if merged and merged[-1]["label"] == label and ent["start"] <= merged[-1]["end"] + 1:
            merged[-1]["end"] = max(merged[-1]["end"], ent["end"])
        else:
            merged.append({"label": label, "start": ent["start"], "end": ent["end"]})

    redacted = text
    for span in reversed(merged):
        redacted = redacted[:span["start"]] + f"[{span['label']}]" + redacted[span["end"]:]
    return redacted

print(redact_pii("Shri Rajesh Kumar lives at 42 MG Road Bengaluru Karnataka", ner))
# [PREFIX] [FIRSTNAME] [LASTNAME] lives at [BUILDINGNUMBER] [STREET] [CITY] [STATE]

Evaluation Results

MetricScore
Overall F10.9623
Precision0.9595
Recall0.9651
Latency (avg)8.2ms

Per-Entity F1

EntityF1EntityF1
FIRSTNAME0.975LASTNAME0.979
CITY0.992STATE0.985
PHONENUMBER0.984EMAIL0.991
DOB0.978DATE0.976
SSN0.928COMPANYNAME0.933
CREDITCARDNUMBER0.926PREFIX0.989
URL1.000IBAN0.957
AGE0.985USERNAME0.939
PASSWORD0.977ZIPCODE0.914
AMOUNT0.793STREET0.927

Training Details

  • —Base model: ai4bharat/indic-bert (ALBERT, 12 Indian languages)
  • —Training data: ~11,800 synthetic samples
  • —English (Indian + US PII): ~4,700 samples
  • —Hinglish (Roman script): ~1,000 samples
  • —Devanagari + English mix: ~1,000 samples
  • —Pure Devanagari: ~5,000 samples
  • —Negative samples (no PII): ~3,000 samples
  • —Epochs: 15
  • —Learning rate: 3e-5
  • —Batch size: 32
  • —Optimizer: AdamW

License

Apache 2.0