base_model: Qwen/Qwen3-4B-Instruct-2507 library_name: peft license: apache-2.0 language: - fr pipeline_tag: text-generation tags: - lora - qlora - peft - rgpd - gdpr - ai-act - french - conversational
🧭 Boussole RGPD — adaptateur QLoRA
Adaptateur LoRA pour Qwen/Qwen3-4B-Instruct-2507, entraîné pour obtenir un assistant pédagogique sur le RGPD et l'AI Act destiné aux TPE, PME et associations françaises.
L'agent explique les notions clés, donne des bonnes pratiques générales, redirige les situations à enjeu (contrôle CNIL, litige, fuite de données) vers un DPO ou un avocat, et refuse les demandes hors périmètre ou visant à contourner la loi.
⚠️ Projet pédagogique (mini-projet de Master). Cet adaptateur ne fournit pas de conseil juridique et peut produire des informations inexactes : voir Limites.
Utilisation
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig
from peft import PeftModel
BASE = "Qwen/Qwen3-4B-Instruct-2507"
ADAPTER = "sofianeAit/boussole-rgpd-lora"
tokenizer = AutoTokenizer.from_pretrained(ADAPTER)
base = AutoModelForCausalLM.from_pretrained(
BASE, device_map="auto",
quantization_config=BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.float16))
model = PeftModel.from_pretrained(base, ADAPTER)
SYSTEM = "Tu es Boussole RGPD, un assistant pédagogique pour les TPE, PME et associations françaises. ..."
# Utiliser le message système complet du projet (voir le dépôt GitHub) : l'adaptateur a été entraîné avec lui.
messages = [{"role": "system", "content": SYSTEM},
{"role": "user", "content": "Combien de temps peut-on garder les CV des candidats non retenus ?"}]
inputs = tokenizer(tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True),
return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=300, do_sample=True, temperature=0.3, top_p=0.9)
print(tokenizer.decode(out[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Entraînement
| Modèle de base | Qwen3-4B-Instruct-2507, gelé |
| Méthode | QLoRA : base quantifiée en 4 bits NF4 (double quantification), calculs en fp16 |
| LoRA | r = 16, α = 32, dropout 0,05, modules q/k/v/o + gate/up/down |
| Paramètres entraînés | 33 M (≈ 0,8 % des ~4 milliards de paramètres) |
| Optimisation | AdamW 8 bits, lr 2e-4, cosinus, warmup 5 %, lot effectif 16 |
| Arrêt | arrêt anticipé sur la perte de validation (meilleur point : pas 36, fin de la 2ᵉ époque) |
| Perte | calculée uniquement sur les réponses de l'agent (système et questions masqués) |
| Matériel | 1 × NVIDIA T4 (Google Colab), environ 30 minutes |
Données : 322 dialogues en français (257 entraînement / 32 validation / 33 test), répartis en 8 comportements (répondre, nuancer, ne pas inventer de dates ou de chiffres, AI Act, rediriger, refuser, multi-tours). Ils ont été rédigés avec l'aide d'un LLM à partir d'une fiche de 33 faits vérifiés sur les sources officielles (RGPD, AI Act, CNIL), puis soumis à des contrôles automatiques (format, vouvoiement, liste blanche de chiffres, similarité avec le test) et à une relecture critique.
Évaluation
Perte sur 33 dialogues de test jamais vus : 2,81 → 1,34 (perplexité 16,5 → 3,8).
Évaluation comportementale sur 40 requêtes de test écrites avant l'entraînement, notées à l'aveugle de 0 à 2 selon une grille définie à l'avance. Comparaison avec le même modèle de base, sans adaptateur mais avec 3 exemples few-shot dans le prompt :
| Critère (0–2) | Base + few-shot | Base + LoRA |
|---|---|---|
| Pertinence et correction | 1,48 | 1,25 |
| Rôle et format | 1,78 | 1,92 |
| Respect du périmètre | 1,85 | 1,78 |
| Absence d'invention | 1,40 | 1,10 |
| Tokens de prompt (moyenne) | 668 | 348 |
Lecture honnête : l'adaptateur apprend très bien le comportement (vouvoiement, concision, refus propres hors périmètre, plus aucune date inventée sur le calendrier de l'AI Act) avec un prompt deux fois plus court. En revanche, il n'améliore pas les connaissances et produit davantage d'erreurs formulées avec assurance. Au total, il fait légèrement moins bien que la baseline few-shot sur la justesse des réponses.
Limites
- Informations inexactes formulées avec assurance : l'adaptateur a appris le ton concis et affirmatif des réponses de référence plus que les connaissances qui les fondent.
- Connaissances figées : la réglementation évolue (le calendrier de l'AI Act a été modifié en 2026 par le règlement (UE) 2026/1744). L'agent est entraîné à ne pas citer de dates d'application.
- Réflexe parasite : face à une situation décrite sans question explicite, l'agent peut demander ce que l'on attend de lui au lieu de réagir (effet des dialogues multi-tours d'entraînement).
- Évaluation limitée à 40 requêtes : les écarts sont indicatifs.
Pistes d'amélioration : génération augmentée par recherche (RAG) sur la fiche de faits et les pages de la CNIL, adaptation plus légère, correction des dialogues multi-tours, combinaison de l'adaptateur et d'exemples few-shot.
Auteur
Sofiane Ait — mini-projet « Du Transformer pré-entraîné à une application de dialogue ». Code, données et évaluation : dépôt GitHub.