Text Classification
Transformers
Safetensors
English
distilbert
security
cyber-security
CWE
vulnerability-classification
cve
Eval Results (legacy)
text-embeddings-inference
Instructions to use mulliken/cwe-predictor with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use mulliken/cwe-predictor with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="mulliken/cwe-predictor")# Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("mulliken/cwe-predictor") model = AutoModelForSequenceClassification.from_pretrained("mulliken/cwe-predictor") - Notebooks
- Google Colab
- Kaggle
| library_name: transformers | |
| tags: | |
| - security | |
| - cyber-security | |
| - CWE | |
| - vulnerability-classification | |
| - cve | |
| license: apache-2.0 | |
| datasets: | |
| - zefang-liu/cve-and-cwe-mapping-dataset | |
| language: | |
| - en | |
| metrics: | |
| - accuracy | |
| - f1 | |
| base_model: | |
| - distilbert/distilbert-base-uncased | |
| pipeline_tag: text-classification | |
| model-index: | |
| - name: cwe-predictor | |
| results: | |
| - task: | |
| type: text-classification | |
| name: CWE Classification | |
| metrics: | |
| - type: accuracy | |
| value: 0.727207 | |
| name: Validation Accuracy | |
| - type: f1 | |
| value: 0.251264 | |
| name: Macro F1 Score | |
| # CWE Predictor - Vulnerability Classification Model | |
| This model classifies vulnerability descriptions into Common Weakness Enumeration (CWE) categories. It's designed to help security professionals and developers quickly identify the type of vulnerability based on textual descriptions. | |
| ## Model Details | |
| ### Model Description | |
| This is a fine-tuned DistilBERT model that predicts CWE (Common Weakness Enumeration) categories from vulnerability descriptions. The model was trained on a comprehensive dataset of CVE descriptions mapped to their corresponding CWE identifiers. | |
| **Key Features:** | |
| - Classifies vulnerabilities into 232 distinct CWE categories | |
| - Trained on 111,640 vulnerability descriptions | |
| - Achieves 72.72% accuracy on validation set | |
| - Macro F1 score of 0.251 demonstrating balanced performance across classes | |
| - Lightweight and fast inference using DistilBERT architecture | |
| - **Developed by:** [mulliken](https://huggingface.co/mulliken) | |
| - **Model type:** DistilBERT (Transformer-based classifier) | |
| - **Language(s) (NLP):** English | |
| - **License:** Apache 2.0 | |
| - **Finetuned from model:** [distilbert/distilbert-base-uncased](https://huggingface.co/distilbert/distilbert-base-uncased) | |
| ### Model Sources | |
| - **Hugging Face Model:** [mulliken/cwe-predictor](https://huggingface.co/mulliken/cwe-predictor) | |
| - **Dataset:** [CVE and CWE Mapping Dataset](https://huggingface.co/datasets/zefang-liu/cve-and-cwe-mapping-dataset) | |
| ## Uses | |
| <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. --> | |
| ### Direct Use | |
| This model can be used directly for: | |
| - **Vulnerability Triage:** Automatically classify security vulnerabilities reported in bug bounty programs or security audits | |
| - **Security Analysis:** Categorize CVE descriptions to understand vulnerability patterns | |
| - **Automated Security Reporting:** Generate CWE classifications for vulnerability reports | |
| - **Security Research:** Analyze trends in vulnerability types across codebases | |
| ### Downstream Use | |
| The model can be integrated into: | |
| - Security scanning tools and SAST/DAST platforms | |
| - Vulnerability management systems | |
| - Security information and event management (SIEM) systems | |
| - DevSecOps pipelines for automated vulnerability classification | |
| ### Out-of-Scope Use | |
| This model should NOT be used for: | |
| - Medical or safety-critical systems without additional validation | |
| - As the sole method for security assessment (should complement human expertise) | |
| - Classifying non-English vulnerability descriptions | |
| - Real-time security detection (model is designed for post-discovery classification) | |
| ## Bias, Risks, and Limitations | |
| ### Known Limitations | |
| - **Class Imbalance:** Some CWE categories are underrepresented in the training data, which may lead to lower accuracy for rare vulnerability types | |
| - **Temporal Bias:** Model trained on historical CVE data may not recognize newer vulnerability patterns | |
| - **Language Limitation:** Only trained on English descriptions | |
| - **Context Loss:** Limited to 512 tokens, longer descriptions are truncated | |
| ### Risks | |
| - False negatives could lead to unidentified security vulnerabilities | |
| - Should not replace human security expertise | |
| - May not generalize well to proprietary or domain-specific vulnerability descriptions | |
| ### Recommendations | |
| - Always use this model as a supplementary tool alongside human security expertise | |
| - Validate predictions for critical security decisions | |
| - Consider retraining or fine-tuning for domain-specific applications | |
| - Monitor model performance over time as new vulnerability types emerge | |
| ## How to Get Started with the Model | |
| ### Installation | |
| ```bash | |
| pip install transformers torch | |
| ``` | |
| ### Quick Start | |
| ```python | |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| import torch | |
| # Load model and tokenizer | |
| model = AutoModelForSequenceClassification.from_pretrained("mulliken/cwe-predictor") | |
| tokenizer = AutoTokenizer.from_pretrained("mulliken/cwe-predictor") | |
| # Prediction function | |
| def predict_cwe(text: str) -> str: | |
| encoded = tokenizer(text, return_tensors="pt", truncation=True, max_length=512) | |
| with torch.no_grad(): | |
| logits = model(**encoded).logits | |
| pred_id = torch.argmax(logits, dim=-1).item() | |
| return model.config.id2label[pred_id] | |
| # Example usage | |
| vuln_description = "Buffer overflow in the authentication module allows remote attackers to execute arbitrary code." | |
| cwe_prediction = predict_cwe(vuln_description) | |
| print(f"Predicted CWE: {cwe_prediction}") | |
| ``` | |
| ### Example Predictions | |
| ```python | |
| examples = [ | |
| "SQL injection vulnerability in login form allows attackers to bypass authentication", | |
| "Cross-site scripting (XSS) vulnerability in comment section", | |
| "Path traversal vulnerability allows reading arbitrary files", | |
| "Integer overflow in image processing library causes memory corruption" | |
| ] | |
| for desc in examples: | |
| print(f"Description: {desc}") | |
| print(f"Predicted CWE: {predict_cwe(desc)}\n") | |
| ``` | |
| ## Training Details | |
| ### Training Data | |
| The model was trained on the [CVE and CWE Mapping Dataset](https://huggingface.co/datasets/zefang-liu/cve-and-cwe-mapping-dataset), which contains: | |
| - CVE descriptions from the National Vulnerability Database (NVD) | |
| - Corresponding CWE classifications | |
| - Dataset size: 124,045 examples after filtering | |
| - Training set: 111,640 examples | |
| - Validation set: 12,405 examples | |
| - Number of CWE classes: 232 (after removing generic categories like "NVD-CWE-Other" and "NVD-CWE-noinfo") | |
| ### Training Procedure | |
| <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. --> | |
| #### Preprocessing | |
| 1. **Data Cleaning:** | |
| - Removed entries with missing descriptions or CWE IDs | |
| - Filtered out generic CWE categories ("NVD-CWE-Other", "NVD-CWE-noinfo") | |
| - Removed CWE categories with only 1 example to ensure stratified splitting | |
| 2. **Tokenization:** | |
| - Used DistilBERT tokenizer with max_length=512 | |
| - Applied truncation for longer descriptions | |
| #### Training Hyperparameters | |
| - **Learning rate:** 2e-5 | |
| - **Batch size:** 2 per device with gradient accumulation of 8 (effective batch size: 16) | |
| - **Number of epochs:** 1 | |
| - **Weight decay:** 0.01 | |
| - **Optimizer:** AdamW | |
| - **Training regime:** fp32 with gradient checkpointing | |
| - **Evaluation strategy:** Every 1000 steps | |
| #### Training Performance | |
| - **Total training time:** ~78 minutes (4712 seconds) (per epoch) | |
| - **Training steps:** 13,956 | |
| - **Training samples per second:** 23.691 | |
| - **Final training loss:** 1.134700 | |
| - **Best validation loss:** 1.082806 (at step 6000) | |
| - **Model size:** ~268MB | |
| ## Evaluation | |
| <!-- This section describes the evaluation protocols and provides the results. --> | |
| ### Testing Data, Factors & Metrics | |
| #### Testing Data | |
| Validation set of 12,405 examples (10% stratified split from the training data) | |
| #### Metrics | |
| - **Accuracy:** Overall correctness of predictions | |
| - **Macro F1 Score:** Unweighted mean of F1 scores for each class (ensures balanced performance across all CWE types) | |
| ### Results | |
| | Step | Training Loss | Validation Loss | Accuracy | Macro F1 | | |
| |------|--------------|-----------------|----------|----------| | |
| | 1000 | 1.044600 | 1.252940 | 0.704716 | 0.220344 | | |
| | 2000 | 1.158700 | 1.188677 | 0.711326 | 0.229855 | | |
| | 3000 | 1.119900 | 1.159229 | 0.719226 | 0.235295 | | |
| | 4000 | 1.112600 | 1.119924 | 0.720193 | 0.242404 | | |
| | 5000 | 1.110300 | 1.111053 | 0.722934 | 0.244389 | | |
| | 6000 | 1.134700 | 1.082806 | 0.727207 | 0.251264 | | |
| #### Summary | |
| The model achieves 72.72% accuracy on the validation set with a macro F1 score of 0.251. The relatively lower F1 score reflects the challenge of classifying across 232 different CWE categories with varying representation in the dataset. | |
| ## Model Examination | |
| The model uses standard DistilBERT attention mechanisms to process vulnerability descriptions. Key observations: | |
| - The model learns to identify security-related keywords and patterns | |
| - Attention weights typically focus on vulnerability-specific terms (e.g., "overflow", "injection", "traversal") | |
| - Performance varies by CWE category based on training data representation | |
| ## Environmental Impact | |
| Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700). | |
| - **Hardware Type:** Apple Silicon (M-series chip) | |
| - **Hours used:** ~1.3 hours | |
| - **Cloud Provider:** Local training (no cloud provider) | |
| - **Compute Region:** N/A (local) | |
| - **Carbon Emitted:** Minimal (Apple Silicon is energy efficient, ~15W TDP) | |
| ## Technical Specifications [optional] | |
| ### Model Architecture and Objective | |
| - **Base Architecture:** DistilBERT (distilbert-base-uncased) | |
| - **Task:** Multi-class text classification | |
| - **Number of labels:** 232 CWE categories | |
| - **Objective:** Cross-entropy loss for sequence classification | |
| - **Architecture modifications:** Added classification head with 232 output classes | |
| ### Compute Infrastructure | |
| Local machine with Apple Silicon processor | |
| #### Hardware | |
| - **Device:** Apple Silicon (MPS backend) | |
| - **Memory management:** PYTORCH_MPS_HIGH_WATERMARK_RATIO set to 0.0 | |
| #### Software | |
| - **Framework:** PyTorch with Hugging Face Transformers | |
| - **Python version:** 3.x | |
| - **Key libraries:** transformers, torch, datasets, scikit-learn, pandas, numpy | |
| ## Citation | |
| If you use this model in your research, please cite: | |
| ```bibtex | |
| @misc{mulliken2024cwepredictcr, | |
| author = {mulliken}, | |
| title = {CWE Predictor: A DistilBERT Model for Vulnerability Classification}, | |
| year = {2024}, | |
| publisher = {Hugging Face}, | |
| howpublished = {\url{https://huggingface.co/mulliken/cwe-predictor}} | |
| } | |
| ``` | |
| ## Glossary | |
| - **CWE (Common Weakness Enumeration):** A community-developed list of software and hardware weakness types | |
| - **CVE (Common Vulnerabilities and Exposures):** A list of publicly disclosed cybersecurity vulnerabilities | |
| - **NVD (National Vulnerability Database):** U.S. government repository of vulnerability management data | |
| - **Macro F1:** The unweighted mean of F1 scores calculated for each class independently | |
| - **SAST/DAST:** Static/Dynamic Application Security Testing | |
| ## More Information | |
| For questions, issues, or contributions, please visit the [Hugging Face model page](https://huggingface.co/mulliken/cwe-predictor). | |
| ## Model Card Authors | |
| - [mulliken](https://huggingface.co/mulliken) | |
| ## Model Card Contact | |
| Please use the Hugging Face model repository's discussion section for questions and feedback: [mulliken/cwe-predictor](https://huggingface.co/mulliken/cwe-predictor/discussions) |