一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于知识增强和结构对比的API推荐方法

2023-01-15 09:09:34 来源:中国专利 TAG:

一种基于知识增强和结构对比的api推荐方法
技术领域
1.本发明涉及数据处理领域,尤其涉及一种基于知识增强和结构对比的api推荐方法。


背景技术:

2.在现代软件开发中,随着软件系统开发需求的增加,软件开发人员的负担也随之增加。应用程序编程接口(application programmable interface,api)是已经预先实现好的编程接口,开发人员可以很容易地调用它们,以提高现代软件开发的效率并完成特定的功能需求。然而,api的数量一直在增长,要熟悉大量的api不是一件容易的事情。因此,开发人员往往会查阅官方技术文档或者在问答论坛上搜索,这些方法通常是很耗时的,并且很难找到质量较高的相关api。
3.近年来,如何自动推荐api来解决开发人员熟悉所有api带来的时间消耗问题,引起了科研人员的关注。目前的技术主要类型可以分为基于查询的api推荐算法和基于代码的api推荐算法。具体来说,基于查询的api推荐算法是以自然语言描述的功能需求为查询输入,算法返回推荐的符合需求的api;基于代码的api推荐算法是根据当前预测点周围的代码推荐符合当前需求的api。
4.针对这一问题,以往的工作使用聚类算法从数据集中的大量项目中提取api使用模式,或者采用概率统计模型,从api调用序列中预测有趣的api使用模式。然而,这些方法都存在提取的使用模式冗余度高和推荐精确度低的问题。如今,随着推荐系统在各个领域发挥着重要而广泛的作用,有一些方法采用推荐系统中经典的协同过滤算法来解决api推荐问题,将方法作为用户,将方法中要调用的api作为物品,通过建模api之间的结构相似性和调用关系,获得了很好的推荐效果。然而,这种基础的协同过滤算法缺乏对方法和api之间高阶联系的挖掘,因此,最新的方法采用基于图神经网络的协同过滤算法,进一步使用了代码中的其他信息,提高了api推荐的效果。但是,这些方法都受限于稀疏的api调用交互信号,使得模型很难学习到高质量的api表示;除此之外,数据集中的api调用交互常出现长尾分布,出现频次高的api对表征学习的影响更大,因此,模型很容易偏向于出现频次高的api,牺牲了低出现频率api的性能。


技术实现要素:

5.本发明提供了一种基于知识增强和结构对比的api推荐方法,包括以下步骤:步骤1,代码预处理构图;解析源代码,提取方法、api和结构节点以及它们之间的关系,构成调用关系图和层次结构图。
6.步骤2,知识增强的图嵌入学习;使用图卷积神经网络gcn在调用关系图上传播信息来细化方法和api的初始嵌入表示,同时用翻译模型transh学习层次结构图中的实体和关系的嵌入表示。
7.步骤3,多任务学习;包括主要的api推荐任务和辅助的对比学习任务。
8.作为本发明的进一步改进,在所述步骤1中,还包括:步骤10,使用静态分析工具解析源代码。
9.步骤11,提取所有方法节点集合、所有api节点集合和所有的实体节点集合,提取边集合的方法和api之间的调用连接集合,以及边集合实体之间的层次结构集合。
10.步骤12,基于步骤11的节点集合和边集合,构建调用关系图和层次结构图。
11.作为本发明的进一步改进,在所述步骤12中,构建的调用关系图和层次结构图具体如下:调用关系图:对于每一个在项目中的方法和方法中调用的api,在调用关系图中增加一条边,这个图最终表示为,其中意味着方法调用过api ,否则。
12.层次结构图:通过程序分析,将有需要的层次结构信息表示为知识图谱的形式, 其中是关系的集合,包括属于类、属于包和属于项目。
13.作为本发明的进一步改进,在所述步骤2中,使用图卷积神经网络gcn在调用关系图上传播信息来细化方法和api的初始嵌入表示,是指对于调用关系图上的方法节点和api节点,使用其id嵌入作为初始表示和,接着使用图卷积神经网络递归地传播初始表示,以利用高阶连通性来优化初始表示。
14.作为本发明的进一步改进,在所述步骤2中,使用图卷积神经网络gcn在调用关系图上传播信息来细化方法和api的初始嵌入表示,具体如下:步骤s1,先计算图上每个节点的自我网络表示和,公式如下:,公式如下:其中,表示卷积的层数,从0开始,最大为层;表示方法节点的邻居,表示api节点的邻居;表示方法节点的度数,表示api节点的度数。
15.步骤s2,将节点本身的表示/和节点的自我网络的表示/聚合
到一起,对节点的表示进行更新,公式如下:到一起,对节点的表示进行更新,公式如下:;步骤s3,经过了层卷积层后,获得了节点和的多种表示,把节点的每一层的表示连接起来,得到节点和的最终表示和,公式如下: ,其中,表示连接操作。
16.作为本发明的进一步改进,在所述步骤2中,用翻译模型transh学习层次结构图中的实体和关系的嵌入表示,是指对于层次结构图中的三元组 ,实体节点(头节点、尾节点)和关系边(),同样使用其id嵌入作为初始表示、和,然后使用翻译模型transh翻译层次结构图中节点和关系构成的三元组,在这个过程中优化实体节点的嵌入表示,它假设每个关系都拥有一个超平面,头部实体和尾部实体之间的转换只有投射到同一个超平面上才有效,它为三元组定义了一个评分函数如下:其中,越低的分意味着这个三元组的可信程度越高,和是投影的实体向量,投影方式如下:投影方式如下:其中,是关系的学习向量,为对应超平面的投影向量,层次结构图上的实体节点经过transh的翻译之后,得到了其包含结构信息的嵌入表示。
17.作为本发明的进一步改进,在所述步骤3中,主要的api推荐任务,是将所述步骤2中通过gcn得到的调用关系图中的方法和api节点表示和通过transh得到的层次结构图中的实体表示进行联合学习来增强方法和api节点表示。
18.作为本发明的进一步改进,在所述步骤3中,主要的api推荐任务,具体步骤如下:步骤a1,建立一组方法/api—实体对齐集合,其中每一个表示可以映射到层次结构图中的实体,联合学习函数定义如下:
其中,表示方法 调用api 的概率,和是方法嵌入向量和api嵌入向量通过对应实体嵌入和增强后的嵌入向量:增强后的嵌入向量:步骤a2,为了训练主要的api推荐任务的网络参数,使用一个基于最大边际的损失函数,其基本思想是确保反例的内积比正例的内积小于预先定义的边界:其中,表示训练集三元组,l
rec
表示推荐任务的损失函数。
19.作为本发明的进一步改进,在所述步骤3中,在辅助的对比学习任务中,从结构方面构建方法和api的正负样本对,具体步骤如下:步骤b1,从gcn模型偶数层的输出中获得同构邻域的表示。
20.步骤b2,将方法自身的嵌入向量与偶数层gcn对应输出的嵌入向量视为正对(即,),不同的节点视为负样本(即,),提出结构对比学习目标,最小化正样本对之间的距离,公式如下所示:其中, 是衡量两个向量之间的相似度的余弦函数,是温度超参数,类似地,将api自身的嵌入向量与偶数层gcn对应输出的嵌入向量视为正对(即,,不同的节点视为负样(即,),提出结构对比学习目标,最小化正样本对之间的距离,得到api方面的结构对比损失函数 l
icl
,公式如下所示:。
21.步骤b3,将方法和api的损失函数加权求和得到完整的结构对比目标函数:
其中,是平衡结构对比学习中两种损失的权重超参数, l
cl
是指的完整的结构对比目标函数。
22.步骤b4,将提出的结构对比学习损失作为补充,利用多任务学习策略联合训练传统的排序损失和提出的对比学习损失:其中,是控制两个损失函数的权重超参数。
23.本发明的有益效果是:1.本发明提出了知识增强的图嵌入学习,将图卷积神经网络训练任务和知识图谱嵌入表示学习任务进行联合学习,使得方法和api的嵌入向量中不仅建模了调用交互还融合了代码中的层次结构信息,优化了方法和api的表示,以达到更准确的推荐效果;2.本发明提出了基于图结构的对比学习作为辅助任务,改善调用关系图中稀疏的api交互信号带来的图节点表征学习较差的问题,提高了方法和api表示的质量,同时,由于增加了正负样本,增强了训练集,降低了出现频次高的api对表征学习的影响,使得模型对低出现频率api的推荐效果更好。
附图说明
24.图1是本发明的原理框图。
具体实施方式
25.本发明公开了一种基于知识增强和结构对比的api推荐方法,它主要由三个阶段组成:1)代码预处理构图部分,解析源代码,提取方法、api和结构节点以及它们之间的关系,构成调用关系图和层次结构图;2)知识增强的图嵌入学习,使用图卷积神经网络gcn在调用关系图上传播信息来细化方法和api的初始嵌入表示,同时用翻译模型transh学习层次结构图中的实体和关系的嵌入表示;3)多任务学习,主要任务是api推荐,辅助任务是对比学习。包括主要的api推荐任务和辅助的对比学习任务。在主要任务中,结合几种转移方案,将从层次结构图中学到的实体嵌入转移到方法和api的嵌入中,从而联合训练推荐任务与知识图谱嵌入模型,为方法和api引入更多的语义关系,更深层次地挖掘方法和api的关联。除了直接的方法和api之间的调用交互之外,一些潜在的联系,如在调用交互图上的高阶路径上连接的方法或api节点具有结构联系。因此,在辅助任务中,构建了结构和语义的样本对来进行对比学习,改进图神经网络得到的方法和api的嵌入表示。下面将对本发明进行清楚、完整的描述。
26.本发明公开的一种基于知识增强和结构对比的api推荐方法,包括:步骤1,代码预处理构图;解析源代码,提取方法、api和结构节点以及它们之间的关系,构成调用关系图和层次结构图。该步骤具体包括:步骤10,代码预处理构图部分中,使用静态分析工具eclipse jdt解析源代码;步骤11,提取所有方法节点集合、所有api节点集合和所有的实体(即,方法所属的类、api所属的类、包和项目)节点集合。除了节点集合之外,边集合包含方法和api之
间的调用连接集合,以及实体之间的层次结构集合。
27.步骤12,基于这些节点集合和边集合,构建调用关系图和层次结构图。构图的具体描述如下:1)调用关系图:对于每一个在项目中的方法和方法中调用的api,在调用关系图中增加一条边。这个图最终表示为,其中意味着方法调用过api ,否则。调用交互图反映了方法和api之间的基本关系。
28.2)层次结构图:在软件项目中,还有丰富的层次结构信息。如,在面向对象的程序设计中,一个项目中会有很多类,负责不同的功能;每个类中会定义很多方法,来实现具体的功能。通过程序分析,将这些结构信息表示为知识图谱的形式, 其中是关系的集合,包括属于类、属于包和属于项目。
29.步骤2,知识增强的图嵌入学习;使用图卷积神经网络gcn在调用关系图上传播信息来细化方法和api的初始嵌入表示,同时用翻译模型transh学习层次结构图中的实体和关系的嵌入表示。
30.知识增强的图嵌入学习部分,第一个模块是使用图神经网络gcn对调用关系图上的节点嵌入进行优化,第二个模块是使用翻译模型transh学习层次结构图中的节点嵌入。接下来进行详细介绍。
31.1)对于调用关系图上的方法节点和api节点,使用其id嵌入作为初始表示和,接着使用图卷积神经网络递归地传播初始表示,以利用高阶连通性来优化初始表示。具体步骤如下:步骤s1,首先计算图上每个节点的自我网络(即,这个点的邻居节点构成的网络)表示和,公式如下:,公式如下:其中,表示卷积的层数,从0开始,最大为层;表示方法节点的邻居,表示api节点的邻居;表示方法节点的度数,表示api节点的度数。
32.步骤s2,然后,将节点本身的表示/和节点的自我网络的表示/聚合到一起,对节点的表示进行更新,公式如下:聚合到一起,对节点的表示进行更新,公式如下:步骤s3,经过了层卷积层后,获得了节点和的多种表示,把节点的每一层的表示连接起来,得到节点和的最终表示和,公式如下: ,其中,表示连接操作。
33.2)对于层次结构图中的三元组 ,实体节点(头节点、尾节点)和关系边(),同样使用其id嵌入作为初始表示、和。然后使用翻译模型transh翻译层次结构图中节点和关系构成的三元组,在这个过程中优化实体节点的嵌入表示。翻译模型transh学习基于不同关系的实体的不同表示。它假设每个关系都拥有一个超平面,头部实体和尾部实体之间的转换只有投射到同一个超平面上才有效。它为三元组定义了一个评分函数如下:其中,越低的分意味着这个三元组的可信程度越高。和是投影的实体向量,投影方式如下:投影方式如下:其中,是关系的学习向量,为对应超平面的投影向量。层次结构图上的实体节点经过transh的翻译之后,得到了其包含结构信息的嵌入表示。
34.步骤3,多任务学习; 分为主要的api推荐任务和辅助的对比学习任务。主要的api推荐任务,是将步骤2中通过gcn得到的调用关系图中的方法和api节点表示和通过transh得到的层次结构图中的实体表示进行联合学习来增强方法和api节点表示。具体步骤如下:步骤a1,首先,建立了一组方法/api—实体对齐集合,其中每一个表示可以映射到层次结构图中的
实体。联合学习函数定义如下:其中,表示方法 调用api 的概率,和是方法嵌入向量和api嵌入向量通过对应实体嵌入和增强后的嵌入向量:增强后的嵌入向量:步骤a2,接着,为了训练主要的api推荐任务的网络参数,使用一个基于最大边际的损失函数。其基本思想是确保反例(即未观察到的api调用)的内积比正例(即观察到的api调用)的内积小于预先定义的边界:其中,表示训练集三元组,l
rec
表示推荐任务的损失函数。
35.在辅助的对比学习任务中,本发明从结构方面构建方法和api的正负样本对,具体步骤如下:步骤b1,由于调用关系图是二部图,在图上进行偶数次的信息传播时,就聚集了方法和api的同构邻居信息。通过这种方式,可以从gcn模型偶数层(如2,4,6)的输出中获得同构邻域的表示。
36.步骤b2,本发明将方法自身的嵌入向量与偶数层gcn对应输出的嵌入向量视为正对(即,),不同的节点视为负样本(即,),提出结构对比学习目标,最小化正样本对之间的距离,公式如下所示:其中, 是衡量两个向量之间的相似度的余弦函数,是温度超参数。类似地,将api自身的嵌入向量与偶数层gcn对应输出的嵌入向量视为正对(即,,不同的节点视为负样(即,),提出结构对比学习目标,最小化正样本对之间的距离,得到api方面的结构对比损失函数 l
icl
,公式如下所示:

37.步骤b3,最后将方法和api的的损失函数加权求和得到完整的结构对比目标函数:其中,是平衡结构对比学习中两种损失的权重超参数, l
cl
是指的完整的结构对比目标函数。
38.本发明将提出的结构对比学习损失作为补充,利用多任务学习策略联合训练传统的排序损失和提出的对比学习损失:其中,是控制两个损失函数的权重超参数。
39.使用本发明进行api使用推荐的步骤如下:(1)训练模型,使得模型达到最优推荐效果;(2)将正在编程的方法输入已经训练好的模型中;(3)模型允许,返回api推荐列表;(4)软件开发人员根据当前代码段的需要选择api。
40.本发明的优点:1. 提出了知识增强的图嵌入学习,将图卷积神经网络训练任务和知识图谱嵌入表示学习任务进行联合学习,使得方法和api的嵌入向量中不仅建模了调用交互还融合了代码中的层次结构信息,优化了方法和api的表示,以达到更准确的推荐效果。
41.2. 提出了基于图结构的对比学习作为辅助任务,改善调用关系图中稀疏的api交互信号带来的图节点表征学习较差的问题,提高了方法和api表示的质量。同时,由于增加了正负样本,增强了训练集,降低了出现频次高的api对表征学习的影响,使得模型对低出现频率api的推荐效果更好。
42.以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献