智能校对-人工智能写作开发的现状

编辑:pitaya02        日期:2020-10-13


这个行业中流传着这样一种流言:“程序员将很快失去工作,因为人工智能写作将很快编写出完美的代码。”AI以软件的形式存在,编码者编写了这些强大的软件,如果用他们自己编写的代码代替新一代代码,这将是一个神奇而悲伤的故事。现在我们来看一下软件开发领域中人工智能写作的现状,我们离传奇还差多少?火龙果人工智能写作

有些人说软件开发是一门艺术,有些人说软件开发需要工匠精神,无论哪种说法,软件开发都是创造性的工作,而机器曾经被认为是缺乏创造性的,但随着深度学习技术的发展,人工智能写作在某些创造性领域取得了飞跃发展。火龙果人工智能写作


如今,人工智能写作能绘画:

Trippy Artworks Created by Artificial Neural Networks

智能写作创作:

Musical.ai

智能写作写作:

2017年5月,微软机器人小冰出版了诗集《阳光打碎了玻璃》。2017年,韩国的一家新闻机构也测试了在足球比赛中使用人工智能写作的报道,几秒钟内就能完成。2018,阿里妈妈发布 AI智能写作文案。火龙果人工智能写作


下面是我以最近世界足坛最杰出的球星梅西(蹭了蹭煤老板转会风波的热度)的名字为 AI种子写的一首诗:

觉得这首诗做得好啊,把煤老板的转会风波推到了一个新高度,你怎么看?

AI与编写代码的距离还有多远呢?

上述例子中,大多数都是以深度学习为基础进行创作,而以深度学习技术进行软件开发,主要面临以下几个挑战:

一、难以判断

深度学习是一种监督学习算法,需要大量标注数据,即标注数据的正误。但代码很难被标记为正确或错误的标签。用数字来量化也很困难。而且可以用来训练的标注代码也很少。火龙果人工智能写作


2.低容错率

至于谷歌的猫狗鉴别算法,能有90%可能是很好的,但软件代码有99%都是对的,那可还是编译不通过,软件要求不能有任何差错。与自然语言不同的是,代码对噪音非常敏感。

3.复杂的背景

在软件开发中需要大量的背景知识、需求分析、系统的非功能要求等,如何将这些知识与代码结合起来,对 AI而言,挑战是很大的。

虽然如此,人工智能写作已经开始在软件开发领域取得突破,那么我们来看一下 AI在这个阶段能做什么?

编码辅助

码补是指代码编写过程中的一些辅助功能。比如自动补全代码,代码搜索建议,代码转换等等。AI在这一领域发挥着巨大的作用,想想我写代码时,花了一大半时间去查文档,花了一大半时间去搜索 google和 stackoverflow,人工智能写作可以很好地帮助码农。这一领域中,已有不少初创企业和相关产品。火龙果人工智能写作


TabNine

塔布尼恩是由加拿大四年级学生开发的智能写作代码补全工具,其作者 JacobJackson目前在滑铁卢大学主修计算机科学和组合优化。它支持23种语言,支持五种代码编辑器: VS Code、 SublimeText、 Atom、 Emacs、 Vim。TabNine在 VSCode的扩展商店中被下载了超过万次,获得了5个星座的一致好评。2018年12月,被 Codota收购。

Kite

基特是一家硅谷的创业公司,2014年获得了1700万美元的 A轮融资。Kite提供了对 Python和 JavaScript的智能写作代码补充功能。火龙果人工智能写作


目前 Kite支持下列 IDE:

Codata

成立于2013年,以色列初创企业,融资260万美元。

科多塔是以色列的一家 AI编程助手,专注于 AI帮助程序员编写代码,它基于从在线学习到编程模式,实时推荐最适合程序员的代码。该软件可以无缝连接到程序员的集成开发环境,帮助他们节省时间,减少人为错误。它不仅提供了代码补全,还提供了聚集搜索功能,覆盖了码农喜欢的代码源,比如 github, stackoverflow。

Aroma

脸谱的 Aroma是一个以代码为导向的搜索和推荐工具。它使用了机器学习(或称为 ML)技术来进行代码推荐,目的是减少从大型代码库中获得深刻见解的难度。

