搜索代码以重用、调用或查看其他人如何处理问题是软件开发人员日常工作中最常见的任务之一。然而,与常规网络搜索引擎不同,代码搜索引擎通常令人沮丧,并且永远无法完全理解我们我们开始使用现代机器学习技术来改进代码搜索,但很快意识到我们无法减缓我们的进展。使用GLUE基准的自然语言处理不同,不适合代码搜索评估的标准数据集。
今天,我们与Weights & Biases的合作伙伴一起宣布推出CodeSearchNet Challenge评估环境和排行榜。我们加密发布一个大型数据集,帮助数据科学家为此任务构建模型,以及展示几个当前最先进技术的核心模型。我们的排行榜使用带注释的查询数据集来评估代码搜索工具的质量。
CodeSearchNet 语言料库和模型
我们从 GitHub 上的开源项目中收集了大量用 Go、Java、JavaScript、PHP、Python 和 Ruby 编写的函数及其相关文档数据集。我们使用TreeSitter基础设施进行这项工作,并且我们还发布了数据剩下的管道,供其他人使用机器学习评估训练代码的起点。虽然这些数据与代码搜索没有直接关系,但它将代码与相关的自然语言描述配置,适合这个任务模型。庞大的规模也使得基于现代变压器架构应用的高容量模型成为可能。
我们过去重建的 CodeSearchNet 语言库可在 Amazon S3 上下载,其中完全包括:
- 历史上 600 万种方法
- 其中200万份有相关文档(文档字符串、JavaDoc 等)
- 指示数据原始位置(例如仓库或行号)的元数据
在我们早期的语义代码搜索工作的基础上,我们还发布了一系列利用现代技术从序列中学习的核心模型(包括类似BERT的自注意力模型),以帮助数据科学家开始进行代码搜索。
CodeSearchNet 挑战
为了评估代码搜索模型,我们收集了一组初始代码搜索查询,并让程序员注释潜在结果的相关性。我们首先从 Bing 收集了具有高代码点击率的常见搜索查询,并将其与StaQC的查询相结合,得到了99个与代码相关的概念查询(即,我们删除了所有只是API文档查找的内容)。
然后,我们使用标准的Elasticsearch安装和我们的核心模型从 CodeSearchNet Corpus 中获取每个查询的 10 个可能结果。最后,我们要求分析师、数据科学家和机器学习研究人员对结果与查询的相关性进行建议注释,范围从 0(“不相关”)到 3(“完全匹配”)。请参阅我们的技术报告,深入了解注释过程和数据。
我们希望未来能够扩展我们的评估数据集,以涵盖更多语言、查询和注释。随着我们在接下来的几个月中继续添加更多内容,我们的目标是未来的下一版 CodeSearchNet 挑战赛中包含一个扩展数据集。
其他
我们预计这个数据集除了代码搜索之外还有其他一个例子,把代码搜索作为一个可能的任务,该任务利用了语言自然和代码的学习表示。我们很期待看到社区接下来会构建什么。
特别感谢
如果没有微软研究团队和来自 GitHub 的核心贡献者(包括Marc Brockschmidt、Miltos Allamanis、Ho-Hsiang Wu、Hamel Husain和Tiferet Gazit),CodeSearchNet 挑战赛就不可能实现。
我们也感谢社区中所有帮助完成这个项目的贡献者:
@nbardy、@raubitsj、@staceysv、@cvphelps、@tejaskannan、@s-zanella、@ AntonioND 、@goutham7r、@campoy、@cal58、@febuiles、@letmaik、@sebastiandziadzio、@panthap2、@CoderPat。