建设公司查询网站首页,虚拟币充值 wordpress,关键词是怎么排名的,网站空间免费「分享了一批文献给你#xff0c;请您通过浏览器打开 https://www.ivysci.com/web/share/biblios/D2xqz52xQJ4RKceFXAFaDU/ 您还可以一键导入到 ivySCI 文献管理软件阅读#xff0c;并在论文中引用 」 本文主旨#xff1a;本文提出了一个系统的框架来利用基于Transformer的语… 「分享了一批文献给你请您通过浏览器打开 https://www.ivysci.com/web/share/biblios/D2xqz52xQJ4RKceFXAFaDU/ 您还可以一键导入到 ivySCI 文献管理软件阅读并在论文中引用 」 本文主旨本文提出了一个系统的框架来利用基于Transformer的语言模型来检测软件漏洞。该框架包括以下几个步骤 1. 源代码翻译将C/C高级编程语言的源代码转换为能输入transformer的格式。这样做是为了利用自然语言与高级编程语言之间的相似性。
2. 模型准备使用大规模的基于Transformer的语言模型进行训练和微调。其中本文主要考虑了BERT (Bidirectional Encoder Representations from Transformers) 模型和GPT (Generative Pre-trained Transformer) 模型。
3. 推断将经过翻译的源代码注释片段输入到训练好的语言模型中以进行软件漏洞的检测。语言模型将根据上下文理解注释和代码的关系并判断是否存在潜在的漏洞。
通过这个框架可以利用Transformer-based语言模型来自动检测软件漏洞并且相比传统的基于RNN的模型语言模型在漏洞检测方面具有更好的性能表现。 本文的创新点 简而言之就是将软件的源代码转换成自然语言通过transformer来推断源代码有没有漏洞。 本文的行文结构是以回答以下问题展开的 RQ1:利用基于转换器的语言模型进行软件漏洞检测的系统框架是什么?
RQ2:与其他当代基于rnn的模型相比,现有的基于transformer的语言模型在检测软件漏洞方面表现如何?
RQ3:哪个平台能高效运行这些模型? 我比较关心数据转换即源代码是怎么一步步转换成可以输入到transformer的word embedding模式的 数据转换
第一步是将源代码转换为代码gadget。 1. 数据清洗由于代码gadgets来自多个来源数据集中可能存在重复的代码gadgets。数据清洗阶段会处理两个问题
(i) 相同标签下的重复代码gadgets这些重复的数据可能会影响测试集的泄露
(ii) 不同标签下的重复代码gadgets这些数据可能会对模型的训练和测试产生负面影响。为了清理数据集首先使用SHA256哈希算法将所有的代码gadgets映射为哈希值以便找到重复的代码gadgets。采用哈希方法查找重复数据的速度比正则表达式或简单字符串比较方法更快。对于存在标签冲突的代码gadgets将其全部移除对于相同标签下的重复代码gadgets只保留其中的一份。清洗后的数据集详见论文中的表格。
2. 数据预处理首先将代码gadgets中的注释移除。其次将用户自定义的名称替换为符号等价物。例如将用户自定义的函数名称替换为FUNC或者使用连续的自然数作为后缀如FUNC_1、FUNC_2等以区分多个函数将用户赋值的变量名称替换为VAR或者使用连续的自然数作为后缀如VAR_1、VAR_2等以区分多个变量。通过这种方式使代码gadgets标准化。最后根据可用的漏洞创建数据子集。例如从数据集中创建包含缓冲区错误BE及其非易受攻击版本以及资源管理错误RME及其非易受攻击版本的两个数据集。针对二分类和多分类实验分别按以下方式分配标签 - 对于二分类标签分别针对每一种漏洞进行实验如BE和RME数据集。如果代码gadgets具有漏洞则标签为1否则为0。 - 对于多分类标签针对多个漏洞的并集进行实验。将0标签分配给非易受攻击的数据其余标签依次递增根据数据中可用的漏洞类型进行标记。例如在VulDeePecker数据集中具有BE、RME和非易受攻击的代码gadgets分别标记为1、2和0。
3. 数据集划分在数据预处理步骤之后将数据集划分为多个组进行实验。例如VulDeePecker数据集划分为三个组
Group 1 包含BE及其非易受攻击的代码gadgetsGroup 2 包含RME及其非易受攻击的代码gadgetsGroup 3 包含BE、RME及其非易受攻击的代码gadgets。对于二分类实验分别使用 Group 1 和 Group 2 的数据集对于三分类实验使用 Group 3 的数据集。数据集按照 80:20 的比例划分为训练集和测试集。并采用三折交叉验证的方式在测试集上呈现综合结果。
第二步是将文本将处理过的代码gadgets用来做词嵌入
将代码中的单词映射到预先定义的词向量空间从而捕捉单词在代码中的含义和上下文。