一种基于信息检索的智能合约代码注释生成方法

文档序号:1922119 发布日期:2021-12-03 浏览:19次 >En<

阅读说明:本技术 一种基于信息检索的智能合约代码注释生成方法 (Intelligent contract code annotation generation method based on information retrieval ) 是由 陈翔 周彦琳 杨光 刘珂 于池 林浩 于 2021-08-16 设计创作,主要内容包括:本发明提供了一种基于信息检索的智能合约代码注释生成方法,包括以下步骤:(1)搜集来自Etherscan.io的智能合约语料库,对该语料库进行预处理操作;(2)使用CodeBert提取代码语义特征,并通过BERT-whitening进行关键特征提取和降维,计算语义相似度,选择排在前k位语义最相似的代码片段作为候选代码;(3)将代码片段视为由词元组成的集合,通过Jaccard相似度计算集合之间的词法相似度;(4)考虑智能合约代码的抽象语法树信息,通过编辑距离计算AST序列之间的语法相似度;(5)根据词法和语法相似度融合的比例计算出混合分数后,从候选代码中找出最相似的代码片段,用于生成代码注释。本发明的有益效果为:可以生成高质量的代码注释,提高智能合约代码的可读性和可理解性。(The invention provides an intelligent contract code annotation generation method based on information retrieval, which comprises the following steps: (1) collecting an intelligent contract corpus from Etherscan.io, and preprocessing the corpus; (2) extracting code semantic features by using Codebert, extracting key features and reducing dimensions by BERT-whitening, calculating semantic similarity, and selecting a code segment with the most similar top k-bit semantics as a candidate code; (3) regarding the code segments as a set consisting of word elements, and calculating lexical similarity among the sets through the Jaccard similarity; (4) calculating the grammar similarity between the AST sequences by editing the distance in consideration of the abstract grammar tree information of the intelligent contract codes; (5) and after calculating a mixed score according to the fusion ratio of the lexical similarity and the grammatical similarity, finding out the most similar code segment from the candidate codes for generating a code annotation. The invention has the beneficial effects that: high-quality code annotations can be generated, and the readability and understandability of the intelligent contract codes are improved.)

一种基于信息检索的智能合约代码注释生成方法

技术领域

本发明涉及计算机技术领域,尤其涉及一种基于信息检索的智能合约代码注释生成方法。

背景技术

智能合约是以计算机指令的形式自动处理传统合约的程序。它们可以在满足某些预定义条件时自动执行,应用十分广泛。与传统的软件开发不同,智能合约一旦部署就不会改变。因此,智能合约中的错误可能难以修复并且需要付出巨大的代价。为了避免这些错误,智能合约开发人员被鼓励重用来自可靠来源(如OpenZeppelin)的代码片段,于是,代码克隆频繁的出现在智能合约中并且克隆的比例随着时间的推移不断增加。然而,先前的研究发现智能合约中约10%的安全漏洞是由代码克隆造成的,其中滥用没有注释的代码是主要原因。

高质量的代码注释有助于提高智能合约代码的可读性和可理解性。因此,它们在智能合约的开发和维护中发挥着重要作用。然而,在智能合约领域,由于项目开发预算有限,开发人员缺乏编程经验,或者克隆代码时未能同步更新注释等原因,代码注释往往缺失或与代码的实际语义不匹配。因此,有必要为智能合约设计有效的自动代码注释生成方法。

最近研究将代码注释生成建模为神经机器翻译问题,提出了基于深度学习的方法并取得了很好的效果。然而,这些方法通常需要大量的计算资源来训练模型。因此,需要探索一种简单、快速、有效的轻量级方法来解决智能合约的代码注释生成问题。

如何解决上述技术问题成为本发明面临的课题。

发明内容

本发明的目的在于提供一种基于信息检索的智能合约代码注释生成方法,该方法可以根据智能合约代码片段生成对应的高质量代码注释。

本发明的思想为:本发明提出基于信息检索的智能合约代码注释生成方法,即通过融合语义、词法和语法相似度,基于信息检索为目标代码段找到语料库中最相似的代码段,然后,通过重用这个最相似代码段的注释作为目标代码段的注释。本发明的方法在相同的语料库中取得了比基准方法更好的性能。

本发明是通过如下措施实现的:一种基于信息检索的智能合约代码注释生成方法,其中,包括以下步骤:

(1)搜集来自Etherscan.io的智能合约语料库,对该语料库进行预处理操作,得到数据集D,设定数据集D的格式为<方法,注释>,该数据集包含了来自40932个智能合约的57676个<方法,注释>对,具体预处理操作包括如下步骤:

(1-1)首先考虑常规的函数方法和修改器,删除掉没有注释的方法;

(1-2)使用注释的第一句话作为真实注释,因为这通常描述了方法的功能;

(1-3)删除注释少于4个单词的<方法,注释>对,因为这些<方法,注释>对不适合后续BLEU-4分数的评估;

(1-4)删除语料库中的重复对;

(2)通过CodeBert和BERT-whitening操作提取代码语义信息,并计算目标代码段和训练集中代码段的语义相似度,具体包括如下步骤:

(2-1)对于给定的智能合约代码段,首先根据驼峰大小写命名规则对其进行分割,得到输入序列;

(2-2)将序列输入到CodeBert中,提取输出中第一层和最后一层的隐藏状态,并对它们取平均值,得到代码段的语义特征向量;

(2-3)使用BERT-whitening来处理语义向量,通过线性变换进行关键特征提取和降维;

(2-4)通过计算目标代码段和训练集中代码段语义向量之间的L2距离,推导出代码段间的语义相似度;

(3)使用FAISS库作为向量检索工具,根据语义相似度选择训练集中排在前k位的候选相似代码;

(4)计算代码段间的词法相似度,将代码片段视为由词元组成的集合,然后通过基于统计的方法计算两个集合之间的相似性,具体包括如下步骤:

(4-1)首先根据驼峰大小写命名规则分割代码序列;

(4-2)对代码序列进行去重复操作,以获得代码片段的词元集合;

(4-3)通过Jaccard相似度计算集合之间的相似度;

(5)计算代码段间的语法相似度,考虑了智能合约代码的抽象语法树(AST)信息,具体包括如下步骤:

(5-1)使用solidity-parser-antlr将智能合约代码转换为相应的抽象语法树(ASTs);

(5-2)使用SimSBT方法遍历AST树的类型节点,以获得有序序列;

(5-3)计算有序序列之间的编辑距离来获得它们的相似度;

(6)根据词法和语法相似度融合的比例计算出混合分数后,从前面步骤(3)产生的候选代码中选择最相似的代码,并将其注释重用为新代码的相应注释。

作为本发明提供的一种基于信息检索的智能合约代码注释生成方法进一步优化方案,所述步骤(2)中使用机器学习中的BERT-whitening来进一步处理语义向量,即通过线性变换对CodeBert提取的语义向量进行关键特征提取和降维,从而减少了存储空间,提高了模型检索速度,训练速度可提高两倍以上。

该基于信息检索的智能合约代码注释生成方法的参数设置如下:

BERT-whitening操作的维数K:256;

混合分数系数λ:0.7。

与现有技术相比,本发明的有益效果为:本发明提出的一种基于信息检索的智能合约代码注释生成方法考虑了代码的语义相似度、词法相似度和语法相似度三个方面,通过信息检索方法,找到代码库中最相似的代码段,并重用它们的注释,与以往的基于深度学习和基于信息检索的代码注释生成方法相比,该方法能获得更好的性能,可以生成更高质量的代码注释,这有助于提高智能合约代码的可读性和可理解性,易于智能合约的开发和维护,并且,由于智能合约中代码注释的重用,本发明所提的基于信息检索的轻量级方法相较于基于深度学习的代码注释生成方法而言更简单、快速、有效。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。

