本文发布于2016年4月21日
小公司和大公司有一个很大的区别,就是我是要为了生存的。不可能一个项目做上3年时间,然后结题,然后再评估。通常说,如果6个月没出成果的话,你这个公司就死掉了。所以从资金,从人员、从工程上来讲,都是非常紧迫的。过去这4年里我们一直在这样高压力的情况下,资源非常有限的情况下,怎么能够把活干出来。不考虑任何条条框框,只要能把活儿干出来就可以了。所以今天我讲的东西,我想有一个副标题叫“穷人的知识图谱”。就是说我没有那么多钱,怎么把这个东西做出来。
成本和质量的矛盾
大家提到知识图谱的时候,可能更多想到的是,它是RDF啊,或者是图数据库啊,Neo4j等等。再往上走,本体啊,逻辑啊,把这样一些东西称为知识图谱。实际上,我们在实际工作中用的时候不见得要这么教条。我们通常从原始数据开始,那种脏的数据,比如从网上扒来的数据,或者我们做股票知识图谱的时候,从股转中心抓来的数据、从证监会抓来的数据,这都是非常肮脏的数据,各种各样的噪声,里面可能还有扫描的,完全没有办法做自然语言处理。我们要把肮脏的数据清理成干净的数据。这一步做完可能百分之八十的工作就做完了,后面的东西都是锦上添花的东西。
我们拿到干净的数据,不是一步就跳到知识图谱上面去的。很多时候,我们的应用场景并不需要我们做这么深度的挖掘发现。在结构化数据和非结构化数据之间我们会做一个平衡,有的时候进来的数据都是非结构化的,我们要对它进行一定程度上的结构化。至于这个结构化要做到什么程度,是由应用决定的。结构化的结果可能是JSON的,也可能是excel表格,也可能是其他的格式。这种不太完美的结构化就可以说是知识图谱了。再往后,我们通过实体的提取、关系的提取、实体的对齐、实体的消歧、实体的链接,把它变成一个图谱。再往上是本体、逻辑,各种不同的阶段,一步一步往上走,实现数据质量的提升。
如果我们能够不计成本的话,我们可以把数据的质量一步步往上提升,提升到逻辑那个最高的程度。这也是70年代的时候,我们做知识工程的那种理想:所有的东西全都是逻辑的。其实在五六年之前,还有很多工程是这样做的。比如说在美国有一个高考(机器人做高考题)项目,韩老师(韩先培)今天也讲了中国搞的高考项目,美国那边有个类似的项目也是这样的。他们当时就完全是用逻辑的方法来做,完全用人工来写逻辑表达式。但那个项目最终因为成本的问题失败了。
所以我们在做这件事时,必须非常认真地考虑成本,这对工业界特别是初创公司最关键。因为这件事情特别重要,所以我要把这两个字放得大大的。如果今天回去以后,大家把我说的所有话都忘掉的话,也请记住这两个字。这两个字决定了项目成败最关键的一件事,就是你能不能活下来。
这是一些很不幸的前辈们,他们在没有办法控制成本的情况下,因为种种原因牺牲了。我们这里默哀一下。我们怎么能够避免他们的下场?上面的图最后这里有个点点点,可能现在大多数做知识图谱的公司在3年或5年之后也会到它们里面去。我们怎么能够让自己不进去呢?
降低成本的基本思路
这里我给一个“重”的知识图谱项目的示意。下面有七步,叫斯坦福七步法,这是一个以前叫本体开发的方法。是一种比较经典的、瀑布式的开发方法。当然了,传统的本体工程里面也会说,这个并不是瀑布,是迭代。但是这种方法首先强调,还是要有一个类,先有类然后再有属性,再有实体,然后有实体上的各种约束。还是要一步一步走。它的假设是,可以预先知道很多东西。但大多数情况下,我们根本不知道。我们甚至连用户的需求是什么都不知道:用户总是要一匹更快的马。所以你听他的肯定是错的。像这种方法,之所以在以前能够成功,因为它是政府的项目,通常几百万到几千万美元的,3年、5年、10年时间做完的项目,会有很多的大学啊,大公司啊,一起做。一开始光定下这个schema,可能需要一个工作组花一年时间来做。这样一种“重”的开发的方法,今天在web上面,在初创公司里面,这样是不行的,熬不过critical mass。我们要是这样做,就会死掉。