CoolFace
Modelpublic

Accuknoxtechnologies/PII-Qwen3.5-2B-v8

sourceHugging Faceapache-2.0updated 4mo agoView on Hugging Face
0likes17downloads
Model Card

Qwen PII Guard (merged)

Fine-tuned from Qwen/Qwen3.5-2B to detect personally-identifiable information in user prompts and emit a single JSON object listing the values found in each of 15 categories.

Output schema:

json
{"is_valid": true,
 "category": {"Name": ["John Doe"], "Email": ["john@example.com"]}}

is_valid is false and category is {} when the prompt contains no PII.

Categories

name, email, phonenumber, address, date, nationalid, passportnumber, driverslicense, taxid, cardnumber, bankaccount, credentials, ipaddress, username

Evaluation (transformers reference path)

  • —test rows: 200 (held-out, from test_dataset_pii.csv)
  • —is_valid accuracy: 1.0000
  • —category key-set accuracy: 0.9350
  • —category value-set accuracy: 0.8300
  • —binary F1 (is_valid): 1.0000 (P=1.000 R=1.000)
  • —macro F1 over categories (key-presence): 0.9791
  • —macro F1 over categories (value-set): 0.9529
  • —parse errors: 0/200

Binary confusion matrix (positive = "contains PII"):

predicted PIIpredicted clean
actual PII1770
actual clean023

Per-category KEY-presence (did the model emit this category at all?):

CategorySupportPrecisionRecallF1
address790.9870.9870.987
bank_account121.0001.0001.000
card_number251.0001.0001.000
credentials101.0001.0001.000
date951.0001.0001.000
drivers_license270.9570.8150.880
email760.9871.0000.993
ip_address91.0001.0001.000
name1071.0000.9910.995
national_id520.9110.9810.944
passport_number210.9551.0000.977
phone_number631.0000.9840.992
tax_id240.9200.9580.939
username91.0001.0001.000

Per-category VALUE-set (did the exact strings match within the category?):

CategorySupport (string-spans)PrecisionRecallF1
address790.9240.9240.924
bank_account121.0001.0001.000
card_number261.0001.0001.000
credentials101.0001.0001.000
date1231.0001.0001.000
drivers_license270.9570.8150.880
email820.9881.0000.994
ip_address91.0001.0001.000
name2420.8630.8350.849
national_id590.8690.8980.883
passport_number210.9551.0000.977
phone_number650.9840.9690.977
tax_id240.8400.8750.857
username91.0001.0001.000

Latency (transformers, single-prompt, greedy decoding):

meanmedianp95max
3.15s2.77s6.45s9.82s

Quick start

python
from transformers import AutoModelForCausalLM, AutoTokenizer

tok = AutoTokenizer.from_pretrained("Accuknoxtechnologies/PII-Qwen3.5-2B-v8")
model = AutoModelForCausalLM.from_pretrained("Accuknoxtechnologies/PII-Qwen3.5-2B-v8", torch_dtype="auto", device_map="auto")

prompt = "Please contact me at jane@example.com or +1 415 555 0100."
msgs = [
    {"role": "system", "content": "<see SYSTEM_MSG in train_qwen_pii.py>"},
    {"role": "user", "content": prompt},
]
text = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)
out = model.generate(**tok(text, return_tensors="pt").to(model.device),
                    max_new_tokens=512, do_sample=False, pad_token_id=tok.pad_token_id)
print(tok.decode(out[0], skip_special_tokens=True))

Evaluation — vLLM serving (merged model, text-only)

Same 200 held-out prompts, served through vLLM `0.21.0` instead of the transformers .generate() loop. Greedy decoding, dtype bf16, enable_prefix_caching=True, enable_chunked_prefill=True. This reflects production serving accuracy + latency.

  • —JSON parse errors: 0/200 (0.0%)

Accuracy (vLLM)

MetricValue
is_valid accuracy1.0000
category key-set accuracy0.9350
category value-set accuracy0.8300
Binary F1 (positive = contains PII)1.0000
Binary precision1.0000
Binary recall1.0000
Macro F1 (key-presence)0.9791
Macro F1 (value-set)0.9529

Confusion matrix — binary is_valid (vLLM)

predicted PIIpredicted clean
actual PIITP = 177FN = 0
actual cleanFP = 0TN = 23

Per-category key-presence (vLLM)

CategorySupportPrecisionRecallF1
address790.9870.9870.987
bank_account121.0001.0001.000
card_number251.0001.0001.000
credentials101.0001.0001.000
date951.0001.0001.000
drivers_license270.9570.8150.880
email760.9871.0000.993
ip_address91.0001.0001.000
name1071.0000.9910.995
national_id520.9110.9810.944
passport_number210.9551.0000.977
phone_number631.0000.9840.992
tax_id240.9200.9580.939
username91.0001.0001.000

vLLM inference latency (single-stream, batch = 1)

Statms / prompt
Mean576.0
Median511.6
p951151.7
p991440.7
Max3209.3
Under 1 s89.0%

vLLM throughput (single batched submit)

  • —Prompts/sec: 27.73
  • —Output tokens/sec: 1569.0
  • —Input tokens/sec: 35596.5
  • —Batched wall time for all 200 prompts: 7.21 s

Card generated at 2026-05-31 07:39 UTC. Adapter weights: `Accuknoxtechnologies/PII-Qwen3.5-2B-v8`.