Maphe's picture
Upload folder using huggingface_hub
b4ab03b verified
|
Raw
History Blame Contribute Delete
7.79 kB
---
base_model: unsloth/Qwen3-1.7B-unsloth-bnb-4bit
library_name: peft
pipeline_tag: text-generation
tags:
- medical
- bilingual
- french
- english
- dpo
- lora
- peft
- trl
- unsloth
- qwen3
- base_model:adapter:unsloth/Qwen3-1.7B-unsloth-bnb-4bit
language:
- fr
- en
datasets:
- Maphe/medical-sft-5k
- Maphe/medical-dpo-5k
---
# Qwen3 1.7B Medical Finetuned
This repository contains a bilingual French/English medical LoRA adapter built on top of `unsloth/Qwen3-1.7B-unsloth-bnb-4bit`.
The training workflow used:
1. supervised fine-tuning (SFT) on a curated medical instruction dataset;
2. preference alignment with DPO on medical chosen/rejected pairs.
The adapter is intended for experimentation, evaluation, and educational use around medical-domain instruction tuning. It is not a medical device and must not be used as a substitute for a qualified health professional.
## Model Details
- Base model: `unsloth/Qwen3-1.7B-unsloth-bnb-4bit`
- Adapter type: PEFT LoRA
- Task: causal language modeling / chat-style instruction following
- Languages: French and English
- Final artifact in this folder: DPO-aligned LoRA adapter
- Upstream SFT dataset: `Maphe/medical-sft-5k`
- Upstream DPO dataset: `Maphe/medical-dpo-5k`
### Training setup
The project uses Unsloth, TRL, PEFT, and bitsandbytes with 4-bit loading.
LoRA configuration:
- `r = 16`
- `lora_alpha = 16`
- `lora_dropout = 0`
- `bias = none`
- Target modules: `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj`
SFT configuration:
- Epochs: `2`
- Per-device batch size: `32`
- Gradient accumulation: `16`
- Learning rate: `2e-4`
- Scheduler: `cosine`
- Max sequence length: `1024`
- Optimizer: `adamw_8bit`
- Seed: `42`
DPO configuration:
- Epochs: `1`
- Per-device batch size: `4`
- Gradient accumulation: `8`
- Learning rate: `5e-5`
- Beta: `0.1`
- Scheduler: `cosine`
- Max sequence length: `1024`
- Optimizer: `adamw_8bit`
- Seed: `42`
## Training Data
Two project datasets were prepared and used in the workflow:
- `Maphe/medical-sft-5k` for supervised fine-tuning
- `Maphe/medical-dpo-5k` for preference optimization
The SFT dataset aggregates bilingual medical QA and MCQ-style examples derived from these Hugging Face sources:
- `ANR-MALADES/MediQAl`
- `nthngdy/frenchmedmcqa`
- `keivalya/MedQuad-MedicalQnADataset`
The DPO dataset is built primarily from:
- `TsinghuaC3I/UltraMedical-Preference`
Project-side preprocessing includes:
- schema normalization across heterogeneous sources;
- prompt/response formatting for chat training;
- deduplication on textual pairs;
- source quota sampling;
- deterministic train/validation/test splitting for SFT;
- heuristic PII anonymization with Presidio and regex-based detectors.
The resulting model is optimized for:
- French and English medical questions;
- short factual answers;
- multiple-choice style medical questions;
- structured, direct responses.
## Prompting Format
The training prompt uses a fixed system instruction:
`Tu es un assistant medical expert. Reponds de maniere claire, factuelle et structuree. Si la question est en anglais, reponds en anglais.`
During training, assistant outputs were formatted in direct-answer mode with an empty Qwen thinking block. This adapter therefore works best with standard chat prompting and concise medical questions.
## Intended Uses
Appropriate uses:
- research prototypes in domain adaptation;
- comparison between base and finetuned medical assistants;
- educational work on SFT + DPO pipelines;
- internal experimentation on bilingual medical QA.
Out-of-scope uses:
- diagnosis or treatment decisions without clinician oversight;
- emergency triage;
- autonomous clinical decision support;
- legal, regulatory, or production-grade medical advice systems;
- any workflow requiring guaranteed factuality or safety.
## Evaluation
The repository contains a comparative evaluation between the base model and the SFT checkpoint on `500` examples.
Important: the metrics below are for the SFT checkpoint, not for this final DPO adapter. At the time of writing, no dedicated post-DPO benchmark has been added to the repository.
Available evaluation artifacts:
- `notebooks/eval_results/qwen3_base_vs_sft_output_summary.json`
- `notebooks/eval_results/qwen3_base_vs_sft_output.jsonl`
- `notebooks/eval_results/qwen3_base_vs_sft_output.csv`
Summary of SFT-vs-base results:
- Mean METEOR on free-text answers: `0.1361 -> 0.1653` (`+0.0292`)
- MCQ first-letter score: `0.0515 -> 0.4378` (`+0.3863`)
- MCQ correct answers: `12 -> 102`
Interpretation:
- the finetuning substantially improved MCQ behavior in this project benchmark;
- gains on open-ended generation were positive but more modest;
- automatic metrics remain insufficient to validate clinical quality.
## Biases, Risks, and Limitations
This model inherits limitations from both the base model and the medical datasets used during fine-tuning.
Known risks:
- hallucinated or overconfident medical statements;
- incomplete coverage of diseases, populations, and care settings;
- source-data bias toward specific question styles;
- imperfect anonymization in upstream preparation;
- limited evaluation depth;
- possible mismatch between benchmark gains and real clinical usefulness.
This adapter should be used only with strong human review and explicit user-facing warnings.
## How to Use
Example with PEFT and Transformers:
```python
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
base_model_id = "unsloth/Qwen3-1.7B-unsloth-bnb-4bit"
adapter_path = "Maphe/qwen3-1.7b-medical-finetuned"
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
base_model = AutoModelForCausalLM.from_pretrained(base_model_id)
model = PeftModel.from_pretrained(base_model, adapter_path)
messages = [
{
"role": "system",
"content": (
"Tu es un assistant medical expert. "
"Reponds de maniere claire, factuelle et structuree. "
"Si la question est en anglais, reponds en anglais."
),
},
{"role": "user", "content": "Quels sont les symptomes principaux du diabete de type 2 ?"},
]
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
)
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=256, do_sample=False)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
```
If you use Unsloth in the same way as in the project notebook, load the base model first and then the LoRA adapter exported in this repository.
## Repository Context
This model card is derived from the accompanying project materials:
- root project documentation in `README.md`
- training notebook: `notebooks/colab_qwen3_unsloth_finetune.ipynb`
- evaluation notebook: `notebooks/colab_qwen3_unsloth_eval_compare.ipynb`
The local training artifacts produced by the project include:
- SFT adapter: `notebooks/qwen3-medical-lora/`
- DPO adapter: `notebooks/qwen3-medical-dpo-lora/`
- SFT checkpoints: `notebooks/sft_output/checkpoint-*`
- DPO checkpoint: `notebooks/dpo_output/checkpoint-157`
## License
No final consolidated license statement has been added yet in the project for the combined derivative artifact. Before public release, verify:
- the license of the base model;
- the license terms of each source dataset;
- whether redistribution of this adapter is compatible with those upstream terms.
## Contact
Project owner / publisher: `Maphe`
If you publish this model publicly, it is worth adding:
- the source repository URL;
- exact dataset revisions;
- a dedicated post-DPO evaluation section;
- explicit medical safety disclaimers in the serving application.
### Framework versions
- PEFT 0.19.1