知识管理这个领域,有个分支叫语义网,这两年就改了名字叫知识图谱。知识图谱其实有狭义的和广义的区别。这里讲的是狭义的知识图谱。我觉得华东理工大学的王昊奋教授定义得挺好,抄在这里:知识图谱旨在描述真实世界中存在的各种实体或概念。其中,每个实体或概念用一个全局唯一确定的ID来标识,称为它们的标识符。每个属性-值对用来刻画实体的内在特性,而关系用来连接两个实体,刻画它们之间的关联。
但我觉得,当我们在工程上去讲这个事情的时候,并不需要太拘泥于知识图谱到底是什么。有人问我说是否必须要用RDF(资源描述框架)才是知识图谱?或者说是不是必须用Neo4j图数据库才是知识图谱?其实不是。以前我们领域里有一个语义网研究论坛,叫XML论坛,刘升平(云知声语义技术负责人)以前在那是老版主。2002、03年的时候,有人在上面问Jena怎么解析RDF。前两天,我偶然看到王丛(文因互联首席知识官)的语义网QQ群,里面有人还在问十几年前同样的问题。大家还是着了那个皮相,我要做知识图谱,我要做语义网,那么我就要用RDF,我用了RDF就解决问题了。不是这样。关键是,它的本质是什么?不在于你具体用了哪一种Syntax,哪一种数据存储的数据库。
知识图谱的前身早在上世纪六十年代就出现了,演进过程中经历了很多节点,才有了今天。这个过程遵循着一个趋势分成了几步,具体有很多东西我就不提了。最早的六十年代末就有了,叫Frame Network,又叫Semantic Network,什么样子呢,就这个样子:节点—关系—属性。这个东西是什么?就是知识图谱吗。
看到这个东西的时候,逻辑学家一般会说,这玩意儿没法做推理嘛!然后大家就想,怎么去自动化这个推理的过程,然后就把它变成各种奇怪的东西。就从语义网络变成了Description Logic(描述逻辑)。六七十年代的时候,大家想了这东西不能做推理。First-order logic(一阶逻辑),在Frege(弗雷格)、Russell(罗素)那个时代,也就是在二十世纪初就已经搞得很完备了,这个一阶逻辑已经被玩坏了。但后来大家发现这东西不能完备推理,很多东西是不可判定的。
当时学者的思路,就是不去考虑成本,他考虑的就是soundness and completeness (正确性和完备性)。就是说:我能做任何一个可推理出来的结果,我一定要能够推理出来;所有我能推理出来的结果,一定要是正确的。那么当他发现一个逻辑做不到这一点的时候,他的心里面是百爪挠心。他想的就是soundness and completeness,对应到机器学习里面就是precision and recall(准确率和招回率)。
怎么能够达到最好的状态呢,后来发现了这么一个东西,叫做描述逻辑。当这个新概念出来的时候,很多人也是对它很迷信,就好像现在的深度学习一样。就感觉这玩意儿一出来什么问题都解决了。甚至曾经有人问我,描述逻辑能不能通过图灵测试。当时大家的期望那么高,然而过了几年,果不其然,大家都失望了,再也没有人理它。
有了这个东西以后,各种非常美妙的数学性质被证明了,就有人想怎么去应用这个东西。特别是九十年代末的时候,Web已经很好了,大家就想怎么把这个东西和Web结合在一起。
Tim Berners-Lee(蒂姆·伯纳斯-李),我在MIT的老板,Web的发明人,一直有一个宏伟的理念。他在八十年代初,比在座的大多数人都还年轻的时候,就说过要把知识都关联起来。
1980年,他写了一个系统,没人用。
1989年,他写了个proposal(项目申请),没人理。
1991年,他终于把Web写出来了,没人在乎。
等到1994年,大家终于认识到了Web的重要性。实际上,你去看他89年写的Web的第一个申请书,那里面写的东西就是语义网,但是一直没有实现。即便他后来的人生已经如此成功,但对自己的追求仍然念念不忘。所以他找到我在RPI的老板,Jim Hendler(当时在马里兰大学)说咱们一起干嘛!后来Jim Hendler第一个(语义网方向的)学生做出了SHOE这个语言,语义网的第一个语言,具体的Syntax大家不用太纠结,总之就是用HTML来写逻辑,可以想象到是多么奇怪。当时是第一个实验,后来就不断的演化。因为当时的英国和美国,主要是国防部门被这玩意儿忽悠得很厉害。
Agent这个技术有谁听过?当时就是主要忽悠这玩意儿。DAML它有个A嘛,就是DARPA Agent Markup Language,这玩意儿忽悠,最后忽悠得(应用上)不成功。后来他们(学术界)忽悠了另外一个东西,CALO计划,Cognitive Assistant,其实也就是Agent。那个项目成功了,变成了什么呢,对,变成了Siri。所以咱们做学术的,大的项目十个死了九个,但还有一个成功了,咱们对人类也是做了一点贡献。
所以这玩意儿就是从逻辑往前走,然后变成了Web上的各种本体的语言,有OWL和OWL2。在2007年的时候就成立了W3C的工作组,就是Web本体语言的工作组。我在2008年进去,在里面工作了两年的时间。
我们做了一个语言,叫OWL2。这个语言非常失败,基本没有人用。为什么呢?实际上那个时候我开始反思这个领域。因为整个工作组,它是被逻辑学家所主导的。逻辑学家和工程师有什么样的不同想法呢?比如说,我们曾经有一次在讨论,我们这个数据查询语言要不要有等价关系(就是A=B,北京=帝都这种关系)?逻辑学家就说,no no no,绝对不可以,因为有了这个东西以后,我们就不再能保证多项式时间复杂性了。他们老是说这个,最后把现场的Oracle的人都说火了,说不管你加不加这个我们都要用,我一定会加这个东西,我不会在乎你这个语言是怎么写的。这就是工程师思维和科学家思维的区别嘛!所以说,当时Facebook、Google根本没有加入这个工作组,因为逻辑离现实非常非常远。
工作组里面遇到了很多很多问题,包括路线斗争,分成两派。一派叫做SEMANTIC Web,就是Semantics、Semantics、Semantics,逻辑、逻辑、逻辑。另外一派呢叫做semantic WEB。现在研究的所有逻辑问题其实我们二十年前都研究过了。现在唯一新的东西就是Web。Web是什么?让数据流动起来。数据流动起来最大的问题是什么?不是机器,是人。我们天天要多考虑人的问题。当时还有个特别有趣的讨论,就是我们这个语言规定的是不是太复杂了,是不是太难了?那些逻辑学家就会说no no no,这是polynomial-time(多项式时间)怎么会难呢?然后我们那个文档打印出来,600+页纸。我们正常人类觉得,600页纸是一个难的东西,而逻辑学家就觉得多项式时间是一个容易的词。其实我们之间有一个mindset(思维方式)不一样,大家真是掀桌子的那种讨论,斗争非常激烈。
我们在设计工程系统的时候,考虑计算复杂性、认知复杂性、工程复杂性。其实,就是我刚才讲到的成本嘛,机器的成本、人的成本、数据的成本,每一点成本我们都是要考虑到的。但是对于非工程师(科学家)而言,他们是不会在乎这些东西的。为了这上面每一点啊,大家都要不停地吵。每一点后面都有几千封电子邮件在后面吵,吵了两年时间。最终,这个东西是不成功的。
从一开始弱语义的语义网络,到最后的强语义的OWL,还有一个怪胎我没有提到,叫RIF,规则语言,比OWL还要变态好几倍,是完全彻底的失败,标准的完美的失败。这个东西非常不成功,告诉了我们什么?就是工程一定不要太条条框框,一定不能去想,因为这个东西理论上不漂亮,所以它不能做,不能有这种完美的精神。
当时还有另外一套,叫元数据,主要是在1998年的时候,网景公司有一群人开始做,后来演变成RDF,然后演变成了一堆奇奇怪怪的语言,然后是http://schema.org,是Google提出来的,最后演变到了今天的知识图谱。
在座有多少人用RSS,或者曾经用过RSS?今天在座的小伙伴们可能很多人压根就没听说过这个词,它是第一个被应用起来的语义网的元数据的格式,后来被改名叫Rich Site Summary,第一个R被称为Rich。实际上最早的时候它是RDF,就是RDF Site Summary(1999年)。
Guha是我们领域里非常重要的一个人,他是麦卡锡的学生。麦卡锡是1956年人工智能的创始人之一,我们逻辑学派的大泰斗。Guha是他早期的一个博士生,后来去了Cyc,在那里面做CycL这个逻辑语言。然后1995年的时候跳槽到苹果公司,在苹果做了MCF,就是Meta Content Framework。苹果公司实际上是我们现在知识图谱的各种格式的鼻祖,从那里出来的,源头在那里。他做完这个东西以后跳槽到了Netscape,在那里碰到了XML的发明人,Tim Bray。他一开始的语法是很奇怪的,后来Tim说你应该用XML把他重新规划一下。97年的时候XML还是一个先进的技术。那么他们就把这个东西变成了RDF。
这玩意儿当时就算是很新颖的东西吧。在那之前元数据也有很多,比如说有Dublin Core,还有其他的我记不清了。为什么那些东西最后没能发展起来呢?因为都是面向机器的,它考虑的是怎么提高机器的效率。
RSS是不一样的,它想的是怎么提高人的效率,这样就火起来了。人是最重要的一件事情。到了1999年的时候,RDF就变成了W3C 的Recommendation(推荐标准)。
说一个小八卦吧。RDF的其中一个作者(Aaron Swartz)只有14岁,后来自杀了。因为他是一个热爱自由的人,他就偷那些论文,偷了几百万篇,然后被FBI给抓起来了,他就自杀了,死的时候年仅二十几岁。RDF就是有这么一个自由的基因在里头,由一群热爱自由的人创造出来的。
但是很不幸,1998年,它落入了逻辑学家的魔爪。2004年,被一群逻辑学家绑架了一个怪胎在上面,这个怪胎叫RDF语义,非常奇怪的一个高阶语义。把它说完就得花两天时间。2014年,有了RDF1.1。RDF曾经成了一个面向人的语言,后来到了某一个时期成了面向机器的语言。被绑架了,就是它厄运的开始。
在实践当中推理是很少被用到的,大多数时间我们有数据就够了,有一个结构化的东西就好。关键是成本,推理是非常需要成本的。
2006年,我们这个语义堆栈已经变成了这样一个复杂的东西。一开始语义网有一个叫做层次蛋糕的东西。大家都知道在网络领域有一个七层协议嘛。语义网也有一个类似的七层协议。有一些好事之徒把它从平面的变成立体的。这里面涉及到的概念绝大多数人读两个PhD都读不完。完全没有人能看得懂这东西。
2006年,Tim Berners-Lee(就是我们的神),已经看不惯这种事情了。他说,要有光!(呵呵)不是,要有Linked Data,于是就有了Linked Data。他发了个圣旨之后,大家都开始研究。然后到了2009年的时候,他跑到TED上去喊,Raw Data Now!大家也很打鸡血一样在那儿喊,就像练气功一样。他就是希望用这种个人魅力去逆转错误的趋势。所以后来他就是强调,数据一定要公开。
当然他也在不断地修正自己的理论,作为一个原教旨主义的数据公开主义者,到2006年,他认识到数据的公开和互联这件事情本身是高成本的,要先从低成本的东西开始做,一步一步地往前走。所以又是海一样的银子扔进去。他忽悠的最主要的成功对象就是军方。美国军方和英国军方又扔了上十亿的英镑和美元进去来做这个事情。
然后他终于成功忽悠了白宫。2009年的一个巨大的胜利就是白宫要求所有的部门都要有公开数据。每一个部门都必须把它的数据公开了。公开了以后怎么样呢?结构化吧。用什么结构化呢?就用RDF结构化。2009年,我们RPI就把这个项目给吃下来了,结构化美国所有的政府公开数据,最后大概有几百万个数据集。你能想象到的国民经济每一个领域的数据都有。
有了DBpedia(一个基于维基百科的结构化数据库),有了这个政府公开数据,然后才有了IBM Waston。所以Waston项目能走完最后的十个百分点。我记得Waston的文章里也提到了,就是把Linked Data给turn on和turn off,就是最后十个百分点的差距。所以说这十个(百分)点就是美国和英国的上十亿的钱砸进去砸出来的一点响,为我们在问答领域里做出了贡献。真的是有多少人工就有多少智能。
那么在这一点上我们看到,我们之所以在关联数据领域里面能够取得突破,是解放了思想。可以说当年Waston出来的时候,就好像在2012年在ImageNet上面发现了原来图像识别可以这么玩一样。一种震撼性的东西,哇哦,还可以这样子。我们2010年,发现原来Linked Data可以这样玩。我们解放了思想以后,从强语义可以推理、推理,然后soundness and completeness,我们想怎么能够降低成本。一个弱语义就够了,工程够用就可以了嘛!所以我们就有了后来一系列胜利。
这一块就是讲交换语言和存储语言的区别。RDF开始就是作为知识的交换语言被提出来,最早的时候,RSS嘛,还有就是元数据的管理,像苹果里面管理图片的数据,这样一种交换格式。如果大家还记得话,最早还有KIF,九十年代末的那些知识交换语言。
很不幸的是,到了某一个程度的时候,大家就把这个东西变成了数据存储语言。2006年前后,有一堆公司在想,既然用RDF可以做数据交换,也可以用RDF来做数据建模语言,然后再用RDF做数据存储语言。当时有PowerSet、Hakia,还有Twine啊这些公司来做这件事情。然后他们遇到了各种各样的问题,就是这个性能上不去,自己从头来做一整套的工具链,成本非常非常得高。
PowerSet没挺住,就把自己给卖掉了。
Hakia也把自己卖掉了。
Twine没有找到人去卖,最后就死掉了。
当时对RDF的定位,大家没有想清楚。当时谁也想不清楚,因为后来它们死了,我们才想清楚,这玩意儿不能作为存储语言。2013年,Google开始推Microdata,所以它现在推的knowledge graph都是Microdata。它是想,一定要轻,跟现有的工具链去尽可能融合在一起。后来它就推出了JSON-LD,另外一种格式,充分利用了现有的工具。
为什么?还是回到成本问题上来。人的成本,机器的成本,数据的成本。如果我们能尽可能地利用现有的工程基础,可以有效地降低这三样的成本。不需要去重新训练程序员,不需要去训练用户。我们可以用现成的软件,这些parser都不需要去重新写。我们原来写过的那些代码,运行的那些传统的接口,都可以重新去用。有效地降低了成本。
后来,存储语言就慢慢的就不再是RDF数据,变成了图数据库。微软有他自己的,Google也开发了自己的,雅虎也有。每个公司都内部开发一套,主要都是内存数据库。像Trinity的底层就是key-value store(键值数据库)。都是已经成熟的工程技术上面,包装出新的东西来,说到底还是一个成本的问题。
现在这几年在初创公司里面,大家用Graph Database(图数据库),兴起了一堆新的数据库。也有少量的人还在用triple store(三元组数据库),用SPARQL,但已经不再是主流了。这是大家血的教训换来的。
我们回过头来看,向工程妥协的时候,我们就胜利。向教条主义坚持的时候,我们就失败。就是整个领域的总结吧。2006年之前的时候,我们由弱语义转向强语义,我们就失败了,因为我们看重的是科学。2006年的时候,我们看重的是工程,所以就取得了小小的成功。
往前走的话,我觉得我们做工程,不是某一个领域,某一个算法就能解决的。比如我们现在构造知识图谱,需要知识工程的技术,需要自然语言处理的技术,需要规则系统,需要正则表达式,有时候可能正则表达式是最重要的。各种low的、high tech的东西。我们今天在写正则表达式,明天就在玩词嵌入。各种有机的算法我们都要融合在一起。没有什么人工智能技术是高的或者低的,一定是有效的才是最好的。