)
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载符号人工智能Symbolic AI是 AI 早期最有影响力的技术路线之一其核心思想是把人类专家的知识提取为机器可读的形式再通过自动推理求解问题。本指南基于 AI-For-Beginners 课程体系中的第 2 课《知识表示与专家系统》对应仓库路径 translations/et/lessons/2-Symbolic/README.md 及英文原版 lessons/2-Symbolic/README.md系统讲解 DIKW 知识层次模型、四大类计算机知识表示方法、专家系统的前向/后向推理原理并结合仓库中三个可运行的 Notebook动物推理、家族本体、概念图给出源码级实现细节与实战练习。读完本文你将掌握知识表示的分类框架、如何实现一个基于产生式规则的专家系统以及如何用本体论Ontology与 RDF/SPARQL 技术构建可推理的知识库。一、为什么符号 AI 从知识出发在 AI 早期自上而下top-down地构造智能系统是主流思路把知识从人脑中提取出来转成某种机器可读的形式再用它来自动求解问题。这一路线建立在两个基石之上知识表示Knowledge Representation找到把人类知识存入计算机的有效形式推理Reasoning在已表示的知识之上自动得出结论。围绕这一主线本课覆盖了从知识定义到专家系统实现、再到语义网与本体论的完整知识链条。二、知识表示从 DIKW 金字塔到表示谱系2.1 知识与数据、信息的区别符号 AI 中最关键的概念是知识knowledge。它必须与信息和数据严格区分。例如人们常说书里蕴含着知识因为读书可以让人成为专家但实际上书里存放的是数据只有通过阅读并把数据整合进自己的世界模型数据才转化为知识。✅知识存在于我们的大脑中代表我们对世界的理解。它通过主动的学习过程获得——把接收到的信息片段整合进我们活跃的世界模型中。为了不纠结于严格定义业界通常借助DIKW 金字塔Data–Information–Knowledge–Wisdom来对齐这些概念层级含义数据Data存在于物理介质上的内容如书面文字、口头语言。独立于人而存在可在人与人之间传递信息Information我们在脑中如何解读数据。例如听到computer一词我们对它是什么有了理解知识Knowledge被整合进世界模型的信息。例如学会计算机是什么之后我们还知道它如何工作、多少钱、用来做什么这种相互关联的概念网络构成知识智慧Wisdom对世界理解的又一层次代表元知识meta-knowledge即关于知识应该如何以及何时被使用的认知该图片说明DIKW 金字塔形象地刻画了从原始数据到智慧的四层递进关系是理解知识表示问题的起点。2.2 知识表示问题与表示谱系知识表示问题本质上就是找到某种有效方式把知识以数据形式放进计算机使其可以被自动使用。不同的表示方法分布在一条**谱系spectrum**上谱系左端非常简单的表示类型计算机可高效使用。最朴素的是算法化表示——把知识写成计算机程序。但它不够灵活因为人脑中的知识往往是非算法的不适合直接编码谱系右端类似自然语言这样的表示。表达能力最强但无法用于自动推理。✅ 思考一下你在大脑中如何表示知识并把它转成笔记有没有一种特别适合你记忆的格式三、计算机知识表示的四大分类计算机知识表示方法可以划分为四类网络表示、层次化表示、过程化表示和逻辑表示。3.1 网络表示语义网络与三元组人脑本质上是相互关联的概念网络因此我们可以尝试用图graph在计算机中复现这种网络即语义网络semantic network。由于图可以表示为节点与边的列表语义网络也能表示为一组三元组列表。对象-属性-值三元组OAV triplet即属性-值对是其中最基础的单元。以编程语言知识为例对象Object属性Attribute值ValuePython是无类型语言Untyped-LanguagePython发明者Guido van RossumPython块语法缩进indentation无类型语言没有类型定义✅ 想一想三元组还能用来表示哪些其他类型的知识3.2 层次化表示框架与脚本我们往往会在脑中为对象建立层次结构。例如金丝雀是鸟所有鸟都有翅膀我们还知道金丝雀通常的颜色、飞行速度等信息。框架表示Frame representation把每个对象或对象类表示为一个框架frame框架内含若干槽slot。槽可以带有默认值、取值约束value restrictions或者存储可被调用以取得槽值的过程。所有框架构成一个层级结构与面向对象编程语言中的对象继承层次十分相似。脚本Scenario一种特殊的框架用于表示可能随时间展开的复杂情境。以 Python 这个对象的框架为例槽Slot值Value默认值Default value区间Interval名称NamePythonIs-A无类型语言变量命名Variable CaseCamelCase程序长度Program Length5–5000 行块语法Block Syntax缩进3.3 过程化表示产生式规则过程化表示把知识表示为当某条件发生时可以执行的一系列动作。其中最重要的是产生式规则production rules——形如 if-then 的语句允许我们推出结论。例如医生可以有规则如果病人高烧或血液检查中 C 反应蛋白水平高那么存在炎症。一旦满足其中一个条件即可推出炎症结论并在后续推理中继续使用。算法也可以视为过程化表示的一种形式但在基于知识的系统中几乎不会直接使用。3.4 逻辑亚里士多德以来的形式化传统逻辑最初由亚里士多德提出作为表示普遍人类知识的手段谓词逻辑Predicate Logic作为数学理论过于丰富、难以完全可计算因此实际中通常使用其子集例如 Prolog 中使用的Horn 子句Horn clauses描述逻辑Descriptive Logic一族逻辑系统用于表示和推理对象层次以及语义网这样的分布式知识表示。四、专家系统架构、推理与实现4.1 什么是专家系统专家系统Expert Systems是符号 AI 早期的重要成功案例——被设计为在某个有限问题域中像专家一样工作的计算机系统。它基于从一位或多位人类专家那里提取的知识库knowledge base并包含在其上执行推理的推理引擎inference engine。专家系统的构建模仿了人的思维系统包含短期记忆与长期记忆对应地基于知识的系统也区分出三个组件问题记忆Problem memory保存当前正在求解问题的知识例如病人的体温、血压、是否有炎症等。也被称为静态知识static knowledge因为它保存的是当前对问题的认知快照——即问题状态problem state知识库Knowledge base表示问题域的长期知识由人类专家手工提取不会在一次咨询到另一次咨询之间改变。因为它负责把问题从一个状态导航到另一个状态也被称为动态知识dynamic knowledge推理引擎Inference engine编排整个在问题状态空间中搜索的过程必要时向用户提问并负责为每个状态找到应被应用的正确规则。4.2 用 AND-OR 树描述推理过程一个经典的例子是根据动物的身体特征判断动物种类该图片说明AND-OR 树是产生式规则集合的图形化表示虚线连接表示 OR 分支、实线连接表示 AND 分支适合在从专家提取知识之初绘制。这种图被称为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三元组。**工作记忆working memory**中保存与当前求解问题对应的 OAV 三元组集合规则引擎查找条件被满足的规则并应用它们把新的三元组加入工作记忆。✅ 为你感兴趣的主题画一棵自己的 AND-OR 树4.3 前向推理Forward Inference上述过程即前向推理。它以工作记忆中已有的初始数据出发执行如下推理循环如果目标属性已存在于工作记忆——停止并给出结果找出所有条件当前被满足的规则——得到冲突集conflict set执行冲突消解conflict resolution——选择本步骤要执行的那条规则。常见策略有选择知识库中第一条可应用的规则随机选择一条规则选择更具体的规则即左侧LHS条件匹配最多的规则应用所选规则把新的知识片段插入问题状态回到第 1 步重复。4.4 后向推理Backward Inference有些场景我们想从很少的知识出发通过提问逐步逼近结论。例如医疗诊断时通常不会预先做完所有检查而是在需要决策时才执行相应分析。这个过程可以用后向推理建模。它由**目标goal**驱动——即我们想求出的属性值选出所有能够给出目标值的规则即目标位于 RHS、右侧——构成冲突集如果该属性没有规则、或存在一条规则说明应向用户询问该值——则向用户提问否则继续用冲突消解策略选择一条规则作为假设hypothesis——尝试去证明它对规则左侧LHS的所有属性递归地重复该过程把它们当作目标去证明若在某一步失败——回到第 3 步选择另一条规则。✅ 什么情况下前向推理更合适什么情况下后向推理更合适4.5 专家系统的实现方式专家系统可以用不同工具实现直接用高级语言编程这不是最佳选择因为基于知识的系统最大优势在于知识与推理相分离领域专家应能够在不懂推理细节的情况下编写规则使用专家系统外壳expert systems shell即专门为用某种知识表示语言填充知识而设计的系统。4.6 实战练习动物推理系统Animals.ipynb仓库中的 Animals.ipynb 完整演示了前向与后向推理专家系统的实现是本节内容最直接的源码级证据。自定义专家系统外壳后向推理作者先用 Python 类定义了一个基于产生式规则的迷你知识表示语言Ask表示需要向用户提出的问题包含一组可能答案If表示一条规则本质是存放规则内容的语法糖AND/OR表示树中与/或分支的类仅存放参数列表其全部功能定义在父类Content中。class Ask(): def __init__(self,choices[y,n]): self.choices choices def ask(self): if max([len(x) for x in self.choices])1: for i,x in enumerate(self.choices): print({0}. {1}.format(i,x),flushTrue) x int(input()) return self.choices[x] else: print(/.join(self.choices),flushTrue) return input() class Content(): def __init__(self,x): self.xx class If(Content): pass class AND(Content): pass class OR(Content): pass工作记忆保存属性-值对形式的事实facts知识库用一个字典定义把动作应插入工作记忆的新事实映射到以 AND-OR 表达式表示的条件上部分事实允许Ask提问rules { default: Ask([y,n]), color : Ask([red-brown,black and white,other]), pattern : Ask([dark stripes,dark spots]), mammal: If(OR([hair,gives milk])), carnivor: If(OR([AND([sharp teeth,claws,forward-looking eyes]),eats meat])), ungulate: If([mammal,OR([has hooves,chews cud])]), bird: If(OR([feathers,AND([flies,lies eggs])])), animal:monkey : If([mammal,carnivor,color:red-brown,pattern:dark spots]), animal:tiger : If([mammal,carnivor,color:red-brown,pattern:dark stripes]), animal:giraffe : If([ungulate,long neck,long legs,pattern:dark spots]), animal:zebra : If([ungulate,pattern:dark stripes]), animal:ostrich : If([bird,long nech,color:black and white,cannot fly]), animal:pinguin : If([bird,swims,color:black and white,cannot fly]), animal:albatross : If([bird,flies well]) }随后定义KnowledgeBase类完成推理memory字典保存属性到值的映射get(name)负责获取属性值必要时触发推理与提问并把结果缓存回工作记忆支持get(color:blue)这种带期望值的查询返回y/neval执行实际推理遍历 AND/OR 树、求值子目标。实际运行kb.get(animal)时系统依次提问 hair、sharp teeth、claws、forward-looking eyes、color、has hooves、long neck、long legs、pattern最终推断出giraffe。用 Experta 实现前向推理Notebook 后半部分使用知识表示库 [Experta]与经典系统 CLIPS 类似的 Python 前向推理库。作者特别指出自己实现前向链接并不难但朴素实现效率不高高效的规则匹配通常使用Rete 算法。Experta 的用法是继承KnowledgeEngine用Rule注解声明每条规则的触发条件规则内部用declare添加新事实触发后续规则from experta import * class Animals(KnowledgeEngine): Rule(OR( AND(Fact(sharp teeth),Fact(claws),Fact(forward looking eyes)), Fact(eats meat))) def cornivor(self): self.declare(Fact(carnivor)) Rule(OR(Fact(hair),Fact(gives milk))) def mammal(self): self.declare(Fact(mammal)) # ... 其余动物规则省略见 notebook Rule(Fact(animalMATCH.a)) def print_result(self,a): print(Animal is {}.format(a)) def factz(self,l): for x in l: self.declare(x)运行ex1.reset()、用factz注入初始事实如colorred-brown、patterndark stripes、sharp teeth、claws、forward looking eyes、gives milk再调用ex1.run()工作记忆最终包含InitialFact、6 条初始事实、推理出的mammal、carnivor与Fact(animaltiger)控制台输出 Animal is tiger。这正是前向推理从事实出发、规则链式触发的直观演示。提示这个示例相对简单只用于体会专家系统的形态。实际构建时规则数量达到 200 左右才会表现出明显的智能行为此时规则会复杂到难以全记在脑中你甚至会疑惑系统为何做出某些决策。但基于知识的系统有一个关键特性——任何决策都能被精确解释出来。五、本体论与语义网Ontologies and the Semantic Web5.1 语义网的三根支柱20 世纪末出现了一项用知识表示来标注互联网资源的倡议使人们能够按非常具体的查询找到资源这就是语义网Semantic Web。它依赖以下概念一种特殊的、基于描述逻辑Description Logic, DL的知识表示与框架表示类似它构建带属性的对象层次但拥有形式化的逻辑语义与推理。DL 是一个完整的系统家族在表达力与推理算法复杂度之间取不同平衡分布式知识表示所有概念用全局 URI 标识符表示从而可能构建跨越互联网的知识层次一族XML 系知识描述语言RDFResource Description Framework、RDFSRDF Schema、OWLOntology Web Language。5.2 本体论Ontology语义网的核心概念是本体论用某种形式化知识表示方法对问题域做出明确的规格说明。最简单的本体可以只是问题域中对象的一个层次结构而更复杂的本体则包含可用于推理的规则。在语义网中所有表示都基于三元组每个对象与每种关系都由 URI 唯一标识。例如要陈述本 AI 课程由 Dmitry Soshnikov 于 2022 年 1 月 1 日开发这个事实可用如下三元组http://github.com/microsoft/ai-for-beginners http://www.example.com/terms/creation-date Jan 1, 2022 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与http://purl.org/dc/elements/1.1/creator是知名且被普遍接受的、表达创作者与创建日期概念的 URI。在更复杂的场景例如定义创作者列表中可以使用 RDF 定义的数据结构来表示。5.3 代表性项目WikiData、DBpedia 与 Protégé语义网的建设进程在某种程度上被搜索引擎与自然语言处理技术的成功所延缓这些技术可以直接从文本提取结构化数据。但在某些领域维护本体与知识库的工作仍在持续值得关注的项目包括WikiData与 Wikipedia 关联的机器可读知识库集合大部分数据从 Wikipedia 的InfoBox页面内的结构化内容块挖掘而来。可用 SPARQL语义网专用查询语言查询。下面是查询人类最常见的眼睛颜色并按气泡图展示的示例#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 ?eyeColorLabelDBpedia与 WikiData 类似的项目Protégé优秀的可视化本体编辑器。如果你想动手构建自己的本体、或打开已有本体可以下载 Protégé 或使用其网页版。该图片说明Protégé 是构建与浏览本体的可视化工具图中展示了加载家族本体后的类层次与个体视图。5.4 实战练习家族本体FamilyOntology.ipynbFamilyOntology.ipynb 演示了如何用语义网技术推理家族关系把常见 GEDCOM 格式的家谱与一套家族关系本体结合为给定人群构建所有家族关系图。第一步获取家谱数据。示例使用 Romanov罗曼诺夫王朝的家谱GEDCOM 是最常见的家族关系描述格式数据文件为 data/tsars.ged其开头形如0 HEAD 1 CHAR UTF8 1 GEDC 2 VERS 5.5 0 0 INDI 1 NAME Mihail Fedorovich /Romanov/ 1 SEX M 1 BIRT 2 DATE 1613 1 DEAT 2 DATE 1645 1 FAMS 41解析使用python-gedcom库g Parser(); g.parse_file(data/tsars.ged)后可从元素字典中取出全部 41 位个体从 Mihail Fedorovich Romanov 到 Nikolaj II Aleksandrovich Romanov与 15 组家庭41–55每个家庭列出父、母与孩子标识符。第二步获取家族本体。本体 data/onto.ttl 以语义网三元组定义isUncleOf、isCousinOf等关系全部基于isMotherOf、isFatherOf、isBrotherOf、isSisterOf四个基本谓词。例如isAuntOf定义为isSisterOf与isParentOf的组合姑妈是父母的姐妹在 OWL 中通过属性链公理表达fhkb:isAuntOf a owl:ObjectProperty ; rdfs:domain fhkb:Woman ; rdfs:range fhkb:Person ; owl:propertyChainAxiom ( fhkb:isSisterOf fhkb:isParentOf ) .本体还定义了Man/Woman类通过owl:intersectionOf与hasSex属性限制来等价定义、Person类子类约束包括 hasMother、hasFather、hasParent 基数限制等、以及isSiblingOf对称且传递、hasAncestor传递等大量属性及其公理。第三步构建推理用本体。用一个脚本遍历 GEDCOM把个体与婚姻事实转换成 OWL 三元组追加到本体文件为每位个体声明owl:NamedIndividual、owl:Thing并根据性别写入isMotherOf/isFatherOf与isSisterOf/isBrotherOf谓词为每个婚姻写入hasFemalePartner/hasMalePartner最后用owl:AllDifferent声明所有个体互不相同。第四步推理与查询。使用RDFLib读取 RDF 图用OWL-RL库构建图逻辑闭包Closure——即把所有可推断出的概念与关系全部补进图中import rdflib from owlrl import DeductiveClosure, OWLRL_Extension g rdflib.Graph() g.parse(onto.ttl, formatturtle) print(Triplets found:%d % len(g)) # 669 条 DeductiveClosure(OWLRL_Extension).expand(g) print(Triplets after inference:%d % len(g)) # 4246 条注意仅靠本体自带的显式三元组有 669 条而推理闭包后膨胀到 4246 条——多出的三元组全部是由属性链公理、传递性、逆属性等推导出来的家族关系。随后用SPARQL查询叔舅关系qres g.query( SELECT DISTINCT ?aname ?bname WHERE { ?a fhkb:isUncleOf ?b . ?a rdfs:label ?aname . ?b rdfs:label ?bname . }) for row in qres: print(%s is uncle of %s % row)输出示例包括 Fedor Alekseevich Romanov is uncle of Ekaterina Ivanovna Romanova、Aleksandr I Pavlovich Romanov is uncle of Aleksandr II Nikolaevich Romanov 等。你还可以进一步实验isAncestorOf等递归定义的祖先关系发现家谱中人与人之间新的连接。六、Microsoft Concept Graph从非结构化文本中挖掘概念图多数情况下本体是由人工精心创建的但也可以从非结构化数据如自然语言文本中**挖掘mine**本体。Microsoft Research 的尝试产出了Microsoft Concept Graph——一个按is-a继承关系组织起来的大型实体集合。它可以回答Microsoft 是什么这样的问题答案形如是公司概率 0.87是品牌概率 0.75。该图既可以作为 REST API 访问也可以下载成列出所有实体对的大文本文件。需要特别说明课程更新后原 Microsoft Concept Graph 的公开 API 已不可用MSConceptGraph.ipynb 改用ConceptNet作为替代——ConceptNet 是一个自由可用的开放知识图同样包含概念间的is-a关系拥有超过 800 万个节点、2100 万 条边、覆盖 83 种语言提供免 API key 的 REST 接口与可下载数据文件。实战用概念图给新闻分类。Notebook 的完整流程如下用urllib封装一个query函数向 ConceptNet REST API 请求指定概念的IsA关系并按边权重归一化出每个上位概念的概率例如query(microsoft)返回各候选上位词及其权重占比通过 NewsAPI 获取美英头条新闻标题用TextBlob提取标题中的名词短语——原始名词短语难以形成大的主题分组对每个名词短语调用query取得其上位概念保留概率大于 0.1 的概念把标题归入这些上位概念最终得到economy4 条、nation11 条、person4 条等清晰主题簇例如中国搜救飞机失事、俄罗斯停止与日本谈判归入 ECONOMY拜登指控普京考虑使用化学武器归入 NATION。这个例子展示了概念图 泛化如何把零散文本自动聚合成语义主题是知识挖掘思想在真实任务上的落地。七、结语显式推理的当代价值如今 AI 常被视为机器学习或神经网络的同义词。但人类还具备显式推理explicit reasoning能力这是目前神经网络尚未覆盖的部分。在真实项目中显式推理仍被用于执行两类任务需要解释explanation的任务以及需要以受控方式修改系统行为的任务。基于知识的系统恰恰天然具备这两点——它的每条决策都可以精确追溯到触发它的规则链。八、动手挑战与延伸学习挑战在本课配套的家族本体 Notebook 中有机会实验其他家族关系。尝试在家谱中发现人与人之间新的连接例如用 SPARQL 查询姑姨、表亲、祖辈等更多关系。复习与自学在本仓库之外调研人类历史上试图量化、编码知识的领域——例如 Bloom 的分类学追溯人类如何理解世界的历程如 Linnaeus 建立生物分类法、门捷列夫创建化学元素周期表。你还能找到哪些有趣的例子作业构建一个本体。构建知识库的核心是为某个主题的事实建模并分类。选择一个主题——人、地点或事物——然后为它建立模型使用本课介绍的技术与建模策略。示例为客厅家具、灯具等创建本体。客厅与厨房有何区别与浴室呢你如何知道它是客厅而不是餐厅使用 Protégé 完成你的本体构建。相关仓库资源速查本课完整英文讲义lessons/2-Symbolic/README.md本文对应的爱沙尼亚语译本translations/et/lessons/2-Symbolic/README.md前向/后向推理专家系统实现lessons/2-Symbolic/Animals.ipynb家族本体与语义网推理lessons/2-Symbolic/FamilyOntology.ipynb概念图新闻分类lessons/2-Symbolic/MSConceptGraph.ipynb家族本体 OWL 定义lessons/2-Symbolic/data/onto.ttl罗曼诺夫家谱 GEDCOM 数据lessons/2-Symbolic/data/tsars.ged本课作业lessons/2-Symbolic/assignment.md赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐知识表示与专家系统AI-For-Beginners 符号人工智能课程第 2 课实战指南知识表示与专家系统AI For Beginners 符号人工智能课程第 2 课实战指南 本文基于 AI For Beginners 课程 2 Symbol教程人工智能机器学习深度学习AI-For-Beginners 符号智能核心课知识表示、专家系统与语义网实战解析AI For Beginners 符号智能核心课知识表示、专家系统与语义网实战解析 符号智能Symbolic AI追求的是让机器像人一样拥有知识并基于知教程人工智能机器学习深度学习符号人工智能与知识表示AI for Beginners 课程之专家系统与语义网实战指南符号人工智能与知识表示AI for Beginners 课程之专家系统与语义网实战指南 本文基于 AI for Beginners 开源课程12 周、24教程人工智能机器学习深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考