|
|
--- |
|
|
library_name: transformers |
|
|
tags: [] |
|
|
--- |
|
|
|
|
|
# MNLP M3 DPO Model — Qwen3-0.6B-Base Fine-Tuned with Direct Preference Optimization |
|
|
|
|
|
This repository contains a Direct Preference Optimization (DPO) model built on top of the base model [`Qwen/Qwen3-0.6B-Base`](https://huggingface.co/Qwen/Qwen3-0.6B-Base), as part of the MNLP M3 project. The model is fine-tuned using a high-quality preference dataset to better align responses with human preferences. |
|
|
|
|
|
## Model Description |
|
|
|
|
|
- **Base Model**: [`Qwen/Qwen3-0.6B-Base`](https://huggingface.co/Qwen/Qwen3-0.6B-Base) |
|
|
- **DPO Dataset**: [`Tandogan/MNLP_M3_dpo_dataset`](https://huggingface.co/datasets/Tandogan/MNLP_M3_dpo_dataset) |
|
|
- **Libraries**: [Unsloth](https://github.com/unslothai/unsloth), [TRL](https://github.com/huggingface/trl) |
|
|
|
|
|
## Training Procedure |
|
|
|
|
|
### Direct Preference Optimization (DPO) |
|
|
|
|
|
We started from the official `Qwen3-0.6B-Base` checkpoint and applied **Direct Preference Optimization (DPO)**. |
|
|
DPO lets us directly train the model to score preferred responses higher than less-preferred ones, using ranked human feedback. |
|
|
|
|
|
#### 1. From Base Model (`Qwen3-0.6B-Base`) |
|
|
|
|
|
- **Dataset**: [`Tandogan/MNLP_M3_dpo_dataset`](https://huggingface.co/datasets/Tandogan/MNLP_M3_dpo_dataset) |
|
|
- **Max sequence length**: 2048 (prompt truncated to 1024) |
|
|
- **Epochs**: 4 |
|
|
- **Optimizer**: AdamW (learning rate = `2e-6`, weight decay = `0`) |
|
|
- **Precision**: bf16 |
|
|
- **Batch size**: 2 (gradient accumulation = 4) |
|
|
- **Scheduler**: cosine with 1% warmup |
|
|
- **DPO Beta**: 0.1 |
|
|
- **Eval & Checkpointing**: Every epoch |
|
|
- **Monitoring**: Weights & Biases (WandB) |
|
|
- **Best Epoch Selection**: Based on reward accuracy |
|
|
## Evaluation |
|
|
|
|
|
| Model | BLEU | ROUGE-1/2/L/Lsum | METEOR | MMLU ± SD | TQA_MC1 ± SD | TQA_MC2 ± SD |Reward Acc. ± SD | |
|
|
|--------------------------------|--------|---------------------------------------|--------|-------------------|------------------|------------------|--------------------| |
|
|
| **Qwen3-0.6B-Base** | 0.1086 | 0.3282 / 0.1458 / 0.2187 / 0.2964 | 0.2406 | 0.5239 ± 0.0365 | 0.2938 ± 0.0159 | 0.4589 ± 0.0148 |0 ± 0 | |
|
|
| **Qwen3-0.6B** | 0.0649 | 0.2488 / 0.0876 / 0.1617 / 0.2224 | 0.2146 | 0.4156 ± 0.0361 | 0.2717 ± 0.0156 | 0.4284 ± 0.0145 | 0.4226 ± 0.0088 | |
|
|
| **MNLP M3 DPO Model** | 0.1343 | 0.3608 / 0.1634 / 0.2345 / 0.3283 | 0.2718 | 0.5264 ± 0.0364 | 0.3023 ± 0.0161 | 0.4682 ± 0.0149 |0.6997 ± 0.0082 | |
|
|
|
|
|
|
|
|
## Intended Use |
|
|
|
|
|
This model is intended for research and experimentation with preference-based alignment and reward modeling. |
|
|
|
|
|
## How to Use |
|
|
|
|
|
You can use the model with the `transformers` and `trl` libraries for inference or evaluation: |
|
|
|
|
|
```python |
|
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
|
|
|
model = AutoModelForCausalLM.from_pretrained("Tandogan/MNLP_M3_dpo_model").to("cuda") |
|
|
tokenizer = AutoTokenizer.from_pretrained("Tandogan/MNLP_M3_dpo_model") |
|
|
|
|
|
prompt = "Explain recursion in simple terms." |
|
|
inputs = tokenizer(prompt, return_tensors="pt").to("cuda") |
|
|
outputs = model.generate(**inputs, max_new_tokens=256) |
|
|
print(tokenizer.decode(outputs[0], skip_special_tokens=True)) |