CN115878094B - 代码搜索方法、装置、设备及存储介质 - Google Patents
代码搜索方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115878094B CN115878094B CN202310015054.4A CN202310015054A CN115878094B CN 115878094 B CN115878094 B CN 115878094B CN 202310015054 A CN202310015054 A CN 202310015054A CN 115878094 B CN115878094 B CN 115878094B
- Authority
- CN
- China
- Prior art keywords
- code
- score
- global
- input data
- characterization
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于计算机技术领域,公开了一种代码搜索方法、装置、设备及存储介质。该方法包括:召回与查询语句相关的多条代码;将查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据;利用预设编码器模型确定每个拼接后的输入数据的相关性得分;基于相关性得分对召回得到的多条代码进行排序。通过上述方式,将代码搜索分为两个阶段:召回阶段和排序阶段,召回阶段侧重效率,排序阶段侧重精度,在排序阶段拼接查询语句和代码的字符以建模查询和代码的细粒度交互,增强了模型的表达能力,从而提升了代码搜索的精度。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种代码搜索方法、装置、设备及存储介质。
背景技术
随着计算机技术的普及,编程在越来越多的领域扮演了重要的角色。编程作为创造性劳动的同时,也兼具重复性的特点:许多要通过代码实现的功能在一定程度上已经被前人实现过,甚至可以在开源代码库中找到。代码搜索旨在于包含大量代码的代码库中搜索出和用户的查询语句(query)相匹配的代码,即用户以自然语言描述其需求,代码搜索系统能够返回满足对应自然语言语义的代码,高精度的代码搜索将有效地提升编程人员的工作效率,减小重复性的编程劳动带来的工作量。而目前采用模型进行代码搜索的方式中,将查询语句和代码分别进行编码,无法建模查询和代码之间的细粒度交互,影响代码搜索的准确度。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的在于提供一种代码搜索方法、装置、设备及存储介质,旨在解决目前将查询语句和代码分别进行编码,无法建模查询和代码之间的细粒度交互,影响代码搜索的准确度的技术问题。
为实现上述目的,本发明提供了一种代码搜索方法,所述方法包括以下步骤:
召回与查询语句相关的多条代码;
将所述查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据;
利用预设编码器模型确定每个拼接后的输入数据的相关性得分;
基于所述相关性得分对召回得到的多条代码进行排序。
可选地,利用预设编码器模型确定每个拼接后的输入数据的相关性得分的步骤,具体包括:
利用预设编码器模型确定每个拼接后的输入数据的字符表征和全局表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征,所述全局表征包括查询语句全局表征和代码全局表征;
根据每个拼接后的输入数据的查询语句全局表征和代码全局表征确定全局信息匹配得分;
根据每个拼接后的输入数据的查询语句字符表征和代码字符表征确定局部信息匹配得分;
根据全局信息匹配得分和局部信息匹配得分确定每个拼接后的输入数据的相关性得分。
可选地,所述预设编码器模型至少包括神经网络层;
根据每个拼接后的输入数据的查询语句全局表征和代码全局表征确定全局信息匹配得分的步骤,具体包括:
利用神经网络层确定每个拼接后的输入数据的查询语句全局表征与代码全局表征之间的第一得分;
计算每个拼接后的输入数据的查询语句全局表征与代码全局表征的内积,得到第二得分;
根据第一得分和第二得分确定每个拼接后的输入数据的全局信息匹配得分。
可选地,所述预设编码器模型至少包括预设编码器;
利用预设编码器模型确定每个拼接后的输入数据的字符表征和全局表征的步骤,具体包括:
利用预设编码器对每个拼接后的输入数据进行编码,得到每个拼接后的输入数据的字符表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征;
求取多个查询语句字符表征的平均值,得到每个拼接后的输入数据的查询语句全局表征;
求取多个代码字符表征的平均值,得到每个拼接后的输入数据的代码全局表征。
可选地,根据每个拼接后的输入数据的查询语句字符表征和代码字符表征确定局部信息匹配得分的步骤,具体包括:
根据查询语句字符表征与代码字符表征之间的相似度确定与每个查询语句字符表征相匹配的目标代码字符表征;
计算每个查询语句字符表征与相匹配的目标代码字符表征的内积,得到多个内积值;
求取多个内积值的平均值,得到每个拼接后的输入数据的局部信息匹配得分。
可选地,根据全局信息匹配得分和局部信息匹配得分确定每个拼接后的输入数据的相关性得分的步骤,具体包括:
获取预设权重信息,所述权重信息为超参数,用于对全局信息和局部信息进行加权;
根据预设权重信息、全局信息匹配得分以及局部信息匹配得分进行加权求和,得到每个拼接后的输入数据的相关性得分。
可选地,召回与查询语句相关的多条代码的步骤,具体包括:
确定查询语句的表征向量和代码库中每个待选代码的表征向量;
计算查询语句的表征向量与每个待选代码的表征向量的内积,得到每个待选代码的分数;
从待选代码中按照分数由高至低召回与查询语句相关的多条代码。
此外,为实现上述目的,本发明还提出一种代码搜索装置,所述代码搜索装置包括:
召回模块,用于召回与查询语句相关的多条代码;
拼接模块,用于将所述查询语句分别与各条所述代码进行拼接,得到多条输入数据;
评分模块,用于利用预设编码器模型确定各条所述输入数据的相关性得分;
排序模块,用于基于所述相关性得分对所述多条代码进行排序。
此外,为实现上述目的,本发明还提出一种代码搜索设备,所述代码搜索设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的代码搜索程序,所述代码搜索程序配置为实现如上文所述的代码搜索方法。
此外,为实现上述目的,本发明还提出一种存储介质,所述存储介质上存储有代码搜索程序,所述代码搜索程序被处理器执行时实现如上文所述的代码搜索方法。
本发明通过召回与查询语句相关的多条代码;将查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据;利用预设编码器模型确定每个拼接后的输入数据的相关性得分;基于相关性得分对召回得到的多条代码进行排序。通过上述方式,将代码搜索分为两个阶段:召回阶段和排序阶段,召回阶段侧重效率,排序阶段侧重精度,在排序阶段拼接查询语句和代码的字符以建模查询和代码的细粒度交互,增强了模型的表达能力,从而提升了代码搜索的精度。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的代码搜索设备的结构示意图;
图2为本发明代码搜索方法第一实施例的流程示意图;
图3为本发明代码搜索方法第二实施例的流程示意图;
图4为本发明代码搜索方法的模型结构示意图;
图5为本发明代码搜索方法第三实施例的流程示意图;
图6为本发明代码搜索装置第一实施例的结构框图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
参照图1,图1为本发明实施例方案涉及的硬件运行环境的代码搜索设备结构示意图。
如图1所示,该代码搜索设备可以包括:处理器1001,例如中央处理器(CentralProcessing Unit,CPU),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(Wireless-Fidelity,Wi-Fi)接口)。存储器1005可以是高速的随机存取存储器(RandomAccess Memory,RAM),也可以是稳定的非易失性存储器(Non-Volatile Memory,NVM),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的结构并不构成对代码搜索设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及代码搜索程序。
在图1所示的代码搜索设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明代码搜索设备中的处理器1001、存储器1005可以设置在代码搜索设备中,所述代码搜索设备通过处理器1001调用存储器1005中存储的代码搜索程序,并执行本发明实施例提供的代码搜索方法。
本发明实施例提供了一种代码搜索方法,参照图2,图2为本发明代码搜索方法第一实施例的流程示意图。
本实施例中,所述代码搜索方法包括以下步骤:
步骤S10:召回与查询语句相关的多条代码。
可以理解的是,本实施例的执行主体为代码搜索设备,所述代码搜索设备可以为计算机、服务器等设备,还可以为其他具备人工智能推理能力的设备,本实施例对此不加以限制。
需要说明的是,本实施例的将代码搜索分为两个阶段:召回阶段和排序阶段,召回阶段侧重效率,模型能够以较快的速度召回与查询语句(query)相关的K条代码(code),K为预设召回条数;排序阶段侧重精度,模型能够对召回阶段找到的K条代码进行排序,并展示给用户。
可选地,获取代码库中各代码的描述信息,分别对查询语句和各代码的描述信息进行语义分析,得到语义特征,确定查询语句与各代码的语义特征的相似度,按照相似度由大至小进行排序,召回相似度靠前的K条代码,描述信息用于描述代码的使用场景、所使用到的函数信息、字节数以及关键词等信息。
可选地,分别将查询语句和代码字符化后,输入给预设编码器模型,得到各自的表征向量,在表征层面做内积,得到相关性分数,按照相关性分数由大至小进行排序,召回相关性分数靠前的K条代码,优选地,预设编码器模型为Transformer编码器模型。
步骤S20:将所述查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据。
应当理解的是,将查询语句的字符分别与各条代码的字符拼接,得到多条输入数据。可选地,按照查询语句在先、代码在后的顺序进行拼接;可选地,按照代码在先、查询语句在后的顺序进行拼接。本实施例对拼接方式不加以限制。
步骤S30:利用预设编码器模型确定每个拼接后的输入数据的相关性得分。
需要说明的是,优选地,预设编码器模型中包括Transformer编码器,用于对输入数据的字符进行编码。优选的,所述预设编码器模型还包括与Transformer编码器连接的神经网络模型,所述神经网络模型用于对Transformer编码器输出的表征进一步学习,获得输入数据的相关性得分。
现有技术中,以Transformer编码器为基础的工作中首先采用预训练技术训练Transformer编码器,再为代码搜索任务进行微调:在预训练阶段,通过在自然语言处理中常用的掩码语言模型(Masked Language Model)和为代码智能设计的标识符预测(Identifier Prediction)等任务训练模型;在微调阶段,现有方案中用Transformer编码器分别编码查询和代码到表征空间,在表征空间中使用内积计算相似度,利用监督信息通过基于相似度构造的损失函数进行优化;在推断评估及线上服务时,现有方案与微调阶段保持一致,即分别编码查询和代码,在表征空间计算相似度,然后根据相似度进行排序,无法建模查询和代码之间的细粒度交互,影响代码搜索的准确度。而本实施例中在排序阶段将查询字符与代码字符拼接,并将拼接的结果输入给预设编码器模型,通过Transformer编码器的自注意力机制来建模查询语句与代码在字符级别的细粒度交互,基于预设编码器模型学习查询语句与代码之间的相关性得分。
可选地,直接基于提前训练好模型参数的神经网络模型获得查询语句表征向量与代码表征向量之间的相关性得分。可选地,利用神经网络模型和内积建模学习全局表征向量,确定全局信息匹配的得分,以查询语句为中心利用内积建模学习字符级别的局部信息,确定局部信息匹配的得分,对全局信息匹配的得分和局部信息匹配的得分进行加权求和,得到各条输入数据的相关性得分。
步骤S40:基于所述相关性得分对召回得到的多条代码进行排序。
在具体实现中,各条输入数据由不同的代码分别与查询语句拼接而成,确定各条输入数据对应的相关性得分,按照相关性得分由高至低对多条代码进行排序。代码的排序越高,表示该代码与用户输入的查询语句越相关,系统响应于用户输入的查询语句优先展示排序高的代码。
本实施例通过召回与查询语句相关的多条代码;将查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据;利用预设编码器模型确定每个拼接后的输入数据的相关性得分;基于相关性得分对召回得到的多条代码进行排序。通过上述方式,将代码搜索分为两个阶段:召回阶段和排序阶段,召回阶段侧重效率,排序阶段侧重精度,在排序阶段拼接查询语句和代码的字符以建模查询和代码的细粒度交互,增强了模型的表达能力,从而提升了代码搜索的精度。
参考图3,图3为本发明代码搜索方法第二实施例的流程示意图。
基于上述第一实施例,本实施例代码搜索方法的所述步骤S30,包括:
步骤S301:利用预设编码器模型确定每个拼接后的输入数据的字符表征和全局表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征,所述全局表征包括查询语句全局表征和代码全局表征。
应当理解的是,可选地,预设编码器模型包括用于字符编码的第一编码器和用于语句编码的第二编码器,利用第一编码器对每个拼接后的输入数据的各个字符分别进行编码,得到字符表征,利用第二编码器对每个拼接后的输入数据的语句进行编码,得到全局表征。
优选地,所述预设编码器模型至少包括预设编码器;
所述步骤S301,包括:利用预设编码器对每个拼接后的输入数据进行编码,得到每个拼接后的输入数据的字符表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征;求取多个查询语句字符表征的平均值,得到每个拼接后的输入数据的查询语句全局表征;求取多个代码字符表征的平均值,得到每个拼接后的输入数据的代码全局表征。
需要说明的是,预设编码器为Transformer编码器,利用Transformer编码器对每
个拼接后的输入数据进行编码,即,得到多个查询语句字符表征
和多个代码字符表征,将查询语句字符表征和代码字符表征分别取平均,
即可以得到查询语句全局表征和代码全局表征,可记为和。
步骤S302:根据每个拼接后的输入数据的查询语句全局表征和代码全局表征确定全局信息匹配得分。
可选地,计算查询语句全局表征和代码全局表征之间的相似度,将相似度映射为分数(例如,提前设置不同相似度区间以及对应的分数,将当前的相似度与各相似度区间进行匹配,将所属区间的分数确定为当前的相似度的分数),得到全局信息匹配得分。本实施例不对相似度的计算方式进行限定。
进一步地,所述预设编码器模型还至少包括神经网络层;
所述步骤S302,包括:利用神经网络层确定每个拼接后的输入数据的查询语句全局表征与代码全局表征之间的第一得分;计算每个拼接后的输入数据的查询语句全局表征与代码全局表征的内积,得到第二得分;根据第一得分和第二得分确定每个拼接后的输入数据的全局信息匹配得分。
可以理解的是,预设编码器模型中包括Transformer编码器以及与Transformer编
码器连接的神经网络模型。一方面,通过神经网络层学习查询语句和代码的相关性得分(第
一得分),即,其中,表示两个向量的元素积、MLP()表示神经网
络层,输出的是经过激活函数tanh()之后的相关性分数,该函数可将输出变换到(-1,1)的
区间之内;另一方面,可以通过内积建模查询语句全局表征和代码全局表征两个向量的
相关性分数(第二得分),即。通过融合两部分得分,得到全局信息匹配的最终
得分。优选地,通过加权求和方式确定全局信息匹配得分:。
步骤S303:根据每个拼接后的输入数据的查询语句字符表征和代码字符表征确定局部信息匹配得分。
在具体实现中,可选地,确定任一查询语句字符表征和任一代码字符表征之间的相似度,求取全部相似度的平均值,得到最终相似度,映射为分数(例如,提前设置不同相似度区间以及对应的分数,将当前的相似度与各相似度区间进行匹配,将所属区间的分数确定为当前的相似度的分数),得到局部信息匹配得分。本实施例不对相似度的计算方式进行限定。
进一步地,所述确步骤S303,包括:根据查询语句字符表征与代码字符表征之间的相似度确定与每个查询语句字符表征相匹配的目标代码字符表征;计算每个查询语句字符表征与相匹配的目标代码字符表征的内积,得到多个内积值;求取多个内积值的平均值,得到每个拼接后的输入数据的局部信息匹配得分。
需要说明的是,选择与查询语句字符表征之间的相似度最大的代码字符表征作为
与查询语句字符表征相匹配的目标代码字符表征。在具体实现中,Transformer编码器为每
个拼接后的输入数据中的每个字符都编码一个字符表征,记为和,以查询字符为中心,针对查询中的每个字符,从代码字符中找到与其表征
最近似的表征,相匹配的两者做内积,并将所有的内积值求平均值,得到局部信息匹配的相
关性得分,具体表示为:
步骤S304:根据全局信息匹配得分和局部信息匹配得分确定每个拼接后的输入数据的相关性得分。
应当理解的是,可选地,求取各条输入数据的全局信息匹配得分和局部信息匹配得分的平均得分,作为每个拼接后的输入数据的相关性得分。
优选地,所述步骤S304,包括:获取预设权重信息,所述权重信息为超参数,用于对全局信息和局部信息进行加权;根据预设权重信息、全局信息匹配得分以及局部信息匹配得分进行加权求和,得到每个拼接后的输入数据的相关性得分。
在具体实现中,提出一种代码搜索的模型框架,称为MonoCodeBERT,该框架分为两阶段:召回阶段和排序阶段,在排序阶段,有以下具体方案,相关模型参照图4:
1、将查询和代码拼接起来作为输入,用于显示地建模查询和代码之间存在的细粒
度交互,参照图4中的N个Transformer编码块(Transformer Block),利用Transformer编码
器对查询和代码的字符进行编码,得到字符表征和。
2、通过神经网络和表征交互共同学习全局信息的匹配得分:对字符表征和分别取平均,即可以得到查询和代码的全局表征,记为
和。参照图4,一方面,通过神经网络层可以学习查询和代码的相关性得分,即,其中,表示两个向量的元素积、MLP()表示两层的神经网络,该
神经网络的输出是经过激活函数tanh()之后的相关性分数,该函数可将输出变换到(-1,
1)的区间之内;另一方面,可以显示地通过内积建模和两个向量的相关性分数,即。最终,通过融合两部分得分,得到全局信息匹配的最终得分:。
3、显示地建模学习局部信息的匹配得分:对于查询语句中的每个字符,从代码字
符中找到与其表征最近似的表征,将两者视为相互匹配的局部信息,并对相匹配的两者做
内积建模相似度。进一步,将所有的内积值求平均值,得到局部信息匹配的相关性得分,参
照图4,表示相匹配的局部信息的内积,。最终的相关性得分由全局信
息匹配得分与局部信息匹配得分加权获得,即。
本实施例中利用预设编码器模型确定每个拼接后的输入数据的字符表征和全局表征,字符表征包括多个查询语句字符表征和多个代码字符表征,全局表征包括查询语句全局表征和代码全局表征;根据每个拼接后的输入数据的查询语句全局表征和代码全局表征确定全局信息匹配得分;根据每个拼接后的输入数据的查询语句字符表征和代码字符表征确定局部信息匹配得分;根据全局信息匹配得分和局部信息匹配得分确定每个拼接后的输入数据的相关性得分。通过上述方式,拼接查询和代码的字符以建模查询和代码的细粒度交互,同时在全局信息层面确定全局信息匹配得分,在局部信息层面确定局部信息匹配得分,增强了模型的表达能力,兼顾全局信息匹配和局部信息匹配,使得相关性得分更准确,进一步提升了代码搜索的精度。
参考图5,图5为本发明代码搜索方法第三实施例的流程示意图。
基于上述第一实施例,本实施例代码搜索方法的所述步骤S10,包括:
步骤S101:确定查询语句的表征向量和代码库中每个待选代码的表征向量。
应当理解的是,分别将查询语句和代码库中每个待选代码进行字符化处理,输入给预设编码器模型,得到查询语句的表征向量和代码库中每个待选代码的表征向量,优选地,预设编码器模型为Transformer编码器模型。与排序阶段不同,本实施例在召回阶段利用预设编码器模型单独对查询语句、各待选代码进行编码,侧重于召回效率。
在具体实现中,将字符化处理后查询语句输入至Transformer编码器模型,得到查询语句中各字符对应的字符表征向量,将查询语句中各字符对应的字符表征向量取平均值得到查询语句的表征向量;将字符化处理后代码输入至Transformer编码器模型,得到代码中各字符对应的字符表征向量,将代码中各字符对应的字符表征向量取平均值得到代码的表征向量。
步骤S102:计算查询语句的表征向量与每个待选代码的表征向量的内积,得到每个待选代码的分数。
需要说明的是,在表征层面做内积,从而确定查询语句的表征向量与每个待选代
码的表征向量的相关性分数。具体表示为:,其中,表示查询和代码之间的相关性分数、和分别表示查询和代码的表征向量、和分
别表示查询和代码的字符序列、表示Transformer编码器模型、表示两个向量的内
积。
步骤S103:从待选代码中按照分数由高至低召回与查询语句相关的多条代码。
应当理解的是,按照分数由高至低对代码库中的全部待选代码进行排序,按照预设召回条数K选取排序靠前的K条代码。
需要说明的是,本发明提出的代码搜索方法具有以下优势:(1)精度有较大提升;(2)在精度和效率之间达到平衡。以下结合实验结果进行说明:
在四个不同代码场景的数据集上进行实验,来验证本发明方法的优势。数据集分别为CodeSearNet(简称为CSN),该数据集包含了从Github上爬下来的6种编程语言的数据,在该数据集中,将函数的注释和函数其余部分构造成为匹配的查询-代码对;CosQA,该数据集包含了实际在搜索引擎中收集到的真实用户的查询和人工标注了代码;AdvTest,该数据集包含了将函数的函数名和变量名匿名化后的结果;StaQC,该数据集包含在StackOverflow平台爬取的问题-解决代码对。相关数据集的统计信息如表1所示,其中,训练集/测试集/验证集指配对的查询-代码对的数量,代码库代码量指评估是代码库的数量(若为-表示由验证集/测试集的代码构成代码库)。
表1:
数据集名称 | 训练集 | 验证集 | 测试集 | 代码库代码量 |
CSN-Ruby | 24,927 | 1,261 | 1,400 | 4,360 |
CSN-Javascript | 58,025 | 3,291 | 3,885 | 13,981 |
CSN-Go | 167,288 | 7,325 | 8,122 | 28,120 |
CSN-Python | 251,820 | 13,914 | 14,918 | 43,827 |
CSN-Java | 164,923 | 5,183 | 10,955 | 40,347 |
CSN-Php | 241,241 | 12,982 | 14,014 | 52,660 |
CosQA | 19,604 | 500 | 500 | 6,267 |
AdvTest | 251,820 | 9,604 | 19,210 | - |
StaQC | 118,036 | 14,755 | 14,755 | 29,510 |
表2中展示了CSN数据上本发明提出方法与现有算法的性能对比,表3展示了在上述公开数据集下,本发明提出方法与现有算法的性能对比,评估指标为MRR(Meanreciprocal rank)。在这些实验中,MonoCodeBERT第一阶段采用UniXcoder检索出前5个代码,再由第二阶段的模型对前5个代码进行更精细的评估。
表2:
方法 | Ruby | JavaScript | Go | Python | Java | Php | Overall |
CodeBERT | 67.9 | 62.0 | 88.2 | 67.2 | 67.6 | 62.8 | 69.3 |
GraphCodeBERT | 70.3 | 64.4 | 89.7 | 69.2 | 69.1 | 64.9 | 71.3 |
UniXcoder | 74.0 | 68.4 | 91.5 | 72.0 | 72.6 | 67.6 | 74.4 |
MonoCodeBERT | 77.0 | 71.4 | 92.5 | 75.5 | 75.6 | 70.4 | 77.1 |
表3:
方法 | CSN | CosQA | AdvTest | StaQC |
UniXcoder | 74.4 | 69.6 | 42.5 | 25.8 |
MonoCodeBERT | 77.1 | 71.7 | 44.6 | 28.4 |
从表2和表3可以看出:相比于目前较好的算法,本发明提出的方法具有较大的提升,验证了本发明算法的有效性。
表4展示了对应数据集在评估测试集阶段,现有方法评估耗时和本发明提出方法额外耗时对比。不失一般性,表4的CSN数据集中,仅展示Python语言的耗时。
表4:
方法 | CSN-Python | CosQA | AdvTest | StaQC |
UniXcoder | 265s | 22s | 176s | 203s |
MonoCodeBERT (+) | 75s | 3s | 92s | 89s |
耗时增加比例 | 28% | 14% | 52% | 43% |
从上表4可以看出,本发明提出的两阶段代码搜索相较于之前单一阶段的代码搜索并没有在耗时上有明显增加,耗时增加量基本在50%以内,这说明本发明提出的代码搜索方法达到了较高的效率。
本实施例通过确定查询语句的表征向量和代码库中每个待选代码的表征向量;计算查询语句的表征向量与每个待选代码的表征向量的内积,得到每个待选代码的分数;从待选代码中按照分数由高至低召回与查询语句相关的多条代码。通过上述方式,在召回阶段单独确定查询语句、各待选代码的表征向量,提升了召回效率,进一步提升了代码查询效率,在排序阶段拼接查询语句和代码的字符以建模查询和代码的细粒度交互,增强了模型的表达能力,从而提升了代码搜索的精度。
此外,本发明实施例还提出一种存储介质,所述存储介质上存储有代码搜索程序,所述代码搜索程序被处理器执行时实现如上文所述的代码搜索方法。
由于本存储介质采用了上述所有实施例的全部技术方案,因此至少具有上述实施例的技术方案所带来的所有有益效果,在此不再一一赘述。
参照图6,图6为本发明代码搜索装置第一实施例的结构框图。
如图6所示,本发明实施例提出的代码搜索装置包括:
召回模块10,用于召回与查询语句相关的多条代码。
拼接模块20,用于将所述查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据。
评分模块30,用于利用预设编码器模型确定每个拼接后的输入数据的相关性得分。
排序模块40,用于基于所述相关性得分对召回得到的多条代码进行排序。
应当理解的是,以上仅为举例说明,对本发明的技术方案并不构成任何限定,在具体应用中,本领域的技术人员可以根据需要进行设置,本发明对此不做限制。
本实施例通过召回与查询语句相关的多条代码;将查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据;利用预设编码器模型确定每个拼接后的输入数据的相关性得分;基于相关性得分对召回得到的多条代码进行排序。通过上述方式,将代码搜索分为两个阶段:召回阶段和排序阶段,召回阶段侧重效率,排序阶段侧重精度,在排序阶段拼接查询语句和代码的字符以建模查询和代码的细粒度交互,增强了模型的表达能力,从而提升了代码搜索的精度。
需要说明的是,以上所描述的工作流程仅仅是示意性的,并不对本发明的保护范围构成限定,在实际应用中,本领域的技术人员可以根据实际的需要选择其中的部分或者全部来实现本实施例方案的目的,此处不做限制。
另外,未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的代码搜索方法,此处不再赘述。
在一实施例中,所述评分模块30,还用于利用预设编码器模型确定每个拼接后的输入数据的字符表征和全局表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征,所述全局表征包括查询语句全局表征和代码全局表征;根据每个拼接后的输入数据的查询语句全局表征和代码全局表征确定全局信息匹配得分;根据每个拼接后的输入数据的查询语句字符表征和代码字符表征确定局部信息匹配得分;根据全局信息匹配得分和局部信息匹配得分确定每个拼接后的输入数据的相关性得分。
在一实施例中,所述预设编码器模型至少包括神经网络层;
所述评分模块30,还用于利用神经网络层确定每个拼接后的输入数据的查询语句全局表征与代码全局表征之间的第一得分;计算每个拼接后的输入数据的查询语句全局表征与代码全局表征的内积,得到第二得分;根据第一得分和第二得分确定每个拼接后的输入数据的全局信息匹配得分。
在一实施例中,所述预设编码器模型至少包括预设编码器;
所述评分模块30,还用于利用预设编码器对每个拼接后的输入数据进行编码,得到每个拼接后的输入数据的字符表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征;求取多个查询语句字符表征的平均值,得到每个拼接后的输入数据的查询语句全局表征;求取多个代码字符表征的平均值,得到每个拼接后的输入数据的代码全局表征。
在一实施例中,所述评分模块30,还用于根据查询语句字符表征与代码字符表征之间的相似度确定与每个查询语句字符表征相匹配的目标代码字符表征;计算每个查询语句字符表征与相匹配的目标代码字符表征的内积,得到多个内积值;求取多个内积值的平均值,得到每个拼接后的输入数据的局部信息匹配得分。
在一实施例中,所述评分模块30,还用于获取预设权重信息,所述权重信息为超参数,用于对全局信息和局部信息进行加权;根据预设权重信息、全局信息匹配得分以及局部信息匹配得分进行加权求和,得到每个拼接后的输入数据的相关性得分。
在一实施例中,所述召回模块10,还用于确定查询语句的表征向量和代码库中每个待选代码的表征向量;计算查询语句的表征向量与每个待选代码的表征向量的内积,得到每个待选代码的分数;从待选代码中按照分数由高至低召回与查询语句相关的多条代码。
此外,需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器(Read Only Memory,ROM)/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (7)
1.一种代码搜索方法,其特征在于,所述代码搜索方法包括:
召回与查询语句相关的多条代码;
将所述查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据;
利用预设编码器模型确定每个拼接后的输入数据的相关性得分;
基于所述相关性得分对召回得到的多条代码进行排序;
其中,利用预设编码器模型确定每个拼接后的输入数据的相关性得分的步骤,具体包括:
利用预设编码器模型确定每个拼接后的输入数据的字符表征和全局表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征,所述全局表征包括查询语句全局表征和代码全局表征;
根据每个拼接后的输入数据的查询语句全局表征和代码全局表征确定全局信息匹配得分;
根据每个拼接后的输入数据的查询语句字符表征和代码字符表征确定局部信息匹配得分;
根据全局信息匹配得分和局部信息匹配得分确定每个拼接后的输入数据的相关性得分,利用神经网络模型和内积建模学习全局表征向量,确定全局信息匹配的得分,以查询语句为中心利用内积建模学习字符级别的局部信息,确定局部信息匹配的得分,对全局信息匹配的得分和局部信息匹配的得分进行加权求和,得到各条输入数据的相关性得分;
所述预设编码器模型至少包括神经网络层;
根据每个拼接后的输入数据的查询语句全局表征和代码全局表征确定全局信息匹配得分的步骤,具体包括:
利用神经网络层确定每个拼接后的输入数据的查询语句全局表征与代码全局表征之间的第一得分;
计算每个拼接后的输入数据的查询语句全局表征与代码全局表征的内积,得到第二得分;
根据第一得分和第二得分确定每个拼接后的输入数据的全局信息匹配得分;
所述预设编码器模型至少包括预设编码器;
利用预设编码器模型确定每个拼接后的输入数据的字符表征和全局表征的步骤,具体包括:
利用预设编码器对每个拼接后的输入数据进行编码,得到每个拼接后的输入数据的字符表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征;
求取多个查询语句字符表征的平均值,得到每个拼接后的输入数据的查询语句全局表征;
求取多个代码字符表征的平均值,得到每个拼接后的输入数据的代码全局表征。
2.如权利要求1所述的代码搜索方法,其特征在于,根据每个拼接后的输入数据的查询语句字符表征和代码字符表征确定局部信息匹配得分的步骤,具体包括:
根据查询语句字符表征与代码字符表征之间的相似度确定与每个查询语句字符表征相匹配的目标代码字符表征;
计算每个查询语句字符表征与相匹配的目标代码字符表征的内积,得到多个内积值;
求取多个内积值的平均值,得到每个拼接后的输入数据的局部信息匹配得分。
3.如权利要求1所述的代码搜索方法,其特征在于,根据全局信息匹配得分和局部信息匹配得分确定每个拼接后的输入数据的相关性得分的步骤,具体包括:
获取预设权重信息,所述权重信息为超参数,用于对全局信息和局部信息进行加权;
根据预设权重信息、全局信息匹配得分以及局部信息匹配得分进行加权求和,得到每个拼接后的输入数据的相关性得分。
4.如权利要求1至3中任一项所述的代码搜索方法,其特征在于,召回与查询语句相关的多条代码的步骤,具体包括:
确定查询语句的表征向量和代码库中每个待选代码的表征向量;
计算查询语句的表征向量与每个待选代码的表征向量的内积,得到每个待选代码的分数;
从待选代码中按照分数由高至低召回与查询语句相关的多条代码。
5.一种代码搜索装置,其特征在于,所述代码搜索装置包括:
召回模块,用于召回与查询语句相关的多条代码;
拼接模块,用于将所述查询语句分别与召回得到的各条代码进行拼接,得到多条输入数据;
评分模块,用于利用预设编码器模型确定每个拼接后的输入数据的相关性得分;
排序模块,用于基于所述相关性得分对召回得到的多条代码进行排序;
其中,所述评分模块,还用于利用预设编码器模型确定每个拼接后的输入数据的字符表征和全局表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征,所述全局表征包括查询语句全局表征和代码全局表征;根据每个拼接后的输入数据的查询语句全局表征和代码全局表征确定全局信息匹配得分;根据每个拼接后的输入数据的查询语句字符表征和代码字符表征确定局部信息匹配得分;根据全局信息匹配得分和局部信息匹配得分确定每个拼接后的输入数据的相关性得分,利用神经网络模型和内积建模学习全局表征向量,确定全局信息匹配的得分,以查询语句为中心利用内积建模学习字符级别的局部信息,确定局部信息匹配的得分,对全局信息匹配的得分和局部信息匹配的得分进行加权求和,得到各条输入数据的相关性得分;
其中,所述预设编码器模型至少包括神经网络层;所述评分模块,还用于利用神经网络层确定每个拼接后的输入数据的查询语句全局表征与代码全局表征之间的第一得分;计算每个拼接后的输入数据的查询语句全局表征与代码全局表征的内积,得到第二得分;根据第一得分和第二得分确定每个拼接后的输入数据的全局信息匹配得分;
其中,所述预设编码器模型至少包括预设编码器;所述评分模块,还用于利用预设编码器对每个拼接后的输入数据进行编码,得到每个拼接后的输入数据的字符表征,所述字符表征包括多个查询语句字符表征和多个代码字符表征;求取多个查询语句字符表征的平均值,得到每个拼接后的输入数据的查询语句全局表征;求取多个代码字符表征的平均值,得到每个拼接后的输入数据的代码全局表征。
6.一种代码搜索设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的代码搜索程序,所述代码搜索程序配置为实现如权利要求1至4中任一项所述的代码搜索方法。
7.一种存储介质,其特征在于,所述存储介质上存储有代码搜索程序,所述代码搜索程序被处理器执行时实现如权利要求1至4任一项所述的代码搜索方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310015054.4A CN115878094B (zh) | 2023-01-06 | 2023-01-06 | 代码搜索方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310015054.4A CN115878094B (zh) | 2023-01-06 | 2023-01-06 | 代码搜索方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115878094A CN115878094A (zh) | 2023-03-31 |
CN115878094B true CN115878094B (zh) | 2023-07-14 |
Family
ID=85758127
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310015054.4A Active CN115878094B (zh) | 2023-01-06 | 2023-01-06 | 代码搜索方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115878094B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116719520B (zh) * | 2023-08-07 | 2023-11-17 | 支付宝(杭州)信息技术有限公司 | 代码生成方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107341021A (zh) * | 2017-07-14 | 2017-11-10 | 中南大学 | 大型复杂软件带约束逻辑属性的软件网络表示、存储与检索方法 |
CN115291888A (zh) * | 2022-08-22 | 2022-11-04 | 西南大学 | 基于自注意力交互式网络的软件社区仓库挖掘方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109885753A (zh) * | 2019-01-16 | 2019-06-14 | 苏宁易购集团股份有限公司 | 一种扩大商品搜索召回的方法及装置 |
CN111914113A (zh) * | 2020-08-07 | 2020-11-10 | 大连理工大学 | 一种图像检索的方法以及相关装置 |
US11720346B2 (en) * | 2020-10-02 | 2023-08-08 | International Business Machines Corporation | Semantic code retrieval using graph matching |
CN113449076B (zh) * | 2021-06-23 | 2022-08-30 | 武汉大学 | 基于全局信息和局部信息的代码搜索嵌入方法及装置 |
CN114816517A (zh) * | 2022-05-06 | 2022-07-29 | 哈尔滨工业大学 | 一种层次语义感知的代码表示学习方法 |
CN115017294B (zh) * | 2022-05-31 | 2023-05-09 | 武汉大学 | 代码搜索方法 |
CN115098668A (zh) * | 2022-07-08 | 2022-09-23 | 阳光保险集团股份有限公司 | 一种文档排序方法、排序装置、电子设备和存储介质 |
-
2023
- 2023-01-06 CN CN202310015054.4A patent/CN115878094B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107341021A (zh) * | 2017-07-14 | 2017-11-10 | 中南大学 | 大型复杂软件带约束逻辑属性的软件网络表示、存储与检索方法 |
CN115291888A (zh) * | 2022-08-22 | 2022-11-04 | 西南大学 | 基于自注意力交互式网络的软件社区仓库挖掘方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN115878094A (zh) | 2023-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11983269B2 (en) | Deep neural network system for similarity-based graph representations | |
WO2021159632A1 (zh) | 智能问答方法、装置、计算机设备及计算机存储介质 | |
US11544474B2 (en) | Generation of text from structured data | |
CN107436875B (zh) | 文本分类方法及装置 | |
Wu et al. | Sql-rank: A listwise approach to collaborative ranking | |
CN110147421B (zh) | 一种目标实体链接方法、装置、设备及存储介质 | |
CN112508609B (zh) | 人群扩量的预测方法、装置、设备及存储介质 | |
CN110866119B (zh) | 一种文章质量的确定方法、装置、电子设备及存储介质 | |
CN115878094B (zh) | 代码搜索方法、装置、设备及存储介质 | |
CN114329029B (zh) | 对象检索方法、装置、设备及计算机存储介质 | |
JP2022169743A (ja) | 情報抽出方法、装置、電子機器及び記憶媒体 | |
CN112085091B (zh) | 基于人工智能的短文本匹配方法、装置、设备及存储介质 | |
CN111125348A (zh) | 一种文本摘要的提取方法及装置 | |
US20230385317A1 (en) | Information Retrieval Method, Related System, and Storage Medium | |
CN111898379A (zh) | 槽填充模型训练方法和自然语言理解模型 | |
CN113821527A (zh) | 哈希码的生成方法、装置、计算机设备及存储介质 | |
CN114528015A (zh) | 二进制可执行文件同源分析方法、计算机设备及存储介质 | |
CN114490926A (zh) | 一种相似问题的确定方法、装置、存储介质及终端 | |
Benmeziane et al. | Multi-objective hardware-aware neural architecture search with Pareto rank-preserving surrogate models | |
Eyraud et al. | TAYSIR Competition: Transformer+\textscrnn: Algorithms to Yield Simple and Interpretable Representations | |
CN116383340A (zh) | 信息搜索方法、装置、电子设备和存储介质 | |
CN112966095B (zh) | 一种基于jean的软件代码推荐方法 | |
CN116992440A (zh) | 代码匹配方法、装置、电子设备和存储介质 | |
CN112560507A (zh) | 用户模拟器构建方法、装置、电子设备及存储介质 | |
CN113836444A (zh) | 一种线性时间好友推荐方法、系统、终端以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |