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

一种树序列化嵌入的软件代码推荐方法技术

技术编号:33892853 阅读:12 留言:0更新日期:2022-06-22 17:28
本发明专利技术提供一种树序列化嵌入的软件代码推荐方法,主要用于解决开发过程中出现的代码功能实现问题,包括如下步骤:步骤1、通过解析抽象语法树AST分别将向量化的代码和注释嵌入到向量空间中并计算相似度,建立TCDEnn模型;步骤2、收集java代码,通过AST节点提取进行预处理构建训练集和测试集,用来训练和测试TCDEnn模型;步骤3、收集高质量的java代码,建立代码搜索库,开发人员输入描述查询代码搜素库,对搜索代码库中的AST向量与功能描述向量计算相似度,将相似度值最高的k个代码向量返回给开发人员。本发明专利技术可以通过直接描述功能需求的形式得到对应代码,有效节省开发时间,提高开发效率。高开发效率。高开发效率。

【技术实现步骤摘要】
一种树序列化嵌入的软件代码推荐方法


[0001]本专利技术属于信息检索
,具体涉及一种树序列化嵌入的软件代码推荐方法,根据开发过程中的功能需求进行代码推荐。

技术介绍

[0002]面对IT发展的黄金时期,越来越多的专业或非专业人员加入到开发行列中。在开发人员开发软件时,一些功能需求或者任务要求可能涉及开发人员此前没有接触过的编程方式或者领域。现有的搜索引擎,大多是根据自然语言的关键字匹配来寻找答案的,这样的搜索方式显然并不能够反应代码的语义和结构信息,也就难以找到真正符合功能需求的目标代码。这造成了开发人员需要浪费很多时间,浏览大量无用信息。
[0003]技术知识和开发经验的不足,使得软件的开发效率难以提升。互联网行业迎来裁员浪潮。为了降低开发门槛,提高开发效率,无代码开发和低代码开发成为人们关注的下一个焦点。无代码开发的一种体现形式就是利用自然语言的描述来实现开发过程。
[0004]为了响应无代码开发的时代需求,为了提高开发人员的编程效率,提出了根据开发需求自动生成代码段的代码推荐方法。

技术实现思路

[0005]本专利技术要解决的技术问题是提供一种树序列化嵌入的软件代码推荐方法,通过直接描述功能需求的形式得到对应代码,有效节省开发时间,提高开发效率。
[0006]为解决上述技术问题,本专利技术的实施例提供一种树序列化嵌入的软件代码推荐方法,包括如下步骤:
[0007]S1、通过解析抽象语法树AST分别将向量化的代码和注释嵌入到向量空间中并计算相似度,建立TCDEnn模型;
[0008]S2、收集java代码,通过AST节点提取进行预处理构建训练集和测试集,用来训练和测试TCDEnn模型;
[0009]S3、收集高质量的java代码,建立代码搜索库,开发人员输入描述查询代码搜素库,对搜索代码库中的AST向量与功能描述向量计算相似度,将相似度值最高的k个代码向量返回给开发人员。
[0010]其中,步骤S1中的TCDEnn模型包括三部分:AST嵌入、自然语言嵌入和相似度计算,其中,
[0011]S1.1、AST嵌入:将java代码解析成AST,并遍历节点,将AST嵌入到向量空间中;
[0012]S1.2、自然语言嵌入:将代码注释中用自然语言描述的代码功能内容嵌入到向量空间中;
[0013]S1.3、相似度计算:组合使用余弦相似度和曼哈顿距离来计算AST向量和功能描述向量在表达语义上的相似性。
[0014]其中,步骤S1.1包括如下步骤:
[0015]S1.1.1、使用Eclipse的JDT编译器将java代码解析成可视化的AST,提取代码和注释;
[0016]S1.1.2、通过观察AST结构特征,递归遍历AST节点,将AST转化成节点序列ASTseq,假设输入序列ASTseq={b1,b2,b3,

,b
n
},使用GRU网络将ASTseq嵌入向量:
[0017]h
t
=G(h
t
‑1,b
t
),t∈{1,2,...,n};
[0018]其中,G是GRU网络,b
t
是APIseq的词嵌入向量,h
t
是隐藏层状态值,最终的隐藏层状态h
n
代表ASTseq的模态表示,n表示输入词个数;
[0019]步骤1.1.3、通过对ASTseq各隐藏层输出做加权平均运算弥补因为将ASTseq长序列作为GRU的输入所造成的必要信息丢失的问题,权重α计算方法为:
[0020]α
t
=softmax(h
n
·
h
t
),t∈{1,2,...,n};
[0021]其中,h
n
是ASTseq的模态表示,h
t
是隐藏层状态值,α
t
是h
t
对应权重,最终得到AST的向量表示ast_repr:
[0022][0023]进一步,步骤S1.1.2包括如下步骤:
[0024]S1.1.2.1、将java代码解析成AST,观察节点特点;在AST中,终端节点具有类型和值的特点,而非终端结点只有类型特点。
[0025]S1.1.2.2、终端结点可以表示成一个二元组<Ta,Va>,而非终端节点表示为<Ta>;其中,Ta表示AST节点类型,Va表示AST节点值;
[0026]S1.1.2.3、从根节点开始,用一对括号表示树形结构,把树的根节点表示在右括号后面,递归遍历每一个子树,直到遍历完所有结点,得到含括号的节点序列,将括号去掉,根据AST序列的词汇表将这些节结点转换成数字得到ASTseq,并嵌入向量。
[0027]其中,步骤S1.2包括如下步骤:
[0028]S1.2.1、使用pycharm编译器对步骤S1.1得到的注释做字符串处理,提取每条注释中第一个@符号之前的、且不包括行首符号*和/的功能描述内容;
[0029]S1.2.2、将功能描述输入GRU中并求加权平均值,得到功能描述的向量表示desc_repr。
[0030]其中,步骤S1.3包括如下步骤:
[0031]S1.3.1、在即考虑方向相似,又考虑大小相似的情况下,使用余弦相似度和曼哈顿距离组合计算向量ast_repr和desc_repr在向量空间上的距离:
[0032][0033]其中,C表示向量ast_repr,D表示向量desc_repr,c
i
、d
i
分别是向量C和D的一个分量,m表示C和D向量的维度;根据余弦相似度计算,余弦值的范围在[

1,1],余弦值越接近1,向量间越相似;将余弦相似度取负数再加一,余弦值范围在[0,2],余弦值越接近0,向量间越相似;根据曼哈顿距离越接近0越相似,所以它们的乘积越接近0,向量ast_repr和向量desc_repr越相似;
[0034]S1.3.2、假设用一个三元组<Co,TD,FD>来表示训练过程中的每个训练实例,其中Co表示代码片段向量,TD表示正确的功能描述向量,FD表示错误的功能描述向量;
[0035]<Co,TD>是训练集制作过程中得到的正例对,在训练过程中,用已有的功能描述向量集随机抽取一个向量得到FD,组织成负例对<Co,FD>;
[0036]训练过程中要让<Co,TD>和<Co,FD>相似度差距超过一个阈值,使triplet loss最小化,可以表示为:
[0037][0038]其中,β是模型参数,Q是训练数据集,ε是阈值。
[0039]进一步,步骤S1.3.2中,triplet 本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种树序列化嵌入的软件代码推荐方法,其特征在于,包括如下步骤:S1、通过解析抽象语法树AST分别将向量化的代码和注释嵌入到向量空间中并计算相似度,建立TCDEnn模型;S2、收集java代码,通过AST节点提取进行预处理构建训练集和测试集,用来训练和测试TCDEnn模型;S3、收集高质量的java代码,建立代码搜索库,开发人员输入描述查询代码搜素库,对搜索代码库中的AST向量与功能描述向量计算相似度,将相似度值最高的k个代码向量返回给开发人员。2.根据权利要求1所述的树序列化嵌入的软件代码推荐方法,其特征在于,步骤S1中的TCDEnn模型包括三部分:AST嵌入、自然语言嵌入和相似度计算,其中,S1.1、AST嵌入:将java代码解析成AST,并遍历节点,将AST嵌入到向量空间中;S1.2、自然语言嵌入:将代码注释中用自然语言描述的代码功能内容嵌入到向量空间中;S1.3、相似度计算:组合使用余弦相似度和曼哈顿距离来计算AST向量和功能描述向量在表达语义上的相似性。3.根据权利要求2所述的树序列化嵌入的软件代码推荐方法,其特征在于,步骤S1.1包括如下步骤:S1.1.1、使用Eclipse的JDT编译器将java代码解析成可视化的AST,提取代码和注释;S1.1.2、通过观察AST结构特征,递归遍历AST节点,将AST转化成节点序列ASTseq,假设输入序列ASTseq={b1,b2,b3,

,b
n
},使用GRU网络将ASTseq嵌入向量:h
t
=G(h
t
‑1,b
t
),t∈{1,2,...,n};其中,G是GRU网络,b
t
是APIseq的词嵌入向量,h
t
是隐藏层状态值,最终的隐藏层状态h
n
代表ASTseq的模态表示,n表示输入词个数;步骤1.1.3、通过对ASTseq各隐藏层输出做加权平均运算弥补因为将ASTseq长序列作为GRU的输入所造成的必要信息丢失的问题,权重α计算方法为:a
t
=softmax(h
n
·
h
t
),t∈{1,2,

,n};其中,h
n
是ASTseq的模态表示,h
t
是隐藏层状态值,α
t
是h
t
对应权重,最终得到AST的向量表示ast_repr:4.根据权利要求3所述的树序列化嵌入的软件代码推荐方法,其特征在于,步骤S1.1.2包括如下步骤:S1.1.2.1、将java代码解析成AST,观察节点特点;S1.1.2.2、终端结点表示成一个二元组<Ta,Va>,而非终端节点表示为<Ta>;其中,Ta表示AST节点类型,Va表示AST节点值;S1.1.2.3、从根节点开始,用一对括号表示树形结构,把树的根节点表示在右括号后面,递归遍历每一个子树,直到遍历完所有结点,得到含括号的节点序列,将括号去掉,根据AST序列的词汇表将这些节结点转换成数字得到ASTseq,并嵌入向量。
5.根据权利要求2所述的树序列化嵌入的软件代码推荐方法,其特征在于,步骤S1.2包括如下步骤:S...

【专利技术属性】
技术研发人员:文万志陆晓虹梁文栋陈志强宋梦婷赵甜支宝胡彬
申请(专利权)人:南通大学
类型:发明
国别省市:

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

1