图1为本发明提供的一种基于信息检索的智能合约代码注释生成方法的系统框架图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。当然,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

实施例1

参见图1所示,本发明提供了一种基于信息检索的智能合约代码注释生成方法,具体包括以下内容:

(1)搜集来自Etherscan.io的智能合约语料库,该语料库包含40932个用solidity编程语言编写的以太坊智能合约,共有93146个常规方法、73533个修改器和12482个回退方法。

(2)对语料库进行预处理操作,包括删除没有注释的方法,删除重复对等,最终的语料库包含了来自40932个智能合约的57676个<方法,注释>对。表1、表2、表3分别显示了语料库代码长度、AST长度和注释长度的详细统计信息。

表1

表2

表3

(3)为了确保与基准方法的的公平比较,根据以往研究的数据划分方式,从语料库中提取了1159对数据作为测试集,其余的语料库作为训练集。

(4)计算代码语义相似度:使用CodeBert提取代码语义特征,并通过BERT-whitening进行关键特征提取和降维,计算语义相似度,选择排在前k位语义最相似的代码片段作为候选代码。

(4-1)根据驼峰大小写命名规则对代码段进行分割,得到输入序列其中M为代码序列的长度。然后将其输入到CodeBert中,提取输出中第一层和最后一层的隐藏状态,并取平均值,得到代码X∈Rd的语义特征向量,其中d为CodeBert的隐藏大小。最终得到训练集中智能合约代码行向量的集合其中N为训练集的大小;

(4-2)进一步使用机器学习中的BERT-whitening来处理语义向量,通过对线性变换进行关键特征提取和降维。通过计算目标代码段和训练集中代码段语义向量之间的L2距离,推导出代码段间的语义相似度;

(4-3)使用FAISS库作为向量检索工具,根据语义相似度选择训练集中排在前k位的候选相似代码;

(5)计算词法相似度:将代码片段视为由词元组成的集合,通过Jaccard相似度计算集合之间的相似度。

(5-1)首先根据驼峰大小写命名规则分割代码序列;

(5-2)对代码序列进行去重复操作,以获得代码片段的词元集合;

(5-3)通过Jaccard相似度计算集合之间的相似度;

(6)计算语法相似度:考虑智能合约代码的抽象语法树(AST)信息,通过编辑距离计算AST序列之间的相似度。

(6-1)使用solidity-parser-antlr将智能合约代码转换为相应的抽象语法树(ASTs);

(6-2)使用SimSBT方法遍历AST树的类型节点,以获得有序序列;

(6-3)计算有序序列之间的编辑距离来获得它们的相似度;

(7)根据词法和语法相似度融合的比例加权求和计算出混合分数后,从候选代码中找出最相似的代码片段,重用它的代码注释。

(8)该方法最优参数设置如下:

BERT-whitening操作的维数K:256;

混合词法和语法相似度分数的系数λ:0.7。

(9)在相同的语料库上对本发明方法和已有代码注释生成方法进行评估,使用来自神经机器翻译研究领域的三个性能指标(即BLEU、METEOR和ROUGE-L)来自动评估生成注释的质量:

表4本发明方法和其余方法的结果对照表

经实验表明,本发明提出的基于信息检索的智能合约代码注释生成方法相较于基于深度学习和信息检索的8个先进基准方法,能生成更高质量的代码注释。具体来说,本发明方法融合了代码的语义、词法和语法信息,可以超越这些最先进的基准方法。其中,对于BLEU-1/2/3/4而言,本发明方法至少能分别提高6.18%、9.86%、12.76%、14.85%的性能;对于METEOR而言,本发明方法至少提高了8.20%的性能;对于ROUGE-L而言,本发明方法至少可以提高4.87%的性能。这些结果表明了本发明所提方法的竞争力。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

8页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于生成物品的物理特性报告的方法、系统及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!