AI 编程工具 GitHub Copilot 之后,又一可能“让程序员失业”的 AI 编程工具 Codex 来了。

OpenAI 升级 AI 编码器 Codex 并启动内测

当地时间 8 月 10 日,人工智能研究公司 OpenAI 宣布,旗下的 AI 编码器 Codex 已进行了升级并启动内测。据了解,Codex 最大的亮点在于,它能够将英语直接翻译成代码

在 Codex Demo 中,OpenAI 展示了软件如何使用自然语言构建起简单的网站与基础游戏,以及如何在不同的编程语言之间灵活转译、甚至处理数据科学查询。

也就是说,用户只需要在软件中输入英文命令,例如“创建一个侧面有菜单、顶部有标题的网页”,Codex 就能将其翻译为代码。

OpenAI 公司 CTO 兼联合创始人 Greg Brockman 在接受采访中表示,“我们认为,这将是一款能够放大程序员力量的重要工具。编程主要分为两个问题,第一个问题是认真思考问题并尝试理解,第二个问题是把这些小片段与现有代码映射起来,包括库、函数以及 API。”在他看来,这第二个问题枯燥乏味,但这却正好是 Codex 的专长。“它的出现,让专业程序员们告别了不少令人头痛的苦差事。”

OpenAI 对 Codex 全面改变编程与计算方式的潜力颇有信心。Brockman 认为,Codex 的出现有望解决美国国内程序员短缺的问题,而 Codex 项目负责人 Wojciech Zaremba 则将其视为编码历史演变的下一阶段。

今年 6 月末,微软、OpenAI、GitHub 联合出品了自动代码生成 AI Copilot,Copilot 能够在用户输入过程中随时提供补全代码行内容的建议。与 Copilot 相比,Codex 的优势更为明显,它不仅能够补全代码,还可以生成新的代码。

不过当前,Codex 仍存在一些问题,比如它需要体验者保持一定耐心才能得出成果,因为有些时候,Codex 并不能理解用户的指令。

Codex 的实际使用感受如何?

虽然 Codex 听起来很令人兴奋,但在接受广大程序员们的实际检测之前,仍很难判断其功能的完整范围。

根据 TheVerge 的报道,Brockman 与 Zaremba 在线上演示了 Codex,用 Codex 创建了一个简单的网站,并开发出一款基础游戏。

整个过程非常丝滑,人像开始在屏幕上晃来晃去,但很快遇到了新问题:图像会溜出屏幕外、彻底消失。为了阻止这种情况,Brockman 又向计算机下达了额外的指令“反复检查人像是否超出页面,如果超出,将图像放回页面内。”这样图像确实就不会伸出页面之外了。不过这意味着,对于更复杂的功能来说,指定一定要十分精确才能避免错误。

虽然图像回到了页面里,但 Codex 同时改变了图像的宽度,整个剪影如同是被压扁在屏幕上,Brockman 和 Zermba 也解释不了 Codex 为什么要这么做,Brockman 表示“有时候 Codex 不太能理解用户的指令。”他又尝试了几次,终于想出了让图像既不出屏、也不扭曲的办法。

整个演示效果不错,但也暴露出了这款程序的局限性。当前,Codex 还没办法直接读懂人类的意思、再把每条命令转换成完美代码。相反,人们需要深思熟虑再加反复试验,才能让它正常起效。

也就是说,Codex 不可能在一夜之间把业余人士变成专业程序员,不过它的使用门槛确实比其他编程语言更低。

利用 GPT-3 来创建 Codex

据了解,Codex 以 OpenAI 自家语言生成模型 GPT-3 为基础,这套模型使用了大量互联网素材进行训练,从而具备一定的文字生成与解析能力。

稍早前,OpenAI 的研究人员曾在一篇论文中揭示了 Codex 的详细信息,并解释了 OpenAI 的科学家们设法重新利用他们的旗舰语言模型 GPT-3 来创建 Codex 的过程。

“没有免费的午餐”定理

Codex 是 GPT-3 的下一代产物。一般来说,模型的学习能力随着参数的增加而增加。GPT-3 有 1750 亿个参数,比它的前身 GPT-2(15 亿个参数)多了两个数量级。GPT-3 的训练数据集超过 600GB,比 GPT-2 的训练数据集大 50 多倍。

除了规模上的增长外,GPT-3 的主要创新是“few-shot 学习”,即执行没有经过训练的任务的能力。

根据 OpenAI 的新论文,各种版本的 GPT-3 都无法解决用于评估 Codex 的编码问题。也就是说,GPT-3 的训练数据集中没有编码样本,我们不能期望它能够编码。

