一种代码查询模型的生成方法和计算机设备与流程

专利2022-05-09  79


本申请涉及代码查询匹配领域,特别是涉及一种代码查询模型的生成方法和计算机设备。



背景技术:

随着互联网的发展,程序代码开源思想盛行,各个开源社区蓬勃发展,成千上万的高质量开源项目在面向软件开发者的信息搜索和分享平台中被在线公开。程序复用是提高软件开发效率的捷径,特别是在企业开发实践中构建软件项目开发几乎都不是从零开始,而是复用其他项目中的源代码示例。

复用程序代码通常需要在众多开源项目中搜索符合开发人员要求的程序代码,现有技术中,大多是基于直接匹配和查询扩展的方法查询符合开发要求的代码,直接匹配和查询扩展的方法难以处理程序语言与自然语言之间异构语义的词语,在程序代码数据库庞大,结构繁杂时,无法找到完全符合开发要求的代码的问题。

因此,现有技术有待改进。



技术实现要素:

本发明所要解决的技术问题是,现有的直接匹配和查询扩展的方法难以处理程序语言与自然语言之间异构语义的词语,提供了一种代码查询模型的生成方法和计算机设备,通过初始词嵌入模块和初始transformer模块学习查询语句和代码语句多层面语义信息,使得训练得到代码查询模型可以在程序代码数据库庞大,以及结构繁杂时准确匹配查询语句对应的匹配代码语句。

第一方面,本发明实施例提供了一种代码查询模型的生成方法,包括:

在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句;

基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集;

基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集;

基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度;

基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。

作为进一步的改进技术方案,所述匹配词嵌入向量集包括:查询词嵌入向量和匹配代码词嵌入向量;所述基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,具体包括:

将所述匹配语句对输入所述初始词嵌入模块,以得到所述查询语句对应的查询词嵌入向量,以及所述匹配代码语句对应的匹配代码词嵌入向量。

作为进一步的改进技术方案,所述匹配词嵌入矩阵集包括:查询词嵌入矩阵和匹配代码嵌入矩阵,所述初始transformer模块包括若干注意力头,每个注意力头均各自分别配置有查询/键/值权重矩阵;所述基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,具体包括:

将所述查询词嵌入向量输入所述初始transformer模块中每个注意力头各自分别对应的查询/键/值权重矩阵,确定所述查询词嵌入向量对应的查询词嵌入矩阵;

将所述匹配代码词嵌入向量输入所述初始transformer模块中每个注意力头各自分别对应的查询/键/值权重矩阵,确定所述匹配代码词嵌入向量对应的匹配代码词嵌入矩阵。

作为进一步的改进技术方案,所述初始交互注意力模块包括初始交互注意力子模块和初始相似匹配层;所述基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,具体包括:

将所述匹配词嵌入矩阵集输入所述初始交互注意力子模块,以得到查询交互向量和匹配代码交互向量;

将所述查询交互向量和所述匹配代码交互向量输入初始所述相似匹配层,以得到所述匹配语句对对应的第一相似度。

作为进一步的改进技术方案,所述初始交互注意力子模块包括:初始分类层、初始池化层、初始激活层和初始乘积层,所述匹配词嵌入矩阵集包括:查询词嵌入矩阵和匹配代码嵌入矩阵;所述将所述匹配词嵌入矩阵集输入所述初始交互注意力子模块,以得到查询交互向量和匹配代码交互向量,具体包括:

将所述查询嵌入矩阵和所述匹配代码嵌入矩阵输入所述初始分类层,以得到交互矩阵;

将所述交互矩阵输入所述初始池化层,以得到查询得分向量和匹配代码得分向量;

将所述查询得分向量和所述匹配代码得分向量输入所述初始激活层,以得到查询注意力权重和匹配代码注意力权重;

将所述查询注意力权重和所述查询嵌入矩阵输入所述初始乘积层,以得到查询交互向量,将所述匹配代码注意力权重和所述匹配代码嵌入矩阵输入所述初始乘积层,以得到匹配代码交互向量。

