一种基于提示学习的轻量化代码生成方法技术

技术编号:38037748 阅读:8 留言:0更新日期:2023-06-30 11:04
本发明专利技术公开了一种基于提示学习的轻量化代码生成方法,步骤如下:对自然语言进行检索,并在语料库中返回与当前自然语言最相似的一些“自然语言

【技术实现步骤摘要】
一种基于提示学习的轻量化代码生成方法


[0001]本专利技术属于智能化软件工程的代码自动生成
,具体涉及一种融合提示学习和轻量化深度学习的代码生成方法。

技术介绍

[0002]随着现代社会的发展,计算机软件在人类社会中扮演着不可或缺的角色,并且在软件工程的发展过程中,相关研究人员也一直致力于程序自动生成的相关研究,因为编码在整个软件生命周期中是至关重要的一环,它是对早期需求设计的直接实现,同样也是一项困难且繁杂的任务,代码的自动生成可以提高程序员的工作效率,减少重复劳动。因此,如何让计算机自动生成程序员所需要的代码成为当下的热门研究之一。
[0003]学术界对代码生成的研究可以追溯至早期的形式化逻辑演绎方法。但随着开源代码的不断发展,许多高质量的开源项目提供了方方面面的程序信息,例如代码注释、源代码以及测试用例等,因此研究人员开始将目光转向根据这些数据的统计学特性从而利用一些机器学习的方法来进行代码生成的研究。然而,机器学习需要依靠一定的特征提取,而以人工方式进行特征工程的建立往往是不可靠的,也无法很好地反应数据的真实情况,对于代码这种具有高抽象性的数据使用人工提取特征显然是无法完成的,从而有研究表明,深度学习在代码自动生成方面有很好的效果,同时也是现在主流的研究方法。
[0004]同样,提示学习在自然语言处理(NLP)领域中有大量的研究成果,主要方法是通过构建一定格式的模板来对模型进行提示操作。作为一种类似知识增强的技术手段,这种提示可以提升模型的生成性能,尤其是当预训练语言模型在面对数据量少且在预训练阶段尚未涉及的程序语言的生成时,这种性能的提升显得更加明显。由于深度学习对于高质量数据集的依赖,提示学习可以在有限的数据资源中选取合适的提示信息对模型进行指导生成。
[0005]对于轻量化模型调参,主要方法是将预训练语言模型中的大部分参数进行固定处理,使得这部分参数不会在后续的微调过程中参与更新的过程,这是由于随着数据规模的不断扩充,越来越多更大规模的模型被用来进行代码生成的研究,这也给研究人员带来一定的门槛,往往这些大模型需要借助高昂的算力资源进行训练,因此一种轻量化的生成模型可以在保证模型性能不受明显影响的前提下有效减少模型微调时所带来的的计算开销。

技术实现思路

[0006]针对于上述现有技术的不足,本专利技术的目的在于提供一种基于提示学习的轻量化代码生成方法。
[0007]为达到上述目的,本专利技术采用的技术方案如下:
[0008]本专利技术的一种基于提示学习的轻量化代码生成方法,基于CodeT5

base为主干的预训练语言模型,使用检索知识提示和轻量化参数微调两种技术手段,可以在减少计算开销的前提下有效地保证甚至是提升模型的性能。包括步骤如下:
[0009](1)根据待输入进模型的自然语言进行检索,并根据一定的检索方式在语料库中返回出与当前自然语言最相似的一些“自然语言

代码”对;
[0010](2)对这些返回出的结果按一定规则进行重排序,并将重排序后得分最高的结果进行记录以便后续当作输入提示使用;
[0011](3)按一定的模板将检索到的结果和待输入进模型的自然语言进行拼接,并使用深度学习模型Transformer进行训练(具体使用的是预训练模型CodeT5

base),在训练的过程中编码器负责编码及提取文本序列的数据特征,将特征输入进编码器,通过编码器中的多头注意力机制捕捉token之间的关系;
[0012](4)解码器在训练时则结合多层编码模块输出后的隐藏状态和ground

truth(即模型的期待输出代码)进行teacher

