第 2 讲 · 知识工程与图数据库

机器学习是让机器从样本中“猜”规律,知识工程则尝试把人已经知道的事实和规则明确交给机器。二者解决的不是同一个问题:前者擅长从像素、声音等连续数据中拟合模式,后者擅长表达实体、关系和可追溯的事实。

数据、信息和知识

一串孤立数字只是数据;知道它们是“每一天的气温”,数据才有语义,成为信息;进一步知道“连续高温时要调整生产计划”,才形成可行动的知识。课件把知识看作经过组织、带有语境并能够支持判断的信息。

知识可以有许多分类:经验知识与理论知识、对象层知识与元知识、全局与局部、显式与隐性、完备与不完备、确定与不确定、陈述性与过程性、固定与可变化。分类的目的不是背名词,而是提醒我们:不同知识不能都塞进同一种表示。例如“南京是江苏省省会”适合陈述为事实,“怎样排查程序错误”更像过程,“这个诊断有 70% 概率”还要表达不确定性。

一个知识系统通常至少包含:

  • 领域知识:这个世界中有哪些对象和事实;
  • 推理知识:从已知事实怎样得到新结论;
  • 任务知识:解决当前问题时,先做什么、后做什么。

知识工程不只是录入资料,还包括获取知识、建模、实现系统、验证结果,以及在系统给出答案时解释“为什么”。

语法正确不等于有意义

机器理解一段表示,需要逐层解决:

  1. 语法:表示是否符合格式;
  2. 语义:符号指向什么;
  3. 语境:同一个词在当前上下文中的含义;
  4. 语用:说这句话的目的是什么;
  5. 经验:现实世界中哪些默认常识没有被写出来。

这也是开放世界知识表示困难的原因。仅仅把自然语言换成 XML 或 JSON,只是换了语法;如果实体没有统一身份、关系没有明确定义,机器仍然不知道各字段在现实里指什么。

从网页到语义网

普通 Web 主要把文档链接给人看,语义网希望进一步把“资源之间的关系”链接给机器。URI 用来给资源稳定命名。需要注意,现实资源和介绍它的网页不是一回事:一个人的 URI 指向这个人,个人主页 URI 指向一份文档。服务器还可以通过内容协商,让同一个资源按请求返回 HTML 或机器可读数据。

RDF 用三元组表达事实:主语和谓语通常是 URI,宾语可以是 URI,也可以是字符串、数字等字面量;暂时没有全局名字的资源可以使用空白节点。

RDF 三元组把一个事实拆成主语、谓语和宾语

同一批三元组可以写成 N-Triples、RDF/XML 等不同语法。语法不同,图的含义不变。多个数据源若使用共同 URI,就能形成 Linked Data;DBpedia 之类的数据集再通过 SPARQL 提供跨图查询。

图数据库的五个基本对象

Neo4j 使用属性图模型:

  • 节点 Node:实体;
  • 关系 Relationship:带方向、带类型的边;
  • 属性 Property:节点或关系上的键值对;
  • 标签 Label:给节点分组,如 Person;
  • 路径 Path:一串相连节点和关系。

RDF 和属性图都能画成点和边,但不要把它们完全等同。RDF 的谓语本身是可全局标识的资源,强调语义互联;Neo4j 的标签、关系类型和属性更贴近数据库工程。

Cypher:先画模式,再写查询

圆括号表示节点,方括号表示关系,箭头表示方向:

CREATE (lee:Person {name: '李东骏', studentId: '23371100'})
CREATE (course:Course {name: '人工智能导论'})
CREATE (lee)-[:TAKES {semester: 'spring'}]->(course)

查询时用 MATCH 描述想找的图形,用 WHERE 过滤,用 RETURN 输出:

MATCH (p:Person)-[r:TAKES]->(c:Course)
WHERE c.name = '人工智能导论'
RETURN p.name, r.semester

删除前也要先匹配。节点还连着关系时,直接 DELETE 通常会失败;可明确先删关系,或在确认范围后使用 DETACH DELETE:

MATCH (p:Person {studentId: '23371100'})
DETACH DELETE p

推荐系统就是一个典型图模式:用户喜欢商品,其他相似用户也喜欢某些商品,就可以沿“用户—商品—用户—商品”的路径找候选。不过图上存在路径,只说明它是候选关联,不自动证明因果关系。

建图时最容易犯的三个错误

  1. 把名字当唯一身份:同名实体会被误合并。应该另设稳定 ID。
  2. 关系方向随手写:人物-[:属于]->组织 和反方向查询不同,建模前先约定。
  3. 边界无限扩张:知识图谱不需要把全世界都录进去。先明确要回答的问题,再决定节点和关系。

本讲的作业正是用 Cypher 建一个节点数超过 10 的主题知识图谱。第 6 讲以后会转向从数据中学习;知识工程提供的是另一种“把已知知识交给机器”的路径。

评论