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

面向长尾分布特征的多样化API序列推荐方法及装置

2022-08-11 06:01:19 来源:中国专利 TAG:

面向长尾分布特征的多样化api序列推荐方法及装置
技术领域
1.本发明涉及软件工程服务推荐技术领域,尤其涉及一种面向长尾分布特征的多样化api序列推荐方法及装置。


背景技术:

2.应用编程接口(application programming interface,api)是软件开发的基石,对于提升软件开发的效率和质量具有重要意义。api的合理调用可以帮助开发者高效完成各类编程任务进而缩短整个软件开发周期。然而,随着api数量井喷式发展,开发人员要熟悉大型库中的所有api并不容易。因此,开发者需要经常通过google、stack overflow等搜索引擎来查找解决任务的api使用序列。这些搜索工具是基于关键词检索来寻找与开发者所搜素的query相似的历史query的答案来作为推荐结果,准确度和效率都比较低下。api序列推荐(api sequence recommendation)可以根据开发者的需求query,从海量的api中找到开发者适合的api序列从而提高编程效率。
3.多样化api序列推荐(diversifiedapi recommendation)是一种对于api序列的多样化的推荐,能够基于需求给予开发人员多样化的api序列的选择。多样化的api推荐对于开发者编程尤为重要,可以提高那些目前出现频率低但是总量很大的api的曝光率,进而提高整个行业生态的健康发展。对于部分较为偏僻的软件开发领域,可以领先更加优质的接口调用,大大提高软件制品开发的效率。
4.近年来,研究人员提出了许多方法对api进行推荐,但现有技术中的api推荐方法主要研究了api推荐的准确性,忽视了api序列的多样性的需求。现有的api推荐方法往往将长尾api从数据集中删除,使其推荐结果区域流行的api,无法推荐出长尾api,影响api推荐结果的多样性。


技术实现要素:

5.为解决上述技术问题,本发明提供一种面向长尾分布特征的多样化api序列推荐方法及装置。
6.第一方面,本发明提供一种面向长尾分布特征的多样化api序列推荐方法,所述面向长尾分布特征的多样化api序列推荐方法包括:
7.s1:获取原始数据集,对原始数据集进行分析及数据预处理,将原始数据集中切分成单词和符号片段的api合成完整的api,统计api的出现频率,得到api的长尾分布,基于长尾api的名字相似度及描述文档相似度,对长尾api进行聚类,使用聚类中心替换原始数据集中的长尾api,形成重新打标签后的数据集;
8.s2:构建编码器,对于自然语言的开发者需求,逐单词利用词嵌入技术生成词向量后输入到编码器中,编码为基于时间步的编码器隐藏状态;
9.s3:构建解码器,按基于时间步的编码器隐藏状态基于注意力机制生成解码器隐藏状态,解码器隐藏状态经融合学习排序方法的损失函数评估序列得分后利用集束搜索后
处理生成多样化api序列。
10.可选的,所述将原始数据集中切分成单词和符号片段的api合成完整的api,统计api的出现频率,得到api的长尾分布,基于长尾api的名字相似度及描述文档相似度,对长尾api进行聚类,使用聚类中心替换原始数据集中的长尾api,形成重新打标签后的数据集包括:
11.s1.1:从获取的原始数据集中提取所有的需求-api序列对,对需求进行去停用词,对api序列使用启发式规则将api单词和符号片段合成为完整的api作为推荐的最小单元;
12.s1.2:遍历原始数据集中经处理后的所有api,统计其出现的频率,得到api的长尾分布,获取到长尾api的集合;
13.s1.3:下载java se 8文档,使用启发式规则解析每个api的html网页提取api及其描述信息,挖掘具有继承关系的api的描述信息互相作为描述信息的补充,形成api的描述信息集合;
14.s1.4:对于所有的api描述信息,构建描述信息词idf逆文档频率字典,计算公式为:
[0015][0016]
其中,idf
word
表示单词word的idf值,|d|表示描述信息的数量,di表示第i条描述信息;
[0017]
s1.5:根据步骤1.4得到的描述信息的idf字典,利用bm25算法计算长尾api的两段描述信息之间的相似度,其计算公式为:
[0018][0019][0020][0021]
其中表示第i条描述信息中单词的数量,l
avg
表示所有描述信息中单词的平均长度,k1,b,k3为可调参数,根据经验取值,表示单词w在描述信息di中的词频,表示单词w在描述信息di中出现的次数;
[0022]
s1.6:根据步骤1.3得到的每个长尾api的描述信息集合,第一条为长尾api自身的功能描述信息,其他为具有继承关系的描述信息,设立信号量,将自身的描述信息信号量设为1,由继承关系获取到的描述信息信号量设为0.8,两个长尾api之间的描述信息相似度由两个api之间的所有描述信息相似度最大值得到,计算公式如下:
[0023][0024]
s1.7:两个长尾api之间的名字相似度根据最小编辑距离来计算,其计算公式如下:
[0025][0026][0027]
其中表示第i个长尾api的名字长度;
[0028]
s1.8:将步骤1.6和步骤1.7分别得到的两个长尾api之间的描述信息相似度和名字相似度,经归一化并设定最小阈值后,分为给予不同的权重,求得两个长尾api的相似度分数,其计算公式如下:
[0029][0030]
其中α和β为权重,δ1和δ2为阈值,均根据实际需要进行设置;
[0031]
s1.9:根据步骤1.8得到的长尾api间的相似度分数,利用谱聚类算法将长尾api进行聚类,并把聚类中心替换掉长尾api,形成重新打标签后的数据集。
[0032]
可选的,所述对原始数据集进行分析及数据预处理包括:
[0033]
删除原始数据集中重复的需求-api序列对以及存在错误的需求-api序列对。
[0034]
可选的,s2包括:
[0035]
s2.1:给定开发者的自然语言需求查询,将其经数据预处理后划分为单词序列,通过词嵌入技术,将每个单词都转化为词向量xi;
[0036]
s2.2:构建编码器,编码器是一个标准的双向lstm网络,按照时间步t根据前一个时间步前向隐藏层状态、后一个时间步反向隐藏层状态和当前输入的词向量计算出当前的隐藏层状态h
t

[0037][0038][0039][0040]
其中,表示当前时间步t的前向隐藏层状态,表示当前时间步t的反向隐藏层状态,[:]是向量拼接操作;
[0041]
s2.3:通过编码器的输出层得到每个时间步t的编码器的隐藏状态,作为解码器的输入。
[0042]
可选的,所述s3包括:
[0043]
s3.1:获取解码器的注意力分配:
[0044]ct
=∑α
tjhj
[0045]
其中权重va、w以及u均为待学习参数;
[0046]
s3.2:解码器的输入为目标序列上一个词的词向量y
t-1
、前一个时间步解码器生成的隐藏层状态s
t-1
以及注意力分配向量c
t
,其中词向量利用概率选择是训练样本词向量和生成词向量;
[0047]
s3.3:构建解码器,解码器是一个gru网络,基于步骤3.2中的输入,生成当前时间步生成的序列当前状态:
[0048][0049]
其中
[0050]
s3.4:通过解码器输出的序列当前状态融合学习排序方法,基于生成的序列当前状态的排序损失函数模型,评价生成的预测值和数据集标签中真实值不一样的程度,其计算方式如下:
[0051][0052]
l=-logp(π|f(x))
[0053]
其中l表示损失函数,f(x)表示解码器生成的序列状态得分,是指数映射即表示πi的序列状态得分。
[0054]
s3.5:利用集束搜素的后处理技术,得到若干个api序列。
[0055]
第二方面,本发明还提供一种面向长尾分布特征的多样化api序列推荐装置,所述面向长尾分布特征的多样化api序列推荐装置包括:
[0056]
重新构建数据集标签模块,用于获取原始数据集,对原始数据集进行分析及数据预处理,将原始数据集中切分成单词和符号片段的api合成完整的api,统计api的出现频率,得到api的长尾分布,基于长尾api的名字相似度及描述文档相似度,对长尾api进行聚类,使用聚类中心替换原始数据集中的长尾api,形成重新打标签后的数据集;
[0057]
编码器模块,用于构建编码器,对于自然语言的开发者需求,逐单词利用词嵌入技术生成词向量后输入到编码器中,编码为基于时间步的编码器隐藏状态;
[0058]
解码器模块,用于构建解码器,按基于时间步的编码器隐藏状态基于注意力机制生成解码器隐藏状态,解码器隐藏状态经融合学习排序方法的损失函数评估序列得分后利用集束搜索后处理生成多样化api序列。
[0059]
可选的,所述重新构建数据集标签模块,用于:
[0060]
s1.1:从获取的原始数据集中提取所有的需求-api序列对,对需求进行去停用词,对api序列使用启发式规则将api单词和符号片段合成为完整的api作为推荐的最小单元;
[0061]
s1.2:遍历原始数据集中经处理后的所有api,统计其出现的频率,得到api的长尾分布,获取到长尾api的集合;
[0062]
s1.3:下载java se 8文档,使用启发式规则解析每个api的html网页提取api及其描述信息,挖掘具有继承关系的api的描述信息互相作为描述信息的补充,形成api的描述信息集合;
[0063]
s1.4:对于所有的api描述信息,构建描述信息词idf逆文档频率字典,计算公式为:
[0064][0065]
其中,idf
word
表示单词word的idf值,|d|表示描述信息的数量,di表示第i条描述信息;
[0066]
s1.5:根据步骤1.4得到的描述信息的idf字典,利用bm25算法计算长尾api的两段描述信息之间的相似度,其计算公式为:
[0067][0068][0069][0070]
其中表示第i条描述信息中单词的数量,l
avg
表示所有描述信息中单词的平均长度,k1,b,k3为可调参数,根据经验取值,表示单词w在描述信息di中的词频,表示单词w在描述信息di中出现的次数;
[0071]
s1.6:根据步骤1.3得到的每个长尾api的描述信息集合,第一条为长尾api自身的功能描述信息,其他为具有继承关系的描述信息,设立信号量,将自身的描述信息信号量设为1,由继承关系获取到的描述信息信号量设为0.8,两个长尾api之间的描述信息相似度由两个api之间的所有描述信息相似度最大值得到,计算公式如下:
[0072][0073]
s1.7:两个长尾api之间的名字相似度根据最小编辑距离来计算,其计算公式如下:
[0074][0075][0076]
其中表示第i个长尾api的名字长度;
[0077]
s1.8:将步骤1.6和步骤1.7分别得到的两个长尾api之间的描述信息相似度和名字相似度,经归一化并设定最小阈值后,分为给予不同的权重,求得两个长尾api的相似度分数,其计算公式如下:
[0078][0079]
其中α和β为权重,δ1和δ2为阈值,均根据实际需要进行设置;
[0080]
s1.9:根据步骤1.8得到的长尾api间的相似度分数,利用谱聚类算法将长尾api进行聚类,并把聚类中心替换掉长尾api,形成重新打标签后的数据集。
[0081]
可选的,所述重新构建数据集标签模块,用于:
[0082]
删除原始数据集中重复的需求-api序列对以及存在错误的需求-api序列对。
[0083]
可选的,所述编码器模块,用于:
[0084]
s2.1:给定开发者的自然语言需求查询,将其经数据预处理后划分为单词序列,通过词嵌入技术,将每个单词都转化为词向量xi;
[0085]
s2.2:构建编码器,编码器是一个标准的双向lstm网络,按照时间步t根据前一个时间步前向隐藏层状态、后一个时间步反向隐藏层状态和当前输入的词向量计算出当前的隐藏层状态h
t

[0086][0087][0088][0089]
其中,表示当前时间步t的前向隐藏层状态,表示当前时间步t的反向隐藏层状态,[:]是向量拼接操作;
[0090]
s2.3:通过编码器的输出层得到每个时间步t的编码器的隐藏状态,作为解码器的输入。
[0091]
可选的,所述解码器模块,用于:
[0092]
s3.1:获取解码器的注意力分配:
[0093]ct
=∑α
tjhj
[0094]
其中权重va、w以及u均为待学习参数;
[0095]
s3.2:解码器的输入为目标序列上一个词的词向量y
t-1
、前一个时间步解码器生成的隐藏层状态s
t-1
以及注意力分配向量c
t
,其中词向量利用概率选择是训练样本词向量和生成词向量;
[0096]
s3.3:构建解码器,解码器是一个gru网络,基于步骤3.2中的输入,生成当前时间步生成的序列当前状态:
[0097][0098]
其中
[0099]
s3.4:通过解码器输出的序列当前状态融合学习排序方法,基于生成的序列当前状态的排序损失函数模型,评价生成的预测值和数据集标签中真实值不一样的程度,其计算方式如下:
[0100][0101]
l=-logp(π|f(x))
[0102]
其中l表示损失函数,f(x)表示解码器生成的序列状态得分,是指数映射即表示πi的序列状态得分。
[0103]
s3.5:利用集束搜素的后处理技术,得到若干个api序列。
[0104]
本发明中,分析了api的长尾分布,对长尾api聚类后,利用聚类中心替换长尾api,得到重新标签后的数据集,构建了编码器,逐个读取输入,将自然语言的开发者需求查询编码为基于时间步的编码器隐藏状态,构建了解码器,按时间步生成解码器隐藏状态,融合学习排序技术计算损失函数,使用集束搜索进行api序列的输出。因此本发明能够基于开发者自然语言需求生成api序列,提升api序列推荐结果的准确度,在不显著降低api序列推荐结果准确度的情况下,有效提升多样性。
附图说明
[0105]
图1为本发明面向长尾分布特征的多样化api序列推荐方法一实施例的流程示意图;
[0106]
图2为本发明面向长尾分布特征的多样化api序列推荐方法一实施例中对数据集重新打标签的场景示意图;
[0107]
图3为编码器内部单层隐藏层网络结构图;
[0108]
图4为本发明实施例采用的模型的结构图;
[0109]
图5为本发明面向长尾分布特征的多样化api序列推荐装置一实施例的功能模块示意图。
[0110]
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
[0111]
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0112]
第一方面,本发明实施例提供了一种面向长尾分布特征的多样化api序列推荐方法。
[0113]
一实施例中,参照图1,图1为本发明面向长尾分布特征的多样化api序列推荐方法一实施例的流程示意图。如图1所示,面向长尾分布特征的多样化api序列推荐方法包括:
[0114]
s1:获取原始数据集,对原始数据集进行分析及数据预处理,将原始数据集中切分成单词和符号片段的api合成完整的api,统计api的出现频率,得到api的长尾分布,基于长尾api的名字相似度及描述文档相似度,对长尾api进行聚类,使用聚类中心替换原始数据集中的长尾api,形成重新打标签后的数据集;
[0115]
本实施例中,对于收集到的原始数据集,该数据集挖掘github中star》1的java项目,提取自然语言的annotation和api序列对,将annotation视为开发者的需求查询。执行步骤s1,对其中重复或者存在错误的查询-api序列对经启发式规则和人工筛选相结合的方式进行清洗。对于api,使用启发式规则,将数据集中的api单词和符号片段合并成完整的
api。之后如图2所示,从java se 8描述文档中挖掘每个api的描述信息,并分析数据集中的api,得到api的长尾分布,用api的描述信息计算长尾api间的描述信息相似度,使用编辑距离来计算长尾api的名字相似度,经归一化后给予不同权重求和得到长尾api之间的相似度矩阵,经聚类后,利用聚类中心替换数据集中的长尾api,得到重新打标签后的数据集。
[0116]
s2:构建编码器,对于自然语言的开发者需求,逐单词利用词嵌入技术生成词向量后输入到编码器中,编码为基于时间步的编码器隐藏状态;
[0117]
本实施例中,搭建编码器模型,将自然语言查询转化为编码器隐藏层状态,后生成上下文向量。从数据集中将开发者需求查询逐个单词经embedding向量化之后传入编码器中,图3为编码器内部单层隐藏层网络结构图,编码器的隐藏层是双向lstm网络。经如图3中的双向lstm网络作为隐藏层计算单词的隐藏状态,通过隐藏状态计算上下文向量输入到解码器中的注意力网络。
[0118]
s3:构建解码器,按基于时间步的编码器隐藏状态基于注意力机制生成解码器隐藏状态,解码器隐藏状态经融合学习排序方法的损失函数评估序列得分后利用集束搜索后处理生成多样化api序列。
[0119]
本实施例中,参照图4,本实施例采用的模型的结构为基于rnn的编码器-解码器结构,编码器与解码器之间通过注意力机制连接,解码器与正确标签计算损失函数后经集束搜索生成api序列。
[0120]
进一步地,为了取得最佳的参数来得到模型的最佳效果,需要对本发明模型中的参数进行对比。
[0121]
bleu是一种广泛应用于机器翻译任务的准确性度量方法,来评价翻译出的语言序列同参考语言序列的接近程度。在我们的api序列推荐任务中,将通过开发者的查询生成的一系列api序列集合视为候补api序列,将伪ground truth中的api序列视为参考api序列,使用bleu来评估模型生成的候补api序列同真实生产环境下开发者写的参考api序列的接近程度,它实际上是计算候补序列在参考序列的n-gram命中率。其计算公式如下:
[0122][0123]
map(mean average precision)是对于开发者的查询的mean of the average precision分数。
[0124][0125]
mrr(mean reciprocal rank)计算了参考api序列的每个api在候补api序列的第一个出现位置的倒数,将其相加后再求平均数。
[0126][0127]
ndcg(normalized discounted cumulative gain)可以用来评估候选api序列的排序结果。
[0128][0129]
考虑到api出现在候选api序列中顺序的因素,使排名靠前的增益更高,排名靠后的分数有一定的折损。idcg
api,@k
相当于是max(dcg
api,@k
),对分数来做归一化。
[0130][0131][0132]
覆盖度:我们使用覆盖度来评估api序列推荐的多样性,表示所有推荐列表中暴露的项目在总项目中的比例,在我们的评价中将其定义为所有候补api序列列表中暴露在api在词表中api的比例。
[0133][0134]
本实施例使用的原始数据集是deepapi开源的数据集,其从github中挖掘star》1的java项目,将注释视为数据集中的查询语句,将代码经ast解析后生成的api序列作为解决查询语句的答案。但是该原始数据集的验证集和测试集中几乎没有包含长尾api的查询,为验证我们模型的多样性,按训练集、验证集和测试集查询语句数量100:1:1的比例划分构建一个新的数据集,称为多样化数据集,其中按照数据集中的流行api和长尾api的分布情况,进行分层随机取样,保持多样化数据集的训练集、验证集、测试集中流行api和长尾api是同等分布。
[0135]
对词嵌入维度进行对比,词嵌入维度往往决定了模型对于查询的单词或者api的特征学习能力。由实验得知在原始数据集和多样化数据集中当词嵌入维度为512时,blue、map、mrr、ndcg指标均取得了最佳效果,在原始数据集分别为78.25%,86.83%,81.80%,73.31%,在多样化数据集中分别为32.21%,44.93%,44.80%,45.26%。因此,本实施例将词嵌入维度设置为512,使得模型可以有很好的特征学习能力。
[0136]
对隐藏层层数和单元数对比,在原始数据集中,当隐藏层层数为3,隐藏单元个数为1000时,bleu、map、mrr指标取得了最佳效果,分别为78.25%、86.83%、81.80%,ndcg指标在隐藏层层数为2,隐藏单元个数为1500时取得最佳效果,为73.81%;在多样化数据集中,当隐藏层层数为2,隐藏单元个数为1500时,bleu、mrr、ndcg指标取得了最佳效果,分别为32.52%、44.86%、45.35%,ndcg指标在隐藏层层数为3,隐藏单元个数为1500时取得最佳效果,为44.93%。
[0137]
表1和表2是本实施例与基准方法在推荐top-10api序列的性能对比表,基准方法为deepapi、biker以及codetrans,准确度评价指标为bleu、map、mrr和ndcg,多样性评价指标为覆盖度(coverage)。表1是在原始数据集上的对比,主要来评估准确度,表2是在多样化数据集上的对比,主要来评估多样性。由表1可以看出与基线方法相比,本实施例提升了api序列推荐的准确度。由表2可以看出本实施例在显著提升推荐结果多样性时,没有损害准确度指标。
[0138]
表1原始数据集性能对比表
[0139] deepapibikercodetrans本实施例bleu37.38%050.06%78.25%map43.74%45.13%65.15%86.84%mrr41.68%16.86%57.62%81.80%ndcg35.45%5.88%34.20%73.16%
[0140]
表2多样化数据集性能对比表
[0141] deepapibikercodetrans本实施例bleu9.43%024.77%32.21%map18.15%5.54%33.75%44.93%mrr15.85%1.63%23.31%44.80%ndcg15.06%0.39%13.24%45.26%coverage3.29%3.19%7.44%10.64%
[0142]
搭建解码器模型,将上下文向量转化为api序列。构建解码器的注意力机制网络部分,注意力机制网络中包含有query、key以及value三个输入部分,分别由编码器最后一个单词的隐藏状态、编码器所有单词的隐藏状态和编码器所有单词的隐藏状态所组成,其中key和value的值相等,注意力机制网络可以为解码器的每个时间步提供一个不同的上下文向量。构建解码器的隐藏层,使用gru网络作为编码器的隐藏层,根据上下文向量、上一个时间步的输出或是正确的标签词嵌入向量和隐藏状态构建当前时间步的隐藏状态,融合学习排序方法计算损失函数,最后利用集束搜索得出api序列。
[0143]
本实施例中,分析了api的长尾分布,对长尾api聚类后,利用聚类中心替换长尾api,得到重新标签后的数据集,构建了编码器,逐个读取输入,将自然语言的开发者需求查询编码为基于时间步的编码器隐藏状态,构建了解码器,按时间步生成解码器隐藏状态,融合学习排序技术计算损失函数,使用集束搜索进行api序列的输出。因此本实施例能够基于开发者自然语言需求生成api序列,提升api序列推荐结果的准确度,在不显著降低api序列推荐结果准确度的情况下,有效提升多样性。
[0144]
进一步地,一实施例中,所述将原始数据集中切分成单词和符号片段的api合成完整的api,统计api的出现频率,得到api的长尾分布,基于长尾api的名字相似度及描述文档相似度,对长尾api进行聚类,使用聚类中心替换原始数据集中的长尾api,形成重新打标签后的数据集包括:
[0145]
s1.1:从获取的原始数据集中提取所有的需求-api序列对,对需求进行去停用词,对api序列使用启发式规则将api单词和符号片段合成为完整的api作为推荐的最小单元;
[0146]
s1.2:遍历原始数据集中经处理后的所有api,统计其出现的频率,得到api的长尾分布,获取到长尾api的集合;
[0147]
s1.3:下载java se 8文档,使用启发式规则解析每个api的html网页提取api及其描述信息,挖掘具有继承关系的api的描述信息互相作为描述信息的补充,形成api的描述信息集合;
[0148]
s1.4:对于所有的api描述信息,构建描述信息词idf逆文档频率字典,计算公式为:
[0149][0150]
其中,idf
word
表示单词word的idf值,|d|表示描述信息的数量,di表示第i条描述信息;
[0151]
s1.5:根据步骤1.4得到的描述信息的idf字典,利用bm25算法计算长尾api的两段描述信息之间的相似度,其计算公式为:
[0152][0153][0154][0155]
其中表示第i条描述信息中单词的数量,l
avg
表示所有描述信息中单词的平均长度,k1,b,k3为可调参数,根据经验取值,表示单词w在描述信息di中的词频,表示单词w在描述信息di中出现的次数;
[0156]
其中,可根据经验取k1=1.25,b=0.75,k3=1.25。
[0157]
s1.6:根据步骤1.3得到的每个长尾api的描述信息集合,第一条为长尾api自身的功能描述信息,其他为具有继承关系的描述信息,设立信号量,将自身的描述信息信号量设为1,由继承关系获取到的描述信息信号量设为0.8,两个长尾api之间的描述信息相似度由两个api之间的所有描述信息相似度最大值得到,计算公式如下:
[0158][0159]
s1.7:两个长尾api之间的名字相似度根据最小编辑距离来计算,其计算公式如下:
[0160][0161][0162]
其中表示第i个长尾api的名字长度;
[0163]
s1.8:将步骤1.6和步骤1.7分别得到的两个长尾api之间的描述信息相似度和名字相似度,经归一化并设定最小阈值后,分为给予不同的权重,求得两个长尾api的相似度分数,其计算公式如下:
[0164][0165]
其中α和β为权重,δ1和δ2为阈值,均根据实际需要进行设置,例如,α和β可分别设为0.8和0.2,δ1和δ2均设为0.2。
[0166]
s1.9:根据步骤1.8得到的长尾api间的相似度分数,利用谱聚类算法将长尾api进行聚类,并把聚类中心替换掉长尾api,形成重新打标签后的数据集。
[0167]
进一步地,一实施例中,所述对原始数据集进行分析及数据预处理包括:
[0168]
删除原始数据集中重复的需求-api序列对以及存在错误的需求-api序列对。
[0169]
本实施例中,经启发式规则和人工筛选相结合的方式删除原始数据集中重复的需求-api序列对以及存在错误的需求-api序列对。
[0170]
进一步地,一实施例中,s2包括:
[0171]
s2.1:给定开发者的自然语言需求查询q,将其经数据预处理后划分为单词序列q1,q2,

,qn,通过词嵌入技术,将每个单词都转化为词向量xi,其中,xi=embedding(qi);
[0172]
s2.2:构建编码器,编码器是一个标准的双向lstm网络,按照时间步t根据前一个时间步前向隐藏层状态、后一个时间步反向隐藏层状态和当前输入的词向量计算出当前的隐藏层状态h
t

[0173][0174][0175][0176]
其中,表示当前时间步t的前向隐藏层状态,表示当前时间步t的反向隐藏层状态,[:]是向量拼接操作;
[0177]
s2.3:通过编码器的输出层得到每个时间步t的编码器的隐藏状态,作为解码器的输入。
[0178]
进一步地,一实施例中,s3包括:
[0179]
s3.1:获取解码器的注意力分配:
[0180]ct
=∑α
tjhj
[0181]
其中权重va、w以及u均为待学习参数;
[0182]
s3.2:解码器的输入为目标序列上一个词的词向量y
t-1
、前一个时间步解码器生成的隐藏层状态s
t-1
以及注意力分配向量c
t
,其中词向量利用概率选择是训练样本词向量和生成词向量;
[0183]
s3.3:构建解码器,解码器是一个gru网络,基于步骤3.2中的输入,生成当前时间步生成的序列当前状态:
[0184][0185]
其中
[0186]
s3.4:通过解码器输出的序列当前状态融合学习排序方法,基于生成的序列当前状态的排序损失函数模型,评价生成的预测值和数据集标签中真实值不一样的程度,其计算方式如下:
[0187][0188]
l=-logp(π|f(x))
[0189]
其中l表示损失函数,f(x)表示解码器生成的序列状态得分,是指数映射即表示πi的序列状态得分。
[0190]
s3.5:利用集束搜素的后处理技术,得到若干个api序列。
[0191]
第二方面,本发明实施例还提供一种面向长尾分布特征的多样化api序列推荐装置。
[0192]
一实施例中,参照图5,图5为本发明面向长尾分布特征的多样化api序列推荐装置一实施例的功能模块示意图。如图5所示,面向长尾分布特征的多样化api序列推荐装置包括:
[0193]
重新构建数据集标签模块10,用于获取原始数据集,对原始数据集进行分析及数据预处理,将原始数据集中切分成单词和符号片段的api合成完整的api,统计api的出现频率,得到api的长尾分布,基于长尾api的名字相似度及描述文档相似度,对长尾api进行聚类,使用聚类中心替换原始数据集中的长尾api,形成重新打标签后的数据集;
[0194]
编码器模块20,用于构建编码器,对于自然语言的开发者需求,逐单词利用词嵌入技术生成词向量后输入到编码器中,编码为基于时间步的编码器隐藏状态;
[0195]
解码器模块30,用于构建解码器,按基于时间步的编码器隐藏状态基于注意力机制生成解码器隐藏状态,解码器隐藏状态经融合学习排序方法的损失函数评估序列得分后利用集束搜索后处理生成多样化api序列。
[0196]
进一步地,一实施例中,所述重新构建数据集标签模块10,用于:
[0197]
s1.1:从获取的原始数据集中提取所有的需求-api序列对,对需求进行去停用词,对api序列使用启发式规则将api单词和符号片段合成为完整的api作为推荐的最小单元;
[0198]
s1.2:遍历原始数据集中经处理后的所有api,统计其出现的频率,得到api的长尾分布,获取到长尾api的集合;
[0199]
s1.3:下载java se 8文档,使用启发式规则解析每个api的html网页提取api及其描述信息,挖掘具有继承关系的api的描述信息互相作为描述信息的补充,形成api的描述信息集合;
[0200]
s1.4:对于所有的api描述信息,构建描述信息词idf逆文档频率字典,计算公式为:
[0201][0202]
其中,idf
word
表示单词word的idf值,|d|表示描述信息的数量,di表示第i条描述信息;
[0203]
s1.5:根据步骤1.4得到的描述信息的idf字典,利用bm25算法计算长尾api的两段
描述信息之间的相似度,其计算公式为:
[0204][0205][0206][0207]
其中表示第i条描述信息中单词的数量,l
avg
表示所有描述信息中单词的平均长度,k1,b,k3为可调参数,根据经验取值,表示单词w在描述信息di中的词频,表示单词w在描述信息di中出现的次数;
[0208]
s1.6:根据步骤1.3得到的每个长尾api的描述信息集合,第一条为长尾api自身的功能描述信息,其他为具有继承关系的描述信息,设立信号量,将自身的描述信息信号量设为1,由继承关系获取到的描述信息信号量设为0.8,两个长尾api之间的描述信息相似度由两个api之间的所有描述信息相似度最大值得到,计算公式如下:
[0209][0210]
s1.7:两个长尾api之间的名字相似度根据最小编辑距离来计算,其计算公式如下:
[0211][0212][0213]
其中表示第i个长尾api的名字长度;
[0214]
s1.8:将步骤1.6和步骤1.7分别得到的两个长尾api之间的描述信息相似度和名字相似度,经归一化并设定最小阈值后,分为给予不同的权重,求得两个长尾api的相似度分数,其计算公式如下:
[0215][0216]
其中α和β为权重,δ1和δ2为阈值,均根据实际需要进行设置;
[0217]
s1.9:根据步骤1.8得到的长尾api间的相似度分数,利用谱聚类算法将长尾api进行聚类,并把聚类中心替换掉长尾api,形成重新打标签后的数据集。
[0218]
进一步地,一实施例中,所述重新构建数据集标签模块10,用于:
[0219]
删除原始数据集中重复的需求-api序列对以及存在错误的需求-api序列对。
[0220]
进一步地,一实施例中,所述编码器模块20,用于:
[0221]
s2.1:给定开发者的自然语言需求查询,将其经数据预处理后划分为单词序列,通过词嵌入技术,将每个单词都转化为词向量xi;
[0222]
s2.2:构建编码器,编码器是一个标准的双向lstm网络,按照时间步t根据前一个时间步前向隐藏层状态、后一个时间步反向隐藏层状态和当前输入的词向量计算出当前的隐藏层状态h
t

[0223][0224][0225][0226]
其中,表示当前时间步t的前向隐藏层状态,表示当前时间步t的反向隐藏层状态,[:]是向量拼接操作;
[0227]
s2.3:通过编码器的输出层得到每个时间步t的编码器的隐藏状态,作为解码器的输入。
[0228]
进一步地,一实施例中,所述解码器模块30,用于:
[0229]
s3.1:获取解码器的注意力分配:
[0230]ct
=∑α
tjhj
[0231]
其中权重va、w以及u均为待学习参数;
[0232]
s3.2:解码器的输入为目标序列上一个词的词向量y
t-1
、前一个时间步解码器生成的隐藏层状态s
t-1
以及注意力分配向量c
t
,其中词向量利用概率选择是训练样本词向量和生成词向量;
[0233]
s3.3:构建解码器,解码器是一个gru网络,基于步骤3.2中的输入,生成当前时间步生成的序列当前状态:
[0234][0235]
其中
[0236]
s3.4:通过解码器输出的序列当前状态融合学习排序方法,基于生成的序列当前状态的排序损失函数模型,评价生成的预测值和数据集标签中真实值不一样的程度,其计算方式如下:
[0237][0238]
l=-logp(π|f(x))
[0239]
其中l表示损失函数,f(x)表示解码器生成的序列状态得分,是指数映射即表示πi的序列状态得分。
[0240]
s3.5:利用集束搜素的后处理技术,得到若干个api序列。
[0241]
其中,上述面向长尾分布特征的多样化api序列推荐装置中各个模块的功能实现与上述面向长尾分布特征的多样化api序列推荐方法实施例中各步骤相对应,其功能和实
现过程在此处不再一一赘述。
[0242]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
[0243]
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0244]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备执行本发明各个实施例所述的方法。
[0245]
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献