用于代码表示学习的数据集,工具和基准,由GitHub与Microsoft Research-Cambridge的Deep Program小组合作推出。CodeSearchNet是数据集和基准的集合,用于探索使用自然语言进行代码检索的问题。这项研究是自然语言语义代码搜索一文中提出的一些想法的延续。
但是代码又不像文章或者图片能够非常快速的找到正确结果,目前的代码搜索引擎的效果还无法完全满足开发者的需求。
不过随着机器学习、深度学习技术的发展,有望改善现状。作为全球最流行的代码托管网站(请忘掉“全球最大同友网站”这个标签好吗),GitHub觉得有必要在这方面做一些事情。
他们最开始想用机器学习改善代码搜索结果,但是发现很难衡量高低有没有比传统的方式更好、改善程度有多大,此时需要一个代码搜索的评估基准,就好像NLP有3大评估基准一样。
CodeSearchNet是数据集和基准的集合,用于探索使用自然语言进行代码检索的问题。旨在通过以下方式为社区研究语义代码搜索提供一个平台:
GitHub希望CodeSearchNet能够在与源代码和自然语言之间的关系方面,与更广泛的机器学习和NLP社区互动方面,迈出的一步。
除此之外,GitHub还提供了一个大型数据集,以帮助数据科学家构建适合该任务的模型,并欢迎大家开发这个数据集在其他领域的用途。
该数据集包含200万函数-文档对、约400万不具备对应文档的函数。具体来说,注释是函数或方法注释(例如Python中的文档字符串),而代码则是整个函数或方法。当前,数据集包含Python,Java,Ruby,Go,Java和PHP代码。
GitHub团队将该数据集按照80-10-10的比例划分为训练集/验证集/测试集,用户按照该比例使用此数据集,如下图:
GitHub还提供了多个代表当前最优水平的基线模型。该排行榜使用一个 query标注数据集来评估代码搜索工具的质量。
GitHub上正在进行的机器学习研究的关键领域之一是实体的表示学习,例如仓库,代码,issue,配置文件和用户。通过学习共享作为文本的公共向量空间的代码的表示,GitHub在实现语义搜索方面取得了重大进展。例如下图:
请注意,即使在搜索查询和文本之间没有共同的关键字(显示的代码和注释不包含单词“Ping”,“REST”或“api”),所展示的语义搜索也会返回合理的结果!
用语义搜索来增强关键字搜索的含义是深远的。例如,这种功能将加快将新软件工程师加入项目的过程,并总体上增强代码的可发现性。
为了评估代码搜索模型,GitHub团队收集了一组初始的代码搜索查询,并让程序员注释了潜在结果的相关性。GitHub团队首先从必应(Bing)收集了具有较高点击率的通用搜索查询来进行编码,然后将它们与StaQC的查询相结合,从而产生了99个与代码相关的概念的查询(即,GitHub团队删除了所有仅API文档查找的内容)。
最后,GitHub团队要求程序员,数据科学家和机器学习研究人员以从零(“完全不相关”)到三(“完全匹配”)的比例来注释提议的结果与查询的相关性。有关注释过程和数据的详细说明,王学兵和范冰冰请参见GitHub团队的技术报告:
GitHub团队希望将来扩展评估数据集,以包括更多的语言,查询和注释。在接下来的几个月中,随着GitHub团队继续增加更多内容,GitHub团队的目标是将来为CodeSearchNet Challenge的下一版本提供扩展的数据集。
网友评论 ()条 查看