
الكود في "DCVD: دمج عبر الوسائط بقناة مزدوجة للكشف المشترك عن الثغرات الأمنية وتحديد مواقعها"


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 وChakkrit Tantithamthavorn، "LineVul: تنبؤ بالثغرات الأمنية على مستوى السطر باستخدام المحولات"، 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، "التقرير الفني لـ Qwen3"، arXiv:2505.09388، 2025.
الورقة: https://arxiv.org/abs/2505.09388
المستودع: https://github.com/QwenLM/Qwen3
GraphCodeBERT
Guo وآخرون، "GraphCodeBERT: التدريب المسبق لتمثيلات الكود باستخدام تدفق البيانات"، 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 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: معرّف العينة الفريدfunc_before: الكود المصدريllm_explanation: التفسير المولّد بواسطة LLMيجب أن يتضمن كل كائن بيانات PyG ما يلي:
index: مطابق لملف CSVx: ميزات العقد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>/
بما في ذلك: