本文转自北京大数据研究院 BIBDR 公众号。
下图是截取的 Google 的知识图谱介绍网页中的一个例子。在例子中有 4 个实体,分别是“达芬奇”,“意大利”,“蒙拉丽莎”和“米可朗基罗”。这个图明确地展示了“达芬奇”的逐个属性和属性值(例如名字、生日和逝世时间等),以及之间的关系(例如蒙拉丽莎是达芬奇的画作,达芬奇出生在意大利等)。当我谈论到这时,我相信有很多读者会不经意地联系到数据库课程中的 “ER Diagram”(实体-联系图)的概念。从某种角度的来说,两者确实是有异曲同工之处。根据传统数据库理论,当我们将现实世界的事物映射到信息世界时,最需要关注的是两个方面的信息:实体(包括实体属性)和实体关系;而 ER 图是反映实体和实体关系的最为经典的概念模型。我们之所以称 ER 图是概念模型,因为它的设计是为人去理解客观世界的事物的,不是计算机实现的模型。在数据库管理系统历史上,出现过层次模型、网状模型和关系模型;这些是数据库管理系统(DBMS)所实现的计算机模型。因此实际的数据库应用项目中就存在了一个从概念模型到实现模型的转换问题,例如如何根据ER图来构建关系表。如果从这个角度上来看,知识图谱又不同于ER图,因为知识图谱不仅显示地刻画了实体和实体关系,而且其本身也定义了一种计算机所实现的数据模型(即 W3C 所提出的 RDF 三元组数据模型),这就是本文第一章介绍的内容。由于本文作者的研究背景是数据库,因此本文试图从数据管理的角度去介绍知识图谱的相关概论以及研究和应用中的问题。同时因为知识图谱本身是一个交叉性研究课题,本文也将介绍不同学科(包括自然语言处理、知识工程和机器学习等领域)在知识图谱研究中的侧重。

图 Google的知识图谱示例
谓词:谓词描述资源的特征或资源间的关系。每一个谓词都有其意义,用于定义资源在谓词上的属性值(Property Value)或者其他资源的关系。
陈述:一条陈述包含三个部分,通常称之为 RDF 三元组<主体 (subject),谓词 (predicate),宾语(object)>。其中主体一定是一个被描述的资源,由URI来表示。谓词可以表示主体的属性,或者表示主体和宾语之间某种关系;当表示属性时,宾语就是属性值,通常是一个字面值(literal);否则宾语是另外一个由URI表示的资源。
下图1展示了一个人物类百科的 RDF 三元组的知识图谱数据集。例如 y:Abraham_Lincoln 表示一个实体 URI(其中y表示前缀http://en.wikipedia.org/wiki/),其有 3 三个属性(hasName,BornOndate,DiedOnDate)和一个关系(DiedIn)。

图1.RDF数据的例子

图2.SPARQL查询的例子

图3.RDF图和SPARQL查询图

图4.Google搜索结果中的知识卡片

图5.Walmart(沃尔玛)线上商店的一个产品页面



图7.根据抽取的结构化数据产生的“Walmart产品页面”搜索结果摘要

图8.Facebook中将自然语言转换为结构化查询的一个示例

- 简单三列表
一种最为简单的将RDF数据映射到关系数据库表的方法是构建一张只有三列表(Subject,Property,Object),将所有的RDF三元组都放在这个表中。给定一个SPARQL查询,我们设计查询重写机制将SPARQL转化为对应的SQL语句,由关系数据库来回答此SQL语句。例如我们可以将图2中的SPARQL查询转换为图10中的SQL语句。

图10.转换以后的SQL查询
- 水平存储
文献[7]中提到的水平方法(Horizontal Schema)是将知识图谱中的每一个RDF主体(subject)表示为数据库表中的一行。表中的列包括该RDF数据集合中所有的属性。这种的策略的好处在于设计简单,同时很容易回答面向某单个主体的属性值的查询,即星状查询,如图11所示。

图11.水平存储

图12.水平存储上的SQL查询
- 属性表
属性表是水平存储的优化。根据每个实体所关联的属性集合,将不同的实体进行分类。每一类采用水平存储策略的数据库表。属性表在继承了水平存储策略优势的基础上,又通过对相关属性的分类避免了表中列数过多等问题。Jena2[10,11]中使用属性表以提高对RDF三元组的查询效率。研究者提出了两种不同的属性表,其一称为聚类属性表(clustered property table),另一类称为属性类别表(property-class table)。

图13. 聚类属性表
- 垂直划分策略
Abadi等人[12]以一种完全的分解存储模型(DSM[13],Decomposed Storage Model)为基础,将DSM引入了语义网数据的存储,提出了垂直分割技术。在垂直分割的结构下,三元组表被重写为N张包含两列的表,N等于RDF数据中属性的个数。每一张表都以相对应的属性为表名,其第一列是所有在这个属性上有属性值的主体,第二列是该主体在这个属性上的值。每一张表中的数据按照主体进行排序,从而能够迅速定位特定主体,而且将所有涉及主体-主体的表连接转换为可以迅速完成的排序合并连接 (Merge Join)。在对存储空间限制较少时,也可以对属性值这一列建立索引或对每个表建立一个按照属性值排序的副本,以提高涉及对特定属性值的访问和属性值-主体、属性值-属性值连接的性能。如图14中显示了将图1中的RDF数据集分解成8个二元表,并且每个二元表按照主体进行排序。

图14.二元垂直分割表
- 全索引策略
如前所述,简单的三列表存储的缺点在于自连接次数较多。为了提高简单三列表存储的查询效率,目前一种普遍被认可的方法是“全索引(exhaustive indexing)”策略, 例如RDF-3X[16]和Hexastore[17]。 列举三列表的所有排列组合的可能性(6种),并且按照每一种排列组合建立聚集B+-树。建立这样全索引的好处有两点:其一,对于SPARQL查询中的每个查询三元组模式,都可以转换成对于某个排列组合上的范围查询。例如 ?m <BornOnDate> “1809-02-12”这个查询三元组模式,可以转换为对于(P,O,S)排列上的范围查询。因为在(P,O,S)排列中,所有P, O为<BornOnDate>和“1809-02-12”的三元组都连在一起。其二,全索引的好处在于可以利用归并连接(Merge Join)降低连接的复杂度。我们知道嵌套循环(Nested Loop Join)连接的复杂度是O(|L1|*|L2|), 这里|L1|和|L2|分别表示两个待连接列表的长度。然而归并连接的复杂度是O(MAX(|L1|, |L2|) )。 例如从(P,O,S)排列中可以得到满足?m <BornOnDate> “1809-02-12”查询条件的?m的取值,并且这些取值按照顺序进行排列。同样的,从(P,O,S)排列中也可以得到满足?m <DiedOnDate> “1865-04-15”查询条件的?m的取值,并且这些取值也按照顺序进行排列。通过归并排序,我们可以很容易找到同时满足这两个查询条件的?m的取值。
虽然用全索引策略可以弥补一些简单垂直存储的缺点,但三元存储方式难以解决的问题还有很多。其一,不同的三元组其主体/属性/属性值可能重复,这样的重复出现会浪费存储空间。其二,复杂的查询需要进行大量表连接操作,即使精心设计的索引可以将连接操作都转化为合并连接,当SPARQL查询复杂时,其连接操作的查询代价依然不可忽略。其三,随着数据量增长,表的规模会不断膨胀,系统的性能下降严重;而且目前此类系统都无法支持分布式的存储和查询,这限制了其系统的可扩展性。其四,由于数据类型多样,无法根据特定数据类型进行存储的优化,可能会造成存储空间的浪费(例如,客体的值可能多种多样,如URI、一般字符串或数值。客体一栏的存储空间必须满足所有的取值,而无法进行存储优化)。为了解决这个问题,目前的全索引方法都是利用字典方式将所有的字符串和数值映射成一个独立的整数ID。但是这种字典映射的方法很难支持带有数值范围约束和字符串中的子串约束的SPARQL查询。
我们在文献[18]中提出一种利用子图匹配方法来回答SPARQL的方法,并构建了相关开源系统gStore。图15给出了系统架构图。在导入RDF知识图谱数据和构建索引阶段,首先将用户输入RDF的三元组文件表示成一张图G,通过链接列表的方式直接存储图G本身。为了加快子图匹配查询的速度,通过编码的方法,将RDF图G中的每个实体节点和它的邻居属性和属性值编码成一个带有Bitstring的节点,从而得到一张标签图G*。我们提出了一种面向G*图的VS-tree的索引结构,可以有效地支持在线查询的阶段的搜索空间过滤。在查询阶段,将用户的SPARQL查询转换为子图匹配查询,利用子图匹配查询的结果来回答用户的问题。图16展示了在3-5亿规模的三元组的国际标准测试集(LUBM和WatDiv)上,gStore系统和目前使用最为广泛的RDF知识图谱存储查询系统Virtuoso和Apache Jena之间的查询性能对比情况。由于基于图结构方法的索引可以考虑到查询图整体信息,因此总的来说查询图越复杂(例如查询图的边越多),gStore相对于对比系统的性能会更好,有的可以达到一个数量级以上的性能优势。gStore的分布式版本的在10台机器组成的Cluster上可以进行50-100亿规模的RDF知识图谱管理的任务。


图15.gStore系统架构

a.在WatDiv 3亿三元组规模数据上的评测结果

b.在LUBM 5亿三元组规模数据上的评测结果

图16.不同领域对“知识图谱”研究的侧重

图 17. TransE模型示例
(2)http://www.icst.pku.edu.cn/intro/leizou/projects/gStore.htm
(3) http://www.icst.pku.edu.cn/intro/leizou/projects/gAnswer.htm
(4)http://rdcu.be/o1nT
[2] Michael Curtiss, Iain Becker, Tudor Bosman, Sergey Doroshenko, Lucian Grijincu, Tom Jackson, Sandhya Kunnatur, Søren B. Lassen, Philip Pronin, Sriram Sankar, Guanghao Shen, Gintaras Woss, Chao Yang, Ning Zhang: Unicorn: A System for Searching the Social Graph. PVLDB 6(11): 1150-1161 (2013)
[3] David A. Ferrucci, Eric W. Brown, Jennifer Chu-Carroll, James Fan, David Gondek, Aditya Kalyanpur, Adam Lally, J. William Murdock, Eric Nyberg, John M. Prager, Nico Schlaefer, Christopher A. Welty:
Building Watson: An Overview of the DeepQA Project. AI Magazine 31(3): 59-79 (2010)
[4] RDF Access to Relational Databases. http://www.w3.org/2003/01/21-RDF-RDB-access/
[5]W3C Semantic Web Advanced Development for Europe (SWAD-Europe). http://www.w3.org/2001/sw/Europe/reports/scalable_rdbms_mapping_report/
[6] Storing RDF in a relational database. http://infolab.stanford.edu/~melnik/rdf/db.html
[7]Zhengxiang Pan, Jeff Heflin. DLDB: Extending Relational Databases to Support Semantic Web Queries. In Proceedings of PSSS’2003.
[8] Daniel J. Abadi. Column Stores for Wide and Sparse Data. In Proceedings of CIDR’2007. pp.292~297
[9] Jennifer L. Beckmann, Alan Halverson, Rajasekar Krishnamurthy, Jeffrey F. Naughton. Extending RDBMSs To Support Sparse Datasets Using An Interpreted Attribute Storage Format. In Proceedings of ICDE’2006. pp.58~58
[10] K. Wilkinson. Jena property table implementation. In SSWS. 2006.
[11] Kevin Wilkinson, Craig Sayers, Harumi A. Kuno, Dave Reynolds. Efficient RDF Storage and Retrieval in Jena2. In Proceedings of SWDB’2003. pp.131~150
[12] Daniel J. Abadi, Adam Marcus, Samuel Madden, Kate Hollenbach. SW-Store: a vertically partitioned DBMS for Semantic Web data management. VLDB J., 2009: 385~406
[13] George P. Copeland, Setrag Khoshafian. A Decomposition Storage Model. In Proceedings of SIGMOD Conference’1985. pp.268~279
[14] Jennifer L. Beckmann, Alan Halverson, Rajasekar Krishnamurthy, Jeffrey F. Naughton. Extending RDBMSs To Support Sparse Datasets Using An Interpreted Attribute Storage Format. In Proceedings of ICDE’2006. pp.58~58
[15] Eric Chu, Jennifer L. Beckmann, Jeffrey F. Naughton. The case for a wide-table approach to manage sparse relational data sets. In Proceedings of SIGMOD Conference’2007. pp.821~832
[16] Thomas Neumann, Gerhard Weikum. RDF-3X: a RISC-style engine for RDF. In Proceedings of PVLDB’2008: 647~659
[17] Cathrin Weiss, Panagiotis Karras, Abraham Bernstein. Hexastore: sextuple indexing for semantic web data management. PVLDB, 2008: 1008~1019
[18] Lei Zou, Jinghui Mo, Lei Chen, M. Tamer Özsu, Dongyan Zhao: gStore: Answering SPARQL Queries via Subgraph Matching. PVLDB 4(8): 482-493 (2011)
[19] Octavian Udrea, Andrea Pugliese, V. S. Subrahmanian: GRIN: A Graph Based RDF Index. AAAI 2007: 1465-1470
[20] Kai Zeng, Jiacheng Yang, Haixun Wang, Bin Shao, Zhongyuan Wang: A Distributed Graph Engine for Web Scale RDF Data. PVLDB 6(4): 265-276 (2013)
[21] Paolo Ciaccia, Marco Patella, Pavel Zezula: M-tree: An Efficient Access Method for Similarity Search in Metric Spaces. VLDB 1997: 426-435
[22] Anthony Fader, Stephen Soderland, Oren Etzioni: Identifying Relations for Open Information Extraction. EMNLP 2011: 1535-1545
[23] Percy Liang: Learning executable semantic parsers for natural language understanding. Commun. ACM 59(9): 68-76 (2016)
[24] Jens Lehmann, Robert Isele, Max Jakob, Anja Jentzsch, Dimitris Kontokostas, Pablo N. Mendes, Sebastian Hellmann, Mohamed Morsey, Patrick van Kleef, Sören Auer, Christian Bizer:
DBpedia – A large-scale, multilingual knowledge base extracted from Wikipedia. Semantic Web 6(2): 167-195 (2015)
[25] Thomas Rebele, Fabian M. Suchanek, Johannes Hoffart, Joanna Biega, Erdal Kuzey, Gerhard Weikum: YAGO: A Multilingual Knowledge Base from Wikipedia, Wordnet, and Geonames. International Semantic Web Conference (2) 2016: 177-185
[26] A. Bordes, N. Usunier, A. Garcia-Duran, J. Weston, and O. Yakhnenko. Translating embeddings for modeling multi-relational data. In Advances in Neural Information Processing Systems, pages 2787–2795, 2013
[27] Lei Zou, Ruizhe Huang, Haixun Wang, Jeffrey Xu Yu, Wenqiang He, Dongyan Zhao:
Natural language question answering over RDF: a graph data driven approach. SIGMOD Conference 2014: 313-324
[28] Lei Zou and M. Tamer Özsu. Graph-based RDF Data Management, Data Sci. Eng. (2017). doi:10.1007/s41019-016-0029-6, http://rdcu.be/o1nT (open access link)
[29] William Tunstall-Pedoe: True Knowledge: Open-Domain Question Answering Using Structured Knowledge and Inference. 80-92
[30] Lei Zou, M. Tamer Özsu,Lei Chen, Xuchuan Shen, Ruizhe Huang, Dongyan Zhao. gStore: A Graph-based SPARQL Query Engine. VLDB Journal, VLDB J, 2014.
[31] 段楠,从图谱搜索看搜索技术的发展趋势,中国计算机学会通讯,2013年8月第90期
北京大数据研究院是北大,北工大,中关村管委会,海淀区政府产学研用相结合的研究机构。旨在打造世界一流的大数据教育,科研创新,产业孵化平台。
OpenKG.CN
中文开放知识图谱(简称OpenKG.CN)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。