AI程序员GitHub Copilot,生成代码有侵权风险

AI 编程是人们对人工智能的一大期望,现在的 AI 编程技术虽然已经惠及了许多不会编程的普通用户,但还远没有达到满足人们预期的程度,一大痛点在于:AI如何灵活处理程序员的需求,而非进行机械地记忆与复制粘贴代码。这不,微软、GitHub、OpenAI 三方联手发布了人工智能代码建议方案——GitHub Copilot,可以在程序员编码的时候自动推荐或生成代码供其使用,程序员再也不用因为敲代码而加班了!

1.GitHub Copilot究竟是什么?

简单来说,GitHub Copilot 可以视为一位与开发者协作编写代码的虚拟程序员。它可以根据当前代码中已有的字符串、注释、函数名亦或是代码上下文语义,自动生产一行或多行代码或建议,供程序员选择。随着程序员接受或拒绝建议,该模型会随着时间的推移,不断地学习且变得更加智能与复杂。在它的帮助下开发者用能更少的时间更快地编写代码。

500

Copilot根据注释自动填充代码

GitHub是微软2018年以75亿美元收购的全球知名代码托管平台,因此Copilot拥有了可供训练的TB级的公共代码。微软在2019年向非营利人工智能研究机构OpenAI投资10亿美元,用于开发 AGI(通用人工智能)平台。此次 GitHub Copilot V0.1版发布,就是三方合力研发的重大成果之一。

Copilot建立在OpenAI全新的Codex算法之上,Codex是先进AI语言模型GPT-3的一种延伸版本,该模型接受了从GitHub中提取的TB级公开源代码和英语自然语言的训练,因此它能同时理解编程语言和人类语言。在Azure云计算能力和内部多重安全机制的辅助下,Copilot可以做到分析文档中的字符串、注释、函数名称以及代码本身,从而生成新的安全、高质量的代码。目前Copilot支持几种热门编程语言:Python、JavaScript、TypeScript、Ruby和Go。目前已有少量GitHub用户收到试用邀请,在Visual Studio Code中可以启用Copilot扩展。

至于Copilot的编程水平如何,有人把它拉去做LeetCode的题库,它每次都能实时的生成可以通过LeetCode测试的代码,这种好的过分的成绩让人怀疑Copilot已经在LeetCode数据库上进行过训练。而微软公布的一项基准测试结果表明,以一组在开源存储库中具有良好覆盖率的Python函数为测试对象,在清除函数体之后,使用GitHub Copilot来填充代码。该模型在第一次尝试时正确率达43%,经过10次的尝试之后,正确率提升到了57%。而GitHub的员工在内部试用后多数人给出了将保留开启GitHub Copilot提示的正面评价。

GitHub则表示GitHub Copilot建议的代码并不完美,有时候它提供的代码甚至毫无意义。在开发过程中,开发者仍然是主导,对它建议的代码要像任何其他代码一样经过仔细测试和审查。

500

图注:GitHub Copilot工作原理

2.抄袭代码

对于GitHub Copilot是否会直接复制代码的问题,GitHub表示“只有0.1%的情况下,GitHub Copilot 提供的代码建议中可能包含一些来自训练集的字符或片段。”

但是,有网友公布了他的发现:让 GitHub Copilot 生成快速平方根倒数算法(Fast Inverse Square Root),结果代码竟与《雷神之锤 3》中那段传奇代码一模一样,连那句著名的“What the fuck?”注释也抄了下来!

快速平方根倒数算法也称为平方根倒数速算法,这个算法可以高效的输出浮点数的对应近似值,极大得减轻了3D图像演算的压力。此算法因在《雷神之锤3》源代码中被引用时连开发者也看不懂其中一个神奇的常数“0x5f3759df”的取值原理,留下了那句著名的吐槽而被人们所熟知。如此一来,GitHub Copilot抄袭代码成了“真·雷神之锤”。

因此人们对于使用GitHub Copilot开发是否更容易导致侵权,并因此引起的版权纠纷的责任划分有了更多的疑虑。

