一种代码处理的方法、装置、介质及电子设备制造方法及图纸

技术编号:36354969 阅读:12 留言:0更新日期:2023-01-14 18:11
本申请实施例提供一种代码处理的方法、装置、介质及电子设备,所述方法包括:获取待处理的源代码数据;根据所述源代码数据和代码多视角特征提取及表征模型获取针对所述源代码数据的代码特征表征结果,其中,所述代码多视角特征提取及表征模型可从多个视角提取所述源代码数据的特征并对提取的各种特征进行表征,所述多个视角至少包括代码文本视角和代码拓扑图视角,所述代码特征表征结果至少用于表征所述源代码数据的结构与语义。本申请的一些实施例相较于其它现有方法,学习到的表示更加全面。同时,通过对比代码样本的不同视角,本申请的一些实施例构建了使用无监督学习处理无标注代码数据的解决方案,提高了数据利用率。提高了数据利用率。提高了数据利用率。

【技术实现步骤摘要】
一种代码处理的方法、装置、介质及电子设备


[0001]本申请涉及代码处理领域,具体而言本申请实施例涉及一种代码处理的方法、装置、介质及电子设备。

技术介绍

[0002]代码表示学习的目的是构建代码数据的更为简单,同时包含必要信息的特征表示。对于代码分析来说,代码的表示学习是至关重要的。
[0003]随着人工神经网络技术的发展,已经有多种类的神经网络技术方法被应用到了代码表示学习之上,包括用于处理序列化数据的LSTM网络,transformer网络,以及用于处理图结构数据的图神经网络。目前的基于神经网络的代码表示学习方法,主要是使用神经网络模型对于代码数据(例如,代码数据包括代码语句、代码构建得到的抽象语法树和代码注释等)进行处理,得到代码的特征向量形式的表示,这些代码的表示在下游任务(例如,该下游任务示例性包括漏洞匹配与查找、代码分类、代码总结或者代码生成等)中有着广泛的应用。
[0004]本申请的专利技术人在研究中发现,目前的基于神经网络的代码表示学习方法往往使用代码的单一视角进行学习。例如,基于图结构数据视角的代码表示学习方法,只对于代码的抽象语法树进行学习。基于序列化数据视角的LSTM网络,transformer网络等,往往只对于代码的文本语句,注释等信息进行处理。然而在源代码中,即包含有丰富的文本信息,语义信息,包括各个语句的含义,注释的内容等,同时也包含有图结构的信息,包括调用关系,运行逻辑等。现有手段无法充分融合利用这些信息来进行完备的代码表示学习。

技术实现思路

