中文

Senatus——一种快速且准确的代码到代码推荐引擎

软件工程 2022-04-27 v2 人工智能

摘要

源代码上的机器学习(MLOnCode)是一个热门研究领域,其驱动力来自大规模代码仓库的可用性以及用于挖掘源代码的强大概率与深度学习模型的发展。代码到代码推荐是 MLOnCode 中的一项任务,旨在推荐相关的、多样的且简洁的代码片段,这些片段能有用地扩展开发者在其开发环境(IDE)中正在编写的代码。代码到代码推荐引擎有望通过减少从 IDE 的上下文切换以及增加代码复用,来提高开发者生产力。现有的代码到代码推荐引擎无法优雅地扩展到大型代码库,其查询时间随代码仓库规模呈线性增长。此外,现有代码到代码推荐引擎未能在排序函数中考虑代码仓库的全局统计信息,例如代码片段长度的分布,导致次优的检索结果。我们通过新的代码到代码推荐引擎 \emph{Senatus} 解决了这两个弱点。Senatus 的核心是一种新的局部敏感哈希(LSH)算法 \emph{De-Skew} LSH,该算法对数据进行索引以实现快速(次线性时间)检索,同时利用基于抽象语法树的新型特征评分与选择算法来抵消片段长度分布中的偏斜。我们评估了 Senatus,发现其推荐质量高于竞争基线,同时实现了更快的搜索。例如在 CodeSearchNet 数据集上,与 Facebook Aroma 相比,Senatus 将性能提升 31.21\% F1 且查询时间加快 147.9\emph{x}。Senatus 也以 29.2\% F1 和 51.02\emph{x} 更快查询时间优于标准 MinHash LSH。

关键词

引用

@article{arxiv.2111.04473,
  title  = {Senatus -- A Fast and Accurate Code-to-Code Recommendation Engine},
  author = {Fran Silavong and Sean Moran and Antonios Georgiadis and Rohan Saphal and Robert Otter},
  journal= {arXiv preprint arXiv:2111.04473},
  year   = {2022}
}

备注

Accepted to MSR 2022