怎样晋升代码搜刮结果?GitHub团队打造代码搜刮规模的GLUE数据集
副问题[/!--empirenews.page--]
想晋升代码搜刮结果?起首你得知道怎么才算晋升。GitHub 团队建设 CodeSearchNet 语料库,旨在为代码搜刮规模提供基准数据集,晋升代码搜刮功效的质量。 搜刮代码举办重用、挪用,可能借此查察别人处理赏罚题目的方法,是软件开拓者一般事变中最常见的使命之一。然而,代码搜刮引擎的结果凡是不太好,和通例的 web 搜刮引擎差异,它无法充实领略你的需求。GitHub 团队实行行使当代呆板进修技能改进代码搜刮功效,但很如意识到一个题目:他们无法权衡改进结果。天然说话处理赏罚规模有 GLUE 基准,而代码搜刮评估规模并没有得当的尺度数据集。 因此 GitHub 与 Weights & Biases 公司睁开相助,并于昨日推出 CodeSearchNet Challenge 评估情形和排行榜。与此同时,GitHub 还宣布了一个大型数据集,以辅佐数据科学家构建得当该使命的模子,并提供了多个代表当前最优程度的基线模子。该排行榜行使一个 query 标注数据集来评估代码搜刮器材的质量。
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 的比例分别为实习集/验证集/测试集,提议用户凭证该比例行使此数据集。 表 1:数据集详情。 范围性 该数据集噪声很大。起首,文档与 query 存在本质区别,它们行使的是差异的说话情势。文档凡是是代码作者在写代码的同时写成的,更倾向于行使同样的词汇,这与搜刮 query 存在差别。其次,尽量 GitHub 团队在建设数据集的进程中执行了数据洗濯,但他们无法得知每个文档 d_i 描写对应代码段 c_i 的准确水平。最后,一些文档是用非英语文本写成的,而 CodeSearchNet Challenge 评估数据集首要存眷的是英文 query。 CodeSearchNet 基线模子 基于 GitHub 之前在语义代码搜刮规模的全力,该团队宣布了一组基线模子,这些模子操作当代技能进修序列(包罗 BERT 类的自留意力模子),辅佐数据科学家开启代码搜刮。 和之前的事变一样,GitHub 团队行使代码和 query 的连系嵌入来实现神经搜刮体系。该架构对每个输入(天然或编程)说话行使一个编码器,并逊??们使得输入映射至一个连系向量空间。其实习方针是将代码及其对应说话映射至相近的向量,这样我们就可以嵌入 query 实现搜刮,然后返回嵌入空间中「相近」的代码段荟萃。 思量 query 和代码之间更多交互的较伟大模子虽然机能更好,可是为每个 query 或代码段天生单个向量可以实现更高效的索引和搜刮。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |