一种基于深度学习和语义信息的API推荐系统及方法

未命名 10-19 阅读:68 评论:0

一种基于深度学习和语义信息的api推荐系统及方法
技术领域
1.本发明属于软件工程技术领域,具体涉及一种基于深度学习和语义信息的api推荐系统及方法。


背景技术:

2.近年来,随着人工智能技术的不断发展,python也逐渐成为了最流行的编程语言之一,许多流行的机器学习和深度学习编程框架,比如tensorflow和pytorch等都支持python编写的应用程序。在通过集成开发环境进行的软件开发中,python的应用程序接口(application programming interface,api)推荐能够帮助开发人员快速找到合适的api,提高他们的编程效率。
3.目前,针对python语言的api推荐方法主要有基于代码的api推荐方法和基于查询的api推荐方法。基于代码的api推荐方法在类型推断失败时会给用户推荐一些非正确类型的api,并且依赖于局部数据流进行api推荐,而当局部数据流中的信息没有包含正确api的信息时,推荐的api往往也是不正确的。另外的基于查询的api方法需要用户提供查询语句,利用查询语句在知识库中推荐api,但用户在编写代码时通常需要结合上下文来确定自己想要的api,额外的查询会增加用户的负担。


技术实现要素:

4.为了解决现有技术存在的推荐准确性差、可靠性差以及查询负担重的问题,本发明目的在于提供一种基于深度学习和语义信息的api推荐系统及方法。
5.本发明所采用的技术方案为:
6.一种基于深度学习和语义信息的api推荐系统,包括依次连接的api推荐点定位单元、数据预处理单元、数据提取单元、数据编码单元以及api推荐单元,api推荐点定位单元和api推荐单元均与用户的代码服务器连接,api推荐单元设置有深度学习api推荐模型;
7.api推荐点定位单元,用于接收用户的代码服务器发送的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例api;
8.数据预处理单元,用于根据推荐点前的代码上下文,获取源码令牌序列、ast令牌序列以及自然语言令牌序列,并根据调用者对象,使用后处理的类型推断,获取调用者对象的变量类型;
9.数据提取单元,用于根据调用者对象的变量类型和正例api,获取推荐点的候选api,并根据推荐点前的代码上下文,获取乐观数据流令牌序列;
10.数据编码单元,用于根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取语义特征向量,并根据乐观数据流令牌序列和候选api,获取候选api的数据流特征向量;
11.api推荐单元,用于根据语义特征向量和数据流特征向量,使用深度学习api推荐模型,获取候选api的推荐列表,并将推荐列表发送至用户的代码服务器。
12.进一步地,数据预处理单元包括类型推断模块和代码解析模块,类型推断模块设
置有类型推断模型,类型推断模型为使用transformer算法构建的第一大型预训练模型,代码解析模块设置有代码解析模型,代码解析模型为使用自然语言分词算法构建的自然语言处理模型。
13.进一步地,数据提取单元包括候选api生成模块和特征收集模块。
14.进一步地,数据编码单元包括第一数据编码模块和第二数据特征编码模块,第一数据编码模块设置有第一数据编码模型,第一数据编码模型为使用transformer算法构建的第二大型预训练模型,第二数据特征编码模块设置有第二数据特征编码模型,第二数据特征编码模型为ngram语言模型。
15.一种基于深度学习和语义信息的api推荐方法,应用于api推荐系统,其特征在于:方法包括如下步骤:
16.接收用户的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例api;
17.根据推荐点前的代码上下文,获取源码令牌序列、ast令牌序列以及自然语言令牌序列,并根据调用者对象,使用后处理的类型推断,获取调用者对象的变量类型;
18.根据调用者对象的变量类型和正例api,获取推荐点的候选api,并根据推荐点前的代码上下文,获取乐观数据流令牌序列;
19.根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取语义特征向量,并根据乐观数据流令牌序列和候选api,获取候选api的数据流特征向量;
20.根据语义特征向量和数据流特征向量,使用深度学习api推荐模型,获取候选api的推荐列表,并将推荐列表发送至用户处。
21.进一步地,接收用户的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例api,包括如下步骤:
22.接收用户发送的源代码;
23.定位源代码的推荐点;
24.根据推荐点,获取源代码的推荐点前的代码上下文、调用者对象以及正例api。
25.进一步地,根据推荐点前的代码上下文,获取源码令牌序列、ast令牌序列以及自然语言令牌序列,并根据调用者对象,使用后处理的类型推断,获取调用者对象的变量类型,包括如下步骤:
26.根据下划线命名规则、驼峰命名规则以及空格,使用代码解析模型,将推荐点前的代码上下文分割为源码令牌序列;
27.根据x-sbt方法,将推荐点前的代码上下文的ast树分割为ast令牌序列;
28.根据推荐点前的代码上下文中的注释和文档,使用代码解析模型,将推荐点前的代码上下文分割为自然语言令牌序列;
29.使用静态类型推断工具,对调用者对象进行静态类型推断,若静态类型推断成功,则得到调用者对象的变量类型,否则,进入下一步骤;
30.根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取组合令牌序列;
31.根据组合令牌序列,使用类型推断模型,获取语义向量;
32.根据候选的变量类型,获取词向量;
33.根据语义向量和词向量,获取调用者对象的变量类型范围;
34.根据调用者对象的变量类型范围,获取调用者对象的变量类型。
35.进一步地,根据调用者对象的变量类型和正例api,获取推荐点的候选api,并根据推荐点前的代码上下文,获取乐观数据流令牌序列,包括如下步骤:
36.根据调用者对象的变量类型,收集对应的变量类型的正例api,得到推荐点的候选api;
37.根据基本抽象语法,派生乐观数据流规则;
38.根据乐观数据流规则,提取推荐点前的代码上下文的乐观数据流;
39.收集乐观数据流的令牌序列,得到乐观数据流令牌序列。
40.进一步地,根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取语义特征向量,并根据乐观数据流令牌序列和候选api,获取候选api的数据流特征向量,包括如下步骤:
41.根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取组合令牌序列;
42.根据组合令牌序列,使用第一数据编码模型,获取语义向量;
43.将语义向量进行压缩,得到语义特征向量;
44.根据包含正确api的数据流路径,收集对应的乐观数据流令牌序列,得到正确数据流令牌序列;
45.将正确数据流令牌序列输入第二数据编码模型进行训练,得到优化第二数据编码模型;
46.使用候选api,替换正确数据流令牌序列中正确api,得到对应的替换数据流令牌序列;
47.将替换数据流令牌序列输入优化第二数据编码模型,得到候选api的对数概率分数;
48.根据对数概率分数,获取候选api的数据流特征向量。
49.进一步地,根据语义特征向量和数据流特征向量,使用深度学习api推荐模型,获取候选api的推荐列表,并将推荐列表发送至用户处,包括如下步骤:
50.将语义特征向量和数据流特征向量进行拼接,得到候选api的组合特征向量;
51.将组合特征向量输入深度学习api推荐模型,得到候选api的api分数;
52.根据api分数,获取候选api的推荐列表,并将推荐列表发送至用户处。
53.本发明的有益效果为:
54.本发明提供的一种基于深度学习和语义信息的api推荐系统及方法,采用了后处理的类型推断,即使动态语言的类型推断失败,后处理的类型推断也能给出正确类型范围,从而减少推荐非正确类型的api,提高了推荐准确性;在局部数据流信息的基础上增加了代码上下文的语义信息,在局部数据流的信息不足以推荐正确api时也能通过代码上下文的语义信息推荐api,提高了推荐的可靠性;自动根据用户编写的源代码的代码上下文推荐api,无需用户进行查询,减少了用户的查询负担;提高python编写代码的效率和质量,减少编写过程中的错误和调试时间,增强python编写的可读性与可维护性。
55.本发明的其他有益效果将在具体实施方式中进一步进行说明。
附图说明
56.图1是本发明中基于深度学习和语义信息的api推荐系统的结构框图。
57.图2是本发明中基于深度学习和语义信息的api推荐方法的流程框图。
具体实施方式
58.下面结合附图及具体实施例对本发明做进一步阐释。
59.实施例1:
60.如图1所示,本实施例提供一种基于深度学习和语义信息的api推荐系统,包括依次连接的api推荐点定位单元、数据预处理单元、数据提取单元、数据编码单元以及api推荐单元,api推荐点定位单元和api推荐单元均与用户的代码服务器连接,api推荐单元设置有深度学习api推荐模型;
61.api推荐点定位单元,用于接收用户的代码服务器发送的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例api;
62.数据预处理单元,用于根据推荐点前的代码上下文,获取源码令牌序列、ast令牌序列以及自然语言令牌序列,并根据调用者对象,使用后处理的类型推断,获取调用者对象的变量类型;
63.数据提取单元,用于根据调用者对象的变量类型和正例api,获取推荐点的候选api,并根据推荐点前的代码上下文,获取乐观数据流令牌序列;
64.数据编码单元,用于根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取语义特征向量,并根据乐观数据流令牌序列和候选api,获取候选api的数据流特征向量;
65.api推荐单元,用于根据语义特征向量和数据流特征向量,使用深度学习api推荐模型,获取候选api的推荐列表,并将推荐列表发送至用户的代码服务器。
66.作为优选,数据预处理单元包括类型推断模块和代码解析模块,类型推断模块设置有类型推断模型,类型推断模型为使用transformer算法构建的第一大型预训练模型,代码解析模块设置有代码解析模型,代码解析模型为使用自然语言分词算法构建的自然语言处理模型;
67.代码解析模块,用于根据推荐点前的代码上下文,使用代码解析模型,获取源码令牌序列、抽象语法树(abstract syntax tree,ast)令牌序列以及自然语言令牌序列;
68.类型推断模块,用于根据调用者对象,使用类型推断模型,获取调用者对象的变量类型。
69.作为优选,数据提取单元包括候选api生成模块和特征收集模块;
70.候选api生成模块,用于根据调用者对象的变量类型,收集对应的变量类型的正例api,得到推荐点的候选api;
71.特征收集模块,用于提取推荐点前的代码上下文中的乐观数据流,并根据乐观数据流,获取乐观数据流特征令牌。
72.作为优选,数据编码单元包括第一数据编码模块和第二数据特征编码模块,第一数据编码模块设置有第一数据编码模型,第一数据编码模型为使用transformer算法构建的第二大型预训练模型,第二数据特征编码模块设置有第二数据特征编码模型,第二数据特征编码模型为ngram语言模型;
73.第一数据编码模块,用于根据源码令牌序列、ast令牌序列以及自然语言令牌序列,使用第一数据编码模型,获取语义特征向量;
74.第二数据特征编码模块,用于根据包含正确api的数据流路径,收集乐观数据流特征令牌,得到正确数据流特征令牌,根据正确数据流特征令牌和候选api,使用第二数据特征编码模型,获取候选api的数据流特征向量。
75.实施例2:
76.如图2所示,本实施例提供一种基于深度学习和语义信息的api推荐方法,应用于api推荐系统,其特征在于:方法包括如下步骤:
77.接收用户的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例api,包括如下步骤:
78.接收用户发送的源代码;
79.本实施例的源代码为get_p_contents方法,如下所示:
[0080][0081][0082]
根据[expression].targetapi()的形式定位源代码的推荐点soup.find_all(

div’);
[0083]
根据推荐点,提取soup.find_all(

div’)前面的代码作为推荐点前的代码上下文,提取提取soup.find_all(

div’)中的soup作为调用者对象,提取find_all()作为正例api;
[0084]
根据推荐点前的代码上下文,获取源码令牌序列、ast令牌序列以及自然语言令牌序列,并根据调用者对象,使用后处理的类型推断,获取调用者对象的变量类型,包括如下步骤:
[0085]
根据下划线命名规则、驼峰命名规则以及空格,使用代码解析模型,将推荐点前的代码上下文分割为源码令牌序列c={c1,c2,

,c
l
},其中l是源码的令牌序列的长度;
[0086]
根据x-平衡二叉搜索树(size balanced tree,sbt)方法,将推荐点前的代码上下文的ast树分割为ast令牌序列,具体方法为:将推荐点前的代码上下文转换为ast树,遍历这个ast树中表达式级别及以上的节点,并使用x-sbt(xml-like sbt)方法将其转换为线性化的ast,获得ast的令牌序列a={a1,a2,

,am},其中m表示ast的令牌序列的长度;
[0087]
根据推荐点前的代码上下文中的注释和文档,使用代码解析模型,将推荐点前的代码上下文分割为自然语言令牌序列,具体方法为:使用nltk分词方法将推荐点前的代码上下文分割为单词序列,并从推荐点前的代码上下文中提取所有方法名和方法调用序列,并将他们按驼峰命名或下划线命名的规则拆分成令牌序列,在代码上下文中的文档和注释不可用时,使用方法名的令牌序列代替注释和文档的令牌序列,最终得到的自然语言令牌序列为n={n1,n2,

,n
p
},其中p是自然语言令牌序列的长度;
[0088]
本实施例中,源码令牌序列为{import,requests,import,os,import,pandas,as pd,from,bs4,import,beautifulsoup,def,get,p,contents,(,html,),:,soup,=,beautifulsoup,(,html,,,

,lxml,

,),div,items,=},ast令牌序列为{import,import,import,import,《expression》,assignment,《/expression》},自然语言令牌序列为{get,p,contents,beautiful,soup};
[0089]
使用静态类型推断工具pytype,对调用者对象进行静态类型推断,若静态类型推断成功,则得到调用者对象的变量类型,否则,进入下一步骤;
[0090]
根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取组合令牌序列input=c1,