forcing的过程,并依靠解码器中的掩码自注意力机制完成对最终预测结果的概率输出,使用交叉熵的损失函数计算训练时的损失值并做后续的模型参数更新过程;
[0013](5)在训练中同时实施一种轻量化代码生成的办法,具体是将预训练语言模型的大部分参数进行固定,这些参数不参与模型的微调过程,最终对微调训练好的模型进行测试。
[0014]为优化上述技术方案,采取的具体措施还包括:
[0015]上述步骤(1)中的检索操作,并未采取BM25、TFIDF等常规的信息检索方式,因为这些检索方式仅考虑了词频和重复度而未能解决词语的语义相关性问题,同时现有的一些基于深度学习的预训练语言模型,诸如BERT,在做信息检索时,即语义相似度匹配,存在token之间的各向异性(anisotropy)问题,因此在做最终的余弦相似度进行语义比较的时候,模型得出的结果并不能真实反应其相似性,即存在偏差,导致该问题出现的最直接原因在于余弦相似度的计算要建立在标准正交基的前提下,而预训练语言模型提供的句向量未必就在该标准正交基下,因此存在问题。
[0016]针对上述问题,决定先采用一种白化(whitening)的方式试图将预训练语言模型生成的句向量经过标准正交化,从而达到token之间的各向同性(isotropy)。白化方法具体如下公式所示:
[0017][0018]其中,x_i是语言模型产生的句向量,μ是这组句向量的均值,W是白化转换矩阵,该矩阵负责将句向量的协方差矩阵转换为单位阵。
[0019]经过上述变换后,此时得到的新句向量则是满足标准正交基的向量,此时可以用余弦相似度计算各自之间的语义相似度,余弦相似度公式如下:
[0020][0021]其中,x
i
和y
i
是两个句向量。
[0022]上述步骤(2)中进行检索结果的重排序时,对于白化后检索出的TopK个相似结果,K取5,本文再将这些结果进行一个重排序,以此得到一个最相似的结果。重排序时采用了Jaccard相似度作为排序依据,它的计算公式如下:
[0023][0024]其中,S1和S2分别是当前查询语句和待排序语句的token集合,用此值来反映两集合的相似性。
[0025]上述步骤(3)中所使用的代码生成器是以Encoder

Decoder架构的CodeT5

base为主干的预训练语言模型,这种结构天然地适用于代码生成的任务,且该预训练语言模型也是公认的当前最适合用来做代码生成的模型之一。对于模型的输入,需要进行提前的预处理,具体是将所述步骤(2)中经过检索及重排序后得到的相似“自然语言

代码”对作为模型提示信息拼接到原先的输入之前,再按一定的模板进行重构,重构后的输入结构如下:
[0026]‘
Generate<LAN>:<NL`>,Code:<PL`>;Generate<LAN>:<NL>,Code:

[0027]其中,<LAN>代表待生成本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于提示学习的轻量化代码生成方法,其特征在于,包括步骤如下:(1)根据待输入进模型的自然语言进行检索,并根据一定的检索方式在语料库中返回出与当前自然语言最相似的一些“自然语言

代码”对;(2)对这些返回出的结果按一定规则进行重排序,并将重排序后得分最高的结果进行记录以便后续当作输入提示使用;(3)按一定的模板将检索到的结果和待输入进模型的自然语言进行拼接,并使用深度学习模型Transformer进行训练(具体使用的是预训练模型CodeT5

base),在训练的过程中编码器负责编码及提取文本序列的数据特征,将特征输入进编码器,通过编码器中的多头注意力机制捕捉token之间的关系;(4)解码器在训练时则结合多层编码模块输出后的隐藏状态和ground

truth(即模型的期待输出代码)进行teacher

forcing的过程,并依靠解码器中的掩码自注意力机制完成对最终预测结果的概率输出,使用交叉熵的损失函数计算训练时的损失值并做后续的模型参数更新过程;(5)在训练中同时实施一种轻量化代码生成的办法,具体是将预训练语言模型的大部分参数进行固定,这些参数不参与模型的微调过程,最终对微调训练好的模型进行测试。2.根据权利要求1所述的基于提示学习的轻量化代码生成方法,其特征在于,对于所述步骤(1)中的检索操作,并未采取BM25、TFIDF等常规的信息检索方式,因为这些检索方式仅考虑了词频和重复度而未能解决词语的语义相关性问题,同时现有的一些基于深度学习的预训练语言模型,诸如BERT,在做信息检索时,即语义相似度匹配,存在token之间的各向异性(anisotropy)问题,因此在做最终的余弦相似度进行语义比较的时候,模型得出的结果并不能真实反应其相似性,即存在偏差,导致该问题出现的最直接原因在于余弦相似度的计算要建立在标准正交基的前提下,而预训练语言模型提供的句向量未必就在该标准正交基下,因此存在问题。针对上述问题,决定先采用一种白化(whitening)的方式试图将预训练语言模型生成的句向量经过标准正交化,从而达到token之间的各向同性(isotropy)。白化方法具体如下公式所示:其中,x_i是语言模型产生的句向量,μ是这组句向量的均值,W是白化转换矩阵,该矩阵负责将句向量的协方差矩阵转换为单位阵。经过上述变换后,此时得到的新句向量则是满足标准正交基的向量,此时可以用余弦相似度计算各自之间的语义相似度,余弦相似度公式如下:其中,x
i
和y
i
是两个句向量。3.根据权利要求1所述的基于提示学习的轻量化代码生成方法,其特征在于,所述步骤(2)中进行检索结果的重排序时,对于白化后检索出的TopK个相似结果,K取5,本文再将这些结果进行一个重排序,以此得到一个最相似的结果。重排序时采用了Jaccard相似度作为排序依据,它的计算公式如下:
其中,S1和S2分别是当前查询语句和待排序语句的token集合,用此值来反映两集合的相似性。4.根据权利要求1所述的基于提示学习的轻量化代码生成方法,其特征在于,所述步骤(3)中所使用的代码生成器是以Encoder

Decoder架构的CodeT5

base为主干的预训练语言模型,这种结构天然地适用于代码生成的...

【专利技术属性】
技术研发人员:周宇徐一然
申请(专利权)人:南京航空航天大学
类型:发明
国别省市:

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

1