🚀 CodeBERT 针对不安全代码检测的微调模型 💾⛔
codebert-base 在 CodeXGLUE -- 缺陷检测 数据集上进行微调,用于不安全代码检测下游任务。
✨ 主要特性
我们提出了 CodeBERT,这是一种用于编程语言(PL)和自然语言(NL)的双峰预训练模型。CodeBERT 学习通用表示,以支持自然语言代码搜索、代码文档生成等下游 NL - PL 应用。我们使用基于 Transformer 的神经架构开发了 CodeBERT,并使用混合目标函数对其进行训练,该函数包含替换标记检测的预训练任务,即检测从生成器中采样的合理替代项。这使我们能够同时利用 NL - PL 对的双峰数据和单峰数据,前者为模型训练提供输入标记,而后者有助于学习更好的生成器。我们通过微调模型参数,在两个 NL - PL 应用上评估了 CodeBERT。结果表明,CodeBERT 在自然语言代码搜索和代码文档生成任务上均达到了最先进的性能。此外,为了研究 CodeBERT 学习到了何种类型的知识,我们构建了一个用于 NL - PL 探测的数据集,并在预训练模型参数固定的零样本设置下进行评估。结果显示,CodeBERT 在 NL - PL 探测方面的表现优于之前的预训练模型。
📚 下游任务(代码分类)详情 - 数据集
给定一段源代码,任务是识别它是否为可能攻击软件系统的不安全代码,例如资源泄漏、释放后使用漏洞和拒绝服务攻击。我们将此任务视为二元分类(0/1),其中 1 代表不安全代码,0 代表安全代码。
所使用的数据集来自论文 Devign: Effective Vulnerability Identification by Learning Comprehensive Program Semantics via Graph Neural Networks。所有项目被合并并按 80%/10%/10% 的比例划分为训练集/开发集/测试集。
数据集的数据统计信息如下表所示:
数据集 |
样本数量 |
训练集 |
21,854 |
开发集 |
2,732 |
测试集 |
2,732 |
🧾 测试集指标
💻 使用示例
基础用法
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)
outputs = model(**inputs, labels=labels)
loss = outputs.loss
logits = outputs.logits
print(np.argmax(logits.detach().numpy()))
由 Manuel Romero/@mrm8488 创建 | 领英
于西班牙用心打造 ♥