作为进一步的改进技术方案,所述代码查询模型为单结果代码查询模型或者多结果代码查询模型;对于所述训练集中的每个查询语句,当该查询语句对应多个匹配代码语句时,则基于该训练集训练得到的代码查询模型为多结果代码查询模型;当该查询语句仅对应一个匹配代码语句时,则基于该训练集训练得到的代码查询模型为单结果代码查询模型。

第二方面,本发明提供了一种代码查询方法,应用于代码查询模型,所述代码查询方法包括:

将待处理查询语句和参考代码集输入所述代码查询模型,并基于所述代码查询模型在所述参考代码集中确定查询结果。

作为进一步的改进技术方案,所述代码查询模型为单结果查询模型或多结果查询模型;

当所述代码查询模型为单结果代码查询模型时,所述将待处理查询语句和参考代码集输入所述代码查询模型,并基于所述代码查询模型在所述参考代码集中确定查询结果,具体包括:

将待处理查询语句和参考代码数据集输入所述单结果代码查询模型,通过所述单结果代码查询模型确定每个参考代码语句各自分别与所述待处理查询语句之间的第一匹配概率,并将第一匹配概率最高的参考代码语句作为查询结果输出;

当所述代码查询模型为多结果代码查询模型时,所述将待处理查询语句和参考代码集输入所述代码查询模型,并基于所述代码查询模型在所述参考代码集中确定查询结果,具体包括:

将待处理查询语句和参考代码数据集输入所述多结果代码查询模型,通过所述多结果代码查询模型确定每个参考代码语句各自分别与所述待处理查询语句之间的第二匹配概率,按照第二匹配概率从高到低的顺序选择预设数值个参考代码语句作为查询结果输出。

第三方面,本发明提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句;

基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集;

基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集;

基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度;

基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。

第四方面,本发明提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句;

基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集;

基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集;

基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度;

基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。

与现有技术相比,本发明实施例具有以下优点:

在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句;基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集;基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集;基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度;基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。本发明通过初始词嵌入模块和初始transformer模块学习查询语句和代码语句多层面语义信息,使得训练得到代码查询模型可以在程序代码数据库庞大,以及结构繁杂时准确匹配查询语句对应的匹配代码语句。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例中一种代码查询模型的生成方法的流程示意图;

图2为本发明实施例中一种代码查询方法的流程示意图;

图3为本发明实施例中一种计算机设备的内部结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

发明人经过研究发现,随着互联网的发展,程序代码开源思想盛行,各个开源社区蓬勃发展,成千上万的高质量开源项目在面向软件开发者的信息搜索和分享平台中被在线公开。程序复用是提高软件开发效率的捷径,特别是在企业开发实践中构建软件项目开发几乎都不是从零开始,而是复用其他项目中的源代码示例。复用程序代码通常需要在众多开源项目中搜索符合开发人员要求的程序代码,现有技术中,大多是基于直接匹配和查询扩展的方法查询符合开发要求的代码,直接匹配和查询扩展的方法难以处理程序语言与自然语言之间异构语义的词语,在程序代码数据库庞大,结构繁杂时,无法找到完全符合开发要求的代码的问题。

为了解决上述问题,在本发明中,在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句;基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集;基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集;基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度;基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。本发明通过初始词嵌入模块和初始transformer模块学习查询语句和代码语句多层面语义信息,使得训练得到代码查询模型可以在程序代码数据库庞大,以及结构繁杂时准确匹配查询语句对应的匹配代码语句。

本申请提供的一种代码查询模型的生成方法可以应用于电子设备,电子设备可以以各种形式来实现,例如,pc机、服务器、手机等。另外,该方法所实现的功能可以通过电子设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,所述电子设备至少包括处理器和存储介质。

下面结合附图,详细说明本发明的各种非限制性实施方式。

参见图1,示出了本发明实施例中的一种代码查询模型的生成方法,所述代码查询模型的生成方法包括以下步骤:

s1、在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句。

在本发明实施例中,所述训练集是预先获取的训练集,所述训练集包括多个查询集,每个查询集包括多个语句对,所述多个语句对包括匹配语句对和非匹配语句对;匹配语句对包括查询语句,以及该查询语句对应的匹配代码语句,非匹配语句对包括查询语句,以及该查询语句对应的非匹配代码语句。每个查询集对应一个查询语句,也就是说,查询集中每个语句对的查询语句均相同,任意两个不同查询集对应的查询语句互不相同。

进一步地,所述训练集中的语句对是基于技术问答网站中的数据得到的。具体的,从stackoverflow社区(技术问答网站)中获取c#、sql、java和python问答中获取原始数据,从原始数据中提取查询数据和代码数据;根据查询数据确定不同的查询语句,以及每个查询语句对应的匹配代码语句和非匹配语句。查询语句对应的匹配代码语句,是指匹配代码语句符合查询语句对应的开发要求;查询语句对应的非匹配代码语句,是指非匹配代码语句不符合查询语句对应的开放要求。基于每个查询语句确定该查询语句的查询集,查询集中包括:查询语句和匹配代码语句组成的匹配代码语句对,以及查询语句和非匹配代码语句组成的非匹配代码语句对;查询集中至少包括一个匹配代码语句对。

s2、基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集。

在本发明实施例中,在步骤s2之前,对匹配代码语句和非匹配语句代码语句进行预处理,得到预处理后的匹配代码语句和预处理后的非匹配代码语句,并采用所述预处理后的匹配代码语句替换所述匹配代码语句,以及采用所述预处理后的非匹配代码语句替换所述非匹配代码语句。

对匹配代码语句和非匹配语句代码语句进行预处理包括:构建不同程序语言的双语分词器,通过双语分词器确定匹配代码语句的结构词和自然词,并为结构词和自然词加上标签,得到预处理后的匹配代码语句;通过双语分词器确定非匹配代码语句中的结构词和自然词,并为结构词和自然词加上标签,得到预处理后的非匹配代码语句。

具体的,所述结构词是匹配代码语句中固定逻辑字符串,例如,c#中的while,自然词是匹配代码语句中除了结构词以外的字符串。为结构词和自然词加上标签包括:对于结构词,结构词的标签可以是结构词本身,或者采用特定的标签表示此结构词;对于自然词,通过同样的标签表示相同的自然词,例如,通过标签:【na1】表示一个自然词。同样的,对于非匹配语句对中的非匹配代码语句,为非匹配代码语句中的结构词和自然词添加标签。采用添加标签后的匹配代码语句替换未添加标签的匹配代码语句,以及采用添加标签后的非匹配代码语句替换未添加标签的非匹配代码语句。

在本发明实施例中,所述匹配词嵌入向量集包括查询词嵌入向量和匹配代码词嵌入向量;所述基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,包括:将查询语句和匹配代码语句输入初始词嵌入模块,得到查询语句对应的查询词嵌入向量,以及匹配代码语句对应的匹配代码词嵌入向量。

所述非匹配词嵌入向量集包括查询词嵌入向量和非匹配代码词嵌入矩阵;所述基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集,包括:将查询语句和非匹配代码语句输入初始词嵌入模块,得到查询语句对应的查询词嵌入向量,以及非匹配代码语句对应的非匹配代码词嵌入向量。

在本发明实施例中,所述初始词嵌入模块可以是:使用fasttext工具实现的sgns模型(使用负采样的skip-gram网络)。在一种实现方式中,可以将所述查询语句的最大长度设置为20,代码语句(匹配代码语句和非匹配代码语句)的最大长度设为200,通过sgns将查询语句和代码语句中的每个词语表示为300维的词嵌入向量。

s3、基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集。

在本发明实施例中,所述初始transformer模块包括若干注意力头,每个注意力头均各自分别配置有查询/键/值权重矩阵。所述匹配词嵌入矩阵集包括:查询词嵌入矩阵和匹配代码嵌入矩阵,步骤s3中基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,包括:

s31、将所述查询词嵌入向量输入所述初始transformer模块中每个注意力头各自分别对应的查询/键/值权重矩阵,确定所述查询词嵌入向量对应的查询词嵌入矩阵;

s32、将所述匹配代码词嵌入向量输入所述初始transformer模块中每个注意力头各自分别对应的查询/键/值权重矩阵,确定所述匹配代码词嵌入向量对应的匹配代码词嵌入矩阵。

