计算机是个傻孩子,为了教这小崽子学聪明,人类绞尽脑汁。 2012 年 Google 又给孩子搞了套玩具,叫知识图谱。这几年开始大流行,做搜索引擎的,做大数据,做人工智能的,都给自家孩子装备了一套,内卷啊!
知识图谱说起来很简单,黑板上画一个个圈,代表 “实体”,圈跟圈之间画线,代表 “关系”。完事齐活。
比如,比尔盖茨是个 “实体”,美琳达盖茨是另个 “实体”,之间的关系是 “夫妻”。
Google 搞这个东东,对它的搜索业务那是真有用。 Google 早年间跟喜鹊一样,收集全天下的网页,藏自己家服务器上,用户想搜比尔盖茨,呼啦一下砸过去 2.76 亿个网页。
王老五就很痛苦,查查比尔盖茨老婆的名字,你给我 2.76 亿? Google 倒也有个对策,那就是 Page Rank,给网页一个比重。但这玩意也没啥鸟用,Page Rank 只是个网页权重排名,它哪里猜得到王老五查人家老婆的阴暗心理。
Google 也有点不好意思,俺是搜索引擎,尽给用户一堆 HTML 文件算什么本事。这种传统搜索,就是个字符匹配,匹配上了,就给一堆 unicode 的 html 文件。所以 Google 搞了知识图谱,打的口号是: Things, not strings。 要让计算机理解用户的语义,给用户搜出 “东西” 来,而不是给一堆乱字符。
所以,用户王老五在 Google 搜索框里写: who is bill gates' wife。 Google 马上给出美琳达盖茨。 这背后,就是 Google 的知识图谱在发挥作用。Google 的知识图谱,就是在天下事物之间,建立普遍关联。这种知识图谱,有点半结构化数据的意思。当然,其实计算机也并非真的理解了语义,只是了解了事物之间的关联而已。不过,人类自己的字典,也不过是用字词互相解释罢了。人类的优势在于,说起苹果,人类是摸过、啃过、看过苹果的,计算机就没戏了,只能得到一个解释:苹果是一种水果。 用水果这个词来解释苹果。
知识图谱的用途,可就大了,真不是就搜索下盖茨太太那么简单。 有了好的知识图谱,搜索、推理、分析都容易了,尤其是深度发掘,比关系型数据库效果可好多了。另外,知识图谱的更新还特容易,关系型数据库你想改个字段,费老劲了。
更重要的是,知识图谱这种数据结构,给神经网络、深度学习做自然语言处理,可谓如虎添翼。没有知识图谱之前,深度学习输入的都是词向量什么的,仿佛机器没有润滑油。有了知识图谱,词与词之间已经带着语义关系,那深度学习在处理自然语言上,效果突飞猛进。
知识图谱这个词啊,最早来自 1972 年,一位叫 Schneider 的教授为了设计一套辅助教学计算机系统,在论文中提及了 Knowledge Graph,在课堂讲解的各种概念之间建立关联。后来,80年代,荷兰的两家大学 Groningen 和 Twente 发起了个项目,认真开始开发知识图谱,但其实,那个不是今天的知识图谱,而是要算做知识图谱的祖先,是一种语义网络 (Semantic Network)。
语义网络 (Semantic Network)来自一本书,M. Ross Quillian 在 1963 年写的,名字叫:A Notation for Representing Conceptual Information: an Application to Semantics and Mechanical English Paraphrasing。实在找不到这本书了,也不知道内容是干嘛的,看名字,似乎是关于怎样表示概念信息的。Robert F. Simmons 在 Synthetic language behavior 一书中也提及过 Semantic Network。
语义网络看上去跟知识图谱几乎一样,也是在“实体” 之间拉线拉箭头,然后标上关系。但是语义网络比较初级,所以就比较自由,不管是节点,还是关系,都是随意写的。看上去实现了实体之间的关系,但这种关系依赖自然语言,依然是模糊的。所以,语义网络用来做查询和推理,就不大容易。而知识图谱,在设计的时候,就必须定义好节点类型和关系类型。 例如,如果用语义网络,那么“比尔盖茨” 和 “美琳达盖茨” 就是两个节点,之间的关系可以写 “夫妻”,也可以写 “感情破裂的夫妻”。 而如果用知识图谱,则必须首先定义一种节点类型叫 “人”,在定义一种关系叫 “夫妻”,然后把比尔夫妻俩给填写进去。如果用上 OWL 本体,那还可以定义夫妻这种关系是双向的:比尔哥,你是我的夫啊,美琳姐,你是我的妻呀。推理做起来就更方便了。
语义网络和知识图谱,都是知识表示这个大范畴里的。 是不是知识表示,就只能在黑板上画圈圈,画线? 当然不是,画图是后来人聪明了才想出来的,之前就还是直接用语言,当然用的是一种抽象过的语言,逻辑语言。 这个历史就悠久了,可追溯到亚里士多德。亚里士多德是逻辑学的祖师爷,他是很多领域祖师爷,简直可以说,他是所有领域的祖师爷,除了中药、风水和 Kong Fu。在讲解逻辑时,他用自己老师苏格拉底做了个比喻,这就是著名的三段论: 人皆有一死;苏格拉底是人;苏格拉底必死。
后来经过莱布尼茨、布尔的努力,一直到弗雷格手里,现代逻辑学成熟了。罗素厚厚的《数学原理》则用逻辑重建了整个数学体系。有一种说法,指责咱中国人不重视逻辑,这真是胡扯。养生理论里吃什么补什么,吃腰子补肾,这逻辑杠杠的,多么硬啊。这里安利一本书,叫《逻辑的引擎》,一路讲莱布尼茨、布尔、弗雷格、康托尔、阿尔伯特、哥德尔、图灵的故事,看起来很过瘾。
用来表述知识的逻辑有命题逻辑、一阶逻辑、多阶逻辑。 命题逻辑表述能力弱,不能做复杂的推理。我感觉,命题逻辑比较适合亚洲人的思维,Yes 或者 No,跟我扯别的没用。看看微博还有一些讨论群,发言多数都是命题逻辑。一阶逻辑可以量化个体,且引入了谓词函数,但一阶逻辑不可判定(为啥不可判定,这个有证明,但看不懂)。多阶逻辑则量化了一阶关系和谓词。由于一阶逻辑无可判定,后来又出来个描述逻辑,描述逻辑是一阶逻辑的子集,其中不使用变量,而是只使用常量。
逻辑可不仅仅用于语言描述,它是计算机和人工智能的基础。人工智能中的符号派,就是依赖逻辑。符号一派追求真理,他们认定人类思考的方式就是逻辑和符号,所以一门心思要教计算机学会逻辑和符号。
关于思维到底是什么形式,这个问题太诡异。 人人都有脑,也都能思维,但愣是不知道这2斤半是怎么工作的。 要计算机学会人脑思维,符号派认为要模拟思维,要摆弄逻辑、符号;连接派就认为你费那劲干啥,吃腰子补肾,吃脑花补脑,根据脑神经搭个电路不就完了?所以,这几年连接派占上峰,那也是中医理论的伟大胜利。
心理学和语言学的学者们,也不甘示弱,怎么知识表示这个领域让逻辑学家抢占了呢? 认知科学家乔治米勒发明了 WordNet,这个看起来跟个大字典一样,只是字典是用其他词句来解释一个词,而 WordNet 则在词与词之间建立了关系,例如 Bill Gates 的上位词(就是层次归类):
乔治米勒是认知科学的创始人,后来IBM把自己的人工智能就称为认知计算。
人工智能鼻祖之一,马文明斯基在 1975 年的论文 “A Framework for Representing Knowledge” 中提出框架理论。框架这个词听起来莫名其妙,但程序员一看,就得大呼,这不就是面向对象么。 OO来自框架理论,当然看起来面熟。 马文明斯基的框架理论,影响了众多领域,包括计算机编程语言、知识表示、人工智能、认知科学,甚至包括新闻传播。 本质上,框架理论与前面所述的语义网络是一致的。一个框架,在语义网络中就是一个节点,代表一个实体,而框架的槽,则是语义网络的边。
计算机处理知识的另一个领域是专家系统,这个也是历史悠久。第一个专家系统是费根鲍姆领导的 Dendral,合作者是李德伯格和卡尔·杰拉西。费根鲍姆是大神,图灵奖获得者,他老师就是诺贝尔和图灵奖的双料西蒙。李德伯格是诺贝尔奖获得者。杰拉西虽然没得图灵奖和诺贝尔奖,但他是口服避孕药的发明人,男女欢愉的守护神。Dendral 很像今天的规则引擎,其目的是分析火星物质的质谱数据,以寻找火星生命,正是今天首富 Elon 所喜欢的领域。 Deneral 把化学家们的质谱分析知识写成代码规则,然后对实际数据进行分析。
后来,Dendral 项目组成员 Bruce G. Buchanan 布坎南,敏锐认识到,专家系统应该应用到医学领域,他发起了 MYCIN 项目,用专家系统来帮助诊断细菌感染的疾病。 准确率能够赶上一般的医生。 MYCIN 比起 DENDRAL 系统还是有进步的,因为 MYCIN 引入了产生式规则,可用于不精确的规则匹配。 所以今天知识图谱广泛的应用于医疗,这也是有传统的。人们一提起专家,就想起医生,总盼望着能用计算机替代医生,然而这件事至今还是前途未卜。 IBM 的 Watson 医疗投入巨大,但最终黯然收场。不止一个医生对我冷笑:AI 替代程序员了,都替代不了俺们医生。
第一个大规模商用的专家系统是 DEC 的 Xcon,用来根据订单配置零部件,有点像 ERP 里的 BOM。专家系统的高峰时期,是 80 年代日本发起的五代机项目。日本当时经济发展火得一塌糊涂,于是雄心勃勃要在计算机领域当老大,五代机目的是人工智能,逻辑推理和知识是其核心发展目标。 后来,大家都知道,没搞成,也不可能搞成。但是,日本的计划也吓到了美欧等国家,一窝蜂的跟着喊口号、投钱,最后都没做成,搞得专家系统也跟着冷落下去。
还有个东西,跟语义网络和知识图谱都有关系,那就是语义网(Semantic Web),听上去跟语义网络很像,容易混淆,但不是一回事。 语义网是 Tim Lee,Web 之父发起的,目的可以理解成,把整个互联网构造成一个大的知识图谱。语义网中设计应用了 RDF 语言,这个和知识图谱用的一样,用来建模和存储知识。另外,语义网还设计了 RDFS 和 OWL,对 RDF 加了两层标准定义,一来呢,让所有的网站和机器之间交换数据时能够互相理解,另一个,可以实现复杂的逻辑推理。Tim Lee 一直关注的是数据的自由流动,希望所有网站都能链接起来,并且可以互相理解。 这几年他老人家还搞了个 Solid,就是用RDF、LinkData技术,要让个人掌握自己的数据,革他妈妈大网站的命。
对于语义网有两种冲突的评价,一种是批评,例如尼克老师的人工智能简史中说 “W3C 语义网经过几次迭代后演化成大杂烩,理论上不严谨,实践上不可用。与 Dendral 和 Mycin 对比,无论理论还是实践上都不可同日而语。” 尼克老师甚至评价 Tim Lee 的图灵奖是历届中含金量最低的,可谓辛辣;另一种是赞美,例如鲍捷老师在演讲中说:“2006年,Tim Berners-Lee(就是我们的神),已经看不惯这种事情了。他说,要有光!(呵呵)不是,要有Linked Data,于是就有了Linked Data。他发了个圣旨之后,大家都开始研究。”,他还说了: “但是很不幸,1998年,它落入了逻辑学家的魔爪。2004年,被一群逻辑学家绑架了一个怪胎在上面,这个怪胎叫RDF语义。”,以及:“我们回过头来看,向工程妥协的时候,我们就胜利。向教条主义坚持的时候,我们就失败。”
我是个智商一般的普通从业者,完全迷惑了,不知道该听那一边的,知识储备完全不具备这个判断能力。得,都听一下吧。 尼克老师的人工智能简史成了我的工具书,随手翻。其中关于学界的八卦逸事读起来有盐有甜,滋味十足。 我手头随手翻的,还有一套金瓶梅,清河县翻腾的是哥弟爹爷、姐妹姑婆,计算机学界里翻腾的就是师徒弟子、教授博士,都一样精彩。
人工智能还在曲折前行,故事琐碎一郎当。知识表示也好,逻辑推理也好,还在步步向前。知识图谱生逢其时,数据积累已多,人们需要计算机能够理解数据的语义关系,深度学习也需要人类给它喂点精料,而不是一堆无意义的字符串让它啃得口吐白沫。
有了这教具,计算机这孩子会越来越聪明。反过来说,人类也会越来越聪明,毕竟,教孩子的同时,自己也有提高。人类的自然语言,太笨拙了。如果有一天,外星人来造访,听了英语中文那模糊不清嘟嘟囔囔的黏糊劲,没准抛开人类直接对话计算机。计算机就从知识图谱里推理并检索出一条知识给外星人: