写点什么

将语言直接翻译成代码,OpenAI 内测 AI 编码器 Codex

  • 2021-08-11
  • 本文字数:3242 字

    阅读完需:约 11 分钟

将语言直接翻译成代码,OpenAI内测AI编码器Codex

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“添加页面中的人像”再粘贴 URL。这时候剪影就出现在屏幕上,之后 Brockman 用“把人像放大一些”命令放大了图像,又通过“使用左右箭头键控制图像位置”建立起位置控制功能。



整个过程非常丝滑,人像开始在屏幕上晃来晃去,但很快遇到了新问题:图像会溜出屏幕外、彻底消失。为了阻止这种情况,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 应用案例供大家参考。”

2021-08-11 14:084715

评论 1 条评论

发布
用户头像
Awsome!
2021-08-16 00:49
回复
没有更多了
发现更多内容

如何理解 Java 多线程

HoneyMoose

【LeetCode】学生考勤Java题解

Albert

算法 LeetCode 8月日更

使用账号密码来操作github? NO!

程序那些事

Java GitHub 程序那些事

linux工具之TC

webrtc developer

多张图片的形式

冇先生

老板不让用 AFNetworking,我该怎么办?

神策技术社区

大前端 后端 数据 数据采集

EMQ 映云科技成为开源项目 Vue.js 定期捐赠者

EMQ映云科技

Java 开源 大前端 emq

大一一个学期学多少编程算正常?

沉默王二

编程

千亿级模型在离线一致性保障方案详解

百度Geek说

百度 测试 后端

机会!痛点!难点!中国游戏泛娱乐企业出海攻略全解析

环信

游戏出海 直播 社交APP出海 泛娱乐社交

LeetCode题解:217. 存在重复元素,哈希表,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

给Arm生态添把火,腾讯Kona JDK Arm架构优化实践

腾源会

开源 腾讯 jdk 腾讯开源 KonaJDK

去哪儿网数据同步平台技术演进与实践

Qunar技术沙龙

数据库 数据中台 ES 数据同步 Kafk

堡垒机品牌就认行云管家!为什么呢?

行云管家

云计算 系统运维 堡垒机 IT运维 云计算运维

云时代的到来会淘汰运维人员吗?运维工作可以一直做吗?

行云管家

云计算 运维 云服务 IT运维 云时代

如何找到程序崩溃的 “凶手” ?

神策技术社区

数据库 程序员 埋点

前端基础二之css篇

ベ布小禅

8月日更

价值连城 图灵奖得主Yoshua Bengio约书亚·本吉奥的采访 给AI从业者的建议 John 易筋 ARTS 打卡 Week 60

John(易筋)

ARTS 打卡计划

多线程、分布式、高并发都不懂?你拿什么跳槽?

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

webrtc AlrDetector

webrtc developer

底层即真理!Netty+Redis+ZooKeeper解读高并发架构

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

业界良心啊!第五次更新的Spring Cloud Alibaba升级太多内容

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

二本渣渣5面阿里,从准备简历到“直怼”面试官,经历了什么?

Java 程序员 架构 面试 计算机

腾讯WeTest零售行业质量解决方案

WeTest

webrtc Rtp/rtcp (1)

webrtc developer

银行小程序隐私安全如何做?诊疗一体,一步到位

WeTest

从“人工”到“人工智能”,聊一聊本届东京奥运会的AI黑科技

行者AI

MySQL 系列教程之(六)DML 操作:数据的增删改

若尘

数据库 MySQL 数据库 8月日更

centos8 mediasoup 搭建

webrtc developer

WebRTC mediasoup

基于KubeEdge实现中国移动10086客服云边协同平台

华为云原生团队

云计算 开源 运维 边缘计算 边缘技术

太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)

Java 编程 程序员 架构 面试

将语言直接翻译成代码,OpenAI内测AI编码器Codex_AI&大模型_凌敏_InfoQ精选文章