当前位置: 首页 > 专利查询>东北大学专利>正文

一种基于LSTM模型的PythonAPI推荐方法技术

技术编号:37258518 阅读:10 留言:0更新日期:2023-04-20 23:33
本发明专利技术提供一种基于LSTM模型的Python API推荐方法,涉及API推荐技术领域。本发明专利技术针对可解释性语言Python的API推荐问题进行研究,主要通过LSTM模型学习代码上下文和用户想调用的API之间的关系,并使用改进后的束搜索算法过滤LSTM模型的推荐结果,从而推荐出API,并将各个API的概率值降序排列,使开发人员能够更快地选择想要调用的API。本发明专利技术结合LSTM模型,帮助开发人员简化开发过程,提高软件开发效率。发效率。发效率。

【技术实现步骤摘要】
一种基于LSTM模型的Python API推荐方法


[0001]本专利技术涉及API推荐
,尤其涉及一种基于LSTM模型的Python API推荐方法。

技术介绍

[0002]在软件工程的研究中,提高开发效率是从业者和研究者们关注的核心问题。为此,许多研究者利用软件自动化技术如API推荐技术来进行代码补全,可直观提高软件开发效率。
[0003]目前,大多数的API推荐技术都是专注于从源代码中提取代码的结构特征,例如AST(Abstract Syntax Tree,抽象语法树),并且现有的API推荐方法大多数都是依赖AST方法从源代码中提取出代码的语法结构,从而获取到代码结构中变量的类型。
[0004]对于使用AST方法进行Python API推荐,研究人员做了许多相关的研究,但这些研究主要存在以下不足:
[0005]1)使用AST方法抽取Python项目代码的结构信息时,会先将代码片段抽取成抽象语法树结构,再进行Python API推荐,从而占用大量的计算机系统资源且抽取过程占用的时间过长,进而导致API推荐速度缓慢。
[0006]2)由于变量信息包含变量名和变量类型,软件开发人员经常会使用一些具有实际意义的变量命名方式进行命名,这种命名方式可以清晰地反应出代码的功能信息,并且变量类型信息可以帮助确定API推荐列表的范围。然而Python是一种可解释性语言,即类型检查发生在运行阶段,并且不需要显示声明变量类型,故无法通过AST提取的语法结构中获得变量的类型信息,但往往变量的类型信息对于Python API的选择是至关重要的,例如字符串类型的变量是不会调用整型类型的变量所具有的API方法。因此只依靠AST方法很难准确地为软件开发人员推荐出所需要的Python API方法。
[0007]3)即使通过AST推荐出软件开发人员所需要的Python API方法,但由于Python API方法的推荐列表往往是按首字母从小到大排序的,如果软件开发人员需要的Python API方法靠后,那么这也会增加软件开发人员的额外选择时间,降低软件开发人员的开发效率。

技术实现思路

