LineVul实验复现及相关问题

最近在复现 LineVul 这篇文章的实验,本文主要用于简化文章复现流程和记录复现过程中出现的问题。

1 安装依赖环境

pip install gdown
pip install transformers
pip install captum
pip install torch torchvision torchaudio
pip install numpy
pip install tqdm
pip install scikit-learn
pip install pandas
pip install tokenizers

2 下载数据

#### 下载数据集 #### (需要科学上网)
cd data/big-vul_dataset
gdown https://drive.google.com/uc?id=1h0iFJbc5DGXCXXvvR6dru_Dms_b2zW4V
gdown https://drive.google.com/uc?id=1ldXyFvHG41VMrm260cK_JEPYqeb6e6Yw
gdown https://drive.google.com/uc?id=1yggncqivMcP0tzbh8-8Eu02Edwcs44WZ
cd ../..
#### 下载模型 ####
cd linevul/saved_models/checkpoint-best-f1
gdown https://drive.google.com/uc?id=1oodyQqRb9jEcvLMVVKILmu8qHyNwd-zH
cd ../../..
#### 下载 codebert-base ####
cd linevul
mkdir microsoft
cd microsoft
git lfs install
git clone https://huggingface.co/microsoft/codebert-base

3 实验复现

根据GPU显存大小合理设置batchsize。

3.1 RQ1复现

cd linevul
python linevul_main.py \--output_dir=./saved_models \--model_type=roberta \--tokenizer_name=microsoft/codebert-base \--model_name_or_path=microsoft/codebert-base \--do_train \--do_test \--train_data_file=../data/big-vul_dataset/train.csv \--eval_data_file=../data/big-vul_dataset/val.csv \--test_data_file=../data/big-vul_dataset/test.csv \--epochs 10 \--block_size 512 \--train_batch_size 16 \--eval_batch_size 16 \--learning_rate 2e-5 \--max_grad_norm 1.0 \--evaluate_during_training \--seed 123456  2>&1 | tee train.log

3.2 RQ2复现

cd linevul
python linevul_main.py \--model_name=12heads_linevul_model.bin \--output_dir=./saved_models \--model_type=roberta \--tokenizer_name=microsoft/codebert-base \--model_name_or_path=microsoft/codebert-base \--do_test \--do_local_explanation \--top_k_constant=10 \--reasoning_method=all \--train_data_file=../data/big-vul_dataset/train.csv \--eval_data_file=../data/big-vul_dataset/val.csv \--test_data_file=../data/big-vul_dataset/test.csv \--block_size 512 \--eval_batch_size 512

3.3 RQ3复现

cd linevul
python linevul_main.py \--model_name=12heads_linevul_model.bin \--output_dir=./saved_models \--model_type=roberta \--tokenizer_name=microsoft/codebert-base \--model_name_or_path=microsoft/codebert-base \--do_test \--do_sorting_by_line_scores \--effort_at_top_k=0.2 \--top_k_recall_by_lines=0.01 \--top_k_recall_by_pred_prob=0.2 \--reasoning_method=all \--train_data_file=../data/big-vul_dataset/train.csv \--eval_data_file=../data/big-vul_dataset/val.csv \--test_data_file=../data/big-vul_dataset/test.csv \--block_size 512 \--eval_batch_size 512

4 报错及解决办法

1. 出现 Unexpected key(s) in state_dict: "roberta.embeddings.position_ids", "encoder.roberta.embeddings.position_ids" 错误。

报错原因:transformers库的版本过高,回退版本。

2. 出现 ImportError: cannot import name 'SAVE_STATE_WARNING' from 'torch.optim.lr_scheduler' 错误。

报错原因:transformers库的版本过低,更新版本。

经实际测试,版本为 transformers==4.30.0 时可正常运行。

5 参考

GitHub - awsm-research/LineVul: A Transformer-based Line-Level Vulnerability Prediction

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用工具radsystems,十分钟完成项目的登入注册,增删改查

发了这么多文章,很多人不知道这些文章是在讲什么,今天我来介绍一下逆天神器radsystems radsystems是一个可以快速开发的软件,也可以二次开发(之前文章有讲) 它可以帮助我们快速完成开发,毫不夸张的讲&…

PGSync安装使用教程(PostgreSQL数据实时同步至Elasticsearch)

说明 pgsync项目有两个,一个是ankane/pgsync,用于pgsql之间的数据同步,另一个是toluaina/pgsync,用于pgsql的数据同步至es,本教程适用于第二个项目。 pgsync应该是目前为止唯二支持es8的数据同步工具,另一…

探秘Flex布局下子元素宽度超出的那些烦心事

嘿,小伙伴们!你们有没有遇到过用Flex布局的时候,子元素的宽度莫名其妙地超出了父元素的情况?别着急,今天我就来给大家揭秘这个问题的来龙去脉,以及一些解决方案。让我们一起来深入探讨! 发现问…

Android 蓝牙实战——蓝牙音乐播放进度(二十)

对于蓝牙音乐的开发来说,播放进度是一个比较重要的数据参数,这里我们就来分析一下蓝牙音乐播放进度的相关回调。 一、回调流程 1、AvrcpControllerService 源码位置:/packages/apps/Bluetooth/src/com/android/bluetooth/avrcpcontroller/AvrcpControllerService.java /…

