マルチモーダル大規模言語モデルにおけるクロスモーダル安全性ドリフトのための転移安全性認識(EMNLP 2026 Findings)の公式実装です。
このリポジトリには、Qwen3-VLの安全性認識方向パイプラインが含まれています。有害および無害なマルチモーダル事例から拒否関連の活性化方向を抽出し、良性タスクのドリフトを制限しながら拒否行動を改善する方向を選択し、必要に応じて方向固有の安全性認識ベクトルを訓練します。
このコードは現在、Hugging Face Transformersを通じてQwen/Qwen3-VL-8B-Instructをサポートしています。
.
├── artifacts/directions/ # 事前計算された選択方向とメタデータ
├── data/csv/ # パイプラインで使用されるCSVマニフェスト
├── data/images/ # ローカル画像ルート(含まれません)
├── directions/ # 方向抽出と選択
├── models/ # Qwen3-VLモデルおよびプロセッサユーティリティ
├── training/ # 安全性認識方向の訓練
├── utils/ # 活性化フックユーティリティ
├── config.py
├── run_pipeline.py # 方向生成および選択のエントリポイント
└── requirements.txt
Python 3.10以上とCUDA対応のPyTorchインストールを推奨します。
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
初回実行時にQwen/Qwen3-VL-8B-InstructがHugging Faceからダウンロードされます。マシンに十分なGPUメモリがあり、モデルプロバイダーが要求するモデル利用規約に同意していることを確認してください。
このリポジトリには実験で使用されたCSVマニフェストが含まれていますが、ソース画像データセットは再配布されません。元のデータセットプロバイダーから画像を取得し、以下のプロジェクト相対ルートに配置してください:
data/images/vlsafe_images
data/images/vlsbench_imgs
data/images/mmvet_images
対応関係は以下のとおりです:
画像ルートとCSVパスはコードを編集せずに上書きできます:
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
画像とマニフェストをダウンロードまたは使用する際は、各ソースデータセットのライセンスと利用規約に従ってください。
候補方向の生成と検証ベースの選択を実行するには:
CUDA_VISIBLE_DEVICES=0 python run_pipeline.py --direction_only
このコマンドは、デフォルトでスプリットごとに128の訓練事例と32の検証事例を使用します。中間結果はartifacts/direction_runs/<model-name>/に書き込まれ、選択された方向は以下に保存されます:
artifacts/directions/qwen3vl_refusal_direction.pt
artifacts/directions/qwen3vl_refusal_direction_metadata.json
--model_pathを使用してローカルモデルディレクトリまたは他の互換性のあるHugging Face識別子を指定できます。--skip_filterフラグは拒否スコアフィルタリング段階を無効にします。
このリポジトリには、デフォルトのQwen3-VLチェックポイント用の事前計算済み方向アーティファクトがすでに含まれているため、そのアーティファクトがセットアップに適している場合はこの段階をスキップできます。
訓練では、論文コードで使用される良性タスクと拒否の目的関数を用いて選択された方向を更新します。4GPUの例は以下のとおりです:
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
訓練出力はデフォルトでoutputs/qwen3vl_safety_awareness_train/に書き込まれます。便利なオプションには--model_path、--direction_pt、--direction_meta、--artifact_dir、--epochs、--batch_size、--lrがあります。完全なリストについてはpython -m training.train_safety_awareness_direction --helpを実行してください。
CUDA_VISIBLE_DEVICESを設定し、比較可能な結果を得るために同じモデルリビジョン、入力マニフェスト、画像ファイルを使用してください。split列が存在する場合はそれを使用して行を訓練/検証/テストに割り当て、それ以外の場合はquestion_id % 10を決定的に使用します。最終的な書誌情報と論文リンクが利用可能になり次第、論文の引用情報が追加されます。
このリポジトリのコードはMITライセンスの下で公開されています。サードパーティのデータセット、画像、およびQwen3-VLモデルは、それぞれのライセンスと利用規約の対象となります。
| マニフェスト | 画像ルート | 目的 |
|---|
qwen3vl_refusal_direction_harmful.csv | vlsafe_images | 有害/拒否側の事例 |
qwen3vl_refusal_direction_harmless.csv | vlsbench_imgs | 無害/非拒否側の事例 |
qwen3vl_kl_benign_vqa.csv | mmvet_images | KL/副作用評価用の良性VQA事例 |