一种代码作者归属确定方法、装置、设备及介质
未命名
10-09
阅读:131
评论:0
1.本发明涉及计算机技术领域,特别涉及一种代码作者归属确定方法、装置、设备及介质。
背景技术:
2.一般的,代码作者归属确定在软件归属的检验或取证中有着重要应用,该研究在代码安全领域已有较长的发展历史。早期的代码作者归属确定主要基于统计学方法实现,通过专家经验设计显著性统计学指标以完成代码编写风格的刻画,随后由指标间的差异完成作者的区分。该方法的实现依赖于专家知识的完备性,近年来的研究采用机器学习方法确定代码作者归属。
3.现有技术通常采用机器学习或深度学习算法模型,通过大量数据对其进行训练,从而使算法模型归纳学习到代码作者部分编码风格属性的特征,以根据学习到的部分编码风格属性的特征确定代码作者归属。例如,代码作者可能会在代码写作的过程中,相近文件类型的代码中习惯性应用相同的模板框架,即,相近文件类型的代码中保持相同的布局特征,而算法模型可以通过学习数据集部分的感知此类编码风格属性的特征,以此确定代码作者归属。
4.但是,通过训练数据集训练后的算法模型,只适用于训练数据集所属的代码写作场景,在其他的代码写作场景中对代码作者归属的准确率较低。
技术实现要素:
5.基于此,有必要针对上述技术问题,提供一种代码作者归属确定方法、装置、设备及介质。
6.本说明书采用下述技术方案:
7.本说明书提供了一种代码作者归属确定方法,包括:
8.获取代码数据集,将数据集中各段代码作为训练样本,以及标注每段代码作者的归属;
9.对代码的风格属性进行划分,针对每种风格属性,确定训练样本对应该风格属性的归属统计信息;
10.将各归属统计信息分别输入不同特征提取分类器,通过各特征提取分类器确定训练样本的各第一预测作者,以最小化各第一预测作者与标注作者之间的偏差为优化目标,通过训练样本对各特征提取分类器进行训练;
11.将各特征提取分类器的特征提取层提取到的归属特征进行拼接并输入综合分类器,通过综合分类器确定训练样本的第二预测作者,以最小化第二预测作者与标注作者之间的偏差为优化目标,通过训练样本对综合分类器进行训练;
12.获取待确定作者归属的未知代码,通过训练后的各特征提取分类器的特征提取层对未知代码进行归属特征提取,将提取得到的各归属特征进行拼接并输入综合分类器,确
定代码作者归属。
13.可选地,所述代码的风格特征划分为布局特征、词法特征以及句法特征。
14.可选地,所述针对每种风格属性,确定训练样本对应该风格属性的统计信息,具体包括:
15.针对布局特征,确定训练样本中各行代码的位置信息以及各行代码的字符数;
16.针对词法特征,确定训练样本中不同词语的出现频率;
17.针对句法特征,确定训练样本对应的抽象语法树中不同节点和边的出现频率。
18.可选地,所述将提取得到的各归属特征进行拼接并输入综合分类器,具体包括:
19.确定每个特征提取分类器的特征权重,其中,特征权重与当前应用场景下该特征提取分类器对应的风格属性对确定代码作者归属的贡献度呈正相关;
20.根据特征权重对提取得到的各归属特征进行加权得到加权归属特征,将各加权归属特征进行拼接并输入综合分类器。
21.可选地,所述确定每个特征提取分类器的特征权重,具体包括:
22.将各特征提取分类器的特征权重预设为一;
23.通过训练后的各特征提取分类器确定未知代码的第三预测作者,根据各第三预测作者中不同作者出现的频率确定共识结果;
24.针对每个特征提取分类器,当确定该特征提取分类器的第三预测作者与共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重;
25.根据各特征提取分类器的特征权重,通过公式w
i_2
'=kw
i_1
'更新各特征提取分类器的特征权重;
26.其中,w
i_1
'为增加权重后的特征提取分类器i的特征权重,a为权重增加因子,w为增加权重前的特征提取分类器i的特征权重,k为权重更新因子,n为特征提取分类器的数量,w
i_2
'为更新后的特征提取分类器i的特征权重。
27.可选地,所述当确定该特征提取分类器的第三预测作者与共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重,具体包括:
28.展示包含共识结果和提示信息的界面,提示信息用于提示用户当确认共识结果不正确时对共识结果进行修正;
29.响应于用户的操作,确定更新后的共识结果,当确定该特征提取分类器的第三预测作者与更新后的共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重。
30.可选地,所述特征提取分类器和综合分类器为随机森林、神经网络、支持向量机中的至少一种。
31.本说明书提供了一种代码作者归属确定装置,包括:
32.获取模块,用于获取代码数据集,将数据集中各段代码作为训练样本,以及确定对每段代码作者归属的标注;
33.划分模块,用于对代码的风格属性进行划分,针对每种风格属性,确定训练样本对应该风格属性的统计信息;
34.获取模块,用于获取代码数据集,将数据集中各段代码作为训练样本,以及标注每
段代码作者的归属;
35.划分模块,用于对代码的风格属性进行划分,针对每种风格属性,确定训练样本对应该风格属性的归属统计信息;
36.第一训练模块,用于将各归属统计信息分别输入不同特征提取分类器,通过各特征提取分类器确定训练样本的各第一预测作者,以最小化各第一预测作者与标注作者之间的偏差为优化目标,通过训练样本对各特征提取分类器进行训练;
37.第二训练模块,用于将各特征提取分类器的特征提取层提取到的归属特征进行拼接并输入综合分类器,通过综合分类器确定训练样本的第二预测作者,以最小化第二预测作者与标注作者之间的偏差为优化目标,通过训练样本对综合分类器进行训练;
38.归属确定模块,用于获取待确定作者归属的未知代码,通过训练后的各特征提取分类器的特征提取层对未知代码进行归属特征提取,将提取得到的各归属特征进行拼接并输入综合分类器,确定代码作者归属。
39.本说明书提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述代码作者归属确定方法。
40.本说明书提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述代码作者归属确定方法。
41.本说明书采用的上述至少一个技术方案能够达到以下有益效果:
42.先获取代码数据集,确定训练样本以及对代码作者的标注,然后对代码的风格属性进行划分,确定训练样本对应每种风格属性的统计信息,接着将各统计信息分别输入不同特征提取分类器,根据标注对各特征提取分类器进行训练,以及将特征提取分类器的特征提取层提取到的特征进行拼接并输入综合分类器,根据标注对综合分类器进行训练,最后获取待确定作者归属的未知代码,通过训练后的特征提取分类器的特征提取层对未知代码进行特征提取,将提取得到的各特征进行拼接并输入综合分类器,确定代码作者归属。
43.本方案通过对代码的风格属性进行划分,采用多个特征提取分类器进行特征提取,避免了特征忽略,提高了综合分类器的特征利用率,从而提高了代码作者归属确定的准确率。
附图说明
44.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
45.图1为本说明书提供的一种代码作者归属确定方法流程示意图;
46.图2为本说明书提供的一种代码作者归属确定装置示意图;
47.图3为本说明书提供的一种实现代码作者归属确定方法的计算机设备示意图。
具体实施方式
48.为使本说明书的目的、技术方案和优点更加清楚,下面将结合本说明书具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于说明书中的实施例,本领域普通技术人员在没
有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
49.一般的,不同的作者可能会在代码写作的过程中保持不同的风格属性,所说的风格属性可以是指布局特征、词法特征以及句法特征。
50.例如,对于布局特征,作者a可能会在代码写作的过程中,相近文件类型的代码中习惯性应用相同的模板框架,作者b可能会采用与作者a不同的模板框架。
51.对于词法特征,作者a可能在若干关键字中对个别几种的使用频率较高,对其他关键字使用频率较低,而作者b可能有与作者a不同的关键字使用偏好,此外,在对变量进行命名时,不同的作者往往也有不同的词法风格特征。
52.对于句法特征,作者a可能对某些程序结构的使用频率较高,对其他程序结构的使用频率较低,而作者b可能有与作者a不同的程序结构偏好,如,作者a可能习惯使用当型循环,而作者b可能习惯使用直到型循环。
53.目前的算法模型通常可通过数据集学习到部分编码风格属性的特征,以根据学习到的特征确定未知代码的作者归属。但是,代码作者的编码风格可能在不同时期有所不同,导致数据集本身会包含偏差,进而导致根据存在偏差的数据集训练得到的算法模型会聚焦于个别的特征确定代码的作者归属,当在新的时间段对应的应用场景下,则算法模型的准确率较低。
54.例如,作者a可能在某时期的布局特征较为明显,于是以对应该时期的数据集对算法模型进行训练后,算法模型可以充分学习到作者a在布局特征方面的风格,而对于其他风格属性,算法模型无法充分学习掌握,会忽略其中的一种或多种风格属性的特征。导致若未知代码是作者a在与数据集不同的时期写作的,则作者a可能在未知代码中句法特征相对更为明显,但算法模型由于训练过程中没能充分掌握句法特征这一风格属性,则算法特征在新的应用场景下确定代码作者归属的准确率较低。
55.目前,对于上述问题尚未有系统性的解决方案,当前主要手段仍是通过扩大数据集规模以缓解该问题。这样带来的问题是,继续增大数据集规模虽然让模型不再局限于狭义上的风格属性,但是却无法排除广义上风格属性对于作者归属判断的干扰,这些风格属性隐藏在数据集中难以通过观察发现。
56.综上,现有代码作者归属确定方法没有考虑数据集偏差,在目标场景中训练得到的算法模型只能在目标场景起作用,迁移性不强。而缓解数据集偏差的方法通过扩大数据集规模完成,只能把偏差变得更难感知,但对消除偏差不起作用。
57.以下结合附图,详细说明本技术各实施例提供的技术方案。
58.图1为本说明书中一种代码作者归属确定方法流程示意图,具体包括以下步骤:
59.s101:获取代码数据集,将数据集中各段代码作为训练样本,以及标注每段代码作者的归属。
60.在实际应用中,服务器在通过算法模型确定代码作者归属时,可先通过数据集对算法模型进行训练,然后再通过训练后的算法模型进行代码作者归属的确定。
61.于是,在本说明书一个或多个实施例中,业务平台的服务器可先获取数据集,将数据集中各段代码作为训练样本,并标注数据集中每段代码作者的归属,以通过训练样本和标注作者对后续采用的算法模型进行训练。
62.其中,数据集可以是服务器事先采集得到的,还可以是通过第三方平台获取得到,
具体采用何种方式可根据需要确定,本说明书对此不做限制。
63.本说明书中提到的服务器可以是设置于业务平台的服务器,或能执行本说明书方案的诸如台式机、笔记本电脑等设备。为了方便说明,下面仅以服务器为执行主体进行说明。
64.s102:对代码的风格属性进行划分,针对每种风格属性,确定训练样本对应该风格属性的归属统计信息。
65.通过上述获取到训练样本以及训练样本对应的标注后,服务器可先对代码的风格属性进行划分。其中,所说的风格属性表征代码作者在写作过程中可能会在若干方面表现出的习惯偏好。
66.具体的,代码的风格属性可划分为布局特征、词法特征以及句法特征。其中,布局特征是指代码的整体结构,例如,各行代码的长度、换行符的使用、通用的模板框架等等。词法特征是指代码中用词的偏好,如,关键字的使用偏好、变量命名的用词偏好。函数命名的用词偏好等等。句法特征是指代码中程序结构的使用偏好,如,选择结构的使用频率、循环结构的使用频率、程序设计的结构偏好等等。
67.当然了,可以理解的是,每种风格属性还可进一步细分为不同的信息类型,以句法特征为例,句法特征可至少包括选择结构、循环结构两种信息类型,其中,选择结构又可包括单选择结构、双选择结构、多选择结构三种信息类型。
68.于是对于上述各种风格属性,服务器可针对每种风格属性,确定训练样本对应该风格属性的归属统计信息,其中,这里所说的归属统计信息是指可以体现作者差异的风格属性对应的统计信息,归属统计信息可以是该风格属性包括的不同信息类型的综合归属统计信息。
69.具体的,针对布局特征,服务器可确定训练样本中各行代码的位置信息以及各行代码的字符数,针对词法特征,服务器可确定训练样本中不同词语的出现频率,针对句法特征,服务器可确定训练样本对应的抽象语法树中不同节点和边的出现频率。其中,各种风格属性的归属统计信息可通过向量的方式进行表示。
70.当然了,上述对于代码的风格属性的划分以及确定训练样本对应每种风格属性的归属统计信息的描述仅为示例性说明,具体可根据需要设置,本说明书对此不做限制。
71.s103:将各归属统计信息分别输入不同特征提取分类器,通过各特征提取分类器确定训练样本的各第一预测作者,以最小化各第一预测作者与标注作者之间的偏差为优化目标,通过训练样本对各特征提取分类器进行训练。
72.s104:将各特征提取分类器的特征提取层提取到的归属特征进行拼接并输入综合分类器,通过综合分类器确定训练样本的第二预测作者,以最小化第二预测作者与标注作者之间的偏差为优化目标,通过训练样本对综合分类器进行训练。
73.s105:获取待确定作者归属的未知代码,通过训练后的各特征提取分类器的特征提取层对未知代码进行归属特征提取,将提取得到的各归属特征进行拼接并输入综合分类器,确定代码作者归属。
74.通过步骤s102得到训练样本对应每种风格属性的归属统计信息后,服务器可将每种风格属性的归属统计信息作为输入,输入不同的分类器中进行特征提取训练。
75.具体的,以布局特征为例进行说明,可将布局特征对应的归属统计信息的向量表
示作为输入,通过预先确定的特征提取分类器确定训练样本的各第一预测作者,并以最小化该第一预测作者与步骤s101中得到的标注作者之间的偏差为优化目标,通过训练样本对各特征提取分类器进行训练。
76.这里对各特征提取分类器的训练是为了训练各特征提取分类器的特征提取层,以后续在实际应用中通过各特征提取分类器的特征提取层,对未知样本进行对应风格属性的归属特征提取。
77.然后,服务器可将各特征提取分类器的特征提取层提取到的特征进行拼接并输入综合分类器,通过综合分类器确定训练样本的第二预测作者,以最小化第二预测作者与标注作者之间的偏差为优化目标,通过训练样本对综合分类器进行训练。其中,所说的拼接为将特征的向量表示进行一维拼接。
78.以风格属性包括布局特征、词法特征以及句法特征为例进行说明,可通过特征提取分类器a对训练样本进行布局特征提取,通过特征提取分类器b对训练样本进行词法特征提取,通过特征提取分类器c对训练样本进行句法特征提取,对特征提取分类器a、b、c分别进行训练,然后将特征提取分类器a、b、c三者的特征提取层提取到的特征进行拼接并输入综合分类器d,通过综合分类器d确定训练样本的第二预测作者,以最小化第二预测作者与标注之间的偏差为优化目标,对综合分类器d进行训练。训练后的综合分类器d即可基于多种风格属性进行代码作者归属的确定。
79.其中,对于特征提取分类器或综合分类器可以是任意的分类器算法模型,各特征提取分类器可以是不同的分类器算法模型,具体可根据需要确定,本说明书对此不做限制。这里的归属特征即每个特征提取分类器根据输入的归属统计信息进行特征提取得到。分类器如何根据输入的数据进行特征提取已有较为成熟的技术实现,此处不再赘述。
80.通过上述完成对各分类器的训练后,服务器在获取到待确定作者归属的未知代码时,可通过训练后的特征提取分类器的特征提取层对未知代码进行归属特征提取,将提取得到的各归属特征进行拼接并输入综合分类器,确定代码作者归属。
81.基于图1所示的代码作者归属确定方法,先获取代码数据集,确定训练样本以及对代码作者的标注,然后对代码的风格属性进行划分,确定训练样本对应每种风格属性的归属统计信息,接着将各归属统计信息分别输入不同特征提取分类器,根据标注对各特征提取分类器进行训练,以及将特征提取分类器的特征提取层提取到的归属特征进行拼接并输入综合分类器,根据标注对综合分类器进行训练,最后获取待确定作者归属的未知代码,通过训练后的特征提取分类器的特征提取层对未知代码进行归属特征提取,将提取得到的各归属特征进行拼接并输入综合分类器,确定代码作者归属。
82.本方案通过对代码的风格属性进行划分,采用多个特征提取分类器进行特征提取,避免了特征忽略,提高了综合分类器的特征利用率,从而提高了代码作者归属确定的准确率。
83.在应用本说明书提供的代码作者归属确定方法时,可不根据图1所示的各步骤的顺序执行,具体各步骤的执行顺序可根据需要确定,本说明书对此不做限制。
84.此外,对应于代码作者在不同的编码环境下,各风格属性可能会有不同程度的表现倾向,在本说明书一个或多个实施例中,服务器还可通过为各特征提取分类器设置特征权重,来调节各特征提取分类器对应的风格属性在最后综合分类器中的重要性。
85.具体的,在步骤s105中,服务器在通过训练后的特征提取分类器的特征提取层对未知代码进行特征提取,将提取得到的各特征进行拼接并输入综合分类器,确定代码作者归属时,服务器可先通过训练后的特征提取分类器的特征提取层对未知代码进行特征提取,然后,确定每个特征提取分类器的特征权重,其中,特征权重与当前应用场景下该特征提取分类器对应的风格属性对确定代码作者归属的贡献度呈正相关,然后根据特征权重对提取得到的各归属特征进行加权得到加权归属特征,将各加权归属特征进行拼接并输入综合分类器,以确定代码作者归属。
86.其中,确定每个特征提取分类器的特征权重,具体如何设置可根据需要确定,本说明书对此不做限制,例如,可以是根据经验进行设置。
87.例如,继续以步骤s103中例子进行说明,假设当前的编码环境下,代码作者的布局特征较为突出,而词法特征相较不算明显,句法特征表现一般,则可将特征提取分类器a的特征权重设置为1.3,特征提取分类器b的特征权重设置0.7,特征提取分类器c的特征权重设置为1。然后可根据特征权重分别对各提取分类器提取得到的各特征进行加权得到加权特征,这里说的加权即特征权重作为系数乘以特征的向量表示。最后将各加权特征进行拼接并输入综合分类器,以确定代码作者归属。
88.上例可根据下式对特征进行编码环境的适应性修正:
[0089][0090]
其中,v
all
为各加权特征进行拼接后的结果,w1为特征提取分类器a的特征权重,v1为特征提取分类器a提取得到的特征,w2为特征提取分类器b的特征权重,v2为特征提取分类器b提取得到的特征,w3为特征提取分类器c的特征权重,v3为特征提取分类器c提取得到的特征。
[0091]
通过为对应各风格属性的特征提取分类器设置特征权重,可进一步适应不同的编码环境下,提高代码作者归属确定方法的迁移性。
[0092]
进一步地,在本说明书一个或多个实施例中,上述在确定每个特征提取分类器的特征权重时,服务器可先将各特征提取分类器的特征权重预设为一,然后通过训练后的各特征提取分类器确定未知代码的第三预测作者,根据各第三预测作者中不同作者出现的频率确定共识结果。
[0093]
针对每个特征提取分类器,当确定该特征提取分类器的第三预测作者与共识结果一致时,通过下述公式增加该特征提取分类器的特征权重:
[0094]wi_1
'=(1+a)w
[0095]
然后根据各特征提取分类器的特征权重,通过下述公式更新各特征提取分类器的特征权重:
[0096][0097]wi_2
'=kw
i_1
'
[0098]
在修正权重时,可使权重之和满足:
[0099][0100]
其中,w
i_1
'为增加权重后的特征提取分类器i的特征权重,a为权重增加因子,w为增加权重前的特征提取分类器i的特征权重,k为权重更新因子,n为特征提取分类器的数量,w
i_2
'为更新后的特征提取分类器i的特征权重。
[0101]
通过在当前的编码环境中的实际应用结果不断的调整各特征提取分类器的特征权重,从而进一步提高特征权重的适配性,以提高代码作者归属确定方法的迁移性。
[0102]
更进一步地,在本说明书一个或多个实施例中,服务器在得到共识结果后还可通过用户的判断进一步对公示结果进行修正。
[0103]
具体的,服务器在得到各特征提取分类器的共识结果后,可向用户展示包含共识结果和提示信息的界面,其中,提示信息用于提示用户当确认共识结果不正确时对共识结果进行修正。
[0104]
然后,响应于用户的操作,确定更新后的共识结果,当确定该特征提取分类器的第三预测作者与更新后的共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重。
[0105]
通过引导用户操作进一步修正共识结果,提高了对权重调整的准确性,从而提高了代码作者归属确定方法的迁移性。
[0106]
上述所说的调整各特征提取分类器的特征权重的过程可在步骤s105中,即,特征提取分类器与综合分类器都经过训练后的工作阶段重复进行,以使得在工作阶段通过不断调整各特征提取分类器的特征权重,从而提高在工作情况下代码写作场景的适应性和迁移性。
[0107]
此外,在本说明书一个或多个实施例中,特征提取分类器和综合分类器为随机森林、神经网络、支持向量机中的至少一种。
[0108]
以上为本说明书的一个或多个实施例提供的代码作者归属确定方法,基于同样的思路,本说明书还提供了相应的代码作者归属确定装置,如图2所示。
[0109]
图2为本说明书提供的一种代码作者归属确定装置示意图,包括:
[0110]
获取模块201,用于获取代码数据集,将数据集中各段代码作为训练样本,以及标注每段代码作者的归属;
[0111]
划分模块202,用于对代码的风格属性进行划分,针对每种风格属性,确定训练样本对应该风格属性的归属统计信息;
[0112]
第一训练模块203,用于将各归属统计信息分别输入不同特征提取分类器,通过各特征提取分类器确定训练样本的各第一预测作者,以最小化各第一预测作者与标注作者之间的偏差为优化目标,通过训练样本对各特征提取分类器进行训练;
[0113]
第二训练模块204,用于将各特征提取分类器的特征提取层提取到的归属特征进行拼接并输入综合分类器,通过综合分类器确定训练样本的第二预测作者,以最小化第二预测作者与标注作者之间的偏差为优化目标,通过训练样本对综合分类器进行训练;
[0114]
归属确定模块205,用于获取待确定作者归属的未知代码,通过训练后的各特征提取分类器的特征提取层对未知代码进行归属特征提取,将提取得到的各归属特征进行拼接
并输入综合分类器,确定代码作者归属。
[0115]
可选地,所述代码的风格特征划分为布局特征、词法特征以及句法特征。
[0116]
可选地,所述划分模块202,针对布局特征,确定训练样本中各行代码的位置信息以及各行代码的字符数,针对词法特征,确定训练样本中不同词语的出现频率,针对句法特征,确定训练样本对应的抽象语法树中不同节点和边的出现频率。
[0117]
可选地,所述归属确定模块205,确定每个特征提取分类器的特征权重,其中,特征权重与当前应用场景下该特征提取分类器对应的风格属性对确定代码作者归属的贡献度呈正相关,根据特征权重对提取得到的各归属特征进行加权得到加权归属特征,将各加权归属特征进行拼接并输入综合分类器。
[0118]
可选地,所述归属确定模块205,将各特征提取分类器的特征权重预设为一,通过训练后的各特征提取分类器确定未知代码的第三预测作者,根据各第三预测作者中不同作者出现的频率确定共识结果,针对每个特征提取分类器,当确定该特征提取分类器的第三预测作者与共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重,根据各特征提取分类器的特征权重,通过公式w
i_2
'=kw
i_1
'更新各特征提取分类器的特征权重,其中,w
i_1
'为增加权重后的特征提取分类器i的特征权重,a为权重增加因子,w为增加权重前的特征提取分类器i的特征权重,k为权重更新因子,n为特征提取分类器的数量,w
i_2
'为更新后的特征提取分类器i的特征权重。
[0119]
可选地,所述归属确定模块205,展示包含共识结果和提示信息的界面,提示信息用于提示用户当确认共识结果不正确时对共识结果进行修正,响应于用户的操作,确定更新后的共识结果,当确定该特征提取分类器的第三预测作者与更新后的共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重。
[0120]
可选地,所述特征提取分类器和综合分类器为随机森林、神经网络、支持向量机中的至少一种。
[0121]
关于代码作者归属确定装置的具体限定可以参见上文中对于代码作者归属确定方法的限定,在此不再赘述。上述代码作者归属确定装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0122]
本说明书还提供了一种计算机可读存储介质,该存储介质存储有计算机程序,计算机程序可用于执行上述图1提供的代码作者归属确定方法。
[0123]
本说明书还提供了图3所示的计算机设备的结构示意图,如图3所述,在硬件层面,该计算机设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,以实现上述图1提供的代码作者归属确定方法。
[0124]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可
包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static randomaccess memory,sram)或动态随机存取存储器(dynamic randomaccess memory,dram)等。
[0125]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
技术特征:
1.一种代码作者归属确定方法,其特征在于,包括:获取代码数据集,将数据集中各段代码作为训练样本,以及标注每段代码作者的归属;对代码的风格属性进行划分,针对每种风格属性,确定训练样本对应该风格属性的归属统计信息;将各归属统计信息分别输入不同特征提取分类器,通过各特征提取分类器确定训练样本的各第一预测作者,以最小化各第一预测作者与标注作者之间的偏差为优化目标,通过训练样本对各特征提取分类器进行训练;将各特征提取分类器的特征提取层提取到的归属特征进行拼接并输入综合分类器,通过综合分类器确定训练样本的第二预测作者,以最小化第二预测作者与标注作者之间的偏差为优化目标,通过训练样本对综合分类器进行训练;获取待确定作者归属的未知代码,通过训练后的各特征提取分类器的特征提取层对未知代码进行归属特征提取,将提取得到的各归属特征进行拼接并输入综合分类器,确定代码作者归属。2.如权利要求1所述的代码作者归属确定方法,其特征在于,所述代码的风格特征划分为布局特征、词法特征以及句法特征。3.如权利要求2所述的代码作者归属确定方法,其特征在于,所述针对每种风格属性,确定训练样本对应该风格属性的统计信息,具体包括:针对布局特征,确定训练样本中各行代码的位置信息以及各行代码的字符数;针对词法特征,确定训练样本中不同词语的出现频率;针对句法特征,确定训练样本对应的抽象语法树中不同节点和边的出现频率。4.如权利要求1所述的代码作者归属确定方法,其特征在于,所述将提取得到的各归属特征进行拼接并输入综合分类器,具体包括:确定每个特征提取分类器的特征权重,其中,特征权重与当前应用场景下该特征提取分类器对应的风格属性对确定代码作者归属的贡献度呈正相关;根据特征权重对提取得到的各归属特征进行加权得到加权归属特征,将各加权归属特征进行拼接并输入综合分类器。5.如权利要求4所述的代码作者归属确定方法,其特征在于,所述确定每个特征提取分类器的特征权重,具体包括:将各特征提取分类器的特征权重预设为一;通过训练后的各特征提取分类器确定未知代码的第三预测作者,根据各第三预测作者中不同作者出现的频率确定共识结果;针对每个特征提取分类器,当确定该特征提取分类器的第三预测作者与共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重;根据各特征提取分类器的特征权重,通过公式w
i_2
'=kw
i_1
'更新各特征提取分类器的特征权重;其中,w
i_1
'为增加权重后的特征提取分类器i的特征权重,a为权重增加因子,w为增加权重前的特征提取分类器i的特征权重,k为权重更新因子,n为特征提取分类器的数量,w
i_2
'为更新后的特征提取分类器i的特征权重。
6.如权利要求1所述的代码作者归属确定方法,其特征在于,所述当确定该特征提取分类器的第三预测作者与共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重,具体包括:展示包含共识结果和提示信息的界面,提示信息用于提示用户当确认共识结果不正确时对共识结果进行修正;响应于用户的操作,确定更新后的共识结果,当确定该特征提取分类器的第三预测作者与更新后的共识结果一致时,通过公式w
i_1
'=(1+a)w增加该特征提取分类器的特征权重。7.如权利要求1所述的代码作者归属确定方法,其特征在于,所述特征提取分类器和综合分类器为随机森林、神经网络、支持向量机中的至少一种。8.一种代码作者归属确定装置,其特征在于,包括:获取模块,用于获取代码数据集,将数据集中各段代码作为训练样本,以及标注每段代码作者的归属;划分模块,用于对代码的风格属性进行划分,针对每种风格属性,确定训练样本对应该风格属性的归属统计信息;第一训练模块,用于将各归属统计信息分别输入不同特征提取分类器,通过各特征提取分类器确定训练样本的各第一预测作者,以最小化各第一预测作者与标注作者之间的偏差为优化目标,通过训练样本对各特征提取分类器进行训练;第二训练模块,用于将各特征提取分类器的特征提取层提取到的归属特征进行拼接并输入综合分类器,通过综合分类器确定训练样本的第二预测作者,以最小化第二预测作者与标注作者之间的偏差为优化目标,通过训练样本对综合分类器进行训练;归属确定模块,用于获取待确定作者归属的未知代码,通过训练后的各特征提取分类器的特征提取层对未知代码进行归属特征提取,将提取得到的各归属特征进行拼接并输入综合分类器,确定代码作者归属。9.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述权利要求1~7任一项所述的代码作者归属确定方法。10.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述权利要求1~7任一所述的代码作者归属确定方法。
技术总结
本发明公开了一种代码作者归属确定方法、装置、设备及介质,先确定训练样本以及标注的代码作者,然后对代码的风格属性进行划分,确定训练样本对应每种风格属性的归属统计信息,接着将各归属统计信息分别输入不同特征提取分类器,根据标注作者对各特征提取分类器进行训练,以及将特征提取分类器的特征提取层提取到的归属特征进行拼接并输入综合分类器,根据标注作者对综合分类器进行训练,最后获取待确定作者归属的未知代码,通过训练后的特征提取分类器和综合分类器,确定代码作者归属。通过对代码的风格属性进行划分,采用多个特征提取分类器进行特征提取,避免了特征忽略,提高了综合分类器的特征利用,从而提高了代码作者归属确定的准确率。属确定的准确率。属确定的准确率。
技术研发人员:付才 韩兰胜 江帅 郭晓威 李文科 李柯 洪胜 刘铭 邹德清
受保护的技术使用者:华中科技大学
技术研发日:2023.07.07
技术公布日:2023/10/7
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
