知识表示与专家系统


文档摘要

知识表示与专家系统 符号AI内容概述 笔记由 Tomomi Imura 绘制 人工智能的追求基于对知识的搜索,以类似于人类的方式理解世界。但你该如何去做呢? 课前测验 在人工智能的早期阶段,创建智能系统的自上而下的方法(在前一课中讨论过)很受欢迎。其想法是从人们那里提取知识并将其转换为机器可读的形式,然后使用这些知识自动解决问题。这种方法基于两个主要思想: 知识表示 推理 知识表示 在符号AI中一个重要的概念是知识。重要的是要区分知识与信息或数据。例如,有人说书籍包含知识,因为通过研究书籍可以成为专家。然而,书籍实际包含的是数据,通过阅读书籍并将这些数据整合到我们的世界模型中,我们才能将数据转化为知识。 ✅ 知识是我们头脑中的某种东西,代表我们对世界的理解。

知识表示与专家系统

符号AI内容概述

笔记由 Tomomi Imura 绘制

人工智能的追求基于对知识的搜索,以类似于人类的方式理解世界。但你该如何去做呢?

课前测验

在人工智能的早期阶段,创建智能系统的自上而下的方法(在前一课中讨论过)很受欢迎。其想法是从人们那里提取知识并将其转换为机器可读的形式,然后使用这些知识自动解决问题。这种方法基于两个主要思想:

  • 知识表示
  • 推理

知识表示

在符号AI中一个重要的概念是知识。重要的是要区分知识与信息数据。例如,有人说书籍包含知识,因为通过研究书籍可以成为专家。然而,书籍实际包含的是数据,通过阅读书籍并将这些数据整合到我们的世界模型中,我们才能将数据转化为知识。

知识是我们头脑中的某种东西,代表我们对世界的理解。它是通过一个主动的学习过程获得的,这个过程将我们接收到的信息整合到我们对世界的动态模型中。

大多数时候,我们不会严格定义知识,而是通过DIKW金字塔将其与其他相关概念对齐。它包含以下概念:

  • 数据是指以物理媒体形式表示的东西,如书面文字或口语。数据独立于人类存在,并可以在人与人之间传递。
  • 信息是我们头脑中对数据的解释。例如,当我们听到“计算机”这个词时,我们对其有一些理解。
  • 知识是信息被整合到我们的世界模型中。例如,一旦我们了解了计算机是什么,我们就开始对它的工作原理、价格以及用途有一些想法。这种相互关联的概念网络构成了我们的知识。
  • 智慧是我们对世界的理解的又一个层次,它代表了关于何时和如何使用知识的元知识。

图来自维基百科 CC BY-SA 4.0

因此,知识表示的问题在于找到一种有效的方法,在计算机中以数据形式表示知识,使其能够自动使用。这可以看作是一个光谱:

知识表示光谱

图片由 Dmitry Soshnikov 提供

  • 在左侧,有非常简单的知识表示类型,计算机可以有效地使用它们。最简单的一种是算法型,即知识由计算机程序表示。然而,这不是表示知识的最佳方式,因为它是不灵活的。我们头脑中的知识往往是非算法的。
  • 在右侧,有像自然语言这样的表示方法。这是最强大的,但不能用于自动推理。

✅ 想一想你是如何在头脑中表示知识并将其转化为笔记的。有没有一种特定的格式对你来说有助于记忆?

计算机知识表示的分类

我们可以根据以下类别对不同的计算机知识表示方法进行分类:

  • 网络表示基于我们头脑中有相互关联的概念网络这一事实。我们尝试在计算机中重现相同的网络——所谓的语义网络
  1. 对象-属性-值三元组属性-值对。由于图可以在计算机内部表示为节点和边的列表,我们可以用对象-属性-值三元组的列表来表示语义网络。例如,我们构建了以下关于编程语言的三元组:
对象 属性
Python 非类型语言
Python 发明者 Guido van Rossum
Python 块语法 缩进
非类型语言 不包括 类型定义

✅ 思考一下三元组如何用于表示其他类型的知识。

  1. 分层表示强调了我们经常在头脑中创建对象层次结构的事实。例如,我们知道金丝雀是一种鸟,所有鸟都有翅膀。我们还知道金丝雀通常是什么颜色的,以及它的飞行速度。

    • 框架表示基于将每个对象或对象类表示为包含框架。槽可能具有默认值、值限制或调用存储过程以获取槽值的能力。所有框架形成一个层次结构,类似于面向对象编程语言中的对象层次结构。
    • 场景是一类特殊的框架,表示在时间中展开的复杂情况。

Python

默认值 区间
名称 Python
非类型语言
变量大小写 骆驼式命名法
程序长度 5-5000行
块语法 缩进
  1. 过程表示基于通过执行某些条件发生时的动作列表来表示知识。

    • 生产规则是if-then语句,允许我们得出结论。例如,医生可能有一条规则说如果患者发烧高或血液检查中C反应蛋白水平高他患有炎症。一旦我们遇到其中一个条件,我们就可以得出炎症的结论,然后在进一步推理中使用它。
    • 算法可以被视为另一种形式的过程表示,尽管它们几乎从未直接用于基于知识的系统。
  2. 逻辑最初是由亚里士多德提出的,作为一种表示普遍人类知识的方式。

    • 谓词逻辑作为一种数学理论太丰富,无法计算,因此通常使用其子集,如Prolog中使用的Horn子句。
    • 描述逻辑是一系列逻辑系统,用于表示和推理分布式知识表示,如语义网中的对象层次结构。

专家系统

符号AI早期的成功之一是所谓的专家系统——计算机系统旨在作为某个有限问题领域的专家。它们基于从一名或多名人类专家提取的知识库,并且包含一个推理引擎,该引擎在其上执行一些推理。

人类架构 基于知识的系统
简化的人类神经系统的结构 基于知识的系统架构

专家系统构建方式类似于人类的推理系统,该系统包含短期记忆长期记忆。类似地,在基于知识的系统中,我们区分以下组件:

  • 问题内存:包含当前正在解决的问题的知识,即患者的体温或血压、他是否有炎症等。这种知识也称为静态知识,因为它包含我们当前对问题的知识快照——所谓的问题状态
  • 知识库:表示问题领域的长期知识。它从人类专家手动提取,并且每次咨询都不改变。因为它允许我们在一个问题状态到另一个问题状态之间导航,所以也被称为动态知识
  • 推理引擎:协调整个在问题状态空间中搜索的过程,必要时向用户提问。它还负责找到适用于每个状态的正确规则。

例如,让我们考虑以下根据动物的物理特征确定动物的专家系统:

AND-OR 树

图片由 Dmitry Soshnikov 提供

这个图表称为AND-OR树,它是生产规则集的图形表示。绘制树在从专家提取知识的初期很有用。为了在计算机中表示知识,使用规则更方便:

IF the animal eats meat OR (animal has sharp teeth AND animal has claws AND animal has forward-looking eyes ) THEN the animal is a carnivore

你可以注意到规则左边的每个条件和动作本质上都是对象-属性-值(OAV)三元组。工作内存包含与当前正在解决的问题相对应的OAV三元组集合。规则引擎查找满足条件的规则并应用它们,向工作内存添加新的知识片段。

✅ 写出一个你自己喜欢主题的AND-OR树!

正向推理与反向推理

上述过程称为正向推理。它从工作内存中关于问题的一些初始数据开始,然后执行以下推理循环:

  1. 如果目标属性存在于工作内存中——停止并给出结果
  2. 查找所有当前满足条件的规则——获得冲突集规则。
  3. 执行冲突解决——选择一个将在本步骤执行的规则。可能有不同的冲突解决策略:
    • 选择知识库中的第一个适用规则
    • 选择一个随机规则
    • 选择一个更具体的规则,即满足“左部”(LHS)最多条件的一个
  4. 应用所选规则并将新知识插入问题状态
  5. 从步骤1重复

然而,在某些情况下,我们可能希望从对问题的知识为空开始,并提出有助于我们得出结论的问题。例如,在医学诊断中,我们通常不会在开始诊断患者之前进行所有医疗分析。我们更希望在需要做出决定时才进行分析。

这个过程可以通过反向推理建模。它由目标驱动——我们要寻找的属性值:

  1. 选择所有能给我们目标值的规则(即,右部有目标的规则)——冲突集
  2. 如果没有针对该属性的规则,或者有规则说我们应该从用户那里询问该值——询问,否则:
  3. 使用冲突解决策略选择一个我们将用作假设的规则——我们将尝试证明它
  4. 对规则的左部中的所有属性递归地重复此过程,尝试将它们作为目标证明
  5. 如果在任何时刻过程失败——在步骤3中使用另一条规则。

✅ 在什么情况下正向推理更合适?反向推理呢?

实现专家系统

专家系统可以使用不同的工具实现:

  • 直接用某种高级编程语言编写。这不是最佳选择,因为基于知识的系统的主要优势在于知识与推理分离,并且领域专家应该能够编写规则而不必理解推理过程的细节。
  • 使用专家系统外壳,即专门设计用于使用某种知识表示语言填充知识的系统。

✍️ 练习:动物推理

请参阅Animals.ipynb了解如何实现正向和反向推理专家系统示例。

注意:这个例子相当简单,只是为了展示专家系统的样子。一旦开始创建这样一个系统,只有当达到大约200条规则左右时,你才会开始注意到一些智能行为。在某种程度上,规则变得太复杂以至于无法记住所有内容,此时你可能会开始怀疑系统为何会做出某些决定。然而,基于知识的系统的重要特征是你总是可以解释任何决策是如何做出的。

