前言:
此时我们对“开源图像算法库”大约比较关怀,兄弟们都需要剖析一些“开源图像算法库”的相关内容。那么小编也在网摘上网罗了一些关于“开源图像算法库””的相关内容,希望同学们能喜欢,看官们一起来了解一下吧!来源:BanTech智库
作者:中国银行软件中心西安分中心 穆宁 郑无寒
几乎在所有浏览器输入“程序员”三个字,查询返回的首页一定有“程序员到底有多忙”,“程序员薪资”以及“高薪招聘”这类字眼。不难看出,专业程序员的缺口仍然很大,生产力远远不够。如果对“程序员们到底在忙些什么”这个问题进行调查,得到的答案一定是每天都在对接需求、修改bug、分析测试,似乎有对接不完的需求、改不完的bug、做不完的测试。
古有云,工欲善其事,必先利其器。新的工具代表新的生产力,我们到底需要什么样的工具才能避免无意义的重复机械劳动,才能解放程序员们的IT生产力?前人在对IT“生产工具”探索的道路上走出许多路,其中有两条走的最远,它们分别是低代码平台,AI编码。本文将重点介绍两种编码方法的相关背景、定义,它们的优劣势,以及探讨两种编码方法融合的可行性。
一、低代码平台
1.低代码的定义
根据Wikipedia和Forrester对低代码的定义来看,与传统代码编写不同的是低代码开发是在图形化界面通过拖拽、参数配置的方式高效进行代码开发的工作,并不需要开发人员过多使用手写代码。
2.低代码的能力
(1)可视化编程
可视化编程是指在图形化界面通过对不同图形结点进行拖拽、编排和配置的操作,得到期望功能,对于开发者而言实现了所见即所得的视觉效果。
(2)代码扩展
因为低代码的理念与“积木”相似,通过对预制代码模块的组合编排实现相关功能,但是低代码平台并不能覆盖编码全流程,所以还是需要少量代码来实现灵活扩展的能力。
3.低代码的优势
(1)快速交付
因为低代码平台内置许多预置代码块,包括组件库、模板库、主题库等,所以复用性极强,往往同类型业务场景只需要修改少量代码即可测试交付,它很大程度上缩短了开发周期,能够做到快速交付。
(2)降低开发成本
低代码平台的降本主要包含两方面,人员降本以及减少工作量。拥有丰富开发经验的优秀开发人员是稀缺资源,低代码可视化编码方式的出现降低了开发门槛,开发人员可以投入更多精力关注于核心业务流程。
(3)高质量交付
低代码平台中的预制代码块使核心业务逻辑与实现技术解耦,使用者无需关注版本升级及bug修复等问题,从而保证代码的交付质量与安全性。
二、AI编码
1.AI编码的发展
近些年,随着算力的极大提升,人工智能在诸多领域取得巨大成功,包括计算机视觉、自然语言处理,引擎推荐等,这使得研究人员把目光转向代码自动生成。尽管利用AI自动生成代码距离应用于工业界还有不小的距离,但是它的发展势头十分迅猛,背后蕴藏的潜力也很惊人。
早在2013年,人工智能在代码领域就初步取得成果,Google训练出代码嵌入模型Word2Vec,该模型的特点是能够将文章中的单词转为向量化表示,通过这种转化可以定量地度量词与词之间的潜在联系,挖掘出深层信息。但是,Word2Vec模型的缺点也很明显,它学习到的词语是静态的,与上下文无关,这样就造成了同一个词在两种场景下含义不同,在Word2Vec看来却是相同的含义。另外Word2Vec只能单向预测,它可以借助前一词语预测后一词语,但是却不能根据后一词语预测前词。2019年提出的BERT模型完美地解决了这个问题,它可以动态地学习上下文词向量,并且可以利用语句中词语的双向信息。BERT模型的提出极大地拓宽后续研究者的思路,很多模型也在此基础上提出,微软亚洲研究院推出的CodeBert, 谷歌大脑推出的CuBERT, OpenAI推出的CodeX, 以及最近DeepMind 推出的AlphaCode都是使用了类似BERT的预处理语言模型。
2.AI编码的生成方式
(1)基于可视化UI
“产品经理一边说着产品的设计,一边在草稿纸上画出UI草图,随后这个产品的前端页面和对应的前端代码就实时自动生成了”,这就是利用UI自动生成代码的应用场景之一。在这个过程中AI起着“眼睛”和“大脑”的作用,重要意义不言而喻。
首先,利用视觉组件,如高清相机对特定区域进行实时拍摄。
其次,将视觉组件接收到不同轮廓的图像信息转换为文字、流程图。
最后,将文字、流程图作为输入传送给代码生成器生成代码。
这一系列的步骤利用目标检测、目标识别、语义分割及深度学习训练代码生成器等AI技术。
(2)基于代码语料
基于代码语料的代码自动生成方法主要有两种,一种是利用固定语料,一种是利用智能语料。利用固定语料是通过用户提前设置个性化的代码块,再通过快捷键搜索关联性较高的代码块推荐给用户,提示用户进行选择。这种方式生成代码速度快,但是代码质量则依赖前期预置的代码,较为笨重。基于智能语料的代码自动生成方法,首先需要利用网上公共开源网站上的开源代码制作数据集进行代码生成模型的训练,然后让用户输入代码功能描述,功能描述一般是以注释的方式出现,最后根据用户代码上下文进行代码预测,并智能推荐出代码块。目前主要以插件的方式出现在各种编译工具里,较出名的有Kite Autocomplete、Github Copliot等。
三、低代码与AI技术优势互补
纵览软件开发流程,低代码平台和AI技术可以在不同阶段发挥各自优势去弥补对方弱势(见表1),我们可以从需求侧、编码侧以及测试侧这三方面去进行分析。
表1 AI技术与低代码技术
如表1所示,AI编码方式在需求阶段、测试阶段有较大优势。低代码平台在开发阶段有较大优势。如果能将两者优势互补,能产生一种更高效的新开发工艺,如图1所示。
1.需求侧分析
相对于低代码平台技术,AI具有更强大的信息提取与数据分析能力,基于该特性,我们可以借助AI的自然语言处理技术,提取输入需求文档中的功能点。在这个步骤,需要大量的文本数据集作为基础数据支撑进行模型训练。针对不同业务场景,数据集需标注不同的业务特征,使训练出的AI模型具备更强的多样性,满足复杂场景下不同的业务诉求。
在这部分可以选择Seq2Seq(Sequence to Sequence)模型进行文本摘要生成,该模型的基础模型如图2所示,主要分为编码器和解码器两部分。
核心思想是利用神经网络模型将长序列文本信息通过特定的方法输出短序列文本信息,神经网络模型常用长短期记忆(long short-term memory,LSTM)网络,它可以解决长文本训练中梯度爆炸的问题。在Seq2Seq模型根据产品需求文档生成需求功能点的过程中,编码器主要是利用循环神经网络(Recurrent Neural Network,RNN)学习产品文档中单词与单词之间的关系,其中编码器的模型结构如图3所示。
用公式可以写为:
其中ℎi表示隐态向量,xi表示分时或分词的输入,在文本生成的训练中即表示文本中的前后词,U、W、b都是经过训练调优后的固定值。
解码器的模型结构如图4所示,同样是采用了RNN的模型。
解码器将编码向量c作为初始隐态输入到RNN网络中,各个隐态随前一隐态的变化而变化,隐态的更新公式为:
输出的计算公式为:
长序列文本训练过程可能丢失最初的文本信息,通过加入注意力机制可以在解码阶段引入新的隐藏向量,从而解决这个问题,引入注意力机制的seq2seq模型如图5所示。
经过以上文本处理,可以从长序列文本中提取出可用于精确描述业务功能的短序列文本,为下一步服务编排提供输入。
2.编码侧分析
低代码平台的各类操作原子先天具备“积木”特性,具备高复用性。相较于纯代码开发,交易的编排语句量仅为10%~30%,由于语句量小,风险相较于AI编码更为可控,更易于监督和校正,所以更适用于具体功能的编排实现。业务代码生成的过程本质上是“积木”搭建的过程,这一过程可利用AI技术辅助进行,能代替人工,提升效率。
如图6所示,从业务需求中提取出预开户、核身、开户三个短序列文本的功能点(左侧),使用训练后的模型,预测并生成流程的编排语句(中间),能将各类原子进行串联,从而完成开户的交易流程。
3.测试侧分析
测试的全生命周期主要依赖于功能点的生成,这一步也可借由AI技术来实现。目前,学界已有文本自动生成功能,我们可以借助大体量数据构建定制数据集,并利用数据集完成模型训练,得到高精度模型,从而保证测试用例的准确性与完备性。
如图7所示,模型训练阶段,数据集来源为往期需求及需求对应的测试案例、自动化测试脚本、断言。模型训练的过程主要包括定义模型、编译模型、模型调优以及评估模型等步骤,在得到预期结果后即可得到所需的AI测试模型。AI根据短序列文本的功能点,预测自动化脚本和预期结果,然后自动化执行测试脚本,将与预期结果不符的测试结果录入问题单,并汇总生成测试报告。
低代码平台与AI自动生成代码技术目前在各自领域皆有长足发展,但是在业界目前尚未出现二者结合的成熟实用案例。纵览软件开发全流程的痛点,应都能够借助低代码平台与AI技术尝试解决,二者的结合将在未来进一步解放IT生产力。
-END-
这是科技创新最好的时代,这是属于我们每个人最好的时代,关注“BanTech智库”,专注银行科技发展,探索无界金融生态!