,c
l
,[sep],a1,

,am,[sep],n1,

,n
p

[0091]
根据组合令牌序列,使用类型推断模型,获取语义向量es;
[0092]
根据候选的变量类型,获取词向量e
t

[0093]
根据语义向量和词向量,获取调用者对象的变量类型范围,公式为:
[0094][0095]
dist(es,e
t
)符合标准,则位于变量类型范围内;
[0096]
根据调用者对象的变量类型范围,获取调用者对象的变量类型;
[0097]
调用者对象为soup,使用静态类型推断工具pytype对soup进行静态类型推断,得到的类型为none,即表示静态类型推断失败,此时,根据组合令牌序列input=import,

,items,[sep],import,

,assignment,[sep],get,

,soup,经过词表转换后输入类型推断模型中,类型推断模型将得到代码上下文的语义向量es,候选类型将从代码上下文中导入的包中选取,本实施例的源代码导入的包有requests,os,pd,beautifulsoup,选取其中的beautifulsoup为例,获取beautifulsoup的词向量e
t
,es和e
t
经过距离公式计算后最接近,因此推断出soup的类型为beautifulsoup;
[0098]
基于预训练模型构建的类型推断模型的作用是推断出调用者对象的正确类型,使
后面的候选api生成模块能收集正确类型的候选api,提高推荐准确度;
[0099]
根据调用者对象的变量类型和正例api,获取推荐点的候选api,并根据推荐点前的代码上下文,获取乐观数据流令牌序列,包括如下步骤:
[0100]
根据调用者对象的变量类型,收集对应的变量类型的正例api,得到推荐点的候选api;
[0101]
根据基本抽象语法,派生乐观数据流规则;五个基本抽象语法分别为赋值、循环、对象属性访问/调用、容器访问以及函数参数传递;
[0102]
根据乐观数据流规则,提取推荐点前的代码上下文的乐观数据流;
[0103]
收集乐观数据流的令牌序列,得到乐观数据流令牌序列;
[0104]
根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取语义特征向量,并根据乐观数据流令牌序列和候选api,获取候选api的数据流特征向量,包括如下步骤:
[0105]
根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取组合令牌序列input=c1,

