互联网资讯 / 人工智能 · 2023年12月14日 0

GitHub否认AI抄袭代码指控

GitHub否认AI抄袭代码指控

自从GitHub Copilot推出以来,其自动生成代码的能力引发了广泛关注。

这款工具基于OpenAI的codex算法进行开发,而codex则是通过从GitHub提取的TB级公开代码和英语语言示例进行训练的。

因此,GitHub表示,Copilot能够分析文档中的字符串、注释、函数名称和代码本身,进而生成新的匹配代码,包括特定函数的调用。

Copilot还支持多种编程语言,例如Python、JavaScript、TypeScript、Ruby和Go。

发布后,有用户尝试用Copilot解答Leetcode上的题目,并对其表现表示满意。

GitHub否认AI抄袭代码指控

经过多道题目的测试,Copilot成功通过了Leetcode的考核。由于其几乎实时的生成能力,博主认为,AI可能在编写代码方面超越了人类。

然而,有网友质疑Copilot是否在Leetcode数据库上进行了训练,因为生成的注释与Leetcode的模板极为相似。

对此,GitHub回应称,尽管可能有0.1%的直接引用,Copilot生成的代码大多数是原创的。

发布第二天,就有网友质疑GitHub Copilot将免费开源的代码进行了加工,并将其变成了一种盈利工具。

而这些代码本应受到GPL(通用公共许可证)的保护,以防止其在商业项目中被使用。

GitHub否认AI抄袭代码指控

不久后,这一疑虑得到了证实,有网友发现Copilot直接复制了著名的“平方根倒数速算法”。

GitHub否认AI抄袭代码指控

从这个角度来看,Copilot实际上只是将训练集中已有的代码重新组合而已。

我们的AI并不“背诵”代码

然而,GitHub似乎早已做好了回应准备。一位名为Albert Ziegler的团队成员表示,截止到2021年5月7日,他收集了Copilot对Python的453780条建议,这些数据源于300名员工的日常使用。

Albert对这些数据进行了分析,并撰写了一篇详尽的博客进行讨论。

在文章开头,Albert让GitHub Copilot背诵了一篇广为人知的文章,显然,Copilot已经牢牢记住了其内容。

不过,Albert认为记住训练集的内容并不成问题,毕竟他自己也曾背诵诗歌,这并不会影响他在日常交流中的表达。

GitHub否认AI抄袭代码指控

案例分类

类别1:Copilot在某个被采纳的建议之后,可能由于程序员新编写的注释,再次提出一个相似的建议。

Albert认为,这只是重复了之前“成功”的案例,因此将其从问题分析中剔除。

类别2:Copilot可能会生成冗长的、重复的序列。例如,下面这个例子就包含了重复的””

””,最终在训练集中被发现。

GitHub否认AI抄袭代码指控

类别3:Copilot提供类似于自然数、素数、希腊字母表的标准清单建议。有些建议可能有用,但也可能无效。

不过,Albert表示,这些不符合他对“背诵”代码的定义。

GitHub否认AI抄袭代码指控

类别4:在执行一些限制性较大的任务时,Copilot可能会给出常见或普遍的解决方案。

例如,下面的部分可以视为使用BeautifulSoup包解析维基百科列表的标准方法。

Albert提到,训练数据中发现的最佳匹配片段正是使用此类代码来解析不同文章。同样,这也不符合他对“背诵”代码的定义。

GitHub否认AI抄袭代码指控

类别5:最后,这些例子符合Albert对“背诵代码”的看法,至少在这些代码或注释中有一些具体的重叠。

测试结果

GitHub否认AI抄袭代码指控

对于GitHub Copilot的大多数建议,Albert没有发现与训练用代码的明显重叠。在剔除第一类后,得到了185条建议。

在这些案例中,有144个被归入第2至第4类,最后留下41个案例,Albert认为这就是他所称的代码“背诵”。

GitHub Copilot在缺乏具体语境时的引述

在人工标注时挑选出的41个主要案例中,没有一个出现在少于10个不同文件中。大多数(35个案例)出现超过一百次。

有一次,GitHub Copilot建议从一个空文件开始,而在训练期间,它甚至看到了超过700,000次的东西——即GNU通用公共许可证。

GitHub否认AI抄袭代码指控

推断出的分布图显示为一条红线;它在100和1000个匹配之间达到了峰值。

GitHub Copilot主要在一般情况下进行引证

随着时间推移,每个文件变得独一无二。但当GitHub Copilot认为你的文件非常通用时,它会提供解决方案。

在这种情况下,缺乏具体内容的情况下,它更有可能从其他地方引用。

GitHub否认AI抄袭代码指控

当然,软件开发者大多数时间都在复杂代码中,那里的上下文足够独特,GitHub Copilot会提供独特的建议。

相比之下,最初的建议往往较为普通,因为GitHub Copilot无法预测程序的具体功能。

然而,在独立脚本中,适度的上下文通常足以合理推测出用户的意图。

有时,上下文仍然过于普遍,以至于Copilot认为某个熟悉的解决方案是可行的。

GitHub否认AI抄袭代码指控

上面这个例子直接取自被上传的机器人课程内容。

结论

Albert认为,虽然GitHub Copilot有时可以逐字引用代码,但这种情况极为少见,且多数情况下引用的都是常见代码,通常出现在文件开头。

他表示,理想情况下,当建议包含从训练集中复制的片段时,用户界面应明确告知用户其来源。用户可以选择适当的引用或决定不使用该代码。Albert和他的团队将努力实现这一目标。

网友评论

尽管网友们看到GitHub团队在关注“复制粘贴”问题后表示欣慰,但这篇“调查”显然难以令人信服。

“这可能使每个开发者面临风险,而将‘这可能生成GPL代码’的担忧抛给每一个企业中的人。”

“你不能仅凭‘嗯,它们略有不同’来推断‘所以它们不是真的相同的东西’,如果它们实质上相似,就需要被引用。”

GitHub否认AI抄袭代码指控

对于Copilot来说,未来的挑战依然艰巨。