产品
解决方案
文档与社区
权益中心
定价
云市场
合作伙伴
支持与服务
了解阿里云
备案
控制台
开发者社区
首页
探索云世界
探索云世界
云上快速入门,热门云上应用快速查找
了解更多
问产品
动手实践
考认证
TIANCHI大赛
活动广场
活动广场
丰富的线上&线下活动,深入探索云世界
任务中心
做任务,得社区积分和周边
高校计划
让每位学生受益于普惠算力
训练营
资深技术专家手把手带教
话题
畅聊无限,分享你的技术见解
开发者评测
最真实的开发者用云体验
乘风者计划
让创作激发创新
阿里云MVP
遇见技术追梦人
直播
技术交流,直击现场
下载
下载
海量开发者使用工具、手册,免费下载
镜像站
极速、全面、稳定、安全的开源镜像
技术资料
开发手册、白皮书、案例集等实战精华
插件
为开发者定制的Chrome浏览器插件
探索云世界
新手上云
云上应用构建
云上数据管理
云上探索人工智能
云计算
弹性计算
无影
存储
网络
倚天
云原生
容器
serverless
中间件
微服务
可观测
消息队列
数据库
关系型数据库
NoSQL数据库
数据仓库
数据管理工具
PolarDB开源
向量数据库
热门
Modelscope模型即服务
弹性计算
云原生
数据库
物联网
云效DevOps
龙蜥操作系统
平头哥
钉钉开放平台
大数据
大数据计算
实时数仓Hologres
实时计算Flink
E-MapReduce
DataWorks
Elasticsearch
机器学习平台PAI
智能搜索推荐
人工智能
机器学习平台PAI
视觉智能开放平台
智能语音交互
自然语言处理
多模态模型
pythonsdk
通用模型
开发与运维
云效DevOps
钉钉宜搭
支持服务
镜像站
码上公益
开发者社区
机器之心
文章
正文
首个用于工业开发的自动代码生成系统,精巧高效还入选了顶会
2023-05-17
151
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和 《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
简介:
首个用于工业开发的自动代码生成系统,精巧高效还入选了顶会
北京大学李戈教授团队与阿里巴巴大淘宝团队的研究者,共同完成了为淘系前端生成业务代码的模型,这是首个在工业开发环境中被采用的代码生成系统。
代码生成,即希望机器能像人一样将一些自然逻辑,用形式化的方式,或者说代码表达出来,这样的能力非常令人振奋,同样也充满了困难。目前尽管深度学习非常强大,但即使是百亿级的 Transformer,仍然在这个任务上做的不尽人意。而本文提出的模型,第一次真正在工业开发场景中,帮助用户快速生成高效的代码。
本工作已被计算机软件工程顶会 ESEC/FSE 2022 Industry Track 接收,并且已经在阿里巴巴的 BizCook 平台应用。据我们所知,阿里前端智能化小组的核心团队 F(x)Team,以及他们开发的 imgcook.com 和 BizCook 设计生产一体化业务交付系统,是第一个在工业开发环境中被采用的领域代码生成系统。已经在阿里巴巴大淘宝技术营销和策略前台技术团队落地,并应用在阿里巴巴大促业务平台方舟的大促产品化项目中,极大提升了业务交付效率。
论文地址:
https://arxiv.org/abs/2208.10091
一、本论文做了什么
自动代码生成是指根据自然语言的功能描述来生成代码。代码生成技术可以提高软件开发的自动化水平,减少软件开发人员的工作量,从而有效地提高软件开发和维护的效率和质量。因此, 在近些年来自动代码生成得到了越来越多的关注。
本工作的应用场景是阿里巴巴的 BizCook 平台,它是根据淘宝的业务特点定制的前端开发平台。这个系统涵盖了前端开发全过程的主要阶段,包括需求、设计、编码和测试,旨在开发过程中引入智能方法,提高开发效率。其中,一个重要的探索方向是根据需求文档和设计草稿生成代码,本文提出的模型主要尝试解决这个问题。
在探索这个代码生成任务之前,首先我们要明确,在前端开发中,大部分的前端代码都属于以下三类。
(一) 用户界面代码,它们用于控制用户界面元素的布局、风格等,如文本区的位置和按钮的颜色。
(二) 业务逻辑代码,它们用于控制 UI 元素的显示内容,如文本区或按钮上的文本内容。
(三) 控制流代码,它们用于控制元素的点击或其他行为,如按钮的点击事件。
在这三类中,用户界面代码之前已经有比较不错的工作,这部分代码与设计稿密切相关,我们已经开发了一个名为 imgcook 的工具,可以直接从 Sketch、Photoshop 和 Figma 设计稿中生成用户界面代码。
因为业务逻辑代码在前端代码中占很大的比例,而且没有控制流代码那么复杂,所以在 imgcook 的基础上,本文想把 BizCook 系统的代码生成能力扩展业务逻辑代码方面。
由于业务逻辑代码和控制流代码的描述是写在需求文档中的,所以这个功能需要能够读取需求文档中的自然语言描述,然后将其转换成 JavaScript 表达式,并将表达式绑定到 UI 元素上。正确、高效地将自然语言描述,转化生成业务逻辑 JavaScript 代码,即本论文的核心目标。
二、实践遇到的主要问题
一般来说,主流的代码生成方法都依赖于大量的配对训练数据,包括自然语言描述和代码。然而,在一些特定领域的场景中,由于不存在直接可用的配对数据,建立相应的大型配对语料库进行代码生成是非常困难的。这需要程序员花费大量的精力手工编写代码描述来构建高质量的训练数据集。另一方面,如果训练数据量受限,生成模型就无法得到充分的训练,很可能出现过拟合的情况,使得模型的性能在实际使用中不尽人意。
在本文的 JavaScript 表达式生成场景中,主要的限制正是训练数据不足。为了进行代码生成,我们需要从头开始建立训练数据集,即:挖掘一组代码,并为每一组代码手动编写相应的自然语言语义描述。这种方式能构建高质量数据集,但成本是相当昂贵的,因此只能获得相对小规模的配对训练数据。训练数据的缺乏使得神经网络很难学习到有效的表征来生成代码,从而严重影响了模型的性能。
三、构建数据集是第一步
为了生成 JS 表达式,第一步就是从头构建和预处理数据集。简单而言,本文从阿里巴巴的代码库中随机收集一些表达式,进行过滤和去重,得到一个业务逻辑代码表达式的集合,再手工制作每个代码的自然语言描述。最后,一个包含 2489 个例子的配对数据集被制作完成。在进行实验时,本文从训练集中随机抽取一个子集作为验证集。
在这个数据集中,本文进一步将 JavaScript 逻辑表达分为以下四个类别:
(一) 字符串模板表达(STE)。这一类的代码是通过用变量填充字符串模板产生的字符串表达式。
(二)OR 逻辑表达(OLE)。这类代码是由短路的 OR 运算符连接的几个值。
(三) 条件表达式(CE)。这类代码通常是一个三元组条件表达式。
(四) 数据处理表达式(DPE)。这类代码通常包含对数据的处理,如取一个字符串的子串。
在实际使用中,输入的描述是中文的,本文提供了相应的英文翻译。本文使用类别标签来标记测试集中的每一条数据,并按类别统计测试集的细节。
考虑到本文的数据集规模较小,而且数据集的变异性和噪声会影响代码生成的性能,因此本文对原始数据进行了一系列的预处理,接下来将介绍三种主要使用的预处理方法:
(一) 代码规范化:在本文的数据集中,代码存在一些风格上的差异。本文使用 Esprima 解析器将 JavaScript 代码解析为抽象语法树(AST),然后使用 Escodege 代码生成器将 AST 转换为规范化的代码。通过这种方式,可以在一定程度上消除代码之间的风格差异。
(二) 字符串字面替换:在本文的数据集中,有一部分代码包含字符串字面。按照规定,代码中的所有字符串字面必须出现在自然语言描述中。因此,可以使用占位符来替换这些字符串字面,以简化代码的生成。
(三) 成员访问的简化:很多代码都包括对成员变量的访问。本文在代码中简化了成员变量的访问,删除了被访问的对象,只保留被访问的字段。开发平台中的其他模块会使用代码静态分析等技术搜索编程上下文,寻找合适的访问对象,并完成成员访问表达。
四、搭建模型,精巧而高效
对于整个 JS 表达式生成任务,只依赖较小的高质量训练集显然不能得到较好的效果,因此我们需要从任务、模型架构等方面做文章,让其尽可能在小的数据集上获得比较好的效果,并能泛化到更加广泛的业务场景中。
为此,本文从两方面优化模型的构建与训练过程。首先是采用任务增强的方式,利用额外的任务,要求模型能学会利用常见的变量名进行代码生成。其次是采用更加精巧的模型架构,利用代码天然分层的语法树结构,以及 JavaScript 特定的抽象语法描述,进行更高效的建模与生成。相比单纯简单的序列建模,这种方式显然在该场景中能拥有更好的效果。
4.1 任务增强
由于面临着训练数据不足的问题,本文希望利用外部领域的知识来协助代码的生成。在前端 JavaScript 代码中,变量名占据了很大一部分。因此,如果让模型从领域知识中学习更多关于正确使用变量名的知识,会有很大的好处。因此本文提取了一个变量语义表,其中包含前端开发中常用的变量的名称和语义描述。
本文使用了任务增强的方法来利用变量语义表进行代码生成。为了在基于 AST 的代码生成方法中应用任务增强,我们提出了一种辅助任务。
本文发现,对于一个没有其他字符串字面意义连接的字符串模板表达式,代码只是一个变量名加上语法符号,如大括号和分号。因此可以将变量语义表转化为这些字符串模板表达式。以 ``picUrl - 图片链接 (图片的链接)'为例,可以将输入改写为 `` 展示图片链接 (展示图片的链接)',输出改写为 `` { picUrl; }'。通过这种方式,输出就变成能够解析成抽象语法树的合法代码,并将该辅助任务应用于基于 AST 的代码生成方法。
4.2 Subtoken-TranX 模型
为了利用代码天然的层次结构,本文采用了代码生成领域效果比较好的 TranX 模型作为基础,并对其做了一些很有意义的改进。
具体而言,原始的 TranX 模型在 Token 层面生成代码,这种设置对小规模训练数据下的代码生成并不友好。Token 级别的词汇通常很大,所以模型需要维持一个大的嵌入矩阵,这使得模型容易过拟合。而且,代码中的 Token 可能只在训练集中出现几次,所以模型很难学会一个好的词嵌入表示。此外,模型可能无法从有限的训练数据中捕捉到包含相同 Subtoken 的 Token 的关系。所以本文在 Subtoken 层面上生成代码。
本文规定,在 AST 的每个需要生成终端符号的位置,模型可以生成多个 Subtoken 动作。本文使用一个特殊的标记 <EOT > 来表示当前字段中标记的所有 Subtoken 已经完全生成。
4.3 支持 JavaScript 语言
为了让 Subtoken-TranX 模型支持 JavaScript 代码的生成,本文为 JavaScript 语言的语法规则构建相应的 ASDL。
本文以 Esprima 分析器文档中提供的 Mozilla 分析器 API 的形式来编写关于 JavaScript 抽象语法的 ASDL。本文编写的 JavaScript 的 ASDL 可以覆盖我们研究场景中绝大多数的前端 JavaScript 代码。除了 JavaScript 的 ASDL 之外,本文还构造了两个函数来完成 ASDL AST 和 JavaScript AST 之间的转换,并使用 Esprima 和 Escodegen 来完成 JavaScript AST 和 JavaScript 代码之间的转换。
五、实验效果
实验表明,无论是否应用任务增强,Subtoken-TranX 都优于原始 TranX 和 Transformer 模型。当应用任务增强时,Transformer 和 Subtoken-TranX 模型在 Subtoken 级别生成代码的性能都有明显的提高。
可以看到,在应用任务增强后,变量使用的指标对所有模型都有很大的改善。这些结果验证了我们的猜想:增加辅助任务可以提高代码生成中变量使用的准确性。在所有的模型中,Subtoken-TranX 模型在变量使用方面取得了最好的精度、召回率和 F1。
本文分别在不同类别的测试数据上计算了方法的度量。从结果中可以看出,应用任务增强方法后,模型的性能在不同类别的数据上有不同幅度的提高。对于 STE,Subtoken+TA 的前 5 名准确率为 44.90%,编辑相似度达到 86.21%。对于 OLE,Transformer+TA 的前 5 名准确率为 52.11%,编辑相似度达到 88.40%。该模型在这两类代码上的表现已经达到了在实际工业系统上应用的要求。本文的研究成果已被阿里巴巴的 BizCook 系统采用。
本文比较了以不同方式将变量语义表纳入模型的代码生成结果。“+PT” 是用变量语义表预训练模型的结果,并用代码生成数据集进行微调。“+VP”'是用变量语义预测变量名称的辅助任务来训练模型的结果。“+CG” 是将变量语义表改写成代码生成配对数据后,用辅助任务训练模型的结果。
结果表明,所有使用变量语义表的方法都能有效提高代码生成性能。与我们的预期一致,带有代码生成辅助任务(+CG)的任务增强方法实现了最佳性能。
本文进行了一个样本分析,以直观地比较不同方法的生成结果。
总之,这些实验结果都表明,面对训练数据不足的问题,通过任务增强的方式将外部领域知识纳入到代码生成中,通过 Subtoken-TranX 模型更好地建模代码生成过程,能得到非常不错的结果。因此本文提出的代码生成方法在两个代码类别上满足了实际工业系统的应用要求,并被阿里巴巴的 BizCook 系统采用进行生产。
文章标签:
自然语言处理
JavaScript
前端开发
自然语言处理
机器学习/深度学习
数据处理
程序员
API
-开发达人-
目录
相关文章
Kevin_17
|
1月前
|
机器学习/深度学习
人工智能
自然语言处理
2024年AI辅助研发:科技创新的引擎
2024年AI辅助研发:科技创新的引擎
Kevin_17
48
1
1
python兴趣圈
|
2月前
|
数据采集
人工智能
自然语言处理
中科院国产多语言大模型-YAYI2开源!家族AI应用场景全覆盖!
中科院国产多语言大模型-YAYI2开源!家族AI应用场景全覆盖!
python兴趣圈
28
1
1
楠竹11
|
2月前
|
人工智能
自然语言处理
浙大联合微软等提出全新视频编辑统一框架UniEdit
【2月更文挑战第13天】浙大联合微软等提出全新视频编辑统一框架UniEdit
楠竹11
26
2
2
游客a4oswvtctqbx6
|
机器学习/深度学习
人工智能
供应链
如何构建数字化时代的人才转型方案,Adobe用人工智能给出方案
如何构建数字化时代的人才转型方案,Adobe用人工智能给出方案
游客a4oswvtctqbx6
99
0
0
kgpxw2bwjo2xw
|
测试技术
API
调度
【老司机平台技术】构建应用级项目集成任务通用实验室
欢迎使用老司机平台,共同推进高效业务测试体验,地址:http://drivers.alibaba.net/背景老司机项目集成任务原计划为每一个项目老司机创建一个实验室,当项目环境部署时,会拉起这个实验室,然后触发老司机的项目集成任务。项目集成任务本身配置可触发的项目标,通过与实验室传递的项目标匹配以判断是否真正执行此集成任务。这里存在几个问题:如果每个项目都创建一个实验室,那么最终同一个应用上存在
kgpxw2bwjo2xw
352
0
0
夏夜许游
|
机器学习/深度学习
存储
数据采集
七位IT专家畅谈:如何启动和扩展成功的AI试点项目
尽管人工智能和机器学习令人兴奋,很多最初的试点项目和PoC项目未能全面投入生产。已经取得成功的项目,需要成为战略计划的一部分,获得高管的支持,能够使用合适的数据,有所需的团队,有合适的技术和业务指标,以及项目里程碑,经历多次迭代,快速试错。
夏夜许游
67
0
0
码农工程师
|
存储
人工智能
自然语言处理
Logseq 获 410万美元融资!加速开源神经元知识管理系统增长,构建新世界双链知识图谱
Logseq 获 410万美元融资!加速开源神经元知识管理系统增长,构建新世界双链知识图谱
码农工程师
341
0
0
-开发达人-
|
机器学习/深度学习
人工智能
编解码
Jeff Dean:谷歌将重点转向构建通用智能AI系统
谷歌AI负责人Jeff Dean近日接受《连线》专访,透露谷歌正在尝试构建具有通用智能、而非高度专业化智能的系统。尽管更大规模的计算系统,尤其是为机器学习量身定做的系统仍然有很大的潜力,但谷歌正在试图用更少的数据和更少的计算力来做机器学习。
-开发达人-
157
0
0
-开发达人-
|
机器学习/深度学习
人工智能
自然语言处理
百度飞桨开发者已超190万,国内首个量子机器学习开发工具「量桨」面世
百度飞桨深度学习平台又有了大幅度的升级:飞桨企业版正式出炉,还有量子机器学习开发工具「量桨」发布。飞桨已成为国内首个,也是唯一支持量子机器学习的深度学习平台。
-开发达人-
253
0
0
中文编程
|
IDE
开发工具
从立创EDA,Gratipay看中文编程开发环境和推广运营的一个趋势
从立创EDA看库管理和分享功能;开源、开放式项目运营的经验教训。
中文编程
1273
0
0
热门文章
最新文章
1
订票系统不再瘫痪 阿里云确认与12306合作
2
29.4. Maatkit Essential command-line utilities for MySQL
3
hdu 2051 Bitset (java)
4
sqlplus格式的使用
5
想上威胁情报?先搞明白这五个问题吧
6
kbmmw 中XML 操作入门
7
kotlin 语言入门指南(一)--基础语法
8
LINUX 硬连接和软连接
9
Android常用工具类封装---SharedPreferencesUtil
10
What are TCHAR, WCHAR, LPSTR, LPWSTR, LPCTSTR (etc.)?
1
如何本地安装AFFiNE并将服务发布至公网实现团队远程访问协作
27
2
【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解
18
3
如何在CentOS7一键安装宝塔面板并实现固定地址访问内网宝塔进行管理
20
4
【Mysql】在多表查询过程中如果已经起了别名,就不能通过表名限定字段
19
5
Windows文件搜索神器Everything安装配置结合内网穿透实现公网查询本地文件
20
6
【Web 前端】 jQuery 里的 ID 选择器和 class 选择器有何不同?
21
7
CentOS安装MeterSphere并实现无公网IP远程访问本地测试平台
16
8
【Web 前端】网页上有 5 个div元素,如何使用JQ来选择它们?
21
9
本地MinIO存储服务通过Java程序结合cpolar实现远程连接上传文件
11
10
【Web 前端】jQuery 库中的 $() 是什么?
16
相关课程
更多
视觉AI技术体系及趋势概述
云计算工程师解析与实战-网络专家篇(体验版)
AIGC无处不在,把AI应用构建于Serverless之上
云数据库优化十大典型案例
2020版大数据实战项目之DMP广告系统(第四阶段)
2020版大数据实战项目之DMP广告系统(第七阶段)
相关电子书
更多
如何用阿里云快速构建游戏发行技术体系
开发者大会-见微工业视觉智能产品及工程专家认证计划发布
ICA生态进阶 & 智能城市白皮书发布
相关实验场景
更多
基于Hologres+PAI+计算巢,5分钟搭建企业级AI问答知识库
基于阿里云E-HPC平台的WRF气象预报实验
倚天大数据电商数据分析快速实践
使用计算巢AI应用,轻松定制个人数字形象
利用大模型大规模分发技术,实现AIGC在线应用秒级弹性
云原生AI套件:一键训练大模型及部署GPU共享推理服务
下一篇
2024年阿里云免费云服务器及学生云服务器申请教程参考