)
教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载本文基于 AI-For-Beginners 课程第 2 课lessons/2-Symbolic/README.md编写系统地讲解符号人工智能Symbolic AI中知识表示Knowledge Representation与推理Reasoning两大支柱从 DIKW 金字塔到语义网络、框架、产生式规则与描述逻辑的分类体系再到专家系统的前向/反向推理原理并结合仓库内 Animals.ipynb、FamilyOntology.ipynb、MSConceptGraph.ipynb 三个实战笔记本给出可运行、可验证的实现路径。在早期人工智能研究中自顶向下top-down构建智能系统的思路一度占据主流把人类专家头脑中的知识抽取出来转成某种机器可读的形式再交给计算机自动求解问题。这一路线正是符号 AI即 README 所称的good old symbolic approachGOFAI的开端它建立在两个核心观念之上知识表示Knowledge Representation如何用计算机中的数据结构有效承载人类知识推理Reasoning如何在这些知识之上自动得出结论。本课程将从这两个观念出发先厘清知识本身是什么再对计算机知识表示方法做系统分类然后深入专家系统的架构与前向/反向推理机制最后走向语义网Semantic Web与本体Ontology的世界。一、知识表示从数据到智慧的四级阶梯DIKW 金字塔在符号 AI 中知识knowledge是最重要的概念之一但它必须与信息information和数据data区分开。课程给出的定义是知识是我们头脑中持有的、对世界理解的表征它通过主动的学习过程获得——将接收到的信息片段整合进我们对世界的活动模型中。为了不严格定义知识课程引入DIKW 金字塔Data → Information → Knowledge → Wisdom图见 DIKW_Pyramid.png其中四个层次分别是层次含义举例数据Data以物理媒介承载的东西如书面文字、口头话语独立于人类存在可在人与人之间传递一行记录Python 是解释型语言的文本信息Information我们在头脑中对数据的解释听到computer这个词我们理解它指什么知识Knowledge被整合进世界模型的信息相互关联的概念网络构成知识知道计算机如何工作、大概多少钱、能用来做什么智慧Wisdom更高一层即元知识——关于如何以及何时使用知识的认知知道在什么场景该用哪类知识解决问题因此知识表示问题的实质是找到一种有效方式把知识以数据的形式放进计算机使其能被自动使用。但知识表示存在一个天然的光谱上图中的knowledge-spectrum最左侧是计算机能高效使用的简单表示——最简单的当属算法式表示知识以程序代码承载。但它不够灵活因为人脑中的知识常常并非算法式的最右侧是自然语言文本这样的表示——表达能力最强却无法直接用于自动推理。想一想你平时如何在自己头脑中表示知识、又怎样把它转成笔记是否存在某种特别有利于记忆的格式二、计算机知识表示方法分类课程将计算机中的知识表示方法归为四大类网络表示、层次表示、过程表示与逻辑表示。1. 网络表示对象-属性-值三元组与语义网络人类头脑中存在着一张相互关联的概念网络把它复现为计算机中的图结构就是所谓的语义网络semantic network。由于图可以用节点 边的列表表示语义网络也就等价于一张由对象-属性-值Object-Attribute-Value, OAV三元组构成的表。课程以编程语言为例对象Object属性Attribute值ValuePythonis是Untyped-Language非类型化语言Pythoninvented-by发明者Guido van Rossum吉多·范罗苏姆Pythonblock-syntax块语法indentation缩进Untyped-Languagedoesnt have没有type definitions类型定义思考OAV 三元组还能用来表示哪些其他类型的知识2. 层次表示框架Frame与场景Scenario层次表示强调我们头脑中常常会建立对象的层级结构——例如我们知道金丝雀是鸟而所有鸟都有翅膀同时我们对金丝雀的颜色、飞行速度也各有概念。框架表示Frame representation把每个对象或对象类表示为一个框架frame框架内含若干槽slot。槽可以带有默认值、取值范围约束甚至存储了可被调用来求值的存储过程stored procedure。所有框架构成一棵与面向对象编程中对象层级类似的层次结构。场景Scenario一种特殊框架用来表示可以随时间展开的复杂状态。课程用 Python 这个对象展示了槽表的具体形态槽Slot值Value默认值Default value区间IntervalName名称PythonIs-A属于Untyped-LanguageVariable Case变量命名风格CamelCaseProgram Length程序长度5–5000 lines行Block Syntax块语法Indent缩进3. 过程表示产生式规则Production Rules过程表示把知识写成在某种条件成立时执行的一组动作。其中产生式规则就是形如如果-那么if-then的语句允许我们据此推出结论。课程的经典医学例子IF患者发高烧OR血液检查中 C 反应蛋白C-reactive protein水平很高THEN该患者有炎症inflammation一旦某个前提被满足我们就能得出炎症的结论并把它用于后续的进一步推理。算法也可以视为过程表示的一种形态但几乎不会直接在基于知识的系统中使用。4. 逻辑表示谓词逻辑与描述逻辑逻辑最初由亚里士多德提出作为表示人类普遍知识的方法。谓词逻辑Predicate Logic作为数学理论过于丰富、无法被完全计算因此实际中通常使用其子集例如 Prolog 中使用的Horn 子句Horn clauses描述逻辑Descriptive Logic, DL一族用于表示和推理对象层级以及分布式知识表示如语义网的逻辑系统。课程在本体与语义网一节会再次回到 DL。三、专家系统符号 AI 的早期成功专家系统expert systems是符号 AI 最早的成果之一在某个受限问题领域内让计算机扮演该领域的专家。它由从一位或多位人类专家那里抽取的知识库knowledge base和在其上执行推理的推理引擎inference engine组成。专家系统的构造与人类推理系统相对应人类拥有短期记忆与长期记忆在基于知识的系统中被拆分为三个组件对比图见 arch-human.png 与 arch-kbs.png组件对应人类认知职责问题记忆Problem memory短期记忆存放当前正在求解的问题知识如病人的体温、血压、是否发炎等也称静态知识static knowledge因为它保存的是当前问题状态的快照problem state知识库Knowledge base长期记忆关于问题领域的长期知识由人类专家手工抽取不随每次咨询而变化因为它允许我们在不同问题状态之间迁移又称动态知识dynamic knowledge推理引擎Inference engine推理过程编排整个问题状态空间中的搜索过程必要时向用户提问并负责找出适用于每个状态的正确规则3.1 AND-OR 树用图形表达产生式规则集课程用根据动物身体特征判定动物的专家系统作为例子。其规则集可以被画成一棵AND-OR 树AND-OR-Tree.png上层是目标节点如 Monkey、Tiger、Giraffe、Zebra中间是类别节点Mammal、Carnivor、Ungulate下层是可观测特征节点节点内的 表示与分支需同时满足全部子条件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 三元组集合规则引擎rules engine查找条件被满足的规则并执行把新的三元组追加进工作记忆——这正是 Animals.ipynb 自建推理机的核心数据模型笔记本用kb.memory字典保存属性-值对事实用rules字典保存条件表达式。3.2 前向推理与反向推理前向推理forward inference从工作记忆中已有的问题初始数据出发执行如下推理循环若目标属性已存在于工作记忆中——停止并给出结果找出所有当前条件被满足的规则——得到规则的冲突集conflict set执行冲突消解conflict resolution从冲突集中选出一条本轮执行的规则。常见的消解策略有选择知识库中第一条可用的规则随机选择一条规则选择更具体的规则即左侧LHS满足条件最多的规则应用所选规则向问题状态中插入一条新知识回到第 1 步。但在某些场景下我们更希望从对问题一无所知开始通过提问逐步逼近结论。医学诊断就是典型例子——我们通常不会在开始诊断前把全部化验都做完而是在需要做决策时再做检查。这一过程可以用反向推理backward inference建模它由目标goal驱动即我们想要求出的属性值选择所有能给出目标值即目标在右侧 RHS的规则构成冲突集若该属性没有任何规则或存在应向用户询问该值的规则——直接询问用户否则继续用冲突消解策略选出一条规则作为假设hypothesis尝试证明它递归地对规则左侧LHS的每个属性重复上述过程把它们逐一当作新目标去证明若过程中某一步失败——回到第 3 步换用其他规则。想一想哪些场景更适合前向推理哪些场景更适合反向推理3.3 如何实现专家系统实现专家系统有两条路径直接用高级语言编程这通常不是好主意——因为基于知识的系统最大优势在于知识与推理分离理想情况下领域专家应当能在不理解推理细节的前提下编写规则使用专家系统外壳expert systems shell一种专门设计、可通过某种知识表示语言灌入知识的系统框架。仓库中的 Animals.ipynb 恰好把这两条路都走了一遍是理解本课的最佳源码材料a自建推理机反向推理笔记本用 Python 类作为关键字定义了一个微型知识表示语言——Ask向用户提问含候选答案列表、If规则的语法糖、AND/OR表示树的分支逻辑集中在父类Content。规则库定义如下节选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])]), 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]), # ... }KnowledgeBase类维护memory工作记忆属性→值与rules知识库。核心方法get负责取属性值必要时触发推理甚至提问eval则递归遍历 AND/OR 树求值子目标。调用kb.get(animal)即可开始一次咨询程序会根据需要不断向你提问y/n或编号选择。b用 Experta 做前向推理笔记本同时演示了使用知识表示库 Experta 实现前向推理。Experta 面向 Python 设计、风格对标经典的 CLIPS 系统且高效规则匹配背后用到Rete 算法朴素实现通常效率不佳这正是需要专门推理库的原因。实现方式是以KnowledgeEngine为基类定义系统用Rule注解声明规则触发条件规则体内用declare追加事实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(Fact(mammal), Fact(carnivor), Fact(colorred-brown), Fact(patterndark stripes)) def tiger(self): self.declare(Fact(animaltiger))随后用初始事实填充工作记忆并调用run()触发推理循环ex1 Animals() ex1.reset() ex1.factz([Fact(colorred-brown), Fact(patterndark stripes), Fact(sharp teeth), Fact(claws), Fact(forward looking eyes), Fact(gives milk)]) ex1.run()课程注记这个例子相当简单只展示了专家系统的样貌。当你真正开始搭建这类系统时只有规则数量达到某个量级大约200 条以上才会观察到智能行为此后规则复杂到难以全部记住你会开始疑惑系统为何做某些决策。而基于知识的系统最重要的特性恰恰是任何一条决策的得出过程都可以被精确地解释。四、本体与语义网让互联网可被机器理解20 世纪末人们发起一项倡议用知识表示来标注互联网资源使得资源能够匹配非常具体的查询——这就是语义网Semantic Web。它建立在几个核心概念之上一种基于**描述逻辑DL的特殊知识表示它类似框架表示构建带属性的对象层级但拥有形式化的逻辑语义和推理**存在一族 DL在表达能力与推理的算法复杂度之间取得不同平衡分布式知识表示所有概念都由全局 URI 标识符唯一指代从而可能构建跨越整个互联网的知识层级一族基于 XML 的知识描述语言RDFResource Description Framework资源描述框架、RDFSRDF Schema与OWLOntology Web Language本体网络语言。语义网的核心概念是本体Ontology用某种形式化知识表示对问题领域做出的显式规约。最简单的本体可以只是问题领域中对象的层级而更复杂的本体则会包含可用于推理的规则。在语义网中一切表示都以三元组为基础每个对象与每个关系都由 URI 唯一标识。例如若要表达这个 AI 课程由 Dmitry Soshnikov 于 2022 年 1 月 1 日开发这一事实可以用如下两个三元组示意图见 triplet.pnghttp://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 中定义的数据结构见 triplet-complex.png。语义网建设的推进一度被搜索引擎与 NLP 技术可从文本中抽取结构化数据的成功所放缓但在某些领域维护本体与知识库的努力至今仍然可观值得关注的代表性项目包括WikiData与 Wikipedia 关联的机器可读知识库集合多数数据从 Wikipedia 页面内的结构化内容——InfoBox信息框——中挖掘而来。可以用语义网专用查询语言SPARQL在 query.wikidata.org 上查询。课程给出的示例查询展示人类最常见的眼睛颜色#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é图中为打开 Romanov 家族本体的 Web Protégé 编辑界面。4.1 源码实战FamilyOntology.ipynb 家族本体推理FamilyOntology.ipynb 演示了如何用语义网技术推理家庭关系先读取以通用GEDCOM格式存储的家谱再结合家庭关系本体自动推出全部亲属关系。其完整数据链路如下GEDCOM 家谱数据仓库提供 tsars.ged罗曼诺夫沙皇家族家谱GEDCOM 5.5 格式。用python-gedcom库解析个体与家庭from gedcom.parser import Parser g Parser() g.parse_file(data/tsars.ged) d g.get_element_dictionary()本体规则仓库提供 onto.ttl以 Turtle 格式定义家庭关系本体。其中的关系都基于isMotherOf、isFatherOf、isBrotherOf、isSisterOf四个基本谓词推导而来。例如isAuntOf姑姑/姨妈 父母亲的姐妹被定义为isSisterOf与isParentOf的复合fhkb:isAuntOf a owl:ObjectProperty ; rdfs:domain fhkb:Woman ; rdfs:range fhkb:Person ; owl:propertyChainAxiom ( fhkb:isSisterOf fhkb:isParentOf ) .构造推理用本体遍历 GEDCOM把个体性别、子女、兄弟姐妹、名字与婚姻夫妻事实转换成三元组追加到本体文件中执行推理用 RDFLib 读取 RDF 图用 OWL-RL 构建图的闭包Closure即把所有可推出的概念与关系补全g rdflib.Graph() g.parse(onto.ttl, formatturtle) print(Triplets found:%d % len(g)) DeductiveClosure(OWLRL_Extension).expand(g) print(Triplets after inference:%d % len(g))SPARQL 查询亲属用g.query(...)查询全部叔叔/舅舅关系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)推理闭包使三元组数量显著增加——这正是本体把显式知识转化为可推导的全部知识的直观体现。你还可以尝试isAncestorOf等递归关系探索家谱中更多联系。五、概念图从非结构化文本中挖掘本体大多数情况下本体由人工精心构建但也可以从非结构化数据如自然语言文本中挖掘mine出本体。Microsoft Research 的尝试产出了Microsoft Concept Graph一个用is-a继承关系聚合而成的大型实体集合可回答什么是微软这类问题——答案形如以 0.87 的概率是公司、以 0.75 的概率是品牌。该图以 REST API 或可下载的大文本文件列出全部实体对两种形式提供。注原版 Microsoft Concept Graph API 已不可用仓库中的 MSConceptGraph.ipynb 已更新为使用ConceptNet替代——它是免费开放的知识图谱提供相似的is-a概念关系可通过无需 API key 的 REST 接口如https://api.conceptnet.io/query?start/c/en/microsoftrel/r/IsAlimit10或下载数据文件访问。笔记本的实操流程附带源码证据是抽取概念对新闻标题调用 ConceptNet 的 IsA 查询返回该概念的上位词及其权重占比def query(x): concept x.lower().replace( , _) url https://api.conceptnet.io/query?start/c/en/{}rel/r/IsAlimit10.format( urllib.parse.quote(concept)) result json.loads(http(url)) edges result.get(edges, []) total_weight sum(edge[weight] for edge in edges) return {edge[end][label]: edge[weight] / total_weight for edge in edges}提取名词短语用 TextBlob 从新闻标题中提取名词短语TextBlob(x).noun_phrases并调用新闻聚合服务如 NewsApi.org需自行注册获取 API key获取标题上位词归组把每个名词替换为从概念图获得的更通用术语权重阈值如0.1从而把零散标题归并成economy、nation、person等主题簇完成无监督的新闻分类。六、总结与课后实践今天AI 常被当作机器学习或神经网络的同义词但人类还表现出显式推理explicit reasoning能力而这恰恰是当前神经网络尚未覆盖的领域。在真实项目中显式推理仍被用于执行那些需要可解释性、或需要以受控方式修改系统行为的任务——这正是符号 AI 与专家系统的持久价值所在。 挑战在家族本体笔记本中尝试实验其他家庭关系看看能否在家谱中发现人与人之间新的联系。作业Build an Ontology构建知识库的本质就是为某一主题的事实建立分类模型。请挑选一个主题——人、地点或事物——然后运用本课介绍的技术与建模策略建立该主题的模型。例如为客厅建立本体含家具、灯具等客厅与厨房有何不同与浴室呢你如何判断它是客厅而不是餐厅可借助 Protégé。回顾与自学到互联网上调研人类历史上尝试量化和编码知识的领域。查看布鲁姆分类学Blooms Taxonomy回溯人类如何理解世界研究林奈Linnaeus为生物建立的分类体系观察门捷列夫Mendeleev如何为化学元素建立描述与分组方法——你还能找到哪些有趣的例子配套资源速查均在仓库内课程讲义lessons/2-Symbolic/README.md练习 1自建推理机 Experta 前向推理Animals.ipynb练习 2GEDCOM 家谱 OWL 本体推理FamilyOntology.ipynb 及其数据 tsars.ged、onto.ttl练习 3概念图新闻分类MSConceptGraph.ipynb课程地图README.md第 88–89 行将本课列入 II. Symbolic AI 阶段。赞分享教程人工智能机器学习深度学习【免费下载链接】AI-For-Beginners12 Weeks, 24 Lessons, AI for All!项目地址https://gitcode.com/GitHub_Trending/ai/AI-For-Beginners点击查看免费下载相关推荐Symbolic AI 与专家系统实战AI-For-Beginners 第 2 课知识表示、推理与本体构建指南Symbolic AI 与专家系统实战AI For Beginners 第 2 课知识表示、推理与本体构建指南 本课是 AI For Beginners ht教程人工智能机器学习深度学习从知识表示到专家系统AI-For-Beginners 符号智能Symbolic AI课程实战指南从知识表示到专家系统AI For Beginners 符号智能Symbolic AI课程实战指南 AI For Beginners 课程12 周 24教程人工智能机器学习深度学习AI-For-Beginners 符号智能核心课知识表示、专家系统与语义网实战解析AI For Beginners 符号智能核心课知识表示、专家系统与语义网实战解析 符号智能Symbolic AI追求的是让机器像人一样拥有知识并基于知教程人工智能机器学习深度学习上一篇如何用3个强力功能让英雄联盟游戏体验提升300%下一篇Ghostfolio 结构化日志实践在 NestJS 中落地 Structured Logging 的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考