GitHubCopilot依靠自动生成代码这个强大的噱头,自上线以来就成为了讨论的焦点。Copilot建立在OpenAI的新Codex算法之上,其中Codex在从GitHub提取的数TB公共代码以及英语示例上进行了训练。因此,GitHub声称Copilot可以分析文档、注释、函数名称和代码本身中的字符串,以生成新的匹配代码,包括之前对特定函数的调用。同时,Copilot支持多种编程语言:Python、JavaScript、TypeScript、Ruby和Go。发布后,有人拉着Copilot刷了Leetcode的题库,对这位“AI程序员”的表现非常满意。经过多次验证,Copilot每次都能通过Leetcode测试。考虑到近乎实时的生成速度,博主认为AI可能比我们更擅长编写代码。不过网友怀疑Copilot是在LeetCode数据库上训练过的,因为生成的评论和Leetcode给的模板几乎一模一样。对此,GitHub表示,虽然可能有0.1%的直接引用,但Copilot生成的大部分代码将是原创的。“复制粘贴”发布第二天就成了实打实的锤子,有网友质疑GitHubCopilot在清理了免费开源代码后成了赚钱工具。这些代码本应受到GPL(通用公共许可证)的保护,防止它们被用于商业项目。不出所料,两天之内,这种怀疑就变成了实锤。有网友发现Copilot直接“复制粘贴”了最著名的“平方根倒数速度算法”。Copilot“生成”的代码不仅使用了一个迄今为止无人能理解的幻数:0x5f3759df,而且还包含对这段代码的抱怨:他妈的是什么?.从源代码的角度来看,Copilot所做的是将别人写的代码重新组装到训练集中。我们的AI不会“背”代码,但GitHub似乎已经做好了准备。一位名叫AlbertZiegler的团队成员表示,截至2021年5月7日,他已经将Copilot为Python提出的所有453,780条建议都放在了一起。被收集,数据来自300名在日常工作中使用它的员工。Albert对这个数据集进行了分析和整理,并写了一篇看似完整的博客来进行讨论。在文章的开头,Albert让GitHubCopilot背诵了一篇知名文章。显然,副驾驶已经牢牢记住了文章的内容。不过,Albert认为记住训练集的内容不是问题。毕竟他自己背诵过诗歌,这不会让他在日常交流中被这些背诵的内容分心。案例分类类别1:Copilot有时会由于程序员编写的新评论而遵循已接受的建议和非常相似的建议。Albert认为第二次只是之前“成功”案例的重复,所以他将它们从问题分析中剔除。类别2:副驾驶可能会建议长而重复的序列。以下面的示例为例,在最后的训练集中发现了重复的'
'。第3类:Copilot给出类似于自然数、素数和希腊字母表等标准列表的建议。有些建议可能有帮助,也可能没有帮助。不过,Albert表示,这些并不符合他关于“记住”代码的假设。第四类:在做一些自由度较低的任务时,Copilot会给出一些通用或通用的解决方案。例如,下面的中间部分可以被认为是使用BeautifulSoup包解析维基百科列表的标准方法。Albert说,在训练数据中找到的最匹配的片段是这样的代码,用于解析不同的文章。同样,这不符合他对“背诵”代码的定义。第5类:这些最后的案例符合Albert的“背诵代码”的愿景,其中代码或注释中至少有一些特定的重叠。测试结果对于GitHubCopilot的大部分建议,Albert表示他没有发现与用于训练的代码有任何明显的重叠。去掉第一类后,可以得到185条建议。在这些案例中,144例被分配到第2-4类。这样最后的第5类就剩下41个case了,作者说这就是他脑子里的代码“背诵”。在GitHubCopilot挑选出的41个主要案例中,在没有特定上下文的情况下进行手动注释时,没有一个案例出现在少于10个不同的文档中。大多数(35例)发生超过一百次。有一次,GitHubCopilot建议从一个空文件开始,它甚至在训练期间看到了超过700,000次的东西——这就是GNU通用公共许可证。