[0008]针对现有技术的不足,本专利技术提供了一种基于LSTM模型的Python API推荐方法,旨在结合LSTM模型进行Python API推荐,帮助软件开发人员提高开发效率。
[0009]本专利技术所采取的技术方案是:
[0010]一种基于LSTM模型的Python API推荐方法,包括以下步骤:
[0011]步骤1:收集多个Python项目构建Python项目数据集,且对构建的Python项目数据集进行数据清洗,并对数据清洗后的Python项目数据集按照一定比例进行划分为训练集和验证集;
[0012]步骤2:利用BPE算法对所述训练集数据进行编码,构建BPE词表;
[0013]所述构建BPE词表,需设定词表的总大小,当根据训练集数据生成的词表的大小大于设定此表总大小时,或不再有字节对出现的频率大于1时停止BPE词表的构建。
[0014]步骤3:创建数据加载器并对数据集进行预处理;
[0015]所述数据加载器使用开源的Python机器学习库Pytorch自带的Dataloader工具创建数据加载器以用于并行化的数据加载;
[0016]使用步骤2中生成的BPE词表,将Python项目数据集中的源代码转化为数值形式。将训练集中的全部代码段用上述方式转为向量,再通过滑动窗口的方式将生成的向量划分为数据和标签,将数据和标签载入数据加载器中;
[0017]步骤4:创建Python API推荐模型,用于理解代码段上下文之间的特征关系。
[0018]所述Python API推荐模型包括一个嵌入连接器、一个LSTM模型、一个注意力模块和一个标签分类器。其中所述嵌入连接器把从数据加载器中取出的数据通过线性变换变成了一个密集矩阵;
[0019]所述LSTM模型用于提取密集矩阵中上下文信息的特征向量得到LSTM模型的输出序列。
[0020]所述注意力模块是对于给定LSTM模型的输出序列,通过生成一个权重系数对LSTM模型的输出序列进行加权求和,来识别LSTM的输出序列中对上下文语义信息无关的特征。
[0021]所述标签分类器的任务是对加法注意力机制的输出向量的各部分的标签进行预测,完成标签分类任务,分类的结果为BPE词表中每个词或字节对的出现概率。
[0022]所述理解代码段上下文之间的特征关系具体为,将源代码输入后,先经过嵌入连接器随机生成一个维度为[token_size,512]的向量矩阵,其中token_size为BPE词表的大小,再利用LSTM模型对代码段提取上下文语义信息,将LSTM模型的输出序列输入到加法注意力机制中得到加法注意力向量,并将加法注意力向量传递给标签分类器。
[0023]步骤5:利用步骤1中划分的训练数据集对步骤4中构建的Python API推荐模型进行训练。
[0024]步骤5.1:从数据加载器中取出的2维向量数据输入到嵌入连接器中得到3维向量。
[0025]从数据加载器中取出的数据格式为(数据,标签值),其中数据向量的维度为[batch_size,seq_len],batch_size为一次取出多少条数据,seq_len为步骤3中滑动窗口的大小;
[0026]步骤5.2:将5.1步骤中嵌入连接器的输出向量输入到LSTM模型计算出特征向量。
[0027]LSTM由t时刻的句子向量w
t
、细胞状态C
t
、临时细胞状态隐藏层状态h
t
、遗忘门f
t
、输入门i
t
、输出门o
t
组成。
[0028]步骤5.2.1:选择从神经元中移除的信息。这个操作由一个sigmod层,也被称为遗忘门来决定的。σ为sigmod函数,W
f
为遗忘门的权重,h
t
‑1为t

1时刻的隐藏层状态,b
f
为遗忘门的偏置值。使用公式(1)计算输出一个介于0和1之间的数值f
t

