模型:

mrm8488/codebert-base-finetuned-detect-insecure-code

英文

CodeBERT针对不安全代码检测进行了微调 ?⛔

CodeXGLUE -- Defect Detection 数据集上对 codebert-base 进行了微调,用于进行不安全代码检测的下游任务。

CodeBERT 的详细信息

我们提供了CodeBERT,这是一个针对编程语言(PL)和自然语言(NL)的双模态预训练模型。CodeBERT学习通用的表示形式,支持下游的NL-PL应用,如自然语言代码搜索、代码文档生成等。我们采用基于Transformer的神经架构来构建CodeBERT,并使用混合目标函数进行训练。目标函数包括了替换标记检测的预训练任务,即检测从生成器中采样得到的合理替代标记。这使得我们可以同时利用NL-PL对的双模态数据和仅包含NL或PL的单模态数据,前者提供了模型训练的输入标记,而后者有助于学习更好的生成器。我们通过微调模型参数来评估CodeBERT在两个NL-PL应用上的性能。结果显示,CodeBERT在自然语言代码搜索和代码文档生成任务上均取得了最先进的性能。此外,为了调查CodeBERT学到了哪些类型的知识,我们构建了一个NL-PL探测的数据集,并在固定了预训练模型的参数的情况下进行了评估。结果显示,CodeBERT在NL-PL探测上表现优于之前的预训练模型。

下游任务的详细信息(代码分类)- 数据集 ?

给定一个源代码,任务是识别它是否是一段可能攻击软件系统的不安全代码,例如资源泄露、用-after-free漏洞和DoS攻击等。我们将该任务视为二分类(0/1),其中1表示不安全代码,0表示安全代码。

使用的数据集来自于 Devign : Effective Vulnerability Identification by Learning Comprehensive Program Semantics via Graph Neural Networks 论文。所有项目都被合并并按80%/10%/10%进行训练/开发/测试集划分。

数据集的统计信息如下表所示:

#Examples
Train 21,854
Dev 2,732
Test 2,732

测试集指标 ?

Methods ACC
BiLSTM 59.37
TextCNN 60.69
1236321 61.05
1237321 62.08
1238321 65.30

模型实践 ?

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import numpy as np
tokenizer = AutoTokenizer.from_pretrained('mrm8488/codebert-base-finetuned-detect-insecure-code')
model = AutoModelForSequenceClassification.from_pretrained('mrm8488/codebert-base-finetuned-detect-insecure-code')

inputs = tokenizer("your code here", return_tensors="pt", truncation=True, padding='max_length')
labels = torch.tensor([1]).unsqueeze(0)  # Batch size 1
outputs = model(**inputs, labels=labels)
loss = outputs.loss
logits = outputs.logits

print(np.argmax(logits.detach().numpy()))

Manuel Romero/@mrm8488 创建 | LinkedIn

在西班牙制作 ❤