人工智能中的“人工”

sjjt-204

自从 AlphaGo 赢了之后,人工智能就变得非常热门了。不过,大家在关注“智能”时,却很少把注意力放在“人工”上,似乎感觉上了人工智能之后,一切都能自动化了。其实,这份智能的背后有着大量的“人工”,还有相当多不能自动化的事情。

这里的人工主要体现在两个方面:

1. 数据准备

现代的人工智能技术,或者说机器学习,其基本方法和 N 多年前的数据挖掘并没有什么太大的不同,也还是将大量数据喂给计算机用于训练模型,模型生成之后就可以用于自动化处理,看起来就象有了智能。

然而,用于实际业务的机器学习项目,并不象 AlphaGo 那样可以自己生成数据来训练(其实 AlphaGo 的前期版本也用了大量现存的棋谱),必须使用实际发生过的数据才能训练模型。不同的数据训练出来的模型完全不同,数据的质量严重影响模型的效果。

但是,实际的数据五花八门,散落在各个应用系统中。想把它们整理出来供算法使用,并不是一件容易的事。机器学习需要的常常是比较规整的宽表数据,这还需要把各个应用系统中的关联数据拼接到一起;而各系统的数据编码规则可能不一样,这还需要先统一化;有些数据还是原始的文本(日志)形式,还需要事先从中抽取出结构化的信息;更不要说还有从互联网上扒出来的数据;…。

有经验的程序员都知道,一个数据挖掘项目中,用于数据准备的时间大约会占到 70%-80%,也就是说,绝大多数工作量都花在训练模型之前。

这其实就是我们常说的 ETL 工作了,这些事看起来没什么技术含量,似乎是个程序员就能做,人们也就不很关心,但成本却高得要命。

2. 数据科学家

ETL 整理好的数据,也仍然不是那么好用的。还需要数据科学家来进行进一步处理才能进入建模环节。比如有些数据有缺失的,那么需要有某种办法来补缺;数据的偏度太大,而很多统计学方法要假定数据分布要尽量满足正态分布,这就需要先做一遍纠偏;还需要根据业务情况生成衍生变量(比如从日期生成星期、节假日等);…。这些工作虽然也是建模前准备工作,但需要较专业的统计学知识,我们一般不把它算作为 ETL 的范围。

机器学习的建模算法有好几十种,各种算法都有各自的适用范围,还有大量的参数需要调节。如果用错了模型或调错了参数,那就会得到非常不智能的结果了。这时候又需要数据科学家们不断地尝试,计算并考察数据特征,选用合理的模型和参数,根据结果再反复迭代,经常较漫长的时间才能建一个实用的模型出来,短则二三周、长则二三月。

不过,近年来也出现一些完全自动迭代的手段(主要是神经网络),但计算时间很长,而且在许多领域(如金融风控)的效果并不太好,更有效的仍然是由数据科学家主导的方案,然而数据科学家们又少又贵….。

是不是觉得现在的技术还有点 low?人工智能的背后原来一点也不智能!