本体论与语义网

在20世纪末,有一个倡议利用知识表示来注解互联网资源,以便能够找到对应于非常具体查询的资源。这一运动被称为语义网,它依赖于几个概念:

  • 基于**描述逻辑**(DL)的特殊知识表示。它类似于框架知识表示,因为它构建了一个具有属性的对象层次结构,但它具有正式的逻辑语义和推理。有一整套DL平衡表达能力和推理算法复杂性。

  • 分布式知识表示,其中所有概念都由全局URI标识符唯一表示,这使得创建跨越互联网的知识层次结构成为可能。

  • 一组基于XML的语言用于知识描述:RDF(资源描述框架)、RDFS(RDF模式)、OWL(本体论网络语言)。

语义网的核心概念是本体论。它指的是使用某种形式的知识表示对问题领域进行显式说明。最简单的本体论可以只是一个问题领域的对象层次结构,但更复杂的本体论将包括可用于推理的规则。

在语义网中,所有表示都基于三元组。每个对象和每种关系都由URI唯一标识。例如,如果我们想要声明这个AI课程是在2022年1月1日由Dmitry Soshnikov开发的,我们可以使用以下三元组:

http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creation-date “Jan 13, 2007” http://github.com/microsoft/ai-for-beginners http://purl.org/dc/elements/1.1/creator http://soshnikov.com

✅ 这里http://www.example.com/terms/creation-date and http://purl.org/dc/elements/1.1/creator是一些众所周知且普遍接受的URI,用于表达创作者创建日期的概念。

在更复杂的情况下,如果我们想定义一个创建者列表,我们可以使用RDF中定义的数据结构。

上述图表由 Dmitry Soshnikov 提供

由于搜索引擎和自然语言处理技术的成功,语义网的建设进展在一定程度上放缓了,这些技术允许从文本中提取结构化数据。然而,在某些领域,仍有一些重大努力来维护本体论和知识库。一些值得注意的项目:

  • WikiData 是与维基百科相关的机器可读知识库集合。大部分数据是从维基百科的信息框中挖掘出来的,维基百科页面中的结构化内容。你可以使用SPARQL,一种语义网的特殊查询语言,在查询WikiData。这里有一个显示人类中最受欢迎的眼睛颜色的示例查询:
#defaultView:BubbleChart SELECT ?eyeColorLabel (COUNT(?human) AS ?count) WHERE { ?human wdt:P31 wd:Q5. # human instance-of homo sapiens ?human wdt:P1340 ?eyeColor. # human eye-color ?eyeColor SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } } GROUP BY ?eyeColorLabel
  • DBpedia 是另一个类似WikiData的努力。

✅ 如果你想尝试构建自己的本体论或打开现有的本体论,有一个很棒的可视化本体编辑器叫做Protégé。下载它或在线使用。

Web Protégé编辑器打开罗马诺夫家族本体。截图由 Dmitry Soshnikov 提供

✍️ 练习:家庭本体论

请参阅FamilyOntology.ipynb了解如何使用语义网技术推理家庭关系。我们将一个以常见GEDCOM格式表示的家庭树和家庭关系本体结合起来,为给定的一组个体建立一个家庭关系图。

微软概念图

通常,本体论是由人工精心创建的。然而,也可以从非结构化数据中挖掘本体论,例如,从自然语言文本中。

微软研究院就进行了这样一次尝试,最终产生了微软概念图

这是一个大型实体集合,使用is-a继承关系组合在一起。它允许回答诸如“微软是什么?”的问题——答案可能是“公司概率为0.87,品牌概率为0.75”。

该图可以作为REST API访问,也可以作为列出了所有实体对的大文本文件下载。

✍️ 练习:概念图

尝试MSConceptGraph.ipynb笔记本,看看我们如何使用微软概念图将新闻文章分为几个类别。

结论

如今,AI经常被认为是机器学习神经网络的同义词。然而,人类也表现出明确的推理,这是目前神经网络无法处理的。在实际项目中,明确的推理仍然用于需要解释的任务,或者能够以受控方式修改系统的行为。

挑战

在与本课相关的家庭本体论笔记本中,有机会尝试其他家庭关系。试着发现家族树中新的联系。

课后测验

复习与自学

在网上做一些研究,发现人类试图量化和编码知识的领域。研究一下布卢姆的分类法,并回到历史,了解人类如何试图理解他们的世界。探索林奈如何创建生物分类法,观察德米特里·门捷列夫如何创造了一种描述和分组化学元素的方法。你能找到其他哪些有趣的例子?

作业构建一个本体论

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


作者与出处
原作者: microsoft
来源:microsoft
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: microsoft 转发
评论区 (0)
U