[0005]本申请实施例的目的在于提供一种代码处理的方法、装置、介质及电子设备,本申请的一些实施例通过结合两种不同代码视角,包括图结构视角以及序列结构视角,使用对应的神经网络进行处理,然后进行无监督与有监督的学习,实现了代码的结构与语义的信息的表示获取,相较于其它现有方法,学习到的表示更加全面。同时,通过对比代码样本的不同视角,本申请的一些实施例构建了使用无监督学习处理无标注代码数据的解决方案,提高了数据利用率。
[0006]第一方面,本申请实施例提供一种代码处理的方法,所述方法包括:获取待处理的源代码数据;根据所述源代码数据和代码多视角特征提取及表征模型获取针对所述源代码数据的代码特征表征结果,其中,所述代码多视角特征提取及表征模型可从多个视角提取所述源代码数据的特征并对提取的各种特征进行表征,所述多个视角至少包括代码文本视角和代码拓扑图视角,所述代码特征表征结果至少用于表征所述源代码数据的结构与语义。
[0007]本申请的一些实施例使用基于代码数据的多个视角进行代码数据的特征提取及表征,进而得到更好的代码表示。
[0008]在一些实施例中,在所述根据所述源代码数据和代码多视角特征提取及表征模型获取针对所述源代码数据的代码特征表征结果之后,所述方法还包括:根据所述代码表征结果完成对所述源代码数据的分析。
[0009]本申请的一些实施例基于代码表征结果进行代码的进一步分析(例如,分类分析等)获取更好的处理结果。
[0010]在一些实施例中,在所述根据所述源代码数据和代码多视角特征提取及表征模型获取针对所述源代码数据的代码特征表征结果之前,所述方法还包括:通过无监督预训练以及有监督训练得到所述代码多视角特征提取及表征模型,其中,所述代码特征表征模型包括代码第一视角特征提取表征模型以及代码第二视角特征提取表征模型。
[0011]本申请的一些实施例通过引入无监督对比学习,来通过对比不同视角下的代码数据来准确可靠的促进表示学习,并对采用无标注数据进行无监督学习得到的模型进行基于标注数据的监督训练可以进一步提升训练得到的模型的性能。
[0012]在一些实施例中,所述代码第一视角特征提取表征模型为图神经网络模型,所述图神经网络模型包括:第一图神经子网络模型和第二图神经子网络模型,所述第一图神经子网络模型对应所述图神经网络模型包括的前n层神经网络层,所述第二图神经子网络模型对应所述图神经网络模型包括的后m层神经网络层,所述代码第二视角特征提取表征模型为序列语义表征模型,所述序列语义表征模型包括第一序列语义表征子模型以及第二序列语义表征子模型,所述第一序列语义表征子模型对应所述序列语义表征模型的前k层神经网络层,所述第二序列语义表征子模型对应所述序列语义表征模型的后p层神经网络层;其中,所述通过无监督预训练以及有监督训练得到所述代码多视角特征提取及表征模型,包括:至少根据无标注样本数据对所述第一图神经子网络模型和所述第一序列语义表征子模型进行训练,得到目标第一图神经子网络模型和目标第一序列语义表征子模型。
[0013]本申请的一些实施例采用无标注数据训练图神经网络模型的部分层以及序列语义表征模型的部分层,在提高无标注数据利用率的基础上提升训练得到的模型的性能。
[0014]在一些实施例中,所述至少根据无标注源代码数据对所述第一图神经子网络模型和所述第一序列语义表征子模型进行训练,得到目标第一图神经子网络模型和目标第一序列语义表征子模型,包括:将与无标注样本对应的抽象语法树输入所述第一图神经子网络模型,得到源代码第一特征表示,其中,所述源代码第一特征表示用于表征所述无标注数据的结构特征;将所述无标注样本数据输入所述第一序列语义表征子模型以得到源代码第二特征表示,其中,所述源代码第二特征表示用于表征所述无标注数据的语义特征;至少根据所述源代码第一特征表示和所述源代码第二特征表示进行联合对比获取对比结果,并根据所述对比结果调整训练中的模型参数。
[0015]本申请的一些实施例引入了无监督对比学习,来通过对比不同视角下的代码数据来准确可靠的促进表示学习。
[0016]在一些实施例中,所述源代码第二特征表示是将所述第一序列语义表征子模型输出的结果进行池化操作后得到的。
[0017]在一些实施例中,通过如下损失函数计算公式得到所述对比结果:
[0018][0019]其中,表示根据所述源代码第一特征表示和所述源代码第二特征表示得到的同一样本的不同视角间的相似度,s
j
为不同样本不同视角间的相似度,c
i
为单个样本的barlow twins损失,所有w均为权重参数,λ为可调整超参数,M表征同一样本的不同视角可组成的最大样本对的数量,N表征不同样本不同视角可组成的最大样本对的数量,K表征样本的数量。
[0020]本申请的一些实施例为了拉近同一样本不同视角下的特征表示,并且推远不同样本不同视角下的特征表示,使用了带权重的对比损失函数,提升对当前训练中的模型的性能评估。
[0021]在一些实施例中,在所述至少根据无标注样本数据对所述第一图神经子网络模型和所述第一序列语义表征子模型进行训练,得到目标第一图神经子网络模型和目标第一序列语义表征子模型之后,所述方法还包括:根据标注样本数据,对由所述目标第一图神经子网络模型和所述第二图神经子网络模型组成的第一图神经网络模型,以及由所述目标第一序列语义表征子模型和所述第二序列语义表征子模型组成本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码处理的方法,其特征在于,所述方法包括:获取待处理的源代码数据;根据所述源代码数据和代码多视角特征提取及表征模型获取针对所述源代码数据的代码特征表征结果,其中,所述代码多视角特征提取及表征模型可从多个视角提取所述源代码数据的特征并对提取的各种特征进行表征,所述多个视角至少包括代码文本视角和代码拓扑图视角,所述代码特征表征结果至少用于表征所述源代码数据的结构与语义。2.如权利要求1所述的方法,其特征在于,在所述根据所述源代码数据和代码多视角特征提取及表征模型获取针对所述源代码数据的代码特征表征结果之后,所述方法还包括:根据所述代码表征结果完成对所述源代码数据的分析。3.如权利要求1所述的方法,其特征在于,在所述根据所述源代码数据和代码多视角特征提取及表征模型获取针对所述源代码数据的代码特征表征结果之前,所述方法还包括:通过无监督预训练以及有监督训练得到所述代码多视角特征提取及表征模型,其中,所述代码特征表征模型包括代码第一视角特征提取表征模型以及代码第二视角特征提取表征模型。4.如权利要求3所述的方法,其特征在于,所述代码第一视角特征提取表征模型为图神经网络模型,所述图神经网络模型包括:第一图神经子网络模型和第二图神经子网络模型,所述第一图神经子网络模型对应所述图神经网络模型包括的前n层神经网络层,所述第二图神经子网络模型对应所述图神经网络模型包括的后m层神经网络层,所述代码第二视角特征提取表征模型为序列语义表征模型,所述序列语义表征模型包括第一序列语义表征子模型以及第二序列语义表征子模型,所述第一序列语义表征子模型对应所述序列语义表征模型的前k层神经网络层,所述第二序列语义表征子模型对应所述序列语义表征模型的后p层神经网络层;其中,所述通过无监督预训练以及有监督训练得到所述代码多视角特征提取及表征模型,包括:至少根据无标注样本数据对所述第一图神经子网络模型和所述第一序列语义表征子模型进行训练,得到目标第一图神经子网络模型和目标第一序列语义表征子模型。5.如权利要求4所述的方法,其特征在语,所述至少根据无标注源代码数据对所述第一图神经子网络模型和所述第一序列语义表征子模型进行训练,得到目标第一图神经子网络模型和目标第一序列语义表征子模型,包括:将与无标注样本对应的抽象语法树输入所述第一图神经子网络模型,得到源代码第一特征表示,其中,所述源代码第一特征表示用于表征所述无标注数据的结构特征;将所述无标注样本数据输入所述第一序列语义表征子模型以得到源代码第二特征表示,其中,所述源代码第二特征表示用于表征所述无标注数据的语义特征;至少根据所述源代码第一特征表示和所述源代码第二特征表示进行联合对比获取对比结果,并根据所述对比结果调整训练中的模型参数。6.如权利要求5所述的方法,其特征在于,所述源代码第二特征表示是将所述第一序列语义表征子模型输出的结果进行池化操作后得到的。7.如权利要求5所述的方法,其特征在于,通过如下损失函数计算公式得到所述对比结
果:其中,表示根据所述源代码第一特征表示和所述源代码第二特征表示得到的同一样本的不同视角间的相似度,为不同样本不同视角间的相似度,c
i
为单个样本的barlow twins损失,所有w均为权重参数,λ为可调整超参数,M表征同一样本的不同视角可组成的最大样本对的数量,N表征不同样本不同视角可组成的最大样本对的数量,K表征样本的数量。8.如权利要求7所述的方法,其特征在于,在所述至少根据无标注样本数据对所述第一图神经子网络模型和所述第一序列语义表征子模型进行训练,得到目标第一图神经子网络模型和目标第一序列语义表征子模型之后,所述方法还包括:根据标注样本数据,对由所述目标第一图神经子网络模型和所述第二图神经子网络模型组成的第一图神经网络模型,以及由所述目标第一序列语义表征子模型和所述第二序列语义表征子模型组成的第一序列语义表征模型,进行有监督训练得到所述代码多视角特征提取及表征模型。9.如权利要求8所述的方法,其特征在于,所述根据标注样本数据,对...

【专利技术属性】
技术研发人员:高航赵军锁周瑶李丹
申请(专利权)人:中国科学院软件研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1