降低知识图谱的构造成本

  我们期望得到的是更轻一点的开发方法,能够使你付出一些成本就可以拿到一定的回报。这是理想,现实不一定做得到。我们能够降低成本的一个核心就是,我们能不拘泥于传统的这些方法往前走。从现在的创业领域我们借鉴一个概念,大家可能听过的一个词,叫 Lean Startup ,就是精益创业这个想法。在实践中,我们会发现,成功的公司基本上都遵循了这样一种方法往前走,一步一步地,从一开始不清楚应该怎么做,从一开始只有很少的资源做很少的事情, 然后慢慢资源越来越多,做更多的事情,所以我们希望有这样一条曲线,up-front cost,就是初始投资,尽可能小一点,然后就能拿到一些结果,这个结果能够对用户产生一定的价值,但不是所有的价值。然后能够让我们bootstrapping(步步为营,逐步提升),往前走,拿到更多的钱拿到更多的人,然后满足更高的要求。

  但实际中的曲线可能是一个波浪的,甚至有可能某个阶段变成负的价值,都有可能。我们希望能够让各种失败尽可能快点,这样发现错误就能快一点。就是有这样一个loop(循环),Build-Measure- Learn,大家在其他地方可能也看到过。我们去构造一个系统,去发现,去做快速的验证,它是不是有可能是成功的。其中大部分实验都失败了,只有少数告诉我们一些道理。然后,我们反馈回去改变我们的系统。

  我今天主要讲的,是在知识图谱这个大系统构造的过程中的几个子领域上,我们有没有可能去用这样的方法,依托于成熟技术,在成熟技术上面做一些迭代,帮助我们降低成本。这里我提到5个领域,其实也可以合并成4个领域,就是知识提取、知识存储、知识表示,后面两个信息检索和人机交互可以统称为知识检索。我觉得这4个领域在一起才能够构造好一个完整的知识图谱的应用。仅仅只看一个领域肯定是不行的。这也是我们早期犯的一个重大的错误,就是在我们2001年前后的时候,我们当时想做语义网,我们觉得知识表示就可以解决所有问题,但是我们想错了。现在到了2015年的时候,可能我们走到另外一个极端上去,不相信知识表示,我们非常相信知识提取,非常相信深度学习或者分布式表示,这可能也不见得对。一个完整的知识图谱的应用一定是多种方法的运用。从工业上来讲看,我希望能够把这些成熟的技术尽可能地组合好。这就跟SpaceX发射火箭一样,它每个组成技术(Component)其实不见得是非常先进的,很多都是NASA很多年前就做出来,但是它把这些技术组合得很好,创造出一个非常神奇的系统。把知识图谱技术拆开来看,也是一样,每一个组件都不是那么神奇,但怎么把它组合在一起,这是很神奇的。

  另一点我想强调的是我们以前做知识工程的时候,进入了一个误区,就是我们觉得我们服务的对象是机器,更多想的是做更好的推理机让它更好地发现知识,或者做一个更好的索引让机器更好地做数据库的查询,或者做更好的知识提取。但实际上不是这样子。当你去真正去做一个项目的时候,发现最主要的成本是人,是你的用户、你的合伙人、你的投资人,然后更多是我们自己、员工。所以怎么能够让人能够更好地去阅读知识、产生知识,这才是我们应该学习的教训。不光是知识工程的教训也是软件工程的教训。

  所以这里我引用了软件工程的两位大师,他们以前说的话:

  傻子都能写出计算机可读懂的代码,优秀的程序员写出的是人能读懂的代码— Martin Fowler

  程序是写给人读的,只是碰巧能被机器执行— Abelson and Sussman

  其实知识图谱或者其他的知识表现方式也一样,它们并不是为机器准备的。它的维护成本更多是人的成本,要更多考虑对人友好来做这些事情。

  我首先讲一下知识提取的成本,再对其他4个领域一一介绍。

  知识提取的成本

  关于知识提取方面,我讲这3个方面,就是人工和算法,统计和规则,还有知识提取的粒度。

  提到人工和算法,这也是一句名言,我已经忘了是谁说的了。我最近在很多talk中都会提到,就是: 有多少人工就有多少智能 。基本上我们看见的那些让我们眼前一亮的东西,都是人做出来的,不是机器做出来的。各种各样的规则,各种各样的ontology,Siri那些让你笑的小笑话,都是人做出来的。算法真的很难去做高质量的结构。即使算法做出来,一定也要人工去进行验证、确认。算法能做什么?当原始的结构都已经很好,有高质量的时候,算法可能转移这个结构,从一种格式转移成另一种格式,从Wikipedia的Infobox变成DBPedia,这是算法能够做好的事情。但要把文本里面的关系提取出来,Open IE,这些东西从研究角度是非常有意义的,但是它们离实用还有相当远的距离。