/ Модель

Характеристики

Контекст
1 026 токенов
Параметры
152 млн
Лицензия
MIT
Архитектура
roberta · dense
Опубликована
5 янв 2024

VulBERTa-MLP-Devign

Классификация текстаТекст → label4 профессии

Производная модели claudios/VulBERTa-MLP-MVD. Классификатор на основе RoBERTa для выявления уязвимостей в функциях на C, обученный на CodeXGlue Devign.

106скачиваний за 30 дней5лайковвеса обновлены22 мая 2024

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

Карточка модели claudios/VulBERTa-MLP-Devign на Hugging Face совпадает с карточкой claudios/VulBERTa-MLP-MVD, поэтому описание составлено по ней.

Это неофициальная версия VulBERTa с классификационной MLP-головой, представленная на Hugging Face. Модель разработана Hazim Hanif и Sergio Maffeis из Имперского колледжа Лондона и дообучена на C-коде из набора CodeXGlue Devign для классификации функций исходного кода по наличию уязвимостей.

В основе модели — RoBERTa с 151,6 млн параметров; для токенизации используется упрощённый процесс с удалением комментариев. Контекст составляет до 1026 токенов. Модель предназначена для выявления потенциально уязвимого C-кода и может применяться в анализе безопасности и экспериментах по обнаружению дефектов кода. Для токенизации требуется libclang. Лицензия — MIT.

Сценарии применения

  • поиск потенциально уязвимых функций в C-коде
  • первичная проверка исходного кода при анализе безопасности
  • классификация дефектов в коде на C
  • эксперименты по обнаружению уязвимостей в программном обеспечении

Ограничения

Модель обучена на C-коде из CodeXGlue Devign; её результаты не следует считать подтверждением наличия или отсутствия уязвимости без дополнительного анализа. Для токенизации требуется libclang.

Для каких профессий подходит4

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

VulBERTa MLP Devign

VulBERTa: Simplified Source Code Pre-Training for Vulnerability Detection

VulBERTa architecture

Overview

This model is the unofficial HuggingFace version of "VulBERTa" with an MLP classification head, trained on CodeXGlue Devign (C code), by Hazim Hanif & Sergio Maffeis (Imperial College London). I simplified the tokenization process by adding the cleaning (comment removal) step to the tokenizer and added the simplified tokenizer to this model repo as an AutoClass.

This paper presents presents VulBERTa, a deep learning approach to detect security vulnerabilities in source code. Our approach pre-trains a RoBERTa model with a custom tokenisation pipeline on real-world code from open-source C/C++ projects. The model learns a deep knowledge representation of the code syntax and semantics, which we leverage to train vulnerability detection classifiers. We evaluate our approach on binary and multi-class vulnerability detection tasks across several datasets (Vuldeepecker, Draper, REVEAL and muVuldeepecker) and benchmarks (CodeXGLUE and D2A). The evaluation results show that VulBERTa achieves state-of-the-art performance and outperforms existing approaches across different datasets, despite its conceptual simplicity, and limited cost in terms of size of training data and number of model parameters.

Usage

You must install libclang for tokenization.

pip install libclang

Note that due to the custom tokenizer, you must pass trust_remote_code=True when instantiating the model. Example:

from transformers import pipeline
pipe = pipeline("text-classification", model="claudios/VulBERTa-MLP-Devign", trust_remote_code=True, return_all_scores=True)
pipe("static void filter_mirror_setup(NetFilterState *nf, Error **errp)\n{\n    MirrorState *s = FILTER_MIRROR(nf);\n    Chardev *chr;\n    chr = qemu_chr_find(s->outdev);\n    if (chr == NULL) {\n        error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,\n                  \"Device '%s' not found\", s->outdev);\n    qemu_chr_fe_init(&s->chr_out, chr, errp);")
>> [[{'label': 'LABEL_0', 'score': 0.014685827307403088},
  {'label': 'LABEL_1', 'score': 0.985314130783081}]]

Data

We provide all data required by VulBERTa.
This includes:

  • Tokenizer training data
  • Pre-training data
  • Fine-tuning data

Please refer to the data directory for further instructions and details.

Models

We provide all models pre-trained and fine-tuned by VulBERTa.
This includes:

  • Trained tokenisers
  • Pre-trained VulBERTa model (core representation knowledge)
  • Fine-tuned VulBERTa-MLP and VulBERTa-CNN models

Please refer to the models directory for further instructions and details.

How to use

In our project, we uses Jupyterlab notebook to run experiments.
Therefore, we separate each task into different notebook:

Citation

Accepted as conference paper (oral presentation) at the International Joint Conference on Neural Networks (IJCNN) 2022.
Link to paper: https://ieeexplore.ieee.org/document/9892280

@INPROCEEDINGS{hanif2022vulberta,
  author={Hanif, Hazim and Maffeis, Sergio},
  booktitle={2022 International Joint Conference on Neural Networks (IJCNN)}, 
  title={VulBERTa: Simplified Source Code Pre-Training for Vulnerability Detection}, 
  year={2022},
  volume={},
  number={},
  pages={1-8},
  doi={10.1109/IJCNN55064.2022.9892280}
  
}

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм · text-classification

Можно запустить

Подбираем GPU…

Класс архитектуры
RobertaForSequenceClassification
Ревизия весов
fecabde

0 моделей