从逻辑规则到数据驱动——人工智能杂谈
传统的人工智能的书,翻开书前几章基本都会讲谓词演算等逻辑推理的方法,甚至有的人工智能的书花了大量篇幅就在讲这个东西。一方面,这可以看出,早期的人工智能是基于规则与逻辑的,另一方面,这其实也是一种误导。因为现在的人工智能被机器学习所主导,机器学习与传统的人工智能很不同,现在的机器学习很大程度上都是数据驱动的,因此当初我看规则与逻辑推理后,却不知道能做什么,什么专家系统的都太遥远。当然了,key point不在于这种变化对于一个初学者的影响,而是人工智能整个发展趋势所给人的反思与启发。人们很清楚的看到从规则与逻辑到了数据与统计这种发展主线,我们想做的东西也不多,就是希望能够让机器看懂我们看懂的、让机器听懂我们听懂的、让机器能懂我们的思考、能像我们一样思考,但这条路,这么多学者在走,却走的如此困难。我们能发现知识、拥有知识、玩弄知识,但却难以让机器像我们一样拥有知识。
一个最基本的问题是:什么是知识?这就是知识的表示问题。早期研究者觉得逻辑就是知识,可以用来做一些推理,但是很直接的一个问题是,对于机器视觉,当机器看到许许多多的像素点的时候,那些谓词逻辑显得那么无力。于是,我们开始认为数据中的某些pattern就是知识,大家就开始寻找各种特征、各种子空间。数据驱动开始盛行。然而,哪怕这种方法多么有效的解决了如机器视觉中浅层知识表示的问题,但回到文本知识上,它却仍然非常无力。
文本,或许是最丰富的知识载体吧,因为它包含各种抽象。对于文本本身,不过是一些ASCII码而已,把这些ASCII码建立倒排表,我们可以索引,把这些ASCII码做矩阵分解(pLSI),我们可以搞一些浅层语义分析,但我们觉得这还不够,我们用LDA这种generative方法来描述文本,认为文本是bag of words,是由topics产生的。当然,这种方法有道理,很intuitive,而且也确实让人们迈出了很大的一步,慢慢开始理解ASCII码统计背后隐藏的语义。然而,这就到了终点了吗?我们就满足了吗?别忘了,我们的目标是要让机器明白我们的知识、运用我们的知识。要做到这一点,bag of words肯定是不够的,topics肯定是不够的,我们要重新提出我们的知识表示模型。于是,另一种思想,也就是knowledge base的思路出现了,每个节点是实体,不同类型的实体,实体是唯一的,不同实体之间有边来连接,表示不同的关系。然而,尽管语言学家和计算机学家研究了很多年,即便能够用这种方法更好理解用户的问题、改善搜索结果,但也仍然没有通过这种表示方式让计算机真正懂知识,知识的表示仍然模糊。或许,知识是一个很高维度的空间,而word只是这个空间中的稀疏样本,我们要通过这些词来重建那些知识是一件很难的问题,但是,这并不该是停止的理由。
为什么要建模那种基于文本的抽象知识呢?一个很简单的理由就是,每个人在知识的高维空间上都有自己的子空间和独特的拓扑,当我们面对一个task的时候,我们需要知识,当我们不懂的时候,我们要花很大代价去得到那不懂的一小部分,这一小部分,往往不是人类的空白,而是落在其他人或文献的知识子空间中,如果我们能够建模这种抽象知识,我们就能把这一切连接起来,让人们真正能够互相share知识。
总的来说,本文的主要观点就是人工智能从逻辑规则驱动到现在的数据驱动,我们都是尝试去让机器去理解各种人类面临的各种不同的task中的不同的知识,我们可能在形象知识、数据密集的知识上面有不错的精确度,但是,对于抽象知识的建模却做得非常有限。未来一定会往这个方向发展的,或许规则与数据会结合,或许我们需要通过很多中间层、中间步骤才能走到那里,但是这并没有阻止我们回头看看我们走了多远,没有阻止我们抬头看看前面的路,更无法阻止人类知识不断前进的步伐。未来在这里,一切都很interesting。