正文
实现意图智能
。人知道最终结果是什么,但是并不告诉计算机采用什么样的规则计算,通过大量数据训练计算机找到规则,然后再让计算机完成大量重复计算,计算机究竟找到的规则是什么,有可能人并不一定能理解,其实往往也不需要理解,把计算机当成了黑盒;
创造意图智能
。也就是让计算机自己找到人并不知道的新知识,这也是我们最向往的场景。
从具体的实现层面看,第一种情况无疑是最多的,我们需要提炼总结规则,用好第一种情况很重要;第二种情况以前相对少一些,但恰恰是目前需要改进的,在第二种情况下我们往往优先用统计学的方法处理结构化、半结构化数据(例如格式化日志),用深度学习的方法处理非结构化数据,这就需要让我们的团队具备人工智能的思维。
实践人工智能,需要在在思维上进行调整。
我们往往习惯于用制定规则的方式指挥计算机,输入计算规则和输出结果都是已知的,也就是我上面说的机械智能方式。但后两种模式就不是规则方式了,因为规则是计算机找到的,这也就是经常说的数据训练。
这里我举一个我们自己实现的例子,让大家理解一下什么是模型、算法和数据训练。
先说一个背景,我们在梳理现有企业数据架构的时候,需要建立数据间的关联,用人进行梳理费工费力,我们就打算用计算机自动完成一部分,然后人工修正,这就是一个增强智能(IA)的例子。这里面就有一个情况,如果数据库中没有建立外键,如何把这种实际的外键关系找出来,我们就用这个例子解释一下机械智能和实现意图智能的方法:
1. 用规则的方式查找外键关系
首先要定义规则,外键关联的规则包括字段类型一致、长度一致、包含相同数据等等,然后在所有数据中遍历,进行匹配。这种方式需要有完整的数据,而且是否为外键关系的判断规则往往有些模糊,在没有得到全量数据时有一定局限性。
2. 用统计学方法查找外键关系
首先,我们定义出字段的特征(类似用户画像),字段特征是一个向量,就是一个一维数组,包括表名、字段名、字段类型、注释、样例数据最大长度、样例数据最小长度等等,由于表名、字段名不是数值,我们要把他们变成数值,可以和同一个标准字符串作比较,也就是通过移位的方式把字符串移动成标准字符串,移动次数越少,相似度就越高,这样就得到了一个真正的一维数组(向量)了。
其次,我们拿出一部分已知关系的表和字段,作为训练样本,逐一计算两个字段之间的相关系数(相关系数的计算方法是现成的,我这里就不介绍了,一上公式我就晕,Python 的发行版 Anaconda 里面就有,用了这个就体会到 Python 是最好的语言了),相关系数高的说明特征类似,认定为外键关系。
这时候人工判断一下,如果结果不错,那这个模型就是正确的,如果结果不好就换一种相关系数计算方法,或者改变数据特征,或者对数据特征进行加工,总之,外键特征作为一个客观存在,一定能够找到符合的特征,这就是数据训练。通过数据训练,找到合适的字段特征(模型)和计算方法(算法),也可以交给计算机做处理了,把所有的外键找出来。
你看,这里没有定义规则,处理方法是通过数据训练的方式,让计算机自己找出来的,我不需要知道相关系数这玩意到底是什么意思,这就是上面说的,计算机是一个黑盒。
需要说明的事,在上述例子中,我简化了不少动作,实际上最开始还找出来很多不是外键关系的字段,例如 createTime,我们还要把这种噪音字段的特征训练出来,剔除噪音。
这个示例说明了应用人工智能时不同的两种思维模式,简单的说不能再用创造规则的方式指挥计算机,而是训练计算机自己找出规律。
上面我们分析了人工智能相应的基本概念,人工智能的几种模式以及应用人工智能时需要的思维突破,下面我们从软件架构发展和面临的挑战,看看应用人工智能时的切入点在哪里,哪里更容易爆发出人工智能的火花。
什么是软件架构,在 InfoQ 出版的《
聊聊架构
》中讲的很清楚(感谢老王,总结非常到位),软件架构就是:
-
根据问题确定系统边界;
-
按一定原则进行切分;
-
建立不同模块间的沟通机制;
-
整体性交付软件功能;
可见,架构的关键是分而治之的哲学,但切分是为了软件研发、运维方便,软件的目标是整体交付,分与合存在这矛盾,这一矛盾是由集成解决的,但是集成往往是复杂的,大家在架构方面的分享,也以如何切分居多,如何集成相对较少。