直到 Aroma出现,各种原始工具都不能彻底解决这个问题。文件工具的可用性一般都很差,而且已经过时了,而代码搜索工具常常返回无数的匹配结果,用户很难立即从中找到他们习惯的使用模式。使用 Aroma,工程师现在可以很容易地发现公共编码模式,而不必再手工浏览几十段代码,这可以节省大量时间和精力用于日常的开发工作。

标记1:基于特征的搜索,用稀疏矩阵来索引代码

Aroma分析代码语料库为每种类型的 method创建解析树;从解析树中提取关键的结构特征,如相关变量的使用、 method调用等;根据每种 method的特征创建一个稀疏矢量,作为索引矩阵进行检索。

标记2:重排和聚集

用相似度重排候选代码,相似度比较只考虑与查询代码相匹配的部分;迭代重排候选代码,寻找用于生成建议代码的关键 clusters。火龙果人工智能写作


标记3: Intersecting生成代码推荐

使用 cluster中的某个代码作为基准,通过与其他代码的比较迭代,获得公约数的最大值。

Aroma代码推荐相对于传统的代码搜索工具有以下优点:

通过在语法树中执行搜索,您可以找到语法上类似于查询代码的实例,而不需要匹配字符串/标记。删除无关语法结构中突出的匹配代码。把相似的搜索结果自动聚类,产生代码推荐。与未聚类的搜索结果相比,这些建议反映了常用的编码模式并更易于使用。快速到足以实时使用。甚至对于非常大的代码库,几秒钟之内就可以生成建议,而无需事先对模式进行挖掘。核心算法独立于语言。Aroma已经部署到 Hack、 JavaScript、 Python和 Java的内部代码库中。

详细情况请参阅:

https://ai.facebook.com/blog/aroma-ml-for-code-recommendation/

CodeBERT

在 arxiv上,微软公司与哈工大公司联合发表了一篇论文,题目是“CodeBERT: APre-Trained Model for Programming and Natural Languages”,它又一次扩展了 BERT的应用,将 BERT应用于 Python、 PHP、 Java、 JavaScript、 Go、 Ruby等编程语言的代码搜索和生成任务。总体方案仍采用传统的预训练+调整框架,模型规模不大。

作为一个双向 Transformer编码器, BERT在预训练方法上的创新受到了业界和学术界的欢迎,尽管其他大型预训练模型如 ELMo、 GPT等已经能够在许多 NLP任务中提升 SOTA。

但上面提到的模型基本上都是面向自然语言处理的,比如掩蔽语言建模,从来没有标记过学习文本的上下文表示。与之前 Bert的应用场景不同,本文提出了一种双重模式的预训练模型,即同时考虑 NLP任务和 Python、 Java等编程语言。火龙果人工智能写作


具体地说, CodeBERT抓住了自然语言与编程语言之间的语义联系,能够支持自然语言代码搜索等NL-PL理解任务,以及一系列代码生成等生成任务。火龙果人工智能写作


总体方案:预训练语言模型+下游任务微调预训练语言模型:1.25亿参数的NL-PL双模式 Masked Language Modeling和 PL单模式 Replaced Token Detection训练目标预训练模型相结合;训练损失函数为 min (LMLM+ LRTD)。下一步任务自然语言代码搜索:给定NL-PL对,检测模型预测 maskedtoken。笔者将问题简化为 max、 min、 less、 greater四选一,并使用NL-PLProbing方法进行评估。CodeDocument:从代码生成自然语言文档,并使用 smoothedBLEU方法进行评估。培训前数据:210万双模态数据,640万单模态数据。

Python、 Java、 JavaScript、 PHP、 Ruby、 Go等六种编程语言。

简言之, CodeBERT希望解决自然语言到编程语言之间的映射关系。通过这种映射关系,我们可以找到与自然语言相对应的代码,或者直接将自然语言翻译成代码。最后(当然这还得等很长时间)码农不再需要,产品经理直接说想要什么就好了。

详细信息请参阅https://arxiv.org/pdf/2002.08155.pdf。

密码转换

还记得我在德国做 BI的时候,产品开发做了一件事情,就是用 Java重写了一个以前用 C++写过的产品,大公司就是这样一意孤行,尽管功能根本没有改变,但我就是喜欢 Java,因为 Java代表着更高级的生产力。随后 Java被竞争者 O记拒绝了,估计做这一决定的人都不想死了。此时,您需要的是一个自动转换代码的工具。

Facebook Transcoder

https://github.com/facebookresearch/TransCoder

编码转换的问题在于,手工重写不仅费时而且很难找到懂多种编程语言的程序员,基于规则等方法的转换质量很差,最新的无监督神经转换器可以很好地完成特定范围内的编码转换工作。

facebook最新开发的神经转换编译器 TransCoder使代码转换更上一层楼。这个系统能够把代码从一种高级语言,如 c++, Java和 Python,转换为另一种语言。

该系统具有弱监督功能,能够在没有标签的数据集上查找以前未检测到的模式,仅需少量人工监督。研究者们说,这比基于规则数据集的模型效率更高。

TransCoder转换从 Java到 C++的精确度超过九成!

TransCoder是模型初始化,它基于跨语言模型的预先训练,这种训练并不关注编程语言的类型,而只是将表示相同指令的代码片段映射成相同的表示。

TransCoder之所以能够进行跨语言模型的训练,是因为该系统的标记原则侧重于跨语言公共关键字,如“if”、“for”等,以及数字、数学运算符和出现在源代码中的英语字符串。在此基础上,将目标-目标模型与并行训练的目标-目标模型进行耦合,提高了训练质量。

编码生成

编码生成针对特定领域或特定任务的自动编程,即Domain-Specific Automated Programming和Task-Specific Automated Programming (TAP)。目的是使机器能完成简单的编程任务,使开发人员轻松地编程。

这也许是目前最接近替代码农工作的 AI了。

DeepCoder

由微软和剑桥大学共同开发的 DeepCoder是一种计算机算法,它可以自己写代码,也可以用来解决简单的数学问题。这个系统由两部分组成:代码编写算法和潜在代码搜索机制。这一算法发表于2016年11月的论文。

deepCoder使用的技术叫做程序合成(program synthesis),它通过截取软件中已有的代码来生成新的程序。DeepCoder通过学习一系列编码片(code fragment)的输入(inputs)和输出(outputs)数据,自动提取对目标任务有用的代码片。

deepCoder使用一种名为"程序组合"(program synthesis)的方法,它可以通过搜索其他程序的程序代码,从中挑选出合适的程序代码段,并将其组合成运行中的程序,使其顺利地产生所需的结果。实际上,这一步就像很多工程师经常做的那样:在程序问答网站 StackOverflow中搜索合适的程序代码,然后“复制粘贴”它们认为可行的程序代码片段。这与我们前面提到的代码辅助非常相似。火龙果人工智能写作


SketchCode

Airbnb开发了一个工具,可以直接将下面的草图转换成HTML5代码。

但 Airbnb并不开源,有一位大师级的开源代码sketch-code也能做到。

https://github.com/ashnkumar/sketch-code

通过网友的亲测,肯定还不够完美。

文稿生成图

也许还有小伙伴站出来挑战, html也算编程语言?可以写网页就可以写代码吗?别急,看看最新的自然语言模型有多强大!

GPT-3

GPT-3是 OpenAI发布的最新 NLP模型,它使用了高达45 TB的数据容量和1750亿个参数,而一个训练好的模型需要700 G的硬盘空间来存储。全面体现“大力创造奇迹”的特色。GPT-3通过预先训练大量文本,并对特定任务进行微调,从而使该模型的性能在许多 NLP任务和基准中得到显著提高。

最近,一家网站debuild.co/,可以根据GPT-3模型自动生成代码(https://debuild.co/)。本网站注册后,用户只需用英语描述需求,前端代码自动生成。

GPT3正在成为 AI的一个新架构,一个庞大的新型图形数据库,能够生成大量有意义的章节,代码可以通过自我监督学习;过去代码生成很难超过50-60行,现在有望突破;过去自动生成代码难以通过测试,现在也有望突破。

密码检查

在现代软件开发中,代码审查是必不可少的一环,它面临着许多挑战

软件系统变得越来越复杂:模块越多,执行路径越多,状态空间越大,逐渐超出了手工检测的能力范围,资源有限,时间和人力不足,码农们对996和007组专家的需求不足

面对这样的挑战,利用人工智能写作提高代码审查效率是一种很好的方法。火龙果人工智能校对

AWS CodeGuru Reviewer

代码库 Reviewer是 AWS提供的代码检视服务,它可以发现九种主要的代码质量问题:

AWS最佳实践:正确使用 AWS API (例如:轮询、分页) Java最佳实践:正确使用常用 Java语言和库特性并发:检测导致缺少的同步而导致功能不正确,或导致性能问题。死锁:检查并发线程之间的协调资源泄漏:正确处理资源(例如,释放数据库连接)敏感信息泄漏:个人身份信息泄漏(例如,记录信用卡详细信息)常见的代码错误:难以发现的缺陷,例如,未为每次 Lambda调用创建客户端代码克隆:识别可集成的重复代码,以改进代码可维护性输入验证:检查格式错误的数据或来自不可信来源的恶意数据

DeepCodeDeepCode是一种静态代码监控工具(和前面提到的 DeepCoder不能混淆),它利用机器学习来分析代码库中的安全缺陷和潜在错误,并了解代码背后的真正意图。德epCode是瑞士的 startup,其成员主要来自 ETH。相对于其它的 CodeReview AI,它不仅能发现语法错误,而且还能判断出代码的意图,从而识别出更多的重要错误和漏洞。火龙果人工智能校对

DeepCode实现了一种在到达关键安全级别之前分析用户输入处理的方法。所以,如果没有进行安全验证或清除,任何数据从一点移到另一点时,该工具都会将其标记为“污染”,并发出警告。这个工具可以标记的问题包括跨站点脚本, SQL注入威胁,远程代码执行,以及路径穿越攻击等等。

迅速准确地理解代码的真正意图,精确地发现语法错误和漏洞

培训过程: DeepCode的模型培训分为三个步骤:

Step1:用各种编程语言编写的代码进行解析,生成解析树;Step2:通过一个线性复杂度的数据求解器在几秒钟内完成代码库分析;Step3:使用 ML模型理解代码结构及其背后的意图。

策略简明扼要、覆盖广泛和技术优势是 DeepCode的优势所在:

策略重点简洁:让机器 code review能够提供尽可能多、更广泛和深入的代码建议;缺陷检测的范围很广:其他现有静态分析工具只有 DeepCode的十分之一; checkers/rules/patterns可以快速兼容其他工具;可以与 GitHub, GitLab集成。程序性分析、 AI算法、特征工程和大数据等多种能力相互补充,形成了独特的技术优势:持续从开放源码项目在线学习的能力;与编程语言无关的平台,在几周内就能添加新的语言;无需编译,大型代码库平均分析时间只有5秒(其他方案通常需要整夜工作)。火龙果人工智能校对


编码测试

AI在代码测试方面的市场空间最大,通过大量的规则和 AI的组合定制来解决这个问题。

人工智能写作正在改变软件测试:差异性,直观,说明性,自动化…

电脑制图协助 UI测试: AI确保 UI元素具有正确的颜色、位置、大小等,传统手工或基于规则的方法难以自动检测差异,也难以实现自动化; API测试自动化:通过 AI算法,让 API测试自动地自动地产生测试用例: AI可以学习应用程序,理解文档模型的关系和变化,自动地产生用例。测试用例相关性检测:对任何代码进行微小修改,无需重新测试整个代码,通过 AI分析,只运行相关测试。这与推荐系统有关,它推荐了需要运行的测试案例。

AI正逐渐改变整个软件测试领域,它可以大大节省测试时间,提高代码质量,软件测试也正从 DevOps向 AI过渡,从简单的问题发现转向根据上下文寻找根因,从手工测试转向全自动测试。2019年的软件测试市场是126亿,2024年是288亿。

有很多工具可以使用人工智能写作辅助软件进行测试,下面是一些比较有特色的工具:

Mabl

在机器学习基础上开发的第一个商用智能写作软件测试工具,利用机器学习技术,开创了软件测试的智能写作化先河。发展 mabl的是一个在波士顿的初创公司。创立者之一是丹·贝尔彻和伊齐·阿泽里。二兄弟都是连续的企业家。2014年,他们创立了 Stack Driver公司。该公司为云平台提供监控和诊断服务,这些应用包括谷歌 GCP、亚马逊 AWS等。随后该公司被谷歌收购,两人也加入了谷歌的行列。在2017年初,他们重新开始创业,并创建了 mabl。成立之初,公司获得了 Charles RiverVentures和 Amplify Partners的首轮投资以及1000万美元的首轮投资。在一年之内,就推出了面向商业市场的 mabl产品(https://www.mabl.com/)。通过 SaaS (software-as-a-service)的方式, mabl为用户提供软件测试服务。整个软件测试自动化,无需人工干预。测试的创建和执行自动,测试结果的分析自动,并可根据需求的变化自动调整和维护测试。火龙果人工智能校对


mabl的口号是那么响亮: You write code, mabl tests (您编写代码, mabl进行测试)。

Mabl使用了机器学习技术,它可以自动创建和执行测试(Tests),自动分析测试结果,同时还可以根据需求的变化自动调整和维护测试。这就是说, mabl使整个软件测试过程自动化。通过 mabl,软件测试不再需要人的参与。火龙果人工智能校对


mabl脱离了自动化软件测试的范畴,开创了智能写作软件测试(intelligent testing)的先河。

机器人学为用户体验带来质的飞跃,它提供以下功能:

非脚本测试:测试人员不需要创建和维护测试案例。该测试由机器学习算法自主完成,不需要测试用例。没有基础设施: mabl通过 SaaS提供服务,用户不需要安装和维护任何本地基础设施。AutoSettingTest:当产品更改时,机器学习算法会自动匹配更改。自动化分析结果: mabl自动分析结果,找出问题的原因。第三方集成: mabl与第三方工具如 Jenkins, Slack, Jira可以很好地集成。

提斯·阿

AI公司(前称 Appdiff)被看作是向 Selenium和 Appium中添加 AI大脑的工具,它以一种简单的类似 Cucumber的 BDD语法格式定义测试。AI动态地识别任何应用程序中的屏幕和元素,并自动地驱动应用程序执行测试用例。这本书是由 JustinLiu和 JasonArbon创作的。

Gradient Ventures是一家专注于人工智能写作的风险投资公司,该公司刚刚获得了 Gradient Ventures领投的 A轮1,100万美元投资。e.ve ntur es、 Uncork Capital和 Zetta Venture Partners也参与了这一投资。Test.ai成立于2015年,迄今已筹资1760万美元。火龙果人工智能校对


这家公司的技术不仅仅是利用人工智能写作来缩短应用测试所需的时间;当开发人员准备一系列场景进行测试时,它可以帮助减少冗长的流程。ai已经对他们的机器人进行了“数以千计的应用程序”的培训,以帮助它理解应用程序是什么样子,以及它们通常是什么样子

diffblue

在代码自动化方面, DiffBlue是一个非常有用且简单的平台。DiffBlue有几个核心用途——测试编写、 bug定位、重构代码,以及发现和替换缺陷的能力——通过使用自动化来完成。Diffblue致力于使用 AI技术为代码提供数字模型,目前正在开发三个产品,分别是用于发现 bug、编写测试代码的测试产品、自动标记 bug并测试 bug的安全产品、以及自动修改不合理代码或过时代码的重构产品。火龙果人工智能校对


在 AI辅助自动化测试领域,还有许多产品,这里不一一赘述,它们包括:

ai AI辅助移动应用程序自动化测试

基于地图和真实用户行为分析, AppvanceIQ利用机器学习和认知能力来自动生成自动化测试脚本

通过 AI和深度学习技术, EggplantAI可以从界面中发现缺陷,自动生成测试用例,极大地提高测试效率和覆盖率。

SauceLabs使用机器学习的方法来分析测试数据,更好地理解测试行为,并积极地改善测试自动化。

Sealights使用机器学习技术来分析 SUT的代码和相应的测试,这不仅限于单元测试,也包括系统级别的业务测试和性能测试。这也是基于机器学习的方法来呈现完整的质量数据,帮助我们评估“质量风险”。

技术测试集中在减少不稳定测试(flaky tests)和测试维护上,试图利用机器学习技术加速自动测试的开发、执行和维护。

总的来说,软件测试自动化正朝着更加智能写作化的方向发展。火龙果人工智能校对


概述

机械能代替人吗?AI会抢了码农的饭碗吗?人工智能写作是否具有想象力?

我不能回答这些问题,当马斯克推出他的大脑-机器界面时,我在想, AI和人类的未来会变得更加简单, AI也许不会取代人类,但它将与人类融合,我和我的 AI成对编程,那应该也不错!

世界上第一个中英双语语法校对产品“火龙果智能写作写作”,它利用火龙果智能写作书写技术校对错别字,除了校对错别字外,还可以校对语法、标点等。火龙果智能写作写作


https://www.mypitaya.com火龙果智能写作写作网站


智能写作-现在的写作人工智能的发展是一个怎样的状况?