
"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
취약점 탐지를 위해 LineVul 데이터셋을 사용합니다:
Michael Fu and Chakkrit Tantithamthavorn, "LineVul: A Transformer-based Line-Level Vulnerability Prediction", MSR 2022.
논문: https://conf.researchr.org/details/msr-2022/msr-2022-technical-papers/26/LineVul-A-Transformer-based-Line-Level-Vulnerability-Prediction
저장소: https://github.com/awsm-research/LineVul
또한 데이터셋을 그래프 구조로 전처리하고 각 샘플을 LLM이 생성한 설명과 정렬합니다.
다음 사전 학습 모델을 사용합니다:
OpenAI GPT-4o-mini
OpenAI, "Hello GPT-4o", 2024.
URL: https://openai.com/index/hello-gpt-4o/
Qwen 모델(Qwen3 시리즈)
Qwen Team, "Qwen3 Technical Report", arXiv:2505.09388, 2025.
논문: https://arxiv.org/abs/2505.09388
저장소: https://github.com/QwenLM/Qwen3
GraphCodeBERT
Guo et al., "GraphCodeBERT: Pre-training Code Representations with Data Flow", ICLR 2021.
논문: https://arxiv.org/abs/2009.08366
저장소: https://github.com/microsoft/CodeBERT
이 프로젝트는 공개적으로 제공되는 데이터셋과 사전 학습 모델을 사용합니다. 해당 라이선스는 아래와 같습니다:
LineVul 데이터셋
라이선스: MIT 라이선스
출처: https://github.com/awsm-research/LineVul
OpenAI GPT-4o-mini
사용은 OpenAI 이용약관을 따릅니다.
Qwen 모델(Qwen3.5-4B)
라이선스: Apache License 2.0
출처: https://github.com/QwenLM/Qwen3
GraphCodeBERT
라이선스: MIT 라이선스
출처: https://github.com/microsoft/CodeBERT
모든 에셋은 각 라이선스에 따라 사용됩니다.
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)은 CUDA에 의존합니다. 사용 환경에 맞게 설치하십시오.
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
CSV 파일에는 다음 필드가 포함되어야 합니다:
index: 고유 샘플 IDfunc_before: 소스 코드llm_explanation: LLM 생성 설명각 PyG Data 객체에는 다음이 포함되어야 합니다:
index: CSV와 정렬됨x: 노드 특성ast_edge_index: AST 엣지cfg_edge_index: CFG 엣지y_f: 함수 수준 레이블y_s: 라인 수준 레이블line_mask: 토큰-라인 매핑프레임워크는 다음 사전 학습 모델을 사용합니다:
Qwen/Qwen3.5-4Bmicrosoft/graphcodebert-base다음과 같이 수정할 수 있습니다:
--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
결과는 다음 경로에 저장됩니다:
outputs/<run_name>/
포함 내용: