
Code de recherche pour extraire et entraîner des directions de sensibilisation à la sécurité dans les LLM multimodaux afin d’améliorer le comportement de refus tout en limitant la dérive sur les tâches bénignes.
Implémentation officielle de Transfer Safety Awareness for Cross-Modal Safety Drift in Multimodal Large Language Models (EMNLP 2026 Findings).
Ce dépôt contient le pipeline de direction de sensibilisation à la sécurité Qwen3-VL. Il extrait une direction d'activation liée au refus à partir d'exemples multimodaux nuisibles et inoffensifs, sélectionne la direction qui améliore le comportement de refus tout en limitant la dérive des tâches bénignes, et entraîne facultativement un vecteur de sensibilisation à la sécurité spécifique à la direction.
Le code prend actuellement en charge Qwen/Qwen3-VL-8B-Instruct via Hugging Face Transformers.
.
├── artifacts/directions/ # Direction sélectionnée précalculée et métadonnées
├── data/csv/ # Manifestes CSV utilisés par le pipeline
├── data/images/ # Racines d'images locales (non incluses)
├── directions/ # Extraction et sélection de direction
├── models/ # Utilitaires de modèle et de processeur Qwen3-VL
├── training/ # Entraînement de la direction de sensibilisation à la sécurité
├── utils/ # Utilitaires de hook d'activation
├── config.py
├── run_pipeline.py # Point d'entrée de génération et de sélection de direction
└── requirements.txt
Python 3.10+ et une installation PyTorch compatible CUDA sont recommandés.
git clone https://github.com/cucu220123/transfer-safety-awareness.git
cd transfer-safety-awareness
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
La première exécution télécharge Qwen/Qwen3-VL-8B-Instruct depuis Hugging Face. Assurez-vous que la machine dispose d'une mémoire GPU suffisante et que vous avez accepté toutes les conditions du modèle requises par le fournisseur du modèle.
Le dépôt inclut les manifestes CSV utilisés pour les expériences, mais ne redistribue pas les ensembles de données d'images sources. Obtenez les images auprès de leurs fournisseurs d'ensembles de données d'origine et placez-les sous ces racines relatives au projet :
data/images/vlsafe_images
data/images/vlsbench_imgs
data/images/mmvet_images
La correspondance est la suivante :
Les racines d'images et les chemins CSV peuvent être remplacés sans modifier le code :
export VLM_HARMFUL_IMAGE_ROOT=/path/to/vlsafe_images
export VLM_HARMLESS_IMAGE_ROOT=/path/to/vlsbench_imgs
export VLM_KL_IMAGE_ROOT=/path/to/mmvet_images
export VLM_HARMFUL_CSV=/path/to/harmful.csv
export VLM_HARMLESS_CSV=/path/to/harmless.csv
export VLM_KL_CSV=/path/to/benign_vqa.csv
Veuillez respecter les licences et conditions de chaque ensemble de données source lors du téléchargement ou de l'utilisation des images et des manifestes.
Pour exécuter la génération de directions candidates et la sélection basée sur la validation :
CUDA_VISIBLE_DEVICES=0 python run_pipeline.py --direction_only
La commande utilise 128 exemples d'entraînement et 32 exemples de validation par division par défaut. Elle écrit les résultats intermédiaires dans artifacts/direction_runs/<model-name>/ et enregistre la direction sélectionnée dans :
artifacts/directions/qwen3vl_refusal_direction.pt
artifacts/directions/qwen3vl_refusal_direction_metadata.json
Utilisez --model_path pour pointer vers un répertoire de modèle local ou un autre identifiant Hugging Face compatible. L'indicateur --skip_filter désactive l'étape de filtrage par score de refus.
Le dépôt contient déjà un artefact de direction précalculé pour le point de contrôle Qwen3-VL par défaut, cette étape peut donc être ignorée lorsque cet artefact convient à votre configuration.
L'entraînement met à jour la direction sélectionnée avec les objectifs de tâche bénigne et de refus utilisés dans le code de l'article. Un exemple avec quatre GPU est :
CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --nproc_per_node=4 --master_port=29501 \
-m training.train_safety_awareness_direction \
--epochs 8 \
--batch_size 1 \
--grad_accum_steps 1 \
--lr 5e-3
Les sorties d'entraînement sont écrites dans outputs/qwen3vl_safety_awareness_train/ par défaut. Les options utiles incluent --model_path, --direction_pt, --direction_meta, --artifact_dir, --epochs, --batch_size et --lr ; exécutez python -m training.train_safety_awareness_direction --help pour la liste complète.
CUDA_VISIBLE_DEVICES et utilisez la même révision de modèle, les mêmes manifestes d'entrée et les mêmes fichiers d'images pour des résultats comparables.split du CSV lorsqu'elle est présente ; sinon, il utilise question_id % 10 de manière déterministe.La citation de l'article sera ajoutée lorsque les informations bibliographiques finales et le lien vers l'article seront disponibles.
Le code de ce dépôt est publié sous la licence MIT. Les ensembles de données tiers, les images et le modèle Qwen3-VL restent soumis à leurs licences et conditions respectives.
| Manifeste | Racine d'images | Objectif |
|---|
qwen3vl_refusal_direction_harmful.csv | vlsafe_images | Exemples nuisibles/côté refus |
qwen3vl_refusal_direction_harmless.csv | vlsbench_imgs | Exemples inoffensifs/côté non-refus |
qwen3vl_kl_benign_vqa.csv | mmvet_images | Exemples VQA bénins pour l'évaluation KL/effets secondaires |