知识图谱学习(二): 知识表示

传统的知识图谱的KR,从逻辑和推理讲起,有一阶逻辑(first-order logic)和描述逻辑(description logic),后来又有逻辑程序(logic program)和生成规则(Production Rule)。
知识表现的数据结构,一般来说是那些“复杂”的结构,最常见的就是图(graph)和树(tree)。知识表现的图,是“有类型的边”(typed edge),分析方法和一般的图论和社交关系图谱中分析的无类型的边很不相同。
图的知识表现,演化出两个流派。一个是RDF图,一个是属性图(Property Graph)。


RDF图的基础是三元组,用URI命名节点和连接节点,有严格的语义,约束比较多。属性图没有严格的语义,可以比较自由地声明节点和边的属性。RDF的优势在于推理,但是三元组的组织使稍复杂的关系的表达很困难。属性图不定义推理,但是可以通过查询语言(如Gremlin)来做模式(pattern)的查找和图上的遍历(traverse),可以实现特设的(ad-hoc)的推理。


用图表示知识,丰富的知识结构主要表现为图上的边,各种推理算法就是在图上推导出边的算法。在传统图论里,有可达性(reachability)推理,有大量的优化研究。一些基本的传递性的推理,如分类树(taxonomy),是可以转化为图可达性推理的。但是大量的其他类型的推理,没有成熟的工程系统和算法可用。现有的图数据库,都局限很大,工程上成本很高。


图表示的另一个问题是对混合表示不是很友好。因为知识提取的成本是很高的,所以现实的工程中我们很难一步到位生成纯结构化的数据表示,我们的数据往往是结构化和非结构化(主要是文本)混合的。其中结构化的比例,结构化的质量,可能是在应用的过程中逐步提升的。开始的时候可能文本的比例比较大。虽然RDF图和属性图上的节点都可以有文本属性,但是图的索引还是与文本索引大不同,在实际使用中需要依赖集成Lucene之类的全文检索引擎。由于文本不是“一等公民”,很多建模难以实现,比如在RDF里文本不能作为三元组的主语。


所以树形的JSON最终脱颖而出,不是偶然的。它符合人的认知,满足了结构化和非结构化混合表示的需要,兼容现有的工程实现。JSON表示被称为“文档”(document),2009年以来兴起了很多文档数据库(document database)。最近又有了PostgeSQL和OrientDB这样混合关系与文档的数据库,可以实现可读性好、工程兼容性好、表达力也还够用的知识表示。


1.1 JSON
一些相关的库
attrdict a['foo']['bar']可以写做a.foo.bar 或a['foo'].bar。可读/写属性,可递归访问属性,继承dict的各种方法
marisa-trie 超级节约内存的字典
DAWG 另一个超级节约内存的字典
orderedmultidict 多值有序字典
jsonpickle JSON持久化。支持更复杂数据的存储
jq 命令行上的json处理和查询
pjson 在命令行上彩色打印json
jsonlint 格式化json
jsawk json的awk,一个快速的命令上的查询工具
json-diff 比较两个json
高级的话题,json pointer, json schema, xml2json, csv2json


1.2 YAML:JSON的超集
PyYAML是Python里的Yaml处理库.不过Yaml解析的速度比json慢得多,大概只有1/10。


1.3 RDF(Resource Description Framework即资源描述框架)
基础的RDF是非常非常简单的,RDF的基本单元是三元组(triple)。每个三元组是(主语Subject 谓语Predicate 宾语Object)这样的元组 tuple。主谓宾的取值称为“资源”(Resource,也就是RDF里的R)。资源可以是一个网址(URI),一个字符串或数字(严格来讲都是带类型的字符串,称为literal),或者一个“空节点”(blank node)。
有两种特殊类型的资源。rdfs:Class代表类。rdf:Property代表二元关系。有一种特殊的关系叫rdf:type ,声明一个资源属于某一个类。
RDF序列化的方式主要有:RDF/XML,N-Triples,Turtle,RDFa,JSON-LD等几种。
各种语法里,优先推荐用 Turtle 语法.

Python里的rdflib包可以很方便处理RDF


1.4RDFS和OWL(Web Ontology Language)都是用来描述RDF数据的

在RDF里我们可以声明一些规则,从一些关系推导出另一些关系。这些规则我们称为“schema”,所以有了RDFS(RDF Schema)。
OWL,其中O代表Ontology(本体),是一些数据和推理规则的集合。可以把OWL当做是RDFS的一个扩展,其添加了额外的预定义词汇.

JSON-LD是RDF的JSON语法,其中LD代表Linked Data。它要解决的是RDF没有好的Web兼容语法问题。经典的RDF语法是XML的.

知识图谱在逻辑上可分为模式层与数据层两个层次,数据层主要是由一系列的事实组成,而知识将以事实为单位进行存储。如果用(实体1,关系,实体2)、(实体、属性,属性值)这样的三元组来表达事实,可选择图数据库作为存储介质,例如开源的Neo4j、Twitter的FlockDB、sones的GraphDB等。

模式层构建在数据层之上,主要是通过本体库来规范数据层的一系列事实表达。本体是结构化知识库的概念模板,通过本体库而形成的知识库不仅层次结构较强,并且冗余程度较小。

猜你喜欢

转载自blog.csdn.net/juranyaoyingwen/article/details/80150952