nhonhoccode's picture
Add model card (rich)
50cb0e4 verified
---
language:
- en
license: apache-2.0
library_name: transformers
pipeline_tag: text-generation
tags:
- qwen
- unsloth
- cybersecurity
- instruction-tuning
- lora
- kaggle
base_model: unsloth/Qwen3-0.6B
datasets:
- zobayer0x01/cybersecurity-qa
metrics:
- sacrebleu
- rougeL
- chrf++
- bertscore
- perplexity
---
# qwen3-0-6b — Cybersecurity QA (LORA)
Fine-tuned on Kaggle using **LORA**.
### Model Summary
- Base: `unsloth/Qwen3-0.6B`
- Trainable params: **10,092,544** / total **606,142,464**
- Train wall time (s): 20817.1
- Files: adapter_model.safetensors + adapter_config.json (LoRA) + tokenizer files
### Data
- Dataset: `zobayer0x01/cybersecurity-qa`
- Samples: **total=42427**, train=38184, val=1200
- Prompting: Chat template with a fixed system prompt:
```text
You are a helpful assistant specialized in cybersecurity Q&A.
```
### Training Config
| Field | Value |
|---|---|
| Method | **LORA** |
| Precision | fp16 |
| Quantization | none |
| Mode | epochs |
| Num Epochs | 1 |
| Max Steps | 5000 |
| Eval Steps | 500 |
| Save Steps | 500 |
| LR | 0.0001 |
| Max Length | 768 |
| per_device_batch_size | 1 |
| grad_accum | 8 |
### Evaluation (greedy, fixed-length decode)
| Metric | Score |
|---|---:|
| BLEU-4 | 1.33 |
| ROUGE-L | 13.31 |
| F1 (token-level) | 25.59 |
| chrF++ | 20.07 |
| BERTScore F1 | 82.60 |
| Perplexity | 16.29 |
> Notes: We normalize whitespace/punctuations, compute token-level P/R/F1, and use `evaluate`'s `sacrebleu/rouge/chrf/bertscore`.
## How to use
```python
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel
tok = AutoTokenizer.from_pretrained("nhonhoccode/qwen3-0-6b-cybersecqa-lora-20251112-1035")
base = AutoModelForCausalLM.from_pretrained("unsloth/Qwen3-0.6B")
mdl = PeftModel.from_pretrained(base, "nhonhoccode/qwen3-0-6b-cybersecqa-lora-20251112-1035") # Loads LoRA adapter
prompt = tok.apply_chat_template(
[{"role":"system","content":"You are a helpful assistant specialized in cybersecurity Q&A."},
{"role":"user","content":"Explain SQL injection in one paragraph."}],
tokenize=False, add_generation_prompt=True
)
ids = tok(prompt, return_tensors="pt").input_ids
out = mdl.generate(ids, max_new_tokens=128, do_sample=False)
print(tok.decode(out[0][ids.shape[-1]:], skip_special_tokens=True))
```
### Intended Use & Limitations
- Domain: cybersecurity Q&A; not guaranteed to be accurate for legal/medical purposes.
- The model can hallucinate or produce outdated guidance—verify before applying in production.
- Safety: No explicit content filtering. Add guardrails (moderation, retrieval augmentation) for deployment.
### Reproducibility (env)
- `transformers>=4.43,<5`, `accelerate>=0.33,<0.34`, `peft>=0.11,<0.13`, `datasets>=2.18,<3`, `evaluate>=0.4,<0.5`,
`rouge-score`, `sacrebleu`, `huggingface_hub>=0.23,<0.26`, `bitsandbytes`
- GPU: T4-class; LoRA recommended for low VRAM.
### Changelog
- 2025-11-12 10:36 — Initial release (LORA)