Это обычный text classification encoder: на вход получает текстовое описание уязвимости, а на выходе даёт одну из 4 категорий severity: Low, Medium, High, Critical.
Модель
vulnerability-severity-classification-roberta-base — это fine-tuned версия roberta-base, обученная на датасете CIRCL/vulnerability-scores. Карточка модели описывает её как классификатор severity по описанию уязвимости.➖Как сие чудо работает➖
описание уязвимости
—> tokenizer RoBERTa
—> token IDs + attention mask
—> RoBERTa encoder
—> classification head
—> logits для 4 классов
—> softmax
—> severity label
➖Что именно делает RoBERTa внутри➖
RoBERTa читает весь текст как последовательность токенов и строит контекстное представление каждого токена через self-attention.
То есть слово “remote” будет иметь разное значение в контекстах:
remote authenticated attacker
remote code execution
remote file inclusion
remote denial of service
После прохода через encoder модель получает представление всего текста и classification head превращает это представление в 4 числа — logits:
Low: -1.2
Medium: 0.7
High: 2.1
Critical: 1.4
Потом softmax превращает logits в вероятности:
Low: 2%
Medium: 13%
High: 58%
Critical: 27%
И итоговый класс —
High.➖На чём она обучалась➖
Датасет
CIRCL/vulnerability-scores содержит около 695k rows, split примерно 625k train и 69.5k test, и размечен как English text classification dataset. В полях есть vulnerability id, title, description, cpes, несколько CVSS score-полей, patch_commit_url и source.➖Качество модели➖
На evaluation set у неё указаны:
Accuracy: 0.8191
F1 Macro: 0.7488
Low F1: 0.5694
Medium F1: 0.8601
High F1: 0.8153
Critical F1: 0.7503
Это говорит важную вещь: модель неплохо работает на Medium и High, но хуже различает Low; Low Recall указан как 0.5006, то есть примерно половину low severity случаев она может уводить в другие классы.
@poxek_ai