[0029]f
t
=σ(W
f
·
[h
t
‑1,w
t
]+b
f
)
ꢀꢀꢀꢀꢀꢀ
(1)
[0030]步骤5.2.2:确定在神经元中存储的信息。W
i
为输入门的权重,b
i
为输入门的偏置值,W
c
为细胞状态的权重,b
c
为细胞状态的偏置值。使用公式(2)和公式(3)计算出临时细胞
状态
[0031]i
t
=σ(W
i
·
[h
t
‑1,w
t
]+b
...

【技术保护点】

【技术特征摘要】
1.一种基于LSTM模型的Python API推荐方法,其特征在于,包括以下步骤:步骤1:收集多个Python项目构建Python项目数据集,且对构建的Python项目数据集进行数据清洗,并对数据清洗后的Python项目数据集按照一定比例进行划分为训练集和验证集;步骤2:利用BPE算法对所述训练集数据进行编码,构建BPE词表;步骤3:创建数据加载器并对数据集进行预处理;步骤4:创建Python API推荐模型,用于理解代码段上下文之间的特征关系;步骤5:利用步骤1中划分的训练数据集对步骤4中构建的Python API推荐模型进行训练;步骤6:Python API推荐模型API推荐过程,获得最终的Python API列表并推荐给用户。2.根据权利要求1所述的一种基于LSTM模型的Python API推荐方法,其特征在于,步骤2中所述构建BPE词表,需设定词表的总大小,当根据训练集数据生成的词表的大小大于设定此表总大小时,或不再有字节对出现的频率大于1时停止BPE词表的构建。3.根据权利要求1所述的一种基于LSTM模型的Python API推荐方法,其特征在于,步骤3中所述数据加载器使用开源的Python机器学习库Pytorch自带的Dataloader工具创建数据加载器以用于并行化的数据加载。4.根据权利要求1所述的一种基于LSTM模型的Python API推荐方法,其特征在于,步骤3中所述预处理具体为,使用步骤2中生成的BPE词表,将Python项目数据集中的源代码转化为数值形式;将训练集中的全部代码段用上述方式转为向量,再通过滑动窗口的方式将生成的向量划分为数据和标签,将数据和标签载入数据加载器中。5.根据权利要求1所述的一种基于LSTM模型的Python API推荐方法,其特征在于,步骤4中所述Python API推荐模型包括一个嵌入连接器、一个LSTM模型、一个注意力模块和一个标签分类器;其中所述嵌入连接器把从数据加载器中取出的数据通过线性变换变成了一个密集矩阵;所述LSTM模型用于提取密集矩阵中上下文信息的特征向量得到LSTM模型的输出序列;所述注意力模块是对于给定LSTM模型的输出序列,通过生成一个权重系数对LSTM模型的输出序列进行加权求和,来识别LSTM的输出序列中对上下文语义信息无关的特征;所述标签分类器的任务是对加法注意力机制的输出向量的各部分的标签进行预测,完成标签分类任务,分类的结果为BPE词表中每个词或字节对的出现概率;所述理解代码段上下文之间的特征关系具体为,将源代码输入后,先经过嵌入连接器随机生成一个维度为[token_size,512]的向量矩阵,其中token_size为BPE词表的大小,再利用LSTM模型对代码段提取上下文语义信息,将LSTM模型的输出序列输入到加法注意力机制中得到加法注意力向量,并将加法注意力向量传递给标签分类器。6.根据权利要求1所述的一种基于LSTM模型的Python API推荐方法,其特征在于,所述步骤5具体包括和以下步骤:步骤5.1:从数据加载器中取出的2维向量数据输入到嵌入连接器中得到3维向量;从数据加载器中取出的数据格式为(数据,标签值),其中数据向量的维度为[batch_size,seq_len],batch_size为一次取出多少条数据,seq_len为步骤3中滑动窗口的大小;步骤5.2:将5.1步骤中嵌入连接器的输出向量输入到LSTM模型计算出特征向量;
LSTM由t时刻的句子向量w
t
、细胞状态C
t
、临时细胞状态隐藏层状态h
t
、遗忘门f
t
、输入门i
t
、输出门o
t
组成;步骤5.2.1:选择从神经元中移除的信息;这个操作由一个sigmod层,也被称为遗忘门来决定的;σ为sigmod函数,W
f
为遗忘门的权重,h
t
‑1为t

1时刻的隐藏层状态,b
f
为遗忘门的偏置值;使用公式(1)计算输出一个介于0和1之间的数值f
t
;f
t
=σ(W
f
·
[h
t
‑1,w
t
]+b
f
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)步骤5.2.2:确定在神经元中存储的信息;W
i
为输入门的权重,b
i
为输入门的偏置值,W
c
为细胞状态的权重,b
c
为细胞状态的偏置值;使用公式(2)和公式(3)计算出临时细胞状态i
t
=σ(W
i
·
[h
t
‑1,w
t
]+b
i
)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)步骤5.2.3:把神经元的细胞状态从C
t
‑1迁移到C
t
,C
t
‑1为t

1时刻的细胞状态;使用公式(4)结合上述步骤计算出的中间值计算出t时刻的细胞状态C
t
;步骤5.2.4:根据公式(5)计算LSTM模型的输出结果o
t
,w
o

【专利技术属性】
技术研发人员:蔡晓婷李冬陈果刘子扬苑鹏朱志良于海
申请(专利权)人:东北大学
类型:发明
国别省市:

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

1