500

图注:GitHub Copilot完全复制了《雷神之锤3》的著名代码

3.有侵权风险

在讨论GitHub Copilot侵权问题前,我们需要先了解一个概念:GPL(GNU通用公共许可证),它是自由软件和开源软件中使用最广泛的许可协议。最初由理查德·斯托曼为GNU计划而撰写,目前最新版本为第3版。GPL定义了自由软件:以任何目的运行此程序的自由;再发行复制件的自由;改进此程序,并公开发布改进的自由。它通过斯托曼发明的Copyleft的法律机制实现,要求任何包含该开源许可证的衍生作品,即使仅有几行代码,也必须免费提供全部源代码以及修改和分发它们的权利。

在此基础上,就产生了一个巨大争议:GitHub Copilot使用了大量遵循GPL协议的代码用于训练,那么机器学习系统产生的作品,甚至机器学习系统本身,都算是GPL协议中规定的衍生作品吗?

长期关注版权保护问题以及开源和自由软件的Julia Reda坚定的认为GitHub Copilot 并未侵犯开发者的版权。她指出,简单地阅读和处理信息并不需要版权许可。举个例子,如果你去书店,从书架上拿一本书开始阅读,在这个过程中你是没有侵犯任何版权的,而人工智能这类数字技术的训练过程就是如此。她表示:“版权和数字技术之间的确因此会有许多冲突,所幸政策制定者和法院早就意识到:如果每个技术副本都需要许可,那么数字技术将完全无法发展使用。”

甚至,Julia Reda 还认为机器自动生成的代码也不能视为衍生作品。首先,认为即使复制受版权保护作品的最小摘录也构成侵犯版权,这很不合理。如果两个或多个开发人员在各自的程序中使用相同的基本代码,岂不是会产生无穷无尽的争议?其次,版权法只适用于智力创作——没有创作者,就没有作品。也就是说像 GitHub Copilot 这样的机器生成代码根本不符合版权保护的条件,因此也并不是衍生作品。

500

图注:Julia Reda为GitHub Copilot辩护

但是如果GitHub Copilot自动生成的代码不被视为衍生作品,那么对于开发者利用GitHub Copilot将本来是遵循开源协议的代码“清洗”成不用遵守任何协议的代码,由此产生的版权纠纷,责任人究竟是付费使用GitHub Copilot软件开发者呢,还是GitHub Copilot的开发商GitHub和微软呢?

由于GitHub Copilot要在未来扩展为付费服务。支持开源的人们纷纷谴责GitHub,他们认为利用了大量开源资源开发的GitHub Copilot本身就应该是一个开源项目。现在本应开源的GitHub Copilot反而可能成为将开源代码协议“清洗”掉的帮凶。支持开源的开发者们的劳动成果在AI程序员的搬运之下反而变成了大企业的赚钱工具。

对于这些质疑,GitHub的CEO回应:我们正在构建一个源跟踪器,避免在输出中直接引用训练数据,也帮助用户对它提出的建议做出良好的实时决策。

4.前途远大

让AI学会写程序——直接用自然语言描述想干什么,AI就能自动生成相应的程序。现有的 技术显然还远达不到这种预期。评判一个AI系统是否具有“组合泛化”(Compositional Generalization)的能力就是评价AI能力高低的关键。

通俗地说,就是AI程序员是否具备“举一反三”的能力:能够将已知的复杂对象(程序)解构为多个已知简单对象的组合,并据此理解和生成这些已知简单对象的未知复杂组合。以往的深度学习模型的特长更多在于直接记忆与模仿而缺乏组合泛化能力,一旦新问题超出训练集准确率就会降到个位数。

从GitHub Copilot的表现来看,这种新的人工智能是具有一定的组合泛化能力的,当前的GitHub Copilot仅是V0.1版,尚处于技术预览版阶段,应用起来虽然还不是太过完美,但功能的确强大。这仍然是人工智能领域的一项重大的突破。你可以在https://copilot.github.com 申请体验。

站务

最近更新的专栏

全部专栏