但是,OpenAI 的科学家们也测试了 GPT-J,一个在 the Pile 上训练的 60 亿个参数的模型。the Pile 是一个 800GB 的数据集,其中包括 95GB 的 GitHub 和 32GB 的 StackExchange 数据。GPT-J 解决了 11.4% 的编码问题。Codex 是 GPT-3 120 亿个参数的一个版本,在 GitHub 的 159GB 代码示例上进行了微调,解决了 28.8% 的问题。Codex 的另一个版本 Codex- s,通过监督学习进行了优化,将性能提高到了 37.7%(其他 GPT 和 Codex 模型都是通过无监督学习进行训练的)。

Codex 可以解决大量的编码挑战,使用监督学习 (Codex-S) 微调的模型版本进一步提高了性能。

Codex 证明了机器学习仍然受制于“没有免费的午餐”定理(NFL),这意味着泛化是以牺牲性能为代价的。换句话说,当机器学习模型旨在解决一个特定问题时,它们会更加准确;另一方面,当他们的问题域扩大时,他们的表现就会下降。

Codex 可以以较差的自然语言处理能力为代价,高精度地执行一项专门任务(将功能描述和签名转换为源代码)。另一方面,GPT-3 是一种通用语言模型,它可以生成关于许多主题(包括复杂的编程概念)的像样的文本,但不能编写一行代码。

生成与理解代码

OpenAI 的科学家们在论文中表示,Codex“训练样本效率不高”,并且“即使是经验丰富的开发人员,在他们的职业生涯中也不会遇到这么多代码”。

他们进一步补充说,“一个完成了计算机科学入门课程的优秀学生,预计能够解决比 Codex-12B 更大比例的问题。”“我们从 Codex 中对令牌进行抽样,直到遇到以下停止序列之一:’ nclass ‘, ‘ ndef ‘, ‘ n# ‘, ‘ nif ‘,或’ nprint ‘,因为模型将继续生成其他函数或语句。”

这意味着 Codex 将盲目地继续生成代码,即使它已经完成了解决提示中所述问题的部分。

当你想要解决反复出现的简单问题时,这种方案非常有效。但是当你缩小并试图编写一个大型程序来解决一个必须通过多个步骤来解决的问题时,Codex 的局限性就变得明显了。

OpenAI 的科学家们发现,随着功能描述中组件数量的增加,模型的性能呈指数级下降。

研究人员在他们的论文中写道:“这种行为不是人类程序员的特征,如果一个人能够正确地为一个长度为 2 的链执行程序,那么他就应该能够正确地为一个任意长度的链执行程序。”

OpenAI 的 Codex 无法解决需要综合多个组件的编码问题

论文也进一步暴露了 Codex 对程序结构和代码缺乏理解。“Codex 可以推荐语法不正确或未定义的代码,可以调用未定义或超出代码库范围的函数、变量和属性”。实际上,这意味着在某些情况下,即使它们并不适合在一起,机器学习模型会将之前见过的不同代码片段拼接在一起。

在论文中,研究人员还讨论了 Codex 中的“错位”问题,即该模型可以解决一个特定的问题,但由于各种错误而不能这样做。研究人员警告说,如果你的代码包含微妙的错误,Codex 可能“故意”建议代码表面上看起来很好,但实际上是不正确的。

OpenAI 的科学家观察到,在目前的状态下,Codex“可能会通过提高程序员的生产力,在一定程度上降低生产软件的成本”,但它不会取代软件开发人员经常做的其他任务,例如“与同事协商,编写设计规范,并升级现有的软件堆栈。”

将 Codex 误认为程序员也会导致“过度依赖”,即程序员盲目地批准模型生成的任何代码,而没有对其进行修改。鉴于 Codex 可能犯的明显和微妙的错误,忽视这一威胁可能会带来质量和安全风险。“安全使用 Codex 等代码生成系统需要人工监督和警惕,”OpenAI 的研究人员在他们的论文中警告说。

值得一提的是,如果能够获得成功,Codex 不仅会成为程序员们的好帮手,也有望成为用户与计算机之间的全新界面。

OpenAI 公司指出,他们通过测试确定 Codex 不仅能够控制 Word,也完全可以操作 Spotify 及谷歌日历等其他程序。Brockman 总结道,虽然目前的 Word 演示只是一种概念验证,但微软已经对 Codex 的表现抱有浓厚兴趣。“总体来讲,微软对这套模型颇为关注,未来应该会有更多 Codex 应用案例供大家参考。”

本文文字及图片出自 InfoQ

余下全文(1/3)
分享这篇文章:

请关注我们:

发表评论

邮箱地址不会被公开。 必填项已用*标注