Agent AI智能体的未来探讨

背景 Agent AI智能体,作为人工智能技术的一种重要形态,正逐渐融入我们的日常生活并扮演着越来越重要的角色。随着技术的不断发展和智能化水平的提高,Agent AI在未来社会中的角色、发展路径以及其它方面可能带来的挑战备受广泛关注。本…

代码随想录算法训练营第四十五天| 70. 爬楼梯 (进阶), 322. 零钱兑换,279.完全平方数

目录 题目链接:70. 爬楼梯 (进阶) 思路 代码 题目链接:322. 零钱兑换 思路 代码 题目链接:279.完全平方数 思路 代码 总结 题目链接:70. 爬楼梯 (进阶) 思路 依旧是转换成…

package.json.依赖版本修改判断

package.json. 的dependencies已经改了axios版本"axios": “^1.6.8”, 查看dist\cdn\axios\1.0.0\axios.min.js中内容还是:/* axios v0.17.1 | © 2017 by Matt Zabriskie */以为没有更新axios版本 查看当前项目使用的包以及版本,不包括依…

自然语言处理: RAT = CoT + RAG

Retrieval Augmented Thoughts (RAT) 是一种协同思维链 (CoT) 和检索增强生成 (RAG) 的 AI 提示策略,助力解决具有挑战性的长任务推理和生成。 RAG 有关于RAG的介绍可以参考我之前的博文: 自然语言处理: 第十五章RAG(Retrieval Augmented Generation) 开发能够像人…

DCEP数字人民币:中国法定区块链中数字货币

一、背景 作为全球第二大经济体,中国在数字货币领域的发展一直备受关注。近年来,中国政府积极推动数字货币的研究和试点工作,逐步开放数字货币交易试点,并计划推出中国唯一合法数字货币——数字人民币(RMB Coin&#…

论文| Visual place recognition: A survey from deep learning perspective

2021-Visual place recognition: A survey from deep learning perspective

Broadwell,Broadwell-IBRS,Broadwell-noTSX,Broadwell-noTSX-IBR之间的区别

Broadwell是Intel第五代微架构的处理器系列,基于14纳米制程技术,是对前代Haswell架构的工艺改进(即“Tick”阶段),主要特点是提高了能效和降低了功耗,同时在一定程度上提升了性能。它是为笔记本电脑、移动设…

Spring框架中的ClassUtils工具类深度解析

1. 概述 ClassUtils是Spring框架中提供的一个工具类,主要用于简化Java反射API的使用,提供了一系列便捷的方法来处理类相关的操作,比如获取类的包名、获取类的简单名称、判断类是否可实例化等。 2. 用途 ClassUtils的主要用途包括&#xff1…

一个快速在线生成二维码的工具,文件在线预览,在线报名,在线二维码设计,在线二维码生成器,扫一扫二维码在线预览

在数字化时代,二维码已经成为我们生活中不可或缺的一部分。无论是支付、身份识别,还是信息分享,二维码都以其便捷、高效的特点赢得了广大用户的青睐。然而,对于普通用户而言,如何快速、简单地生成和管理二维码却是一个…

5分钟掌握Pydantic

数据模型定义:使用 Python 类来定义数据模型,这些类可以自动将输入转换为 Python 数据类型。 from pydantic import BaseModelclass User(BaseModel):id: intname: stremail: str类型检查:Pydantic 强制执行类型检查,确保传入的数…

小旋风蜘蛛池优化版

下载地址:小旋风蜘蛛池.zip 配置的时候需要做伪静态 #如果用的是宝塔面板设置伪静态,则去掉 第一行 的 location / { 和最后一行的 } location / { rewrite ^/template/(.*)\.html$ /index.php last; rewrite ^/temp/(data|db|robotlog|tplrules|errp…

前端css中animation(动画)的使用

前端css中animation的使用 一、前言二、主要内容说明(一)、animation-name(名称)属性(二)、animation-duration(持续时间)属性1.前两个属性举例,源码12.源码1运行效果&am…

Redis线程模型

文章目录 💖 Redis 单线程模型⭐ 单线程监听大量的客户端连接⭐ Redis 6.0 之前为什么不用多线程? 💖 Redis多线程⭐ Redis 后台线程⭐ Redis 网络IO多线程 对于读写命令来说,Redis 一直是单线程模型。不过,在 Redis 4…

SinoDB数据库的RAW TABLE

RAW表是不记录日志的永久表,类似于无日志模式数据库中的表。对于RAW表,支持对其进行更新、插入和删除操作,但日志是不会记录这些操作。可以在RAW表上定义索引,但不能在RAW表上定义唯一约束、主键约束或引用约束(refere…

语音识别之特征提取与起始检测

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

关闭前端统一请求库设计与落地

前言 对于一个前端工程师而言,每天都在面对的较多的需求场景就是调用后端的接口,但是因为众所周知的原因,前端目前已经有无数种调用接口的方式,例如:之前有基于 XHR、Axios、Fetch 进行封装的工具,大家都试…