📑 查看全课大纲(第 7 / 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:capitaldbo:areaTotal,表示属性或关系。
  • 客体(Object):可以是另一个资源(如 <http://dbpedia.org/resource/Washington,_D.C.>)或一个字面量(如 “9.833e6”^^xsd:double)。

本体层与数据层的分野

DBpedia的知识表示有一个重要特征:区分了本体层约束和数据层描述

  • 本体层(dbo):如 dbo:capitaldbo:areaTotal。这些属性在DBpedia本体(http://dbpedia.org/ontology/)中明确定义,规定了“国家”这类实体应具备哪些属性及其值域(如capital的值应是地点资源)。这保证了知识的规范性和一致性,便于推理。
  • 数据层(dbp):如 dbp:areaLabel。这些属性没有在本体层定义,可能仅出现在部分实体的描述中(例如美国有areaLabel,而中国可能没有)。它们使得知识抽取和构建更加灵活,但缺乏规范性。

构建范式:自底向上 vs 自顶向下

DBpedia的构建体现了 “自底向上”(Bottom-Up) 的范式:

  1. 先有数据:从维基百科页面中大量抽取三元组。
  2. 后形成本体:从已有的、可能不一致的数据模式中,逐步归纳、抽象出本体层(dbo)进行约束和规范化。 这种范式非常适合开放领域知识图谱,因为它能快速、大规模地获取知识,容忍初期的不一致,再逐步完善。

与之相对的是 “自顶向下”(Top-Down) 的范式,常见于行业或领域知识图谱

  1. 先定义本体:在构建之初,就由领域专家精心设计本体(概念、属性、关系、约束)。
  2. 再填充数据:严格依据本体的约束来抽取、录入数据。 这种范式能确保数据质量高、逻辑一致,并方便进行复杂的推理,使知识更加聚焦。

多元关系表示:从三元组到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-20

CVT节点的思想与空白节点类似,但它是一个显式定义的、可被引用的“一等公民”。

方案三: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)是一个持续从网页文本中学习知识的系统。它使用预定义的类别和关系模板进行抽取,并为每个学到的三元组赋予置信度。其知识表示本质仍是三元组,但附带了丰富的元数据(如置信度、学习时间、来源文本)。

知识表示的实用主义总结

通过对各大知识库的考察,我们可以总结出实用知识表示的几个原则:

  1. 服务于人与机器:好的表示应便于人理解(如ConceptNet用自然语言节点),同时能被机器精确处理。
  2. 表达能力够用即可:不必追求OWL那样严格而复杂的逻辑完备性。许多成功的知识库仅使用RDF或RDFS,甚至自定义简单模式。
  3. 易于扩展:能够方便地增加新的类别、属性和实体。
  4. RDF/OWL是基础而非枷锁:它们是W3C标准,提供了强大的互操作基础。许多商业化知识图谱虽未直接采用RDF/OWL存储(可能用关系数据库或属性图),但其核心数据模型都能与RDF进行映射。理解RDF作为一种数据模型的本质,就能以不变应万变。

下表总结了各知识库处理多元关系的方式:

知识库多元关系表述方案
DBpedia无特别考虑,可通过空白节点等用多个三元组表示
FreebaseCVT(复合值类型)节点
WikidataQualifier(修饰符)或 Reference(引用)
ConceptNet将多元关系添加为边的属性

📝 动手练一练

  1. 概念辨析:假设你要构建一个“电影-演员”知识图谱,记录演员在具体电影中扮演的角色。这是一个典型的多元关系(演员,扮演,角色,于电影)。你会选择上述哪种方案(空白节点、CVT、Qualifier、边属性)来表示?为什么?
  2. 动手构造:请用Turtle格式,使用RDF空白节点表示“汤姆·汉克斯在电影《阿甘正传》中饰演了福雷斯·甘”这一知识。假设已有前缀 : <http://example.org/movie/>
👉 点击查看参考答案
  1. 概念辨析参考答案

    • 可以选择 Wikidata的Qualifier方案空白节点/CVT方案
    • 理由:Qualifier方案清晰地将“扮演”作为核心关系,将“电影”和“角色”作为修饰信息,符合“陈述+修饰”的直觉,且便于查询某个演员的所有扮演记录。空白节点/CVT方案同样有效,它将“扮演事件”作为一个匿名或显式节点,逻辑上也很清晰。边属性方案可能稍显别扭,因为“电影”和“角色”与“扮演”关系的地位是平等的,而非边的附属属性。
  2. 动手构造参考答案

    @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查询(如查询所有国家的首都)。

—— 小象教研组

配套学习资源与课件
  • 第2章课件:知识表示和知识建模
    下载
  • 第2章示例数据(kgexample.owl)
    下载
  • 知识图谱课程思维导图(KG_Centralized.xmind 全课程结构图)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信二维码:扫码添加课程顾问微信扫码添加顾问