Skip to main content
QUICK REVIEW

[论文解读] CSRS: Code Search with Relevance Matching and Semantic Matching

Yi Cheng, Li Kuang|arXiv (Cornell University)|Mar 15, 2022
Software Engineering Research被引用 4
一句话总结

该论文提出 CSRS,一种代码搜索模型,通过联合利用神经信息检索进行词汇相关性匹配和基于共注意力机制的语义匹配,以提升代码检索性能。通过结合多尺寸卷积核的 n-gram 嵌入、相关性匹配模块和语义匹配模块,CSRS 在大规模代码搜索数据集上实现了 0.614 的 MRR,相较于最先进模型 DeepCS 和 CARLCS-CNN 分别提升了 33.77% 和 18.53%。

ABSTRACT

Developers often search and reuse existing code snippets in the process of software development. Code search aims to retrieve relevant code snippets from a codebase according to natural language queries entered by the developer. Up to now, researchers have already proposed information retrieval (IR) based methods and deep learning (DL) based methods. The IR-based methods focus on keyword matching, that is to rank codes by relevance between queries and code snippets, while DL-based methods focus on capturing the semantic correlations. However, the existing methods do not consider capturing two matching signals simultaneously. Therefore, in this paper, we propose CSRS, a code search model with relevance matching and semantic matching. CSRS comprises (1) an embedding module containing convolution kernels of different sizes which can extract n-gram embeddings of queries and codes, (2) a relevance matching module that measures lexical matching signals, and (3) a co-attention based semantic matching module to capture the semantic correlation. We train and evaluate CSRS on a dataset with 18.22M and 10k code snippets. The experimental results demonstrate that CSRS achieves an MRR of 0.614, which outperforms two state-of-the-art models DeepCS and CARLCS-CNN by 33.77% and 18.53% respectively. In addition, we also conducted several experiments to prove the effectiveness of each component of CSRS.

研究动机与目标

  • 为解决现有代码搜索方法仅关注关键词匹配或语义理解之一,而无法同时兼顾两者的问题。
  • 设计一种统一的深度学习模型,以捕捉自然语言查询与代码片段之间的词汇级别相关性与语义级别相关性。
  • 通过在单一架构中整合神经信息检索技术与基于注意力的语义匹配,提升代码检索性能。
  • 通过消融研究,实证验证所提出模型中各组件的有效性。

提出的方法

  • 该模型使用基于 CNN 的嵌入模块,采用多种卷积核大小(1、2、3)从查询和代码片段中提取 n-gram 嵌入。
  • 基于神经信息检索的相关性匹配模块通过在 n-gram 特征上学习注意力机制,计算查询与代码嵌入之间的交互得分,以捕捉词汇重叠。
  • 语义匹配模块中采用共注意力机制,动态对齐并关注查询与代码中相关部分,以捕捉更深层次的语义关联。
  • 将相关性匹配得分与语义匹配得分进行融合,并用于计算最终的代码片段相关性得分,以实现排序。
  • 模型在包含 1822 万条训练样本和 1 万条测试样本的开源 Java 项目大规模数据集上进行端到端训练。
  • 通过消融研究评估模型各组件,分析各模块及特征类型(如方法名、API 序列、代码标记)的贡献。

实验结果

研究问题

  • RQ1将词汇相关性匹配与语义匹配相结合,是否能够使代码搜索性能超越当前最先进模型?
  • RQ2所提出的相关性匹配模块在捕捉查询与代码片段之间关键词级别相似性方面的有效性如何?
  • RQ3不同输入特征(如方法名、API 序列、代码标记)对整体模型性能的贡献如何?
  • RQ4嵌入模块中不同卷积核大小对模型检索效果的影响如何?

主要发现

  • CSRS 实现了 0.614 的 MRR,显著优于 DeepCS(MRR 0.459)和 CARLCS-CNN(MRR 0.518),分别提升了 33.77% 和 18.53%。
  • 包含全部三种输入特征(方法名、API 序列、代码标记)的完整模型性能最高,其中方法名作为单一特征影响力最大。
  • 在嵌入模块中使用三种不同卷积核大小(1、2、3)可获得最佳性能,其中核大小 1 贡献最大,三者组合效果最优。
  • 消融研究证实,相关性匹配模块与语义匹配模块均不可或缺,任一模块的移除均导致性能显著下降。
  • 定性示例显示,CSRS 能够基于词汇重叠(如 'null'、'index')和语义理解(如 'out of range' 的含义)成功检索相关代码片段。
  • 该模型在处理多样化查询方面表现出鲁棒性,包括依赖语义等价而非精确关键词匹配的查询。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。