
O código em "DCVD: Fusão Cross-Modal de Canal Duplo para Detecção e Localização Conjunta de Vulnerabilidades"


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
Usamos o conjunto de dados LineVul para detecção de vulnerabilidades:
Michael Fu e Chakkrit Tantithamthavorn, "LineVul: A Transformer-based Line-Level Vulnerability Prediction", MSR 2022.
Artigo: https://conf.researchr.org/details/msr-2022/msr-2022-technical-papers/26/LineVul-A-Transformer-based-Line-Level-Vulnerability-Prediction
Repositório: https://github.com/awsm-research/LineVul
Em seguida, pré-processamos o conjunto de dados em estruturas de grafo e alinhamos cada amostra com explicações geradas por LLM.
Usamos os seguintes modelos pré-treinados:
OpenAI GPT-4o-mini
OpenAI, "Hello GPT-4o", 2024.
URL: https://openai.com/index/hello-gpt-4o/
Modelos Qwen (série Qwen3)
Equipe Qwen, "Qwen3 Technical Report", arXiv:2505.09388, 2025.
Artigo: https://arxiv.org/abs/2505.09388
Repositório: https://github.com/QwenLM/Qwen3
GraphCodeBERT
Guo et al., "GraphCodeBERT: Pre-training Code Representations with Data Flow", ICLR 2021.
Artigo: https://arxiv.org/abs/2009.08366
Repositório: https://github.com/microsoft/CodeBERT
Este projeto usa conjuntos de dados e modelos pré-treinados disponíveis publicamente. Suas licenças estão listadas abaixo:
Conjunto de Dados LineVul
Licença: Licença MIT
Fonte: https://github.com/awsm-research/LineVul
OpenAI GPT-4o-mini
O uso está sujeito aos Termos de Uso da OpenAI.
Modelos Qwen (Qwen3.5-4B)
Licença: Apache License 2.0
Fonte: https://github.com/QwenLM/Qwen3
GraphCodeBERT
Licença: Licença MIT
Fonte: https://github.com/microsoft/CodeBERT
Todos os recursos são usados de acordo com suas respectivas licenças.
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
O PyTorch Geometric (PyG) depende de CUDA. Instale-o de acordo com o seu ambiente.
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
O arquivo CSV deve conter os seguintes campos:
index: identificador único da amostrafunc_before: código-fontellm_explanation: explicação gerada por LLMCada objeto Data do PyG deve incluir:
index: alinhado com o CSVx: características dos nósast_edge_index: arestas da ASTcfg_edge_index: arestas do CFGy_f: rótulo em nível de funçãoy_s: rótulos em nível de linhaline_mask: mapeamento de token para linhaO framework usa os seguintes modelos pré-treinados:
Qwen/Qwen3.5-4Bmicrosoft/graphcodebert-baseVocê pode alterá-los através de:
--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
Os resultados serão salvos em:
outputs/<run_name>/
Incluindo: