返回
Effective Hard Negative Mining for Contrastive Learning-Based Code Search
DOI:10.1145/3695994.png)
摘要
En 中文
背景。代码搜索旨在根据给定的自然语言查询,在大规模代码库中找到最相关的代码片段。一个准确的代码搜索引擎可以提高代码复用率并改善编程效率。代码搜索的重点在于如何表示代码和查询之间的语义相似性。随着代码预训练模型的发展,使用数值特征向量(嵌入)表示代码语义、并使用向量距离表示语义相似性的模式,已取代传统的字符串匹配方法。语义表示的质量对代码搜索等下游任务的有效性至关重要。目前,最先进(SOTA)的学习方法采用对比学习范式。对比学习的目标在于最大化匹配代码和查询(正样本)之间的相似性,同时最小化不匹配对(负样本)之间的相似性。为提高负样本的复用率,先前的对比学习方法使用大型队列(记忆库)来存储嵌入。问题。然而,在代码搜索中使用负样本仍有很大的改进空间:(1) 由于负样本的随机选择,现有模型学习的语义表示无法很好地区分相似代码。(2) 由于记忆库中的语义向量复用自之前的推理结果,并直接用于损失函数计算而未经梯度下降,模型无法有效学习负样本的语义信息。方法。为解决上述问题,我们提出了一个带硬负样本挖掘的对比学习代码搜索模型,称为CoCoHaNeRe:(1) 为使模型能够区分相似代码,我们在对比训练中引入硬负样本,这些是代码库中与正样本最相似的负样本。因此,硬负样本最有可能使模型出错。(2) 为提高训练过程中负样本的学习效率,我们将所有硬负样本纳入模型的梯度下降过程中。结果。为验证CoCoHaNeRe的有效性,我们在六种编程语言的大型代码搜索数据集上进行了实验,以及类似的检索任务(代码克隆检测和代码问答)。实验结果表明,我们的模型达到了SOTA性能。在代码搜索任务中,CoCoHaNeRe的平均MRR分数分别超过CodeBERT、GraphCodeBERT和UniXcoder 11.25%、8.13%和7.38%。在代码克隆检测和代码问答方面也取得了显著进展。此外,我们的方法在不同编程语言和代码预训练模型上表现良好。此外,定性分析表明,我们的模型能够有效区分相似代码之间的高阶语义差异。
Keyword:
Code Search
Contrastive Learning
Hard Negative Mining
Code Pre- trained Model
期刊
A
IF:
6.2
论文数:
1.2K
被引数:
3.4K
机构
暂无机构信息
引用论文
Sodium channel kinetic changes that produce Brugada syndrome or progressive cardiac conduction system disease产生Brugada综合征或进行性心脏传导系统疾病的钠通道动力学变化