,c
l
,[sep],a1,

,am,[sep],n1,

,n
p

[0106]
根据组合令牌序列,使用第一数据编码模型,获取语义向量es,其中es是一个768维的向量;
[0107]
将语义向量进行压缩,得到10维的语义特征向量,以获取关键的语义信息;
[0108]
根据包含正确api的数据流路径x0→
x1→…→
api
→…→
xn,收集对应的乐观数据流令牌序列,得到正确数据流令牌序列(x0,x1,

,api,

,xn);
[0109]
将正确数据流令牌序列输入第二数据编码模型进行训练,得到优化第二数据编码模型;
[0110]
使用候选api,替换正确数据流令牌序列中正确api,得到对应的替换数据流令牌序列;
[0111]
将替换数据流令牌序列输入优化第二数据编码模型,得到候选api的对数概率分数pi,i为指示量;
[0112]
具体的,包括如下步骤:
[0113]
使用ngram语言模型,将替换数据流令牌序列的数据流信息编码为第一1维特征向量;
[0114]
使用ngram语言模型,计算替换数据流令牌序列和候选api的相似度特征,并编码为第二1维特征向量,相似度特征的计算公式为:
[0115][0116]
其中,lcsk表示数据流令牌xi和候选api的最长公共标记子序列,d表示数据流令牌xi和候选api的距离;
[0117]
使用ngram语言模型,计算替换数据流令牌序列和候选api的共现特征,并编码为2维特征向量,共现特征的计算公式为:
[0118]
[0119]
其中,n(x)表示调用者对象x的出现次数,n(api,x)表示调用者对象x和候选api同时出现的次数;
[0120]
获取第一1维特征向量、第二1维特征向量以及2维特征向量的对数概率分数;
[0121]
根据对数概率分数,获取候选api的4维的数据流特征向量;
[0122]
根据语义特征向量和数据流特征向量,使用深度学习api推荐模型,获取候选api的推荐列表,并将推荐列表发送至用户处,包括如下步骤:
[0123]
将语义特征向量和数据流特征向量进行拼接,得到候选api的14维的组合特征向量;
[0124]
将组合特征向量输入深度学习api推荐模型,得到候选api的api分数;
[0125]
深度学习api推荐模型由一个用于提取关键特征的线性层和一个用于推荐的线性层组成,通过训练数据集进行训练,训练数据集包括常用python开源代码库、python官方文档中的示例代码等;
[0126]
根据api分数,获取候选api的推荐列表,并将推荐列表发送至用户处。
[0127]
本发明提供的一种基于深度学习和语义信息的api推荐系统及方法,采用了后处理的类型推断,即使动态语言的类型推断失败,后处理的类型推断也能给出正确类型范围,从而减少推荐非正确类型的api,提高了推荐准确性;在局部数据流信息的基础上增加了代码上下文的语义信息,在局部数据流的信息不足以推荐正确api时也能通过代码上下文的语义信息推荐api,提高了推荐的可靠性;自动根据用户编写的源代码的代码上下文推荐api,无需用户进行查询,减少了用户的查询负担;提高python编写代码的效率和质量,减少编写过程中的错误和调试时间,增强python编写的可读性与可维护性。
[0128]
本发明不局限于上述可选的实施方式,任何人在本发明的启示下都可得出其他各种形式的产品。上述具体实施方式不应理解成对本发明的保护范围的限制,本发明的保护范围应当以权利要求书中界定的为准,并且说明书可以用于解释权利要求书。

技术特征:
1.一种基于深度学习和语义信息的api推荐系统,其特征在于:包括依次连接的api推荐点定位单元、数据预处理单元、数据提取单元、数据编码单元以及api推荐单元,所述的api推荐点定位单元和api推荐单元均与用户的代码服务器连接,所述的api推荐单元设置有深度学习api推荐模型;api推荐点定位单元,用于接收用户的代码服务器发送的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例api;数据预处理单元,用于根据推荐点前的代码上下文,获取源码令牌序列、ast令牌序列以及自然语言令牌序列,并根据调用者对象,使用后处理的类型推断,获取调用者对象的变量类型;数据提取单元,用于根据调用者对象的变量类型和正例api,获取推荐点的候选api,并根据推荐点前的代码上下文,获取乐观数据流令牌序列;数据编码单元,用于根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取语义特征向量,并根据乐观数据流令牌序列和候选api,获取候选api的数据流特征向量;api推荐单元,用于根据语义特征向量和数据流特征向量,使用深度学习api推荐模型,获取候选api的推荐列表,并将推荐列表发送至用户的代码服务器。2.根据权利要求1所述的一种基于深度学习和语义信息的api推荐系统,其特征在于:所述的数据预处理单元包括类型推断模块和代码解析模块,所述的类型推断模块设置有类型推断模型,所述的类型推断模型为使用transformer算法构建的第一大型预训练模型,所述的代码解析模块设置有代码解析模型,所述的代码解析模型为使用自然语言分词算法构建的自然语言处理模型。3.根据权利要求1所述的一种基于深度学习和语义信息的api推荐系统,其特征在于:所述的数据提取单元包括候选api生成模块和特征收集模块。4.根据权利要求1所述的一种基于深度学习和语义信息的api推荐系统,其特征在于:所述的数据编码单元包括第一数据编码模块和第二数据特征编码模块,所述的第一数据编码模块设置有第一数据编码模型,所述的第一数据编码模型为使用transformer算法构建的第二大型预训练模型,所述的第二数据特征编码模块设置有第二数据特征编码模型,所述的第二数据特征编码模型为ngram语言模型。5.一种基于深度学习和语义信息的api推荐方法,应用于如权利要求1-4任一所述的api推荐系统,其特征在于:所述的方法包括如下步骤:接收用户的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例api;根据推荐点前的代码上下文,获取源码令牌序列、ast令牌序列以及自然语言令牌序列,并根据调用者对象,使用后处理的类型推断,获取调用者对象的变量类型;根据调用者对象的变量类型和正例api,获取推荐点的候选api,并根据推荐点前的代码上下文,获取乐观数据流令牌序列;根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取语义特征向量,并根据乐观数据流令牌序列和候选api,获取候选api的数据流特征向量;根据语义特征向量和数据流特征向量,使用深度学习api推荐模型,获取候选api的推荐列表,并将推荐列表发送至用户处。6.根据权利要求5所述的一种基于深度学习和语义信息的api推荐方法,其特征在于:
接收用户的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例api,包括如下步骤:接收用户发送的源代码;定位源代码的推荐点;根据推荐点,获取源代码的推荐点前的代码上下文、调用者对象以及正例api。7.根据权利要求5所述的一种基于深度学习和语义信息的api推荐方法,其特征在于:根据推荐点前的代码上下文,获取源码令牌序列、ast令牌序列以及自然语言令牌序列,并根据调用者对象,使用后处理的类型推断,获取调用者对象的变量类型,包括如下步骤:根据下划线命名规则、驼峰命名规则以及空格,使用代码解析模型,将推荐点前的代码上下文分割为源码令牌序列;根据x-sbt方法,将推荐点前的代码上下文的ast树分割为ast令牌序列;根据推荐点前的代码上下文中的注释和文档,使用代码解析模型,将推荐点前的代码上下文分割为自然语言令牌序列;使用静态类型推断工具,对调用者对象进行静态类型推断,若静态类型推断成功,则得到调用者对象的变量类型,否则,进入下一步骤;根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取组合令牌序列;根据组合令牌序列,使用类型推断模型,获取语义向量;根据候选的变量类型,获取词向量;根据语义向量和词向量,获取调用者对象的变量类型范围;根据调用者对象的变量类型范围,获取调用者对象的变量类型。8.根据权利要求5所述的一种基于深度学习和语义信息的api推荐方法,其特征在于:根据调用者对象的变量类型和正例api,获取推荐点的候选api,并根据推荐点前的代码上下文,获取乐观数据流令牌序列,包括如下步骤:根据调用者对象的变量类型,收集对应的变量类型的正例api,得到推荐点的候选api;根据基本抽象语法,派生乐观数据流规则;根据乐观数据流规则,提取推荐点前的代码上下文的乐观数据流;收集乐观数据流的令牌序列,得到乐观数据流令牌序列。9.根据权利要求5所述的一种基于深度学习和语义信息的api推荐方法,其特征在于:根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取语义特征向量,并根据乐观数据流令牌序列和候选api,获取候选api的数据流特征向量,包括如下步骤:根据源码令牌序列、ast令牌序列以及自然语言令牌序列,获取组合令牌序列;根据组合令牌序列,使用第一数据编码模型,获取语义向量;将语义向量进行压缩,得到语义特征向量;根据包含正确api的数据流路径,收集对应的乐观数据流令牌序列,得到正确数据流令牌序列;将正确数据流令牌序列输入第二数据编码模型进行训练,得到优化第二数据编码模型;使用候选api,替换正确数据流令牌序列中正确api,得到对应的替换数据流令牌序列;将替换数据流令牌序列输入优化第二数据编码模型,得到候选api的对数概率分数;
根据对数概率分数,获取候选api的数据流特征向量。10.根据权利要求5所述的一种基于深度学习和语义信息的api推荐方法,其特征在于:根据语义特征向量和数据流特征向量,使用深度学习api推荐模型,获取候选api的推荐列表,并将推荐列表发送至用户处,包括如下步骤:将语义特征向量和数据流特征向量进行拼接,得到候选api的组合特征向量;将组合特征向量输入深度学习api推荐模型,得到候选api的api分数;根据api分数,获取候选api的推荐列表,并将推荐列表发送至用户处。

技术总结
本发明属于软件工程技术领域,公开了一种基于深度学习和语义信息的API推荐系统及方法。所述的系统包括依次连接的API推荐点定位单元、数据预处理单元、数据提取单元、数据编码单元以及API推荐单元。所述的方法包括如下步骤:接收用户的源代码,获取源代码的推荐点前的代码上下文、调用者对象以及正例API;获取源码令牌序列、AST令牌序列以及自然语言令牌序列和调用者对象的变量类型;获取推荐点的候选API和乐观数据流令牌序列;获取语义特征向量和数据流特征向量;获取候选API的推荐列表。本发明解决了现有技术存在的推荐准确性差、可靠性差以及查询负担重的问题。性差以及查询负担重的问题。性差以及查询负担重的问题。


技术研发人员:李可起 唐兴利 李丰航 叶春杨 周辉
受保护的技术使用者:海南大学
技术研发日:2023.07.24
技术公布日:2023/10/15
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