简介:本资源是浙江大学远程教育学院面向成人教育与在职学习者开设的人工智能通识讲座课件,由浙大计算机学院人工智能研究所徐从富副教授主讲,系统梳理AI核心原理与典型应用路径。课件聚焦知识表示、专家系统、人工神经网络、不确定性推理、机器学习及数据挖掘六大模块,尤其深入剖析知识的定义与特性、一阶谓词逻辑的语法与表达能力、产生式系统的结构与优劣对比等关键内容,辅以大量公式示例与技术对比表格,兼具理论深度与教学实用性。资源为单个2.45MB的PPTX文件,内容完整、排版清晰,含详细目录、图示化概念解析与中英术语对照,适合高校非计算机专业学生、企业技术管理者及AI入门学习者建立体系化认知。目前已有96人下载学习,是理解人工智能底层逻辑与主流方法论的优质教学素材。
1. 这不是普通PPT:一份2006年浙大AI课件里藏着知识表示的原始脉络
2006年12月4日,杭州,浙江大学远程教育学院的一间教室里,徐从富副教授打开PowerPoint,开始讲授《人工智能》第二讲。这份名为“人工智能原理及应用”的课件,表面看是教学材料,实则是中国高校AI教育早期演进的关键切片——它没有堆砌TensorFlow代码或Transformer架构,却用18页PPT完整勾勒出知识表示这一AI底层范式的骨架。今天重读它,你会发现:当前大模型中广泛使用的提示工程(prompt engineering)本质是产生式规则的现代变体;知识图谱构建依赖的本体论(Ontology)在第7页就已列为知识表示方法之一;而所谓“RAG中的检索增强”,其理论源头正是框架表示法中“匹配—修改—补充”的认知机制。这份课件适合三类人:刚接触AI基础理论的学生,需要厘清知识表示与机器学习边界的研究者,以及正在设计规则引擎、专家系统或领域知识库的工程师。它不教你怎么调参,但能让你在写第一条if-else规则前,先想清楚这条规则在知识空间里的坐标。
2. 知识表示的四重解构:从数据到可计算结构的转化逻辑
知识表示不是把文字存进数据库,而是完成一次语义升维:将人类可理解的陈述,映射为机器可存储、可推理、可组合的数据结构。徐从富在课件第3页明确区分了数据、信息、知识三层关系——这并非哲学空谈,而是工程选型的决策依据。当你要构建一个医疗诊断辅助系统时,患者体温38.5℃是数据;该数值在流感季高于正常阈值是信息;而“体温>38.5℃且伴随咳嗽持续3天 → 概率70%为病毒性上呼吸道感染”才是知识。这种结构化表达直接决定后续系统能否支持不确定性推理(如MYCIN系统的CF置信度)或组合式推导(如一阶谓词的量词嵌套)。课件第6页列出的11种表示方法,实为11种不同的“语义压缩算法”:有的擅长刻画因果链(产生式),有的长于描述层级关系(框架),有的专精于概率依赖(信念网)。选择错误的方法,就像用哈希表存储树形家谱——技术上可行,但所有祖先查询都变成全表扫描。
2.1 数据→信息→知识的转化失效点排查
实际项目中,90%的知识表示失败源于混淆这三层边界。以下是在医疗知识库建设中验证过的检查清单:
| 检查项 | 合格表现 | 典型失效案例 | 排查命令(SQL示例) |
|---|---|---|---|
| 数据层冗余 | 原始测量值仅保留必要精度(如血压记录为120/80而非120.3/79.8) | 电子病历中同一指标存在BP_Systolic、systolic_bp、sys_bp_mmHg三个字段 | `SELECT COUNT(DISTINCT column_name) FROM information_schema.columns WHERE table_name='vital_signs' AND column_name REGEXP 'bp |
| 信息层歧义 | 时间戳带时区标识(2023-05-12T08:30:00+08:00),单位强制标准化(mmHg而非kPa) | 实验室报告中Glucose单位混用mmol/L和mg/dL,未标注转换系数 | SELECT test_name, unit, COUNT(*) FROM lab_results GROUP BY test_name, unit HAVING COUNT(*) > 1; |
| 知识层断裂 | 规则明确前提条件与结论的逻辑连接(IF fever AND cough THEN consider_viral_infection) | 临床指南文档中“建议使用抗生素”未关联具体病原体证据等级 | `SELECT guideline_id, rule_text FROM clinical_guidelines WHERE rule_text LIKE '%antibiotic%' AND rule_text NOT REGEXP 'IF |
提示:课件第5页强调知识的“不完全性”,这意味着任何知识库必须预留
unknown状态槽位。例如框架表示法中,<Diagnosis>框架的causative_agent槽应允许nil值,而非强制填入"unknown"字符串——后者会干扰后续的概率推理。
2.2 四类核心表示方法的工程实现对比
课件第6页列举的11种方法中,有4种在现代系统中仍具不可替代性。我们以构建“电力设备故障诊断知识库”为例,对比其实现特征:
# 1. 产生式系统(MYCIN风格)- 适用于经验性规则 rules = [ { "premise": "temperature > 90 AND vibration > 5.2", "conclusion": "bearing_failure", "cf": 0.85, # 置信度需校准(课件第14页CF定义) "evidence": ["infrared_scan_202310", "vibration_log_202310"] }, { "premise": "oil_color == 'black' AND particle_count > 10000", "conclusion": "gear_damage", "cf": 0.72, "evidence": ["oil_analysis_report_202310"] } ] # 2. 框架表示法(Minsky理论)- 适用于结构化对象 transformer_frame = { "name": "S11-2000/10", "slots": { "cooling_type": {"value": "ONAN", "constraint": "ENUM['ONAN','OFAF','ODAF']"}, "winding_temp": {"value": 78.5, "unit": "°C", "max": 105}, "fault_history": [ {"date": "2022-03-15", "type": "bushing_leak", "severity": "medium"}, {"date": "2023-08-22", "type": "core_grounding", "severity": "high"} ] } } # 3. 语义网络(课件第6页提及)- 适用于关系推理 # 使用RDF三元组表示(需配合SPARQL查询) semantic_triples = [ ("S11-2000/10", "hasCoolingType", "ONAN"), ("ONAN", "subClassOf", "OilNaturalAirNatural"), ("OilNaturalAirNatural", "requiresMaintenance", "every_6_months") ] # 4. 本体论(课件第6页末位)- 适用于跨系统知识融合 # OWL定义片段(简化版) owl_definition = """ <Class IRI="http://example.org/Transformer"/> <Class IRI="http://example.org/OilNaturalAirNatural"> <subClassOf> <Class IRI="http://example.org/CoolingType"/> </subClassOf> </Class> <ObjectProperty IRI="http://example.org/hasCoolingType"/> """上述代码揭示课件第16页指出的产生式系统“效率不高”问题:当规则库超过500条时,rules列表的线性匹配耗时呈O(n)增长。此时需引入Rete算法(如Drools引擎)构建模式网络,将temperature > 90等条件编译为内存中的节点树,使匹配复杂度降至O(1)。而框架表示法的fault_history数组则体现课件第19页“匹配—修改—补充”机制:新故障记录直接追加到数组末尾,无需重构整个框架结构。
3. 一阶谓词逻辑的实战编码:从命题到可执行推理引擎
课件第9-10页展示的一阶谓词公式,常被误认为纯理论工具。实际上,它是构建可验证知识系统的基石。以课件实例2“世上决没有无缘无故的爱,也没有无缘无故的恨”为例,其谓词公式¬∃x[爱(x) ∧ ¬∃y缘故(x,y)] ∧ ¬∃t[恨(t) ∧ ¬∃s缘故(t,s)],若直接翻译为Python代码,会因量词嵌套导致指数级复杂度。正确做法是采用逻辑编程范式,借助Prolog或其Python绑定(如pyswip)实现声明式推理。
3.1 谓词公式的工程化降维策略
关键在于将高阶逻辑转化为可索引的数据结构。以课件第10页实例1的集合基数比较为例:
% Prolog实现(SWI-Prolog语法) % 定义集合与基数关系 cardinality(set_a, 5). cardinality(set_b, 8). cardinality(set_c, 3). % 定义基数比较规则 greater_cardinality(X, Y) :- cardinality(X, SizeX), cardinality(Y, SizeY), SizeX > SizeY. % 查询:是否存在集合Y使card(Y) > card(set_a)? % ?- greater_cardinality(set_b, set_a). % true.此实现规避了课件第12页指出的“组合爆炸”问题:不生成所有可能的集合对,而是通过索引cardinality/2事实表进行O(1)查找。在真实系统中,需将cardinality表映射为数据库视图:
-- PostgreSQL视图(对应Prolog事实库) CREATE OR REPLACE VIEW knowledge_base.cardinality AS SELECT entity_id::text AS set_name, jsonb_extract_path_text(attributes, 'cardinality')::int AS size FROM public.entities WHERE attributes ? 'cardinality';注意:课件第9页逻辑符号对照表中
∀x P(x)对应SQL的NOT EXISTS (SELECT 1 FROM table WHERE NOT condition),这是避免全表扫描的关键。例如验证“所有变压器冷却方式均为标准类型”,应写为:SELECT NOT EXISTS ( SELECT 1 FROM equipment WHERE type = 'transformer' AND cooling_type NOT IN ('ONAN', 'OFAF', 'ODAF') ) AS all_valid;
3.2 量词嵌套的性能陷阱与优化方案
课件第10页公式(∀x){SET(x) → (∃y)(∃u)(∃v)[SET(y) ∧ CARD(y,u) ∧ CARD(x,v) ∧ G(u,v)]}包含四层嵌套,直接实现将触发笛卡尔积。优化路径分三步:
预计算索引:为
CARD关系建立复合索引CREATE INDEX idx_card_set_size ON knowledge_base.cardinality(set_name, size);谓词下推:将
G(u,v)(即u>v)条件提前到子查询-- 低效:先生成所有(u,v)组合再过滤 SELECT x.set_name FROM sets x WHERE NOT EXISTS ( SELECT 1 FROM sets y CROSS JOIN cardinality cx CROSS JOIN cardinality cy WHERE cx.set_name = x.set_name AND cy.set_name = y.set_name AND cy.size > cx.size ); -- 高效:用关联子查询避免笛卡尔积 SELECT x.set_name FROM sets x WHERE NOT EXISTS ( SELECT 1 FROM sets y INNER JOIN cardinality cy ON cy.set_name = y.set_name INNER JOIN cardinality cx ON cx.set_name = x.set_name WHERE cy.size > cx.size );增量验证:对动态知识库,只检查新增实体
# Python伪代码:仅验证新加入的集合 def validate_cardinality_rule(new_set: str): # 获取新集合基数 new_size = get_cardinality(new_set) # 查询是否存在更大基数集合 larger_exists = db.query( "SELECT 1 FROM cardinality WHERE size > %s LIMIT 1", (new_size,) ) return not larger_exists
此方案将课件第12页“效率低”问题转化为可管理的工程挑战,使谓词逻辑从教学概念变为生产环境可用的验证工具。
4. 产生式系统的现代重生:从MYCIN到规则引擎的参数调优实践
课件第13-17页详述的产生式系统,在2023年并未消亡,而是以规则引擎(Rule Engine)形态深度融入金融风控、IoT设备管理等场景。其核心价值在于:当机器学习模型无法解释决策依据时,产生式规则提供可审计的因果链。但课件第16页指出的“效率不高”问题,在分布式环境下被放大——单节点规则匹配已成瓶颈。解决方案不是抛弃产生式,而是重构其执行模型。
4.1 Drools规则引擎的CF置信度校准方法
课件第14页的CF = [0,1]在现代引擎中需转化为可计算的置信传播机制。以Drools为例,Certainty Factor不能简单设为静态值,而应根据证据质量动态调整:
// Drools DRL规则(简化版) rule "HighTempBearingFailure" when $t: TemperatureReading(sensorId == "BEARING_TEMP", value > 90) $v: VibrationReading(sensorId == "BEARING_VIB", value > 5.2) $e1: Evidence(source == "infrared_scan", confidence >= 0.8) $e2: Evidence(source == "vibration_log", confidence >= 0.7) then // CF动态计算:取证据置信度加权平均 double cf = ($e1.confidence * 0.6 + $e2.confidence * 0.4) * 0.85; insert(new Diagnosis("bearing_failure", cf, "temp_vib_correlation")); end此处0.85继承课件第14页MYCIN的基准置信度,而0.6和0.4是证据权重——这正是课件第16页“不能表达启发性知识”缺陷的工程补偿。实际部署中,需通过A/B测试校准权重:
- 将
0.6/0.4设为变量,收集1000次诊断结果 - 计算不同权重组合下的F1-score
- 选择F1-score峰值对应的权重
# 校准脚本伪代码 for w1 in 0.1 0.2 ... 0.9; do w2=$(echo "1-$w1" | bc) ./run_diagnosis --weight1 $w1 --weight2 $w2 > results_${w1}_${w2}.json done jq -s 'max_by(.f1_score)' results_*.json4.2 冲突消解策略的生产级配置
课件第15页“模块性”优势在微服务架构中演变为规则隔离。当多个服务提供冲突规则时(如设备管理服务与能源优化服务对同一变压器发出不同操作指令),需配置冲突消解策略:
| 策略类型 | Drools配置 | 适用场景 | 课件对应原则 |
|---|---|---|---|
| 优先级(Priority) | @Priority(10) | 业务规则有明确等级(如安全规则 > 效率规则) | 课件第15页“模块性”延伸 |
| 最近使用(Recency) | dialect "java"+ 时间戳字段 | IoT设备状态快速变化场景 | 课件第5页“知识的经验性” |
| 证据强度(Evidence) | 自定义ConflictResolver | 医疗诊断需综合多源检测报告 | 课件第14页CF机制强化 |
| 路径一致性(Path) | agenda-group "diagnosis" | 多步骤诊断流程需保证顺序 | 课件第17页“相对独立的操作” |
关键配置示例(kmodule.xml):
<kbase name="diagnosisKBase" packages="rules"> <ksession name="diagnosisSession" type="stateful" clock-type="realtime"> <configuration> <!-- 启用证据强度冲突消解 --> <property name="drools.conflict-resolver" value="org.drools.core.common.DefaultConflictResolver"/> </configuration> </ksession> </kbase>提示:课件第16页“不能表达结构性知识”的缺陷,可通过Drools的
@Duration注解弥补——为规则添加生命周期,使其自动失效,从而模拟知识的“相对正确性”(课件第5页)。
5. 框架表示法的工业级落地:从Minsky理论到设备数字孪生建模
课件第19-20页的框架表示法,在2023年已成为数字孪生(Digital Twin)建模的核心范式。Minsky提出的“匹配—修改—补充”机制,恰好对应物理设备状态更新的完整闭环:当传感器数据流入,系统匹配预设框架,修改槽值,并根据约束条件补充衍生属性(如温度升高触发“冷却效率下降”预警)。这种结构化建模能力,远超JSON Schema的静态校验,直击课件第5页强调的“知识的可表示性与可利用性”。
5.1 框架槽位的约束驱动开发(Constraint-Driven Development)
课件第20页框架模板中的约束:约束条件,在工业系统中需转化为可执行校验。以变压器框架为例:
{ "name": "S11-2000/10", "slots": { "winding_temp": { "value": 78.5, "unit": "°C", "constraints": [ {"type": "range", "min": 0, "max": 105}, {"type": "rate_of_change", "window": "1h", "max_delta": 5.0}, {"type": "correlation", "with": "load_current", "formula": "temp = 25 + 0.3 * load_current"} ] } } }上述约束需在数据接入层实时执行:
class SlotValidator: def __init__(self, constraints): self.constraints = constraints def validate(self, new_value, context: dict): for c in self.constraints: if c["type"] == "range": if not (c["min"] <= new_value <= c["max"]): raise ValueError(f"Value {new_value} out of range [{c['min']}, {c['max']}]") elif c["type"] == "rate_of_change": last_value = get_last_value(context["sensor_id"], window=c["window"]) delta = abs(new_value - last_value) if delta > c["max_delta"]: # 触发预警并补充诊断槽位 self._supplement_diagnosis("rapid_temperature_rise", context) elif c["type"] == "correlation": expected = eval(c["formula"], {"load_current": context.get("load_current", 0)}) if abs(new_value - expected) > 2.0: # 允许2°C误差 self._supplement_diagnosis("cooling_system_degradation", context) # 补充诊断槽位(体现课件第19页“修改—补充”机制) def _supplement_diagnosis(self, diagnosis_type, context): diagnosis_frame = { "type": diagnosis_type, "timestamp": datetime.now().isoformat(), "evidence": [context["sensor_id"]], "severity": "medium" if diagnosis_type == "rapid_temperature_rise" else "high" } # 插入到设备框架的diagnosis_history槽 append_to_slot(context["device_id"], "diagnosis_history", diagnosis_frame)此实现将课件第5页“知识的不确定性”转化为可操作的误差容忍机制,同时通过_supplement_diagnosis体现框架的动态演化能力。
5.2 框架继承与版本控制的Git工作流
课件第19页框架理论隐含继承关系(如“油浸式变压器”继承“电力变压器”框架)。在大型设备库中,需用Git管理框架版本:
# 框架仓库目录结构 ├── base/ # 基础框架(所有设备共用) │ ├── equipment.json # 设备通用槽位 ├── power/ # 电力设备框架 │ ├── transformer.json # 变压器特有槽位 │ └── circuit_breaker.json └── wind/ # 风电设备框架 └── turbine.json关键操作:
# 1. 创建新框架分支(对应课件第19页“新事物匹配合适框架”) git checkout -b feature/transformer-s11-2000 base # 2. 继承基础框架并添加特有槽位 cat base/equipment.json power/transformer.json > power/transformer-s11-2000.json # 3. 用JSON Schema校验框架有效性(确保课件第20页格式合规) jsonschema -i power/transformer-s11-2000.json schema/framework.json # 4. 合并时解决槽位冲突(如base与power对"cooling_type"约束不同) git merge --no-commit power # 手动编辑冲突,保留base的通用约束+power的特有约束此工作流使课件第16页“便于组织、管理与维护”从口号变为可审计的工程实践,每次git commit都是知识库的一次可信快照。
本文还有配套的精品资源,点击获取