【CSDN现场报道】2017年5月18-19日,CSDN主办的中国云计算技术大会(CCTC)在北京朝阳门悠唐皇冠假日酒店盛装启航。本次会议践行“云先行,智未来”的主题,在Keynote环节之外精心策划了微服务、人工智能、云核心三大论坛及Spark、Container、区块链、大数据四大技术峰会,众多技术社区骨干、典型行业案例代表齐聚京师,解读本年度国内外云计算技术发展最新趋势,深度剖析云计算与大数据核心技术和架构,聚焦云计算技术在金融、电商、制造、能源等垂直领域的深度实践和应用,全程高能不断档,干货满满精彩纷呈。
普元CTO焦烈焱带来分享《人工智能背景下软件架构的演进》,总结过去一年在人工智能方面的思路和方法。分而治之的软件架构下云计算面临着集成复杂的挑战,不仅成本过高,还涉及软件与软件工程的集成问题。在利用人工智能实现智能连接上,可以基于机械连接、基于知识连接、创造知识连接三个层面,通过人工智能来支撑智能增强的企业软件,从而达到机械智能、辅助实现意图的智能、创造意图的智能等长远目标。最后他提出传统方法应与深度学习相结合,避免“深度泛滥”,并分享了两个实践案例:使用知识图谱进行业务人员与数据连接的数据自服务,以及以智能开发系统提供的跨团队知识共享。以下为现场演讲实录。
主持人:人工智能和云计算密不可分,当前的状态中以云平台为核心的算法提供了非常容易应用的经验,使得新一代的应用开发、管理及其分发都能够轻而易举地在人工智能的基础之上建立新的生态系统。那么怎么从架构的角度去解读呢?下面让我们有请普元CTO焦烈焱分享“人工智能背景之下软件架构的演进”!
焦烈焱:尊敬的各位来宾、专家、各位老朋友、各位新朋友,大家上午好!其实我经常会来CSDN和大家分享,后来慢慢养成了一个习惯,我觉得来到CSDN做分享是我的工作之一,把我们一年来的成绩、思路和想法扔出来,欢迎大家拍砖。今天我想和大家分享的是这一两年的时间当中我们在人工智能方面的一些思路和想法,怎么把人工智能这样的技术和方向应用到企业软件和云的架构上面。接下来我会分成三个部分来讲:首先是软件架构的挑战,怎么利用人工智能的技术来做更加智能集成的工作。其次是我们对人工智能的认识。人工智能做的不是大家不知道的,更多的应该是AI倒过来的IA,就是增强智能,通过这样的思路实现人工智能,或者做出人工智能的应用。最重要的是介绍一下普元在人工智能方面的实践,要做人工智能最重要的是要找到一个切入点,到底哪个地方能用人工智能,我们做工程不是去研究算法,而是要把这个东西用好。
找到了切入点以后,怎么才能让所有的团队具备人工智能的思维。这其实是很重要的。以前做软件的时候更多的是规则思维,写出了规则之后让计算机去执行。人工智能的思维不是这样,我告诉你Input是这个样子,专家告诉你Output是那个样子,要把机器当成一个黑盒子。这个思维转变其实是蛮大的,就好像今天的人一样,看到一个事物之后会有一个反应,但是不代表我这个事情做的就是错的。所以该用这样的思维来做人工智能,做深度学习和神经网络。
基于云的企业软件到底方便在哪里?我们可以看出这是一个核心的架构,每次做架构的核心思路就是分而治之、横切竖割,分成一块一块的东西,然后用这样的方式降低复杂度。但是在架构方面新的复杂度就是集成,软件工程也是这样,就是从需求到设计等等。这个过程其实也是一个集成的过程,就是每个过程之间都有这种开发人员、运维人员、设计人员和交付人员。一般来说在做软件架构的时候基本上都会根据问题分解出来这样一些问题的边界,分解之后我们会建立一些沟通的机制,最后再有一个整体性的交付。你会发现我们在软件架构里面讲究更多的是怎么去切,然后我们在做集成的时候也讲了很多,但是你会发现集成比切起来更难。我们经常用一个很大的系统把整个这些部分放在一起,好处是很多集成工作其实就不需要做了。当你的软件达到100万个的时候就觉得用不着拆开了,当你有300万个的时候绝大多数的人都会迫不及待地拆开,到了500万个的时候最保守的人也开始要拆开,因为不拆不行。但是要拆开的话麻烦在哪里?就是人工成本非常的高,我们往往认为集成的更加需要用人工智能的方式,去做到更加智能地集成。
说到集成,我们做的很多工作经常就是水多了加面、面多了加水,混在一起。我曾经看到过一个更夸张的动画,就是一个程序员在反复地用一个插头插来插去,最后终于插明白了。其实我们整个集成的研究根上都是从这里来的,现在Unix的方式对整个软件架构影响非常大,其实这是一个简单的系统,我们很多架构原则都是学了Unix这样一个简单的东西。如果片面地理解Unix的架构,想做一个喷气客机的系统是做不出来的,但是我们面临的系统往往就是这么复杂。Unix的集成方式很简单,可以解决非常多的问题,基本上就是管道模式,但就是因为太经典太抽象,给你的工作比较少。到了集成的第二个阶段就是BIP的方式,我们有若干层基于消息集成的模式,这个模式是一种消息集成,来自OA的架构有流程、有消息、有数据集成,就是一个成体系的集成架构。记得IBM有一篇文章说过,我把集成的工作做成了一个中间件,独立地完成集成的工作,这样就会影响很多事情。现在到了微服务的时候大家经常说的是把集成的能力像一个管道一样嵌入到应用内容来做集成,就是去中心化。其实道理差不多,只是我在部署模式和手段的时候有一定的区分。
这样的生命周期其实也是有集成的问题,敏捷就是在软件构建和软件设计的过程当中做的一个集成,持续集成就是在软件开发测试的过程当中持续部署。为什么要讲外部集成?就是人工智能在软件架构的复杂性系统最好是用在集成当中,我们就是通过集成来找人工智能软件架构方面的切入点,通过这种方式你会比较容易地找到。我们希望这个集成是比较智能的,就是通过上下的信息、通过数据和知识集成,你会发现你做的事情没有太多能够超出人的知识。这是什么概念?大家有的时候会听到“数据+连接”这个词,但什么是真正的数据连接?我认为其实智能的集成才是数据的连接,那么到底什么才算是智能?
这是Gartner的一张图,就是人、商业和物体的连接。我们自己具体的应用当中也举了这样的例子,可以看到有航班晚点的情况,在这种情况下你会和航班公司、酒店、出租车和与会者有这样的连接,甚至航班延误可能是由罢工引起的。这种时候应该通过智能的方式连接,而不像刚才我们看到的水多了加面面多了加水的方式。人工智能大到可以解决这样的问题,小到解决程序员日常工作当中的问题。
人工智能最重要的是要做什么?其实应该是把AI反过来的IA,就是增强智能。增强智能怎么理解?我们可以把那些不是专家的人变成专家。银行里面任何一个优秀的客户经理都会知道他的优质客户是谁,应该用什么样的产品,但我们分析出来的东西有什么用?我们最大的用户就是让一些刚毕业的学生也能够达到专家百分之八十的水平,这个价值就非常大了。是不是可以让专家少看一些没有用的片子?其实这就是辅助增强,辅助增强是有机械的层面、创造性的层面,现在计算机的东西也是一种人工智能,人工智能的定义是什么?无非就是让计算机能够模拟人的思考和行为,到底什么是机械智能?机械智能就是我们的做法,就是定位一个规则,利用计算机强大的计算能力让它去做计算,我已经知道输入输出是什么样的,告诉计算机怎么算出来这样的结果,但是到了第二个层面就是人工辅助识别,实际上就是让计算机辅助你实现,就是需要突破一个规则的思维,告诉计算机Input是这个样子Output是那个样子。是不是一定要用深度学习的方法?如果你有大量的结构化数据,结构化和半结构化的数据最好先从统计入手,不要先想深度学习,这样可能会把问题想复杂。然后就是创造意图,实际上你会发现Alpha Go下的绝大多数都是专家知道的,所以在辅助智能的情况之下其实是帮助人们提高现有的智能。
和大家分享两个我们自己的案例,看一看我们是怎么来找切入点的。实际上人工智能是一种跨学科的应用,君子如器,但不能只像一个器皿一样完成已有的东西。机器学习一般都是计算机的专家做出来的,现在统计学的专家就在讲我们一辈子都是在干人工智能和机器学习的事,但是我们用的这个东西是要用统计学、工程学、计算机科学的知识融为一体。这里也有一些概念,主要是人工智能像人一样思考,机器学习是成功实现人工智能的一个方式,深度学习又是实现机器学习的一个方式,同样有统计学的知识和行业的知识作为基础,所以如果你想学习的话就要用统计学的知识,大家可能需要去补一补。刚才我们说架构上面需要做连接,同样也是机器的连接,还有基于现有知识的连接和创造新知识的连接。前两个是绝大多数的情况,要做的突破是在中间。
以前我们是基于数据的方式,把手工的东西变成信息化的东西然后存储下来,现在有了大量的数据,往往很多数据连起来就形成了连接。那么数据在哪里?不说非结构化的数据,就说结构化的数据,三百多个系统,我要的数据到底在哪里?我的业务人员或者应用的设计能不能知道数据到底在哪里?以前的数据部门是怎样的?我做很多数据发布,你要的东西我帮你准备好,但是如果到了这一天你会发现当你准备好了以后数据已经失去作用了,所以希望和数据做到自服务,就是用自服务的方式能够找到这些。就像百度搜索一样,把专业术语放到里面,我要做的是挑一个专业术语。比如银行给你敲进来一个头寸,你会发现现在的系统里面有头寸,金融交易、金融市场里面也有头寸,就是用这样的方式来找数据。但是找到了这个数据之后你也可以看一看这个数据是什么样子,如果觉得这样的数据好就提交申请。实际上我们是用业务和数据之间建立很好的连接,以前这种方式非常困扰我们,就是我怎么让使用者更好地找到数据。
知识图谱其实就是一些概念、术语和它们之间的联系。苹果和西红柿之间有联系,它们是上下位的关系,因为都是具像化的东西。这些概念其实就是让你从不同的维度之间找到这样的关系,工程的维度、维修的维度和基本建设的维度都是不同的。这些东西可以从需求中来,我们甚至还做了搜索,就是数据库当中的备注,最重要的是把这些东西拿出来建立一个关系。我们强调这个关系是辅助智能的做法,辅助智能是什么?专家说你给我干百分之五十的活就行了,不然我们每天要累死,这就是突出智能的方式,绝不是这种东西可以做到百分之百,他们也要做人工的标签。如果要在这里反复学习可能就需要做到机器深度学习,但是如果只在工程化来做的话其实做到辅助智能就已经很好了。
我们的记录元素也要统一,三百多张表到底哪两张是有关系的?一个身份证在好几个系统里面都有,是不是能够标识出来?我们经常从A系统的A角导到B系统的B角,其实数据就是一个,通过数据库的采集形成了技术规范。这个里面有很多地方到底有哪些数据,这些数据的流向是什么样的,哪些是申请的数据,申请的数据的流向是什么样的,数据质量是什么样的、关系是什么样的。这个业务的地图需要建立一个关联,没有建立一个关联你也不知道数据到底在哪里,如果你用这个辅助智能的手段的话会从界面数据盘整出来原代码的东西,然后建立起来这样的关联关系。知识图谱用了一些NIOP自然云搜索的知识,也用了一些统计学的知识,把它凑起来建立了这样一个关联的关系。最后通过这种自服务,实际上是把数据科学家、业务分析师和数据之间建立了这样一个联邦,可以帮助他们把增强智能的方式建立连接。
这里我也想举一个小例子,大家可能会问是不是一定要用深度学习的方式?其实也不一定,我们可以把数据库当中的外在关系找出来,搜索技术元素的时候很正常,因为很多地方可能没有外在关系,但是外在关系对我来说很重要,因为是数据之间的关联。这里有一个前提,其实我是拿不到所有数据的,这种东西有两种做法:一种是规则做法,只要这个数据是匹配的,我认为有可能会有外在关系,这就是一个规则的方式。现在我们是用另外一种统计的方式,因为没有办法拿到全量数据,所以我们是做了一个相似度的比较。也就是说你的数据最长最小,数据类型字段名是什么样的,其实这就是一个字段的特征,你会发现这个做法和我们在互联网上经常做的用户画像是很类似的方式。只要把这两个特征比较一下,它们的相似度高、相关系数高,一般就认为其实就可能是一个外在的关联。现在也有很多字符型的,要把字符转成数值,因为相关性一定要是数值才可以,或者是和一个中位值比一下,那个相似值就会变成数值。当然,这样做可能也有问题,还是解决不了很多字段貌似很相似,要把它的特征再找出来。
第二个例子是移动应用的智能化,好像和第一个没有什么直接的关系。我们没有把切入点找好,团队要具备人工智能的思维,这个其实蛮麻烦的。现在我们绝大多数的工程师思维都是规则的思维,我们都特想找到一段规则。但是人工智能不是一个规则的思维,机器是一个黑盒子,怎么建立思维很重要。现在我们的做法是给我们的每一个团队下了一个指标,你们找到你们自己的应用。那个时候我们有这样一个想法,就是建立业务和数据之间的关联。这是我们做移动开发的团队,他们认为现在移动的UI设计成员和设计总是差了一点,以前要差一点还能接受,但是到了移动的时候只要差一个像素人家就觉得不好看。这是我们现在正在做的一些工作,但是他们会做这样的图像识别,如果是结构化和半结构化的数据,传统的统计学方法是有效的,所以不要把这个东西搞混掉。
现在他们的学习做到了这个样子,只要我给你一张设计完的图片,然后对这个图片进行分析,我会知道这个图片到底是什么样的结构。比如这是一个对话的、浏览的、聊天的,然后在这个上面找出来一些基本的部件,就是用了哪个部件来做这个事情,有了这个部件以后我就可以知道我应该生成的代码是什么样子。现在我们是没有能力做到,因为这个元素太复杂,移动的会简单很多。如果硬性地做这种匹配结果处理,其实我认为这是机器学习的专家干的事情,他们要研究算法到底是怎么做的,我们不会做成这个样子,我们其实是做了几个层面的切入。首先是让机器分析这个界面到底是干什么的,可能是聊天或者商品浏览的界面,找到这个分类以后再去切分到底是什么样子,而且这个切分里面可能是用黑白的切分,也有可能是彩色的区分,就是一层一层下来。
我们也有很多这样的数据积累,可以让它们以这种方式来学习,最后反向生成这个结果,减少人力的工作量。其实最终做的就是一个连接,以前可能是批量式的,现在是定制化的系统,大家可以试着下载一下这个APP,半个月的时间就可以做好这个应用。通过智能制造,至少一个季度盘点一次,它们的核心就是这样。现在他们有了这样一套数据技术数字化和结构化,通过这个数字再来增加。比如制衣行业,遇到计算机搞不定的、没有匹配的话还是要让裁缝去做,自动排产也是一样,整个供应环节先做什么后做什么都很清楚。如果放大来看,这个就是Customize,我们在做人工智能的时候更多的是解决这种连接的问题,要把这种连接解决好就是要有一个很好的人工智能的方式。
我们觉得云是一个大概念,其实云计算的本质就是提高效率,刚才讲的很多事情都是以人工智能的方式提高效率。公有云就是提高整个社会的效率,最早的云计算是虚拟化,虚拟化是不是云计算?当然是,因为提高了资源的使用效率,但是做了虚拟化就是云计算的百分之百吗?肯定不是,因我们还有很多需要提高效率的地方,现在我们希望通过人工智能的方式把软件连接的效率进一步提高,我觉得这是一个非常重要的方向,也是我们自己在做的工作。现在我们所有的设计、所有的开发都是希望达到这样的结果,所有的研发也在向客户开放。
更多精彩内容,请关注图文直播专题:CCTC 2017中国云计算技术大会,Keynote视频直播,微博:@CSDN云计算,订阅 CSDN 官方微信公众号(ID:CSDNnews),即时获取大会动态。