System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及代码搜索,具体而言,涉及一种代码搜索方法、装置、电子设备及存储介质。
技术介绍
1、代码搜索(code search)又称代码检索(code retrieval),是指输入自然语言查询,输出满足查询意图的代码片段的技术,开发人员通过学习和重用检索到的代码可以节省软件开发和维护的时间及精力,继而推动项目和系统的高效开发,正因如此,在软件工程和程序理解领域,代码搜索逐渐成为研究热点。
2、近年来,随着神经网络在软件工程等领域的广泛应用,基于深度学习特别是基于预训练模型的代码搜索也迅速成为研究热点,但是现有的代码预训练模型忽视了具体下游任务的微调优化,导致应用到代码搜索任务上时效果并非理想,此外,现有方法仅通过语义向量间的余弦相似度实现代码和自然语言的简单交互,难以弥补两者之间的语义鸿沟。
技术实现思路
1、本申请至少提供一种代码搜索方法、装置、电子设备及存储介质,可以在微调阶段通过动量对比学习改善普通对比学习的负样本选择范围局限于单一批次内的缺点, 通过维护队列以实现跨批次选择, 从而学习更好的嵌入空间,同时跨模态匹配辅助任务通过交叉注意力融合代码和查询的信息,在嵌入层面弥补两者的语义差距。
2、本申请提供了一种代码搜索方法,应用于包括预训练编码器、动量对比学习单元以及跨模态匹配单元的代码搜索模型,所述方法包括:
3、获取查询文本以及源代码,通过所述预训练编码器编码所述查询文本对应的文本嵌入向量和动量文本嵌入向量,以及所述源代码对应的代码嵌
4、采用所述动量对比学习单元,根据所述动量文本嵌入向量以及所述动量代码嵌入向量,分别构建所述代码嵌入向量与所述文本嵌入向量对应的正样本及负样本进行动量对比学习,在最大化正样本之间的相似度的同时,最小化负样本之间的相似度,并确定对应的动量对比损失函数;
5、将所述文本嵌入向量和所述代码嵌入向量输入至所述跨模态匹配单元,确定对应的融合嵌入表征,并根据所述融合嵌入表征确定所述跨模态匹配单元对应的跨模态匹配损失函数;
6、根据所述跨模态匹配损失函数以及所述动量对比损失函数确定目标损失函数,根据所述目标损失函数训练所述代码搜索模型;
7、将目标查询文本以及待搜索源代码输入至训练好的所述代码搜索模型,确定与所述目标查询文本匹配的目标源代码。
8、可选的,所述预训练编码器包括代码编码器、查询文本编码器、动量代码编码器以及动量查询文本编码器;
9、所述代码编码器用于编码所述代码嵌入向量,所述动量代码编码器用于编码所述动量代码嵌入向量;
10、所述查询文本编码器用于编码所述文本嵌入向量,所述动量查询文本编码器用于编码所述动量文本嵌入向量;
11、其中,所述代码编码器与所述查询文本编码器为利用反向传播进行梯度更新的编码器;
12、所述动量代码编码器与动量查询文本编码器为利用预设动量更新规则进行参数更新的编码器。
13、可选的,基于以下步骤构建正样本和负样本,具体包括:
14、根据所述动量文本嵌入向量,构建文本嵌入队列;
15、在代码-查询文本对比学习中,针对每个所述代码嵌入向量,正样本为该代码嵌入向量在数据集当前批次中有配对关系的所述动量文本嵌入向量,负样本为无配对关系的动量文本嵌入向量和所述文本嵌入队列中的全部嵌入向量;
16、根据所述动量代码嵌入向量,构建代码嵌入队列;
17、在查询文本-代码对比学习中,针对每个所述文本嵌入向量,正样本为该文本嵌入向量在数据集当前批次中有配对关系的所述动量代码嵌入向量,负样本为无配对关系的动量代码嵌入向量和所述代码嵌入队列中的全部嵌入向量。
18、可选的,所述动量对比学习单元还用于:
19、针对所述动量对比学习单元输出的每个动量嵌入向量,确定该动量嵌入向量与对应的正样本与全部负样本之间的相似度;
20、将所述相似度进行 softmax处理后确定为动量蒸馏的伪标签,作为参数更新编码器的辅助监督信号。
21、可选的,基于以下步骤确定所述动量对比损失函数:
22、确定所述代码-查询文本对比学习在动量对比学习中的第一对比损失函数,以及所述查询文本-代码对比学习在动量对比学习中的第二对比损失函数;
23、针对所述代码-查询文本对比学习,确定所述代码嵌入向量与对应的正样本与全部负样本之间的第一相似度预测标签;
24、根据所述动量代码嵌入向量与对应的正样本与全部负样本之间的所述伪标签,以及所述第一相似度预测标签确定所述代码-查询文本对比学习对应的第一动量蒸馏损失函数;
25、根据所述第一对比损失函数、所述第一动量蒸馏损失函数以及预设权重超参数,确定代码-查询文本对比损失函数;
26、针对所述查询文本-代码对比学习,确定所述文本嵌入向量与对应的正样本与全部负样本之间的第二相似度预测标签;
27、根据所述动量文本嵌入向量与对应的正样本与全部负样本之间的所述伪标签,以及所述第二相似度预测标签确定所述查询文本-代码对比学习对应的第二动量蒸馏损失函数;
28、根据所述第二对比损失函数、所述第二动量蒸馏损失函数以及预设权重超参数,确定查询文本-代码对比损失函数;
29、聚合所述代码-查询文本对比损失函数以及所述查询文本-代码对比损失函数,确定所述动量对比损失函数。
30、可选的,所述跨模态匹配单元采用transformer编码器架构的代码预训练模型的最后6层;
31、其中,在多头注意力子层和前馈层之间增加交叉注意力子层。
32、本申请还提供一种代码搜索装置,应用于包括预训练编码器、动量对比学习单元以及跨模态匹配单元的代码搜索模型,所述装置包括:
33、嵌入向量编码模块,用于获取查询文本以及源代码的嵌入向量,通过所述预训练编码器编码所述查询文本对应的文本嵌入向量和动量文本嵌入向量,以及所述源代码对应的代码嵌入向量和动量代码嵌入向量;
34、动量对比学习模块,用于采用所述动量对比学习模块,根据所述动量文本嵌入向量以及所述动量代码嵌入向量,分别构建所述代码嵌入向量与所述文本嵌入向量对应的正样本及负样本进行动量对比学习,在最大化正样本之间的相似度的同时,最小化负样本之间的相似度,并确定对应的动量对比损失函数;
35、跨模态匹配模块,用于将所述文本嵌入向量和所述代码嵌入向量输入至所述跨模态匹配模块,确定对应的融合嵌入表征,并根据所述融合嵌入表征确定所述跨模态匹配模块对应的跨模态匹配损失函数;
36、训练模块,用于根据所述跨模态匹配损失函数以及所述动量对比损失函数确定目标损失函数,根据所述目标损失函数训练所述代码搜索模型;
37、搜索模块,用于将目标查询文本以及待搜索源代码输本文档来自技高网...
【技术保护点】
1.一种代码搜索方法,其特征在于,应用于包括预训练编码器、动量对比学习单元以及跨模态匹配单元的代码搜索模型,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述预训练编码器包括代码编码器、查询文本编码器、动量代码编码器以及动量查询文本编码器;
3.根据权利要求1所述的方法,其特征在于,基于以下步骤构建正样本和负样本,具体包括:
4.根据权利要求3所述的方法,其特征在于,所述动量对比学习单元还用于:
5.根据权利要求4所述的方法,其特征在于,基于以下步骤确定所述动量对比损失函数:
6.根据权利要求1所述的方法,其特征在于:
7.一种代码搜索装置,其特征在于,应用于包括预训练编码器、动量对比学习单元以及跨模态匹配单元的代码搜索模型,所述装置包括:
8.一种电子设备,其特征在于,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如权利要求1至6中任一项所述的代码搜索方法的步
9.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1至6中任一项所述的代码搜索方法的步骤。
...【技术特征摘要】
1.一种代码搜索方法,其特征在于,应用于包括预训练编码器、动量对比学习单元以及跨模态匹配单元的代码搜索模型,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述预训练编码器包括代码编码器、查询文本编码器、动量代码编码器以及动量查询文本编码器;
3.根据权利要求1所述的方法,其特征在于,基于以下步骤构建正样本和负样本,具体包括:
4.根据权利要求3所述的方法,其特征在于,所述动量对比学习单元还用于:
5.根据权利要求4所述的方法,其特征在于,基于以下步骤确定所述动量对比损失函数:
6.根据权利要求1所述的方法,其...
【专利技术属性】
技术研发人员:琚生根,任俊霖,夏欣,李每文,黄骁迪,
申请(专利权)人:四川大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。