--- license: apache-2.0 base_model: Qwen/Qwen3-1.7B tags: - safety - classifier - knowledge-distillation - minillm - dia-guard language: - en --- # Shield-Qwen3-1.7B-KD-MINILLM-Qwen3-4B-SafeRL-OOB **Student:** `Qwen/Qwen3-1.7B` **Teacher:** `Qwen/Qwen3-4B-SafeRL` **KD method:** MINILLM **Scenario:** OOB (out-of-box — neither teacher nor student was fine-tuned on DIA-GUARD before KD) Part of the **DIA-GUARD** dialect-aware safety classifier suite. This checkpoint is the result of distilling an off-the-shelf 4B/8B safety teacher into a smaller student using 50K dialect-stratified samples from the DIA-GUARD train split, and evaluating on the full 181,874-sample dialect holdout test. ## Test Set Results | Metric | Value | |--------|-------| | **Accuracy** | **0.6288** | | **Precision** | 0.6252 | | **Recall** | 0.6215 | | **F1** | 0.6216 | | Test samples | 181,874 | ### Per-class breakdown | Class | Precision | Recall | F1 | Support | |-------|-----------|--------|-----|---------| | safe | 0.6063 | 0.5363 | 0.5691 | 83,140 | | unsafe | 0.6441 | 0.7067 | 0.6740 | 98,734 | ### Confusion matrix | | Predicted safe | Predicted unsafe | |---------------|---------------:|-----------------:| | **Actual safe** | TN=44,588 | FP=38,552 | | **Actual unsafe** | FN=28,956 | TP=69,778 | ## Training Setup | | | |---|---| | Method | MINILLM | | Teacher | Qwen/Qwen3-4B-SafeRL | | Student base | Qwen/Qwen3-1.7B | | Train data | 50,000 dialect-stratified DIA-GUARD samples | | Epochs | 1 | | Framework | HuggingFace transformers + accelerate | ## How to use ```python from transformers import AutoModelForCausalLM, AutoTokenizer tokenizer = AutoTokenizer.from_pretrained("jsl5710/Shield-Qwen3-1.7B-KD-MINILLM-Qwen3-4B-SafeRL-OOB") model = AutoModelForCausalLM.from_pretrained("jsl5710/Shield-Qwen3-1.7B-KD-MINILLM-Qwen3-4B-SafeRL-OOB", torch_dtype="bfloat16") prompt = "Classify the following text as safe or unsafe.\n\nText: Hello\n\nAnswer:" inputs = tokenizer(prompt, return_tensors="pt") out = model.generate(**inputs, max_new_tokens=8) print(tokenizer.decode(out[0], skip_special_tokens=True)) ```