所述非匹配词嵌入矩阵集包括:查询词嵌入矩阵和非匹配代码嵌入矩阵,步骤s3中基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集,包括:

s33、将所述查询词嵌入向量输入所述初始transformer模块中每个注意力头各自分别对应的查询/键/值权重矩阵,确定所述查询词嵌入向量对应的查询词嵌入矩阵;

s34、将所述非匹配代码词嵌入向量输入所述初始transformer模块中每个注意力头各自分别对应的查询/键/值权重矩阵,确定所述非匹配代码词嵌入向量对应的非匹配代码词嵌入矩阵。

在本发明实施例中,通过初始transformer模块汇总词嵌入向量前后方向上词的结构嵌入向量表示,来编码查询语句的底层语义表示,将词嵌入向量编码为词嵌入矩阵。初始transformer模块包括8个注意力头和前馈层,每个注意力头保持独立的查询/键/值权重矩阵,从而产生不同的查询/键/值矩阵,然后在前馈层将8个不同的查询/键/值矩阵压缩为一个矩阵。当初始transformer模块的输入项为查询词嵌入向量tc时,压缩得到的矩阵为查询词嵌入矩阵hc;当初始transformer模块的输入项为匹配代码词嵌入向量td1时,压缩得到的矩阵为匹配代码词嵌入矩阵hd1;当初始transformer模块的输入项为非匹配代码词嵌入向量td0时,压缩得到的矩阵为非匹配代码词嵌入矩阵hd0。

s4、基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度。

在本发明实施例中,所述初始交互注意力模块包括初始交互注意力子模块和初始相似匹配层,所述初始交互注意力子模块用于根据匹配词嵌入矩阵集得到查询交互向量和匹配代码交互向量,以及根据非匹配词嵌入矩阵集得到查询交互向量和非匹配代码交互向量;所述初始相似匹配层进而根据查询交互向量和匹配代码交互向量确定第一相似度,以及根据查询交互向量和非匹配代码交互向量确定第二相似度。

具体的,步骤s4包括:

s41、将所述匹配词嵌入矩阵集输入所述初始交互注意力子模块,以得到查询交互向量和匹配代码交互向量。

在本发明实施例中,所述匹配词嵌入矩阵集包括:查询词嵌入矩阵和匹配代码嵌入矩阵,所述初始交互注意力子模块包括:初始分类层、初始池化层、初始激活层和初始乘积层。

具体的,将所述查询嵌入矩阵和所述匹配代码嵌入矩阵输入所述初始分类层,以得到交互矩阵;将所述交互矩阵输入所述初始池化层,以得到查询得分向量和匹配代码得分向量;将所述查询得分向量和所述匹配代码得分向量输入所述初始激活层,以得到查询注意力权重和匹配代码注意力权重;将所述查询注意力权重和所述查询嵌入矩阵输入所述初始乘积层,以得到查询交互向量,将所述匹配代码注意力权重和所述匹配代码嵌入矩阵输入所述初始乘积层,以得到匹配代码交互向量。

在本发明实施例中,所述初始分类层可以是注意力机制的感知机(perceptron),perceptron是二类分类的线性分类模型,确定交互矩阵的过程如公式(1)所示。

其中,m是交互矩阵,v、wq和wc均为权重参数,tanh是激活函数,vt是v的转置,是在每个时间步t上查询嵌入矩阵表示中的隐藏查询矢量,是匹配代码嵌入矩阵表示中的匹配代码隐藏矢量。

在本发明实施例中,通过所述初始池化层在所述交互矩阵的行方向上进行最大池化操作,以得到查询得分向量;通过所述初始池化层在所述交互矩阵的列方向上进行最大池化操作,以得到代码得分向量。

在本发明实施例中,所述初始激活层配置有softmax函数,通过softmax函数对所述查询得分向量进行处理,得到查询注意力权重;通过softmax函数对所述匹配代码得分向量进行处理,得到匹配代码注意力权重。所述初始乘积层用于实现乘积操作,将所述查询注意力权重和所述查询嵌入矩阵输入初始乘积层,即实现查询注意力权重和所述查询嵌入矩阵相乘,以得到查询交互向量;将所述匹配代码注意力权重和所述匹配代码嵌入矩阵相乘,得到匹配代码注意力交互向量。

s42、将所述查询交互向量和所述匹配代码交互向量输入初始所述相似匹配层,以得到所述匹配语句对对应的第一相似度。

在本发明实施例中,所述初始相似层用于计算所述查询交互向量和所述匹配代码交互向量之间的第一相似度,具体的,所述初始相似匹配模块配置有余弦函数,通过余弦函数计算所述查询交互向量和所述匹配代码交互向量之间的第一相似度。如公式(2)所示。

其中,cos(vq,vc)是第一相似度,vq是查询交互向量,vc是匹配代码交互向量,|vq|表示vq的模,|vc|表示vc的模。

在本发明实施例中,步骤s41至s42给出了确定匹配词嵌入矩阵集对应的第一相似度的具体过程;当所述初始交互注意力模块的输入项为非匹配嵌入向量集时,可以得到非匹配嵌入向量集对应的第二相似度,具体过程可以参见步骤s41至s42,在此不赘述了。

s5、基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。

在本发明实施例中,根据第一相似度和第二相似度计算损失值,在根据计算得到的损失值修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,至此完成一次训练。具体的,构建合页损失函数,根据第一相似度和第二相似度计算损失值如公式(3)所示。

其中,l(θ)是损失值,是vq对应的匹配代码交互向量,是vq对应的非匹配代码交互向量,是第一相似度,是第二相似度,θ表示模块(所述初始词嵌入模块、所述transformer模块或所述初始交互注意力模块)的参数,ε是阈值超参数,ε>0,λ是正则化参数。

在本发明实施例中,完成一次参数的修改后,继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,具体的,从查询集中选取下一次训练用的匹配语句对和非匹配语句对,下一次训练用的匹配语句对与上一次训练用的匹配语句对可以相同,也可以不同,当下一次训练用的匹配语句对与上一次训练用的匹配语句对相同时,则下一次训练用的非匹配语句对与上一次训练用的非匹配语句对不同;当下一次训练用的匹配语句对与上一次训练用的非匹配语句对不同时,则下一次训练用的非匹配语句对与上一次训练用的非匹配语句对可以相同。从另一个角度说,对于查询集中的若干匹配语句对和若干非匹配语句对,将若干匹配语句对和若干非匹配语句对进行两两组合,任意两个组合不相同,通过一个组合计算第一相似度和第二相似度,进而完成一次训练。当一个查询集中的所有的匹配语句对和非匹配语句对均已经作为训练时的输入项,则再另一个查询集中选取匹配语句对和非匹配语句对进行训练。

在本发明实施例中,所述预设训练条件可以是训练次数满足预设次数,例如,所述预设次数可以是10000次,或者所述预设训练条件可以是初始所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块收敛。满足预设训练条件后,得到代码查询模型。所述代码查询模型包括已训练词嵌入模块(初始词嵌入模块训练得到)、已训练transformer模块(初始transformer模块训练得到)和已训练交互注意力模块(初始交互注意力模块训练得到)。已训练词嵌入模块的输出项为已训练transformer模块的输入项,已训练transformer模块的输出项为已训练交互注意力模块的输入项。

在本发明实施例中,基于训练集中的语句对的情况,可以训练得到不同的代码查询模型。具体的,对于所述训练集中的每个查询语句,当该查询语句对应多个匹配代码语句时,则基于该训练集训练得到的代码查询模型为多结果代码查询模型;当该查询语句仅对应一个匹配代码语句时,则基于该训练集训练得到的代码查询模型为单结果代码查询模型。

在本发明实施例中,由于每个查询语句对应的一个查询集,对于每个查询语句,当该查询语句对应的查询集中包括该查询语句对应的多个匹配代码语句对时,训练得到多结果代码查询模型;当该查询语句对应的查询集中仅包括该查询语句对应的一个匹配代码语句对时,训练得到单结果代码查询模型。多结果代码查询模型和单结果代码查询模型在使用时,有不同的输出结果,此部分会在后文介绍。

在本发明实施例中,训练集中的语句来自真实的代码查询匹配应用场景so问答社区,涵盖了更多代码类型和更为复杂代码结构的通用代码片段,而不是其他部分代码类型,其代码结构的复杂性和候选代码的多样性可以更好地预测模型性能。采用初始transformer模块进行软件问答社区的代码查询匹配,能有效应对软件问答社区中软件仓库的数据规模庞大繁杂的问题,能有效解决代码问答数据中的动态性、不确定性和随意性,实现更高效的代码查询匹配技术。本发明能发挥transformer模块用于表示查询语句和代码语句的底层语义的能力,以及初始交互注意力模块能通过双重注意力机制构建查询语句和代码语句的注意力交互矩阵,从而进一步度量查询语句和代码语句之间的语义相关性,实现代码查询对匹配的准确预测;通过三个模块的集成,实现了高效率的代码查询匹配。

基于上述一种代码查询模型的生成方法,本发明实施例还提供了一种代码查询方法,参见图2,所述代码查询方法包括:

m1、将待处理查询语句和参考代码集输入所述代码查询模型,并基于所述代码查询模型在所述参考代码集中确定查询结果。

在本发明实施例中,所述参考代码集包括多个参考代码语句,所述多个参考代码语句包括上述一种代码查询模型的生成方法中,训练集中的匹配代码语句和非匹配语句,也就是说,所述多个参考代码语句包括搜书训练集中的所有代码语句。在一种代码查询方法中,通过代码查询模型在训练集的所有代码语句中确定与该待处理查询语句匹配的代码语句(查询结果)。

在本发明实施例中,所述代码查询模型包括:已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。

具体的,将待查询语句和参考代码集输入所述已训练词嵌入模块,通过所述已训练词嵌入模块确定所述待处理查询语句对应的待处理查询嵌入词向量,以及多个参考代码语句各自分别对应的参考代码嵌入词向量。此过程与上述步骤s2的过程相同,因而,此过程可以参考步骤s2的说明。

将待处理查询嵌入词向量和多个参考代码嵌入词向量输入已训练transformer模块,得到查询嵌入矩阵,以及多个参考代码嵌入词向量各自分别对应的参考代码嵌入矩阵。此过程与上述步骤s3的过程相同,因而,从过程可以参考步骤s3的说明。

将查询嵌入矩阵和多个参考代码嵌入矩阵输入已训练交互注意力模块,通过已训练交互注意力模块确定查询嵌入矩阵与每个参考代码嵌入矩阵之间的匹配概率,并基于查询嵌入矩阵与每个参考代码嵌入矩阵之间的匹配概率确定查询结果。将查询嵌入矩阵和多个参考代码嵌入矩阵输入已训练交互注意力模块,通过已训练交互注意力模块确定查询嵌入矩阵与每个参考代码嵌入矩阵之间的匹配概率的过程,与上述步骤s4的过程相同,因而,从过程可以参考步骤s4的说明。

在本发明实施例中,所述代码查询模型为单结果查询模型或多结果查询模型,当所述代码查询模型为单结果代码查询模型时,步骤m1包括:

m11a、将待处理查询语句和参考代码数据集输入所述单结果代码查询模型,通过所述单结果代码查询模型确定每个参考代码语句各自分别与所述待处理查询语句之间的第一匹配概率,并将第一匹配概率最高的参考代码语句作为查询结果输出。

在本发明实施例中,一个参考代码语句与待处理查询语句之间的第一匹配概率,是该参考代码语句与待处理查询语句之间的相似度,所述单结果代码查询模型将多个第一匹配概率中最高的第一匹配概率对应的参考代码语句作为查询结果输出。

当所述代码查询模型为多结果代码查询模型时,步骤m1包括:

m11b、将待处理查询语句和参考代码数据集输入所述多结果代码查询模型,通过所述多结果代码查询模型确定每个参考代码语句各自分别与所述待处理查询语句之间的第二匹配概率,按照第二匹配概率从高到低的顺序选择预设数值个参考代码语句作为查询结果输出。

在本发明实施例中,所述第一匹配概率和所述第二匹配概率的本质相同。所述预设数值可以基于训练时,一个查询语句对应的多个匹配代码语句的数量确定。例如,在训练时,每个查询语句对应有4个匹配代码语句,则可以确定预设数值为4;例如,在训练时,第一部分查询语句对应有3个匹配代码语句,第二部分查询语句对应有4个匹配代码语句,则可以确定预设数值为3。

