ICSE-2018 Deep code search

论文地址:Deep code search

CODEnn:代码段和自然语言嵌入表示学习

Abstract

为了实现函数功能,开发者往往会从网上查找相似片段进行重写,现有的方法是把代码视作文本文档,使用信息检索方法查找最相关代码,基本都是基于代码和查询的自然语言之间的文本相似度的,缺乏对查询语句和源代码的深度理解,因此作者提出了CODEnn模型,将代码段和自然语言联合嵌入到向量表示,实现的深度搜索工具名为DeepCS

Introduction

其他方法依赖于信息检索技术,但查询语言的高层次意图与代码低层次实现细节往往不匹配

所以作者提出:

  • CODEnn模型,将代码段和自然语言联合嵌入到向量表示
  • DeepCS作为实现包含了1820万个java代码段
  • 使用了50个Stack Overflow真实查询评估
avatar

Architecture

  • Code Embedding Network:将原代码嵌入为向量,分为方法名,API序列和原代码中包含的词元
  • Description Embedding Network:将自然语言注释嵌入为向量
  • Similarity Module:余弦相似度

Model Training

  • training instance:三元组<C,D+,D->,代码,自然语言注释,随机选择的自然语言注释负样本

  • Loss:

    avatar
avatar

Evaluation

avatar
avatar

Discusstion

优点:

  • 能够理解查询语义
  • 收到不相关的噪音关键词影响更小
  • 不仅根据管检测匹配,也根据语义关联度匹配

局限:

有时候部分相关结果排名高于精准匹配结果,也是因为考虑了语义的问题