📑 查看全课大纲(第 7 / 26 节)
- 1.知识图谱和语音技术概述
- 2.典型知识库项目简介
- 3.知识图谱技术概览
- 4.典型应用案例
- 5.早期知识表示简介
- 6.基于语义网的知识表示框架
- 7.典型知识库项目的知识表示
- 8.基于本体工具的知识建模实践
- 9.面向非结构化数据的知识抽取
- 10.面向结构化数据的知识抽取
- 11.面向半结构化数据的知识抽取
- 12.实践:基于百科数据的知识抽取
- 13.面向文本的知识抽取
- 14.知识挖掘
- 15.从一个例子开始
- 16.图数据库介绍
- 17.什么是知识融合
- 18.知识融合的基本技术流程
- 19.典型知识融合工具简介
- 20.典型案例简介
- 21.LIMES实战演练
- 22.知识推理
- 23.语义搜索
- 24.知识问答
- 25.IBM watson Lite
- 26.行业知识图谱应用
典型知识库项目的知识表示
约 19 分钟
小象实战讲义 · 知识图谱
在上一节我们学习了RDF、RDFS、OWL等语义网知识表示框架。这些框架是构建知识图谱的“语法”和“规则”。本节我们将走进实践,看看这些理论是如何在著名的知识库项目中落地应用的。通过剖析DBpedia、Freebase、Wikidata等项目的知识表示特点,你将理解开放领域与行业领域知识图谱在构建哲学上的差异,并掌握处理复杂多元关系的多种技术方案。
💡 核心导读
- 从理论到实践:通过DBpedia实例,理解RDF三元组、本体层(dbo)与数据层(dbp)的区别,以及“自底向上”与“自顶向下”两种构建范式。
- 多元关系的挑战:知识世界中许多事实(如“奥巴马于2009年1月20日就任美国总统”)涉及多个维度,无法用简单的三元组表示。
- 解决方案巡礼:Freebase的CVT、Wikidata的Qualifier、ConceptNet的边属性,以及RDF空白节点,都是解决多元关系的有效手段。
- 实用主义哲学:好的知识表示应同时服务于机器与人,具备够用的表达能力并易于扩展,RDF/OWL是基础但非唯一选择。
开放领域知识图谱:DBpedia的表示实践
DBpedia是一个经典的开放领域知识图谱,它通过从维基百科的信息框(infobox)中抽取结构化数据构建而成。其知识表示清晰地体现了RDF三元组模型。
三元组结构示例
以下是一个关于“美国”的DBpedia知识片段(以Turtle格式简化表示):
@prefix dbr: <http://dbpedia.org/resource/> .
@prefix dbo: <http://dbpedia.org/ontology/> .
@prefix dbp: <http://dbpedia.org/property/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
dbr:United_States
a dbo:Country ; # 类型声明:是一个国家
dbo:capital <http://dbpedia.org/resource/Washington,_D.C.> ; # 首都(宾语是一个资源/实体;Turtle 中前缀名不能含逗号,故用完整 IRI)
dbo:areaTotal "9.833e6"^^xsd:double ; # 总面积(宾语是一个字面量)
dbp:areaLabel "9,833,520 km²" . # 面积标签(非本体层属性)解析:
- 主体(Subject):
dbr:United_States,一个由URI唯一标识的资源。 - 谓词(Predicate):如
dbo:capital、dbo:areaTotal,表示属性或关系。 - 客体(Object):可以是另一个资源(如
<http://dbpedia.org/resource/Washington,_D.C.>)或一个字面量(如“9.833e6”^^xsd:double)。
本体层与数据层的分野
DBpedia的知识表示有一个重要特征:区分了本体层约束和数据层描述。
- 本体层(dbo):如
dbo:capital、dbo:areaTotal。这些属性在DBpedia本体(http://dbpedia.org/ontology/)中明确定义,规定了“国家”这类实体应具备哪些属性及其值域(如capital的值应是地点资源)。这保证了知识的规范性和一致性,便于推理。 - 数据层(dbp):如
dbp:areaLabel。这些属性没有在本体层定义,可能仅出现在部分实体的描述中(例如美国有areaLabel,而中国可能没有)。它们使得知识抽取和构建更加灵活,但缺乏规范性。
构建范式:自底向上 vs 自顶向下
DBpedia的构建体现了 “自底向上”(Bottom-Up) 的范式:
- 先有数据:从维基百科页面中大量抽取三元组。
- 后形成本体:从已有的、可能不一致的数据模式中,逐步归纳、抽象出本体层(dbo)进行约束和规范化。 这种范式非常适合开放领域知识图谱,因为它能快速、大规模地获取知识,容忍初期的不一致,再逐步完善。
与之相对的是 “自顶向下”(Top-Down) 的范式,常见于行业或领域知识图谱:
- 先定义本体:在构建之初,就由领域专家精心设计本体(概念、属性、关系、约束)。
- 再填充数据:严格依据本体的约束来抽取、录入数据。 这种范式能确保数据质量高、逻辑一致,并方便进行复杂的推理,使知识更加聚焦。
多元关系表示:从三元组到N元组
现实世界中的许多知识并非简单的二元关系。例如,“巴拉克·奥巴马于2009年1月20日就任美国总统”这一事实,涉及主体(奥巴马)、职位(美国总统)、开始时间(2009-01-20)等多个维度。如何用RDF三元组模型表示这种N元关系?
方案一:RDF空白节点(Blank Node)
空白节点可以作为一个匿名资源,将多元关系“拆解”为多个三元组。
@prefix : <http://example.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:Barack_Obama :holdsOffice _:office1 .
_:office1 a :PresidentialTerm ;
:officeTitle :President_of_the_United_States ;
:startDate "2009-01-20"^^xsd:date ;
:endDate "2017-01-20"^^xsd:date .这里,_:office1是一个空白节点,它将职位、开始时间、结束时间等信息“打包”在一起,再通过holdsOffice关系与奥巴马关联。
方案二:Freebase的复合值类型(CVT)
Freebase(现已并入Wikidata)明确提出了复合值类型(Compound Value Type, CVT) 来处理多元关系。CVT本身就是一个有唯一标识的节点。
Barack Obama --[government_position_held]--> CVT_Node
CVT_Node --[office_holder]--> Barack Obama
CVT_Node --[office_position]--> President of the United States
CVT_Node --[from]--> 2009-01-20
CVT_Node --[to]--> 2017-01-20CVT节点的思想与空白节点类似,但它是一个显式定义的、可被引用的“一等公民”。
方案三:Wikidata的修饰符(Qualifier)与引用(Reference)
Wikidata设计了更精细的结构来表示带有上下文和来源的知识。
- 陈述(Statement):一个
属性-值对构成了一个陈述的基本骨架(如配偶:伊万娜·特朗普)。 - 修饰符(Qualifier):为陈述添加额外的限定信息,使其成为多元关系(如
开始日期:1977年4月7日,结束日期:1992年3月22日)。 - 引用(Reference):标明该陈述的知识来源(如某个维基百科页面)。在 Wikidata 的底层数据模型里,一条引用本身也是一组 Snak(“属性-值”对),其结构与修饰符完全相同——两者都是挂在同一个陈述之上的附加”属性-值”对,只是角色不同:修饰符约束陈述在何时/何地上成立,引用给出陈述的来源依据。
示例:伦敦人口
# 概念性示意图(非严格Wikidata语法)
wd:London (实体) --[wdt:P1082 (人口)]--> 8,173,900 (值)
|-- qualifier: wdt:P585 (统计时间) --> 2011 (值)
|-- reference: stated in --> 2011 UK Census (来源)这表示“伦敦人口为8,173,900(依据2011年英国人口普查)”。修饰符和引用使得知识具有了时效性和可追溯性。
方案四:ConceptNet的边属性
ConceptNet是一个常识知识图谱,它允许用自然语言描述节点。对于多元关系,它将附加信息作为边(Edge)的属性来处理。
节点A: 化妆 --[关系: Causes]--> 节点B: 变得更漂亮
边属性: {
surfaceText: 化妆 makes you look more beautiful,
weight: 2.0,
dataset: /d/conceptnet/4/en
}此外,对于像 “x 是 y 的第一个参数” 这样的多元关系,ConceptNet 5 并不会新建一条名为 ArgumentOf 的独立边(ConceptNet 5 官方定义的 37 种关系里并没有这一项),而是沿用本方案的统一思路——把 “第几个参数” 这类附加信息直接作为该条已有边自身的属性记录下来(例如在边上标注 argumentNumber: 1)。也就是说,多元关系的额外维度始终挂在边上,而不是再引入新的关系类型。
其他典型知识库掠影
YAGO:融合WordNet与维基百科
YAGO将WordNet的词汇分类体系(上层本体)与维基百科的实体(下层实例)相结合。绿色部分通常代表WordNet中的概念分类(如person, location),蓝色部分代表维基百科中的具体实体,通过type等关系连接。这也引出了实体消歧(Entity Disambiguation) 的问题:同一个字符串(如“Max Planck”)可能指向物理学家“马克斯·普朗克”或“马克斯·普朗克学会”两个不同实体,需要根据上下文进行区分和链接。
NELL:持续学习的抽取系统
NELL(Never-Ending Language Learner)是一个持续从网页文本中学习知识的系统。它使用预定义的类别和关系模板进行抽取,并为每个学到的三元组赋予置信度。其知识表示本质仍是三元组,但附带了丰富的元数据(如置信度、学习时间、来源文本)。
知识表示的实用主义总结
通过对各大知识库的考察,我们可以总结出实用知识表示的几个原则:
- 服务于人与机器:好的表示应便于人理解(如ConceptNet用自然语言节点),同时能被机器精确处理。
- 表达能力够用即可:不必追求OWL那样严格而复杂的逻辑完备性。许多成功的知识库仅使用RDF或RDFS,甚至自定义简单模式。
- 易于扩展:能够方便地增加新的类别、属性和实体。
- RDF/OWL是基础而非枷锁:它们是W3C标准,提供了强大的互操作基础。许多商业化知识图谱虽未直接采用RDF/OWL存储(可能用关系数据库或属性图),但其核心数据模型都能与RDF进行映射。理解RDF作为一种数据模型的本质,就能以不变应万变。
下表总结了各知识库处理多元关系的方式:
| 知识库 | 多元关系表述方案 |
|---|---|
| DBpedia | 无特别考虑,可通过空白节点等用多个三元组表示 |
| Freebase | CVT(复合值类型)节点 |
| Wikidata | Qualifier(修饰符)或 Reference(引用) |
| ConceptNet | 将多元关系添加为边的属性 |
📝 动手练一练
- 概念辨析:假设你要构建一个“电影-演员”知识图谱,记录演员在具体电影中扮演的角色。这是一个典型的多元关系(演员,扮演,角色,于电影)。你会选择上述哪种方案(空白节点、CVT、Qualifier、边属性)来表示?为什么?
- 动手构造:请用Turtle格式,使用RDF空白节点表示“汤姆·汉克斯在电影《阿甘正传》中饰演了福雷斯·甘”这一知识。假设已有前缀
: <http://example.org/movie/>。
👉 点击查看参考答案
概念辨析参考答案:
- 可以选择 Wikidata的Qualifier方案 或 空白节点/CVT方案。
- 理由:Qualifier方案清晰地将“扮演”作为核心关系,将“电影”和“角色”作为修饰信息,符合“陈述+修饰”的直觉,且便于查询某个演员的所有扮演记录。空白节点/CVT方案同样有效,它将“扮演事件”作为一个匿名或显式节点,逻辑上也很清晰。边属性方案可能稍显别扭,因为“电影”和“角色”与“扮演”关系的地位是平等的,而非边的附属属性。
动手构造参考答案:
@prefix : <http://example.org/movie/> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :Tom_Hanks :actedIn _:role1 . _:role1 a :RolePerformance ; :performanceIn :Forrest_Gump ; :characterName "Forrest Gump" ; :roleType :LeadingRole .(注:这里扩展了
actedIn关系,通过一个空白节点_:role1来关联电影和角色名。)
本章小结
本节我们跨越了理论框架,深入到DBpedia、Freebase、Wikidata、ConceptNet等知名知识库项目的内部,观察了知识表示是如何在实践中被设计和运用的。关键收获在于:
- 理解了本体层对规范性和推理的支持,以及数据层对灵活性和快速构建的意义。
- 掌握了自底向上(开放域)和自顶向下(领域)两种核心构建范式的区别与适用场景。
- 系统学习了处理多元关系的四种主流技术方案:空白节点、CVT、Qualifier和边属性,并了解了它们的优缺点。
- 树立了知识表示的实用主义视角:以解决问题为导向,选择够用、易扩展的表示方法,RDF/OWL是重要的基础模型和标准。
📋 行动清单
学完本节,你可以立即:
- 访问DBpedia:在浏览器中打开
http://dbpedia.org/page/United_States,查看其真实的RDF描述,尝试区分dbo和dbp前缀的属性。 - 浏览Wikidata:访问
https://www.wikidata.org/wiki/Q76(巴拉克·奥巴马条目),观察其陈述(Statements)、修饰符(Qualifiers)和引用(References)是如何组织的。 - 用Python体验:使用
rdflib库,将本节中任意一个Turtle示例代码段解析成图,并尝试写一个简单的SPARQL查询(如查询所有国家的首都)。
—— 小象教研组
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问