在 CodeXGLUE -- Defect Detection 数据集上对 codebert-base 进行了微调,用于进行不安全代码检测的下游任务。
我们提供了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
在西班牙制作 ❤