
Le code de « DCVD: Dual-Channel Cross-Modal Fusion for Joint Vulnerability Detection and Localization »


project/
├── train.py
├── data_loader.py
├── README.md
├── requirements.txt
├── models/
│ ├── control_pathway.py
│ ├── semantic_pathway.py
│ ├── feature_fusion_module.py
│ ├── transformer_llm_module.py
│ └── multi_task_predictor.py
Nous utilisons le jeu de données LineVul pour la détection de vulnérabilités :
Michael Fu et Chakkrit Tantithamthavorn, « LineVul: A Transformer-based Line-Level Vulnerability Prediction », MSR 2022.
Article : https://conf.researchr.org/details/msr-2022/msr-2022-technical-papers/26/LineVul-A-Transformer-based-Line-Level-Vulnerability-Prediction
Dépôt : https://github.com/awsm-research/LineVul
Nous transformons ensuite le jeu de données en structures de graphe et alignons chaque échantillon avec des explications générées par LLM.
Nous utilisons les modèles pré-entraînés suivants :
OpenAI GPT-4o-mini
OpenAI, « Hello GPT-4o », 2024.
URL : https://openai.com/index/hello-gpt-4o/
Modèles Qwen (série Qwen3)
Qwen Team, « Qwen3 Technical Report », arXiv:2505.09388, 2025.
Article : https://arxiv.org/abs/2505.09388
Dépôt : https://github.com/QwenLM/Qwen3
GraphCodeBERT
Guo et al., « GraphCodeBERT: Pre-training Code Representations with Data Flow », ICLR 2021.
Article : https://arxiv.org/abs/2009.08366
Dépôt : https://github.com/microsoft/CodeBERT
Ce projet utilise des jeux de données et des modèles pré-entraînés disponibles publiquement. Leurs licences sont énumérées ci-dessous :
Jeu de données LineVul
Licence : MIT License
Source : https://github.com/awsm-research/LineVul
OpenAI GPT-4o-mini
L'utilisation est soumise aux Conditions d'utilisation d'OpenAI.
Modèles Qwen (Qwen3.5-4B)
Licence : Apache License 2.0
Source : https://github.com/QwenLM/Qwen3
GraphCodeBERT
Licence : MIT License
Source : https://github.com/microsoft/CodeBERT
Toutes les ressources sont utilisées conformément à leurs licences respectives.
python >= 3.9
torch>=2.0.0
torch-geometric>=2.4.0
transformers>=4.35.0
accelerate>=0.25.0
sentencepiece
pandas>=1.5.0
tqdm>=4.60.0
tensorboard
PyTorch Geometric (PyG) dépend de CUDA. Veuillez l'installer en fonction de votre environnement.
data/
├── processed/
│ ├── train_data_masked.pt
│ ├── train_with_llm.csv
│ ├── val_data_masked.pt
│ ├── val_with_llm.csv
│ ├── test_data_masked.pt
│ ├── test_with_llm.csv
├── config/
│ └── node_vocab.json
Le fichier CSV doit contenir les champs suivants :
index : identifiant unique d'échantillonfunc_before : code sourcellm_explanation : explication générée par LLMChaque objet PyG Data doit inclure :
index : aligné avec le CSVx : caractéristiques des nœudsast_edge_index : arêtes ASTcfg_edge_index : arêtes CFGy_f : étiquette au niveau de la fonctiony_s : étiquettes au niveau de la ligneline_mask : mappage jeton-ligneLe framework utilise les modèles pré-entraînés suivants :
Qwen/Qwen3.5-4Bmicrosoft/graphcodebert-baseVous pouvez les modifier via :
--llm_model_name
--transformer_base_name
python train.py \
--train_pt_path ./data/processed/train_data_masked.pt \
--train_csv_path ./data/processed/train_with_llm.csv \
--valid_pt_path ./data/processed/val_data_masked.pt \
--valid_csv_path ./data/processed/val_with_llm.csv \
--vocab_path ./data/config/node_vocab.json \
--output_dir ./outputs \
--run_name demo
Les résultats seront enregistrés dans :
outputs/<run_name>/
Notamment :