在本发明实施例中,将第二匹配概率按照从高到低的顺序排列,得到第二匹配概率序列,在所述第二匹配概率序列中选取排列在前预设数值个第二匹配概率,将选取的第二匹配概率作为目标匹配概率,将预设数值个目标匹配概率各自分别对应的参考代码语句作为查询结果输出。

在本发明实施例中,通过已训练transformer模块进行代码查询匹配,能有效应对软件问答社区中软件仓库的数据规模庞大繁杂的问题,能有效解决代码问答数据中的动态性、不确定性和随意性,实现更高效的代码查询匹配。本发明能发挥transformer模块用于表示查询语句和代码语句的底层语义的能力;已训练交互注意力模块可以通过双重注意力机制构建查询语句和代码语句的注意力交互矩阵,从而进一步度量查询语句和代码语句之间的语义相关性,实现代码查询对匹配的准确预测;代码查询模型通过三个模块的集成,实现了高效率的代码查询匹配。

本发明实施例还提供了一种计算机设备,该设备可以是终端,内部结构如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种代码查询模型的生成方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图3所示的仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

本发明实施例还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句;

基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集;

基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集;

基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度;

基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句;

基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集;

基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集;

基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度;

基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。


技术特征:

1.一种代码查询模型的生成方法,其特征在于,包括:

在训练集中选取匹配语句对和非匹配语句对,其中,所述匹配语句对包括查询语句和该查询语句对应的匹配代码语句,所述非匹配语句对包括该查询语句和该查询语句对应的非匹配代码语句;

基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,以及基于所述初始词嵌入模块确定所述非匹配语句对对应的非匹配词嵌入向量集;

基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,以及基于所述初始transformer模块和所述非匹配词嵌入向量集确定非匹配词嵌入矩阵集;

基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,以及基于所述初始交互注意力模块和所述非匹配词嵌入矩阵集确定所述非匹配语句对对应的第二相似度;

基于所述第一相似度和所述第二相似度修改所述初始词嵌入模块、所述transformer模块和所述初始交互注意力模块的参数,并继续执行所述在训练集中选取匹配语句对和非匹配语句对的步骤,直至满足预设训练条件,以得到代码查询模型,其中,所述代码查询模型包括已训练词嵌入模块、已训练transformer模块和已训练交互注意力模块。

2.根据权利要求1所述的代码查询模型的生成方法,其特征在于,所述匹配词嵌入向量集包括:查询词嵌入向量和匹配代码词嵌入向量;所述基于初始词嵌入模块确定所述匹配语句对对应的匹配词嵌入向量集,具体包括:

将所述匹配语句对输入所述初始词嵌入模块,以得到所述查询语句对应的查询词嵌入向量,以及所述匹配代码语句对应的匹配代码词嵌入向量。

3.根据权利要求2所述的代码查询模型的生成方法,其特征在于,所述匹配词嵌入矩阵集包括:查询词嵌入矩阵和匹配代码嵌入矩阵,所述初始transformer模块包括若干注意力头,每个注意力头均各自分别配置有查询/键/值权重矩阵;所述基于初始transformer模块和所述匹配词嵌入向量集确定匹配词嵌入矩阵集,具体包括:

将所述查询词嵌入向量输入所述初始transformer模块中每个注意力头各自分别对应的查询/键/值权重矩阵,确定所述查询词嵌入向量对应的查询词嵌入矩阵;

将所述匹配代码词嵌入向量输入所述初始transformer模块中每个注意力头各自分别对应的查询/键/值权重矩阵,确定所述匹配代码词嵌入向量对应的匹配代码词嵌入矩阵。

4.根据权利要求1所述的代码查询模型的生成方法,其特征在于,所述初始交互注意力模块包括初始交互注意力子模块和初始相似匹配层;所述基于初始交互注意力模块和所述匹配词嵌入矩阵集确定所述匹配语句对对应的第一相似度,具体包括:

将所述匹配词嵌入矩阵集输入所述初始交互注意力子模块,以得到查询交互向量和匹配代码交互向量;

