加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

怎样晋升代码搜刮结果?GitHub团队打造代码搜刮规模的GLUE数据集

发布时间:2019-10-01 08:07:26 所属栏目:移动互联 来源:机器之心编译
导读:想晋升代码搜刮结果?起首你得知道怎么才算晋升。GitHub 团队建设 CodeSearchNet 语料库,旨在为代码搜刮规模提供基准数据集,晋升代码搜刮功效的质量。 搜刮代码举办重用、挪用,可能借此查察别人处理赏罚题目的方法,是软件开拓者一般事变中最常见的使命之一
副问题[/!--empirenews.page--]

想晋升代码搜刮结果?起首你得知道怎么才算晋升。GitHub 团队建设 CodeSearchNet 语料库,旨在为代码搜刮规模提供基准数据集,晋升代码搜刮功效的质量。

如何提升代码搜索效果?GitHub团队打造代码搜索领域的GLUE数据集

搜刮代码举办重用、挪用,可能借此查察别人处理赏罚题目的方法,是软件开拓者一般事变中最常见的使命之一。然而,代码搜刮引擎的结果凡是不太好,和通例的 web 搜刮引擎差异,它无法充实领略你的需求。GitHub 团队实行行使当代呆板进修技能改进代码搜刮功效,但很如意识到一个题目:他们无法权衡改进结果。天然说话处理赏罚规模有 GLUE 基准,而代码搜刮评估规模并没有得当的尺度数据集。

因此 GitHub 与 Weights & Biases 公司睁开相助,并于昨日推出 CodeSearchNet Challenge 评估情形和排行榜。与此同时,GitHub 还宣布了一个大型数据集,以辅佐数据科学家构建得当该使命的模子,并提供了多个代表当前最优程度的基线模子。该排行榜行使一个 query 标注数据集来评估代码搜刮器材的质量。

  • 论文地点:https://arxiv.org/abs/1909.09436
  • 语料库及基线模子地点:https://github.com/github/CodeSearchNet
  • 挑衅赛地点:https://app.wandb.ai/github/codesearchnet/benchmark

CodeSearchNet 语料库

行使专家标注建设足以实习高容量模子的大型数据集本钱奋发,不切现实,因此 GitHub 建设了一个质量较低的署理数据集。GitHub 遵循文献 [5, 6, 9, 11] 中的做法,将开源软件中的函数与其对应文档中的天然说话举办匹配。可是,这样做必要执行大量预处理赏罚步协调开导式要领。

通过对常见错误案例举办深入说明,GitHub 团队总结出一些通用法例和决定。

CodeSearchNet 语料库网络进程

GitHub 团队从开源 non-fork GitHub repo 中网络语料,行使 libraries.io 确认全部项目均被至少一个其他项目行使,并凭证「风行度」(popularity)对其举办排序(风行度按照 star 和 fork 数而定)。然后,删除没有 license 可能 license 未明晰应承从头分发的项目。之后,GitHub 团队行使其通用理会器 TreeSitter 对全部 Go、Java、JavaScript、Python、PHP 和 Ruby 函数(或要领)执行分词操纵,并行使开导式正则表达式对函数对应的文档文本举办分词处理赏罚。

筛选

为了给 CodeSearchNet Challenge 天生实习数据,GitHub 团队起首思量了语料库中具备相干文档的函数。这就获得了一组 (c_i , d_i) 对,个中 c_i 是函数,d_i 是对应的文档。为了使数据越发得现代码搜刮使命,GitHub 团队执行了一系列预处理赏罚步调:

文档 d_i 被截断,仅保存第一个完备段落,以使文档长度匹配搜刮 query,并删除对函数参数和返回值的深入接头。

删除 d_i 短于三个 token 的对,由于此类注释无法提供有用信息。

删除 c_i 实现少于三行的对,由于它们凡是包括未实现的要领、getters、setters 等。

删除名称中包括子字符串「test」的函数。相同地,删除结构函数和尺度扩展要领,如 Python 中的 __str__、Java 中的 toString。

辨认数据齐集的(近似)一再函数,仅保存个中一个副本,从而删除数据齐集的一再项。这就消除了呈现多个版本自天生代码和复制粘贴的环境。

筛选后的语料库和数据抽代替码详见:https://github.com/github/CodeSearchNet

数据集详情

该数据集包括 200 万函数-文档对、约 400 万不具备对应文档的函数(见下表 1)。GitHub 团队将该数据集凭证 80-10-10 的比例分别为实习集/验证集/测试集,提议用户凭证该比例行使此数据集。

如何提升代码搜索效果?GitHub团队打造代码搜索领域的GLUE数据集

表 1:数据集详情。

范围性

该数据集噪声很大。起首,文档与 query 存在本质区别,它们行使的是差异的说话情势。文档凡是是代码作者在写代码的同时写成的,更倾向于行使同样的词汇,这与搜刮 query 存在差别。其次,尽量 GitHub 团队在建设数据集的进程中执行了数据洗濯,但他们无法得知每个文档 d_i 描写对应代码段 c_i 的准确水平。最后,一些文档是用非英语文本写成的,而 CodeSearchNet Challenge 评估数据集首要存眷的是英文 query。

CodeSearchNet 基线模子

基于 GitHub 之前在语义代码搜刮规模的全力,该团队宣布了一组基线模子,这些模子操作当代技能进修序列(包罗 BERT 类的自留意力模子),辅佐数据科学家开启代码搜刮。

和之前的事变一样,GitHub 团队行使代码和 query 的连系嵌入来实现神经搜刮体系。该架构对每个输入(天然或编程)说话行使一个编码器,并逊??们使得输入映射至一个连系向量空间。其实习方针是将代码及其对应说话映射至相近的向量,这样我们就可以嵌入 query 实现搜刮,然后返回嵌入空间中「相近」的代码段荟萃。

思量 query 和代码之间更多交互的较伟大模子虽然机能更好,可是为每个 query 或代码段天生单个向量可以实现更高效的索引和搜刮。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读