AI每周:机器编程工具的承诺和限制
机器编程,自动开发和维护软件,由AI变得超级增压。Microsoft在其建立开发人员会议期间,Microsoft在Power Apps中详细说明了Openai的GPT-3语言模型的新功能,以帮助人们选择公式。英特尔的ControlFlag可以自主地检测代码中的错误。Facebook的Transcoder将代码从一个编程语言转换为另一个编程语言。
计算机编程的应用范围巨大。随着计算机变得无处不在,对质量代码的需求使得一个越来越多的有抱负的程序员对该职业。经过多年的学习才能熟练编码,专家学会将摘要转换为具体,可执行程序。但他们花费了大部分工作时间没有编程。根据剑桥大学的一项研究,至少有一半的开发人员的努力是花费调试,该软件行业每年估计为3120亿美元。
据英特尔机器编程打字的主要AI科学家Justin Gottschlich称,AI-Powered Code的建议和审查工具承诺削减开发成本,同时允许编码人员专注于更加创造性,更重复的任务。GOTTSCHLICH在ControlFlag的工作中担保了对ControlFlag的作品,这些工作包括机器学习,正式方法,编程语言和编译器来检测正常编码模式,识别可能导致错误的代码中的异常。
“在机器学习或基于AI的编程系统之前,程序员有很多工具,可以帮助他们更富有成效,生产逻辑错误更少的代码,提高软件的性能,等等。然而,几乎所有这些系统都是“基于规则”,“Gottschlich通过电子邮件告诉VentureBeat。“虽然有用的虽然有用的规则,基于规则的系统在它们被编程到它们中的规则中具有本质上的范围。因此,如果发生新的事情,系统需要由人类更新。此外,这些基于规则的系统始终容易出现人为错误,以创建在其中编码的规则。例如,程序员可能会意外创建规则以查找某种类型的错误,但错误地定义了要查找的规则。规则系统中的这种隐藏错误可能永远无法被禁止。“
GOTTSCHLICH断言,基于AI的系统提供了对Yesteryear的基于规则的系统的好处,因为AI可以以无人监督的方式自行学习,使其能够借鉴大规模的代码数据库。通过无监督的学习,算法是“未知”数据,为此存在先前定义的标签。系统必须通过处理它来学习其结构来教授自身来对数据进行分类。
例如,ControlFlag接受了超过10亿未标记的代码线,以确定编程语言的风格变化。至于Transcoder,它通过分析包含超过280万个存储库的GitHub语料库来学习在C ++,Java和Python之间进行翻译。Microsoft在DataSet上培训了1300万工作项目和来自AzureDevops和Github存储库的47,000名开发人员的错误的错误发现程序。和代码审查平台DeepCode的算法是使用数十亿行从公共开源项目捕获的数十亿行进行教授。
代码与增强
当然,可以从整个布料与增强程序员的工作流程来生成代码的AI动力编码工具之间存在差异。后者更常见。Tabine(以前的Codota)等初创公司是在Python,C,HTML,Java,Scala,Kotlin和JavaScript中的建议和自动完成脚本的开发平台。 ponicode taps ai检查代码的准确性。Intel的机器推断代码相似性引擎可以确定何时代码执行类似的任务,即使它们使用不同的结构和算法。Deepcode为整个应用程序代码评论提供机器学习动力系统 - Amazon。
“目前,我们看到了很多AI动力助理,使软件工程师能够在他们的工作中获得速度和准确性。而且是比自动化工具更多的助理工具的原因是AI动力自动化尚未达到所需的准确性水平,“Ponicode Ceo Patrick Joubert告诉Venturebeat。“我们的行业仍然很年轻,虽然我们已经可以看到自动化与基于AI的代码生成器的自动化潜力,但我们必须承认自动生成的代码仍然是漂亮的,但整体质量尚未达到正确的标准。虽然一些工程师正在遵循AI动力自动化的未来,但我的团队和我以及许多其他利益相关者都致力于创建今天可以使用的工具。在几年之内,我相信将有足够的工具来涵盖开发生命周期的所有步骤。“
对于joubert,今天的机器编程工具类别最具迷人的类别是自动完成和代码分析。自动完成系统,如Tabnine和Kite,使用AI分析语义,并具有代码语义内容和目的感的代码,自动完成功能。至于SNYK和DeepCode等代码分析工具,他们致力于在代码中查找漏洞,并建议旨在解决它们的操作 - 通常具有令人惊讶的速度和精度。
“当我们看到任何软件的许多泄漏和错误时,包括由领先的跨国公司建造的软件,我们可以同意[软件]行业尚未成熟。由于更大的速度和更高的效率,joubert补充说,AI Powered Coding Tools主要是为了提高开发人员体验并赋予它们授权。“在这些开发人员的福利后面,我相信我们正在允许软件工程师建立工业级软件,其中系统地达到质量,创新和速度......自动完成[特别是]启用软件工程师专注于他们的代码库最复杂的一部分,并删除手动编写长串代码的负担。“
限制
尽管有潜力,但AI供电的代码生成器和编码辅助工具都有其局限性。例如,虽然GitHub单独拥有超过2.5亿代码存储库,但大多数数据都未被撤消。只有几个例子描述了代码所做的代码,对任何无法从未标记数据学习的系统构成特定的挑战。
在努力解决此问题,IBM最近发布了CodeNet,一个1400亿样图标记的数据集,用55 000多行编写了55万行编程语言。该公司声称添加到CodeNet的富注释使其适用于Perse一组任务,而不是专门用于特定编程任务的其他数据集。已经,IBM的研究人员已经使用CodeNet进行了几个实验,包括代码分类,代码相似性评估和代码完成。
“我的猜测是,在未来十年的未来十年中,代码语义理解系统可能是未来十年内最重要的机器编程领域之一,”Joubert说。“它取决于机器编程系统正在应用的域。对于小程序,例如单元测试或回归测试,全程合成器今天是现实。然而,对于较大的程序,目前用于机器编程系统的计算地难以在没有程序员的帮助下生成千万或数百万的代码。“
Boris Paskalev,Cofounder和Deepcode的CEO,呼吁创建几行代码与AI“更多的玩具而不是生产力突破”。虽然自然语言处理这样的技术与文本很好,但由于需要了解的单词和语法的固定限制,他争辩说,代码不一样。
“由于没有正式的软件开发规则,[编程]是一个艺术,需要完全了解代码和开发人员的意图,以产生与预期的内容有关,没有虫子,”Paskalev告诉Venturebeat。“我们进入使用机器学习和神经网络的代码,我们仍然只在轮子阶段的发明...机器学习已经证明是对代码非常有用,但只在它之后通过代码的语义机器学习:确保所有语义事实,变量,转换和逻辑相互关系明确表示并考虑学习模型。“
对于Paskalev的观点来说,最近的研究表明,AI在可以可靠地生成代码之前有一种方法。6月,加州大学的伯克尔大学,芝加哥大学和伊利诺伊大学的研究人员在Urbana-Champaign发布了应用程序,从自然语言规范中发布了代码的基准。该团队在应用程序中测试了几种类型的模型,包括Openai的GPT-2,GPT-3和GPT-3的开源版本,称为GPT-Neo。在实验中,他们发现模型可以学习生成解决问题的代码 - 但没有没有语法错误。大约59%的GPT-3用于介绍问题的解决方案有错误,而最佳性能的模型 - GPT-NEO - 达到了10.15%的准确性。
“在从整块布中生成代码时,突出者首席执行官Dror Weiss告诉Venturebeat,通常会挑战。“用户意图可以通过提供示例,以更高级别的语言或其他方式编写代码来指定自然语言。但在大多数情况下,这种意图不能提供所需行为的完整规范。此外,生成的代码可能跟随不同的路线,而不是开发人员记住。因此,开发人员可能具有挑战性,以判断代码是否完全执行所需的操作。“
Facebook AI研究人员BaptisteRozière和Marie-Anne Lachaux,他们在替代商上工作,同意Tabine的评估。“从非特异性自然语言问题描述中生成正确的代码本质上很难,这些代码可以对应于多个不同的代码片段。他们告诉Venturebeat,更容易完成从更具体且更接近输出代码的输入,如伪代码或代码。“采用的巨大障碍......关于没有人为监督的大量代码的方法是他们需要容易地使用。甚至可以生成具有99%精度的方法的工具也会无法生成数百个功能的工作代码库。它可以加速代码生成过程,但仍然需要人力测试和干预。“
Rozière和Lachaux还指出,围绕代码生成的任务通常比分类任务更难,因为该模型具有很多自由,可以创造许多不同的输出,使得难以控制生成的正确性。此外,与自然语言相比,编程语言对小错误非常敏感。一个字符差异可以改变代码的语义,并使输出错误。
“目前的机器学习算法可能无法概括到不同的问题,以匹配人类性能,以便在没有更大的数据集或更好的无监督的预训练方法的情况下进行编码访谈,”Rozière和Lachaux说。
潜在的好处
Paskalev认为它将至少五到十年,直到自然语言处理使开发人员能够从简单的描述中创建“有意义的组件”甚至整个应用程序。但Gottschlich更乐观。他指出,AI动力的编码工具在编写代码中不仅仅是有价值的,而且还涉及较低悬挂的果实,如升级现有代码。例如,将现有的代码库迁移到现代或更高效的语言,例如Java或C ++,需要在源语言和目标语言中的专业知识 - 并且通常昂贵。澳大利亚英联邦银行在五年内花费了7.5亿美元,将其从COBOL转换为Java。
“深度学习已经使我们能够涵盖较小的任务,重复和冗余的任务,这些任务是软件工程师的例程。今天,AI可以从繁琐的任务中自由软件工程师减慢他们减慢并降低他们的创造力,“Gottschlich说。“在创造,创新和设计软件的最复杂的部分时,人类的思想仍然远远较高。使他们能够增加这些令人兴奋的速度,我相信利用当今机器学习力量最有趣的方式。“
joubert和weiss说,机器编程的潜在商业价值也无法忽视。估计有19%至23%的软件开发项目失败,统计到几十年来持久地持有稳定。Standish Group发现“挑战”项目 - 即,未能达到范围,时间或预算期望的人 - 占软件项目的约52%。通常,缺乏用户参与和明确的要求是责备错过的基准。
“我们看到了一系列使用AI的新工具来增强遗留码,并帮助现有资产达到工业级标准。我们可以提升开发人员遗留码管理工作流程,并成为在软件行业过去50年来减少建立的技术债务水平的一部分,“Joubert说。“开发人员必须用行编写和读取代码行的日子已经消失。我很高兴看到软件开发生命周期中的其他步骤是如何转换的,并且如何达到达到风筝或SNYK的同一水平。利用AI建立高效,一定用途,经过测试,安全和记录的代码,这将是深刻的改变软件公司可以创造增量价值和创新的方式。“
从Weiss'的角度来看,AI动力编码工具可以减少开发人员之间的“成本昂贵”的交互,如Q&A会话和重复的代码审查反馈,同时缩短了项目换行过程。“[这些]工具使企业的所有开发人员更好。他们采取了组织的集体代码智能,并在开发时间内提供给所有开发人员。这允许团队中的任何开发人员在重量上发布,“他说。
对于AI覆盖范围,向Kyle Wiggers发送新闻提示 - 并务必订阅AI每周时事通讯并将我们的AI频道,机器提供书签。
谢谢阅读,
凯尔摇摆
AI员工作家