🚀 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 創建 | 領英
於西班牙用心打造 ♥