将所述查询交互向量和所述匹配代码交互向量输入初始所述相似匹配层,以得到所述匹配语句对对应的第一相似度。

5.根据权利要求4所述的代码查询模型的生成方法,其特征在于,所述初始交互注意力子模块包括:初始分类层、初始池化层、初始激活层和初始乘积层,所述匹配词嵌入矩阵集包括:查询词嵌入矩阵和匹配代码嵌入矩阵;所述将所述匹配词嵌入矩阵集输入所述初始交互注意力子模块,以得到查询交互向量和匹配代码交互向量,具体包括:

将所述查询嵌入矩阵和所述匹配代码嵌入矩阵输入所述初始分类层,以得到交互矩阵;

将所述交互矩阵输入所述初始池化层,以得到查询得分向量和匹配代码得分向量;

将所述查询得分向量和所述匹配代码得分向量输入所述初始激活层,以得到查询注意力权重和匹配代码注意力权重;

将所述查询注意力权重和所述查询嵌入矩阵输入所述初始乘积层,以得到查询交互向量,将所述匹配代码注意力权重和所述匹配代码嵌入矩阵输入所述初始乘积层,以得到匹配代码交互向量。

6.根据权利要求1所述的代码查询模型的生成方法,其特征在于,所述代码查询模型为单结果代码查询模型或者多结果代码查询模型;对于所述训练集中的每个查询语句,当该查询语句对应多个匹配代码语句时,则基于该训练集训练得到的代码查询模型为多结果代码查询模型;当该查询语句仅对应一个匹配代码语句时,则基于该训练集训练得到的代码查询模型为单结果代码查询模型。

7.一种代码查询方法,其特征在于,应用于代码查询模型,所述代码查询方法包括:

将待处理查询语句和参考代码集输入所述代码查询模型,并基于所述代码查询模型在所述参考代码集中确定查询结果。

8.根据权利要求7所述的代码查询方法,其特征在于,所述代码查询模型为单结果查询模型或多结果查询模型;

当所述代码查询模型为单结果代码查询模型时,所述将待处理查询语句和参考代码集输入所述代码查询模型,并基于所述代码查询模型在所述参考代码集中确定查询结果,具体包括:

将待处理查询语句和参考代码数据集输入所述单结果代码查询模型,通过所述单结果代码查询模型确定每个参考代码语句各自分别与所述待处理查询语句之间的第一匹配概率,并将第一匹配概率最高的参考代码语句作为查询结果输出;

当所述代码查询模型为多结果代码查询模型时,所述将待处理查询语句和参考代码集输入所述代码查询模型,并基于所述代码查询模型在所述参考代码集中确定查询结果,具体包括:

将待处理查询语句和参考代码数据集输入所述多结果代码查询模型,通过所述多结果代码查询模型确定每个参考代码语句各自分别与所述待处理查询语句之间的第二匹配概率,按照第二匹配概率从高到低的顺序选择预设数值个参考代码语句作为查询结果输出。

9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任意一项所述的代码查询模型的生成方法或者权利要求7至8中任意一项所述的代码查询方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任意一项所述的代码查询模型的生成方法或者权利要求7至8中任意一项所述的代码查询方法的步骤。

技术总结
本发明提供了一种代码查询模型的生成方法和计算机设备,代码查询模型的生成方法包括:在训练集中选取匹配语句对和非匹配语句对;基于初始词嵌入模块匹配词嵌入向量集和非匹配向量集,基于初始Transformer模块确定匹配词嵌入矩阵集以及非匹配词嵌入矩阵集;基于初始交互注意力模块确定第一相似度和第二相似度;基于第一相似度和第二相似度训练得到代码查询模型。本发明通过初始词嵌入模块和初始Transformer模块学习查询语句和代码语句多层面语义信息,使得训练得到的代码查询模型可以在程序代码数据库庞大、结构繁杂时准确匹配查询语句对应的匹配代码语句。

技术研发人员:谢婧;胡刚;袁梦霆
受保护的技术使用者:武汉大学
技术研发日:2021.04.13
技术公布日:2021.08.03

转载请注明原文地址:https://doc.8miu.com/read-8733.html

最新回复(0)