AI-For-Beginners
第一章:人工智能简介
第二章:知识表征和专家系统
本文档使用 WYMF 发布
-
+
首页
第二章:知识表征和专家系统
![Summary of Symbolic AI content](/media/202403/2024-03-02_2101510.2655349109050076.png) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) ## 知识表征&专家系统 对人工智能的追求是基于对知识的搜索,目的是像人类一样理解世界。但是如何才能实现这一目标呢? 在人工智能的早期阶段,创建智能系统采用了一种自上而下的方法(在之前的课程中进行过讨论),这种方法很受欢迎。其思想是将人们的知识提取为机器可读的形式,然后利用它来自动解决问题。这种方法基于两个重要的理念: - 知识表征 - 推理 ## 知识表征 符号人工智能中的一个重要概念是知识。区分知识和信息或数据非常重要。例如,有人可能会说书籍包含知识,因为人们可以通过学习书籍成为专家。然而,书籍所包含的实际上被称为数据,通过阅读书籍并将这些数据整合到我们的世界模型中,我们将这些数据转化为知识。 > ✅ 知识是存在于我们头脑中的东西,代表着我们对世界的理解。它是通过积极学习过程获得的,将我们接收到的信息片段整合到我们对世界的主动模型中。 大多数情况下,我们并不严格定义知识,而是使用 DIKW 金字塔将其与其他相关概念相结合。它包含以下概念: - 数据是以书面文字或口头语言等物理媒体表示的内容。数据存在独立于人类,并可在人们之间传递。 - 信息是我们在头脑中对数据的解释。例如,当我们听到“计算机”这个词时,我们有一些关于它是什么的理解。 - 知识是信息被整合到我们的世界模型中。例如,一旦我们了解了计算机是什么,我们就开始对它的工作原理、成本以及用途有了一些想法。这种相互关联的概念网络构成了我们的知识。 - 智慧是我们对世界理解的又一个层次,代表着元知识,例如有关知识应该如何和何时使用的一些概念。 ![](/media/202403/2024-03-02_2116080.3264293606105212.png) *Image [from Wikipedia](https://commons.wikimedia.org/w/index.php?curid=37705247), By Longlivetheux - Own work, CC BY-SA 4.0* 因此,知识表示的问题在于找到一种有效的方式将知识以数据的形式嵌入计算机中,使其能够自动使用。这可以被视为一个光谱: ![Knowledge representation spectrum](/media/202403/2024-03-02_2117130.43827566420691677.png) > Image by [Dmitry Soshnikov](http://soshnikov.com/) - 在左侧,有一些非常简单的知识表示类型,可以被计算机有效地使用。最简单的是算法性表示,即通过计算机程序表示知识。然而,这并不是表示知识的最佳方式,因为它缺乏灵活性。我们头脑中的知识通常是非算法性的。 - 在右侧,有像自然文本这样的表示形式。这是最强大的,但无法用于自动推理。 ## 计算机知识表征分类 我们可以将不同的计算机知识表示方法分类如下: - 网络表示法基于我们头脑中相互关联的概念网络。我们可以尝试在计算机内部重现相同的网络,即所谓的语义网络。 1. 对象-属性-值三元组或属性-值对。由于图可以在计算机内部表示为节点和边的列表,我们可以用一个包含对象、属性和值的三元组列表来表示语义网络。例如,我们可以构建关于编程语言的以下三元组: | Object | Attribute | Value | | ------------------ | -------------- | ------------------ | | Python | is | Untyped-Language | | Python | invented-by | Guido van Rossum | | Python | block-syntax | indentation | | Untyped-Language | doesn't have | type definitions | 2. 分层表示强调我们经常在脑海中创建物体的层次结构。例如,我们知道金丝雀是一种鸟,而所有的鸟都有翅膀。我们还大致知道金丝雀通常是什么颜色,以及它们的飞行速度是多少。 - 框架表示法是基于将每个对象或对象类表示为包含插槽的框架。插槽具有可能的默认值、值限制或存储过程,可以调用它们来获取插槽的值。所有的框架形成一个类似于面向对象编程语言中对象层次结构的层次结构。 - 场景是一种特殊类型的框架,用来表示可以在时间中展开的复杂情境。 **Python** | Slot | Value | Default value | Interval | | ---------------- | ------------------ | --------------- | -------------- | | Name | Python | | | | Is-A | Untyped-Language | | | | Variable Case | | CamelCase | | | Program Length | | | 5-5000 lines | | Block Syntax | Indent | | 3. 程序表征是基于通过可以在特定条件发生时执行的行动列表的知识表征 - 生成规则是一种允许我们得出结论的 if-then 语句。例如,医生可以制定规则,即如果患者发烧或者血液检查中 C-反应蛋白水平高,则他患有炎症。一旦我们遇到其中一个条件,我们就可以得出关于炎症的结论,并在进一步推理中使用它。 - 算法可以被认为是程序表示的另一种形式,尽管它们几乎从不直接在基于知识的系统中使用。 4. 逻辑最初是由亚里士多德提出的,作为一种表示人类普遍知识的方式。 - 作为数学理论的谓词逻辑过于丰富而无法计算,因此通常使用它的某个子集,例如 Prolog 中使用的 Horn 子句。 - 描述逻辑是一个逻辑系统的大家庭,用于表示和推理分布式知识表征(例如语义网络)中对象层次结构的逻辑系统。 ## 专家系统 早期符号人工智能的一个重要成功案例是所谓的专家系统——这些计算机系统旨在充当某个有限问题领域中的专家。它们基于从一个或多个人类专家那里提取的知识库,并包含一个推理引擎,用于对其进行一些推理处理。 | [![Human Architecture](https://github.com/microsoft/AI-For-Beginners/raw/main/lessons/2-Symbolic/images/arch-human.png)](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/images/arch-human.png) | [![Knowledge-Based System](https://github.com/microsoft/AI-For-Beginners/raw/main/lessons/2-Symbolic/images/arch-kbs.png)](https://github.com/microsoft/AI-For-Beginners/blob/main/lessons/2-Symbolic/images/arch-kbs.png) | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Simplified structure of a human neural system | Architecture of a knowledge-based system | 专家系统建立在类似于人类推理系统的基础上,其中包含短期记忆和长期记忆。同样,在基于知识的系统中,我们区分以下组件: - 问题记忆:包含有关当前正在解决的问题的知识,即患者的体温或血压,是否存在炎症等。这种知识也被称为静态知识,因为它包含了我们当前对问题所了解的一切——所谓的问题状态。 - 知识库:代表问题领域的长期知识。它是从人类专家手中手动提取的,不会在不同咨询之间发生变化。因为它允许我们从一个问题状态导航到另一个问题状态,所以它也被称为动态知识。 - 推理引擎:协调整个在问题状态空间中的搜索过程,在必要时向用户提出问题。它还负责找到适用于每个状态的正确规则。 作为例子,让我们考虑以下专家系统,根据动物的体征来确定动物的种类: ![AND-OR Tree](https://github.com/microsoft/AI-For-Beginners/raw/main/lessons/2-Symbolic/images/AND-OR-Tree.png) > Image by [Dmitry Soshnikov](http://soshnikov.com/) 这个图表被称为 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 三元组。规则引擎寻找满足条件的规则并应用它们,向工作内存添加另一个三元组。 ## 前向推理 vs. 后向推理 上述过程被称为前向推理。它从工作内存中的有关问题的初始数据开始,然后执行以下推理循环: 1. 如果目标属性存在于工作内存中-停止并给出结果 2. 查找所有当前满足条件的规则-获得冲突规则集。 3. 进行冲突解析-选择将在此步骤上执行的一个规则。可以有不同的冲突解决策略: - 选择知识库中第一个适用的规则 - 选择一个随机规则 - 选择一个更具体的规则,即满足“左侧”的大多数条件的规则 4. 应用所选规则,并将新的知识片段插入问题状态 5. 重复第一步 然而,在某些情况下,我们可能希望从对问题的空白知识开始,主动提问题,这将帮助我们得出结论。例如,在进行医学诊断时,通常不会在开始诊断患者之前提前进行所有医学分析。相反,我们希望在需要给出结论时进行分析。 这个过程可以使用后向推理来建模。它由目标驱动-我们要找到的属性值: 1. 选择所有能够给出目标值的规则(即具有目标在右侧的规则)- 一个冲突集 2. 如果没有适用于该属性的规则,或者有一条规则说我们应该向用户询问值-请问,否则: 3. 使用冲突解决策略来选择一个规则作为假设-我们将尝试证明它 4. 循环地对规则左侧的所有属性重复此过程,尝试将它们证明为目标 5. 如果在任何时候过程失败-在步骤 3 中使用另一条规则。 ## 专家系统的实现 专家系统可以使用不同的工具来实现: - 直接在某种高级编程语言中进行编程。这并不是最佳的做法,因为基于知识的系统的主要优势在于知识与推理是分离的,并且潜在的问题领域专家应该能够编写规则,而无需了解推理过程的细节。 - 使用专家系统shell,即专门设计用于使用某种知识表示语言填充知识的系统。
我有魔法
2024年3月2日 23:09
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码