1 历史背景

1.1 认知科学的启发

框架理论的提出根植于20世纪70年代认知科学对人类知识组织的探索。当时,心理学家如弗雷德里克·巴特利特(Frederic Bartlett)的记忆实验表明,人类并非以孤立的碎片存储信息,而是依赖结构化的“图式”(schema)来理解和回忆场景。例如,受试者看到“餐厅”场景时,会自动激活与餐桌、服务员、点餐等关联的预期,即使细节模糊。这种认知现象启发了计算机科学家寻找一种形式化知识表示方法,使其既能反映人类的思维模式,又能被机器处理。认知科学中的语言理解研究——特别是人们对日常事件如何产生“合理推断”——构成了框架思想的重要前奏。

1.2 明斯基的原始论文(1975)

1975年,麻省理工学院教授马文·明斯基Marvin Minsky)发表了划时代的论文《框架——一种表示知识的理论》(*A Framework for Representing Knowledge*),正式将“框架”引入人工智能领域。该文最初发表于《麻省理工学院人工智能实验室备忘录》(MIT AI Lab Memo),后收录于《计算机科学中的视觉》(*Vision in Computer Science*)等文集。明斯基提出,框架是一种预定义的结构,代表典型情境(如“生日派对”“教室上课”)的“定型化印象”。他论证,人类大脑利用这些框架来快速识别新情境,而机器的智能也必须在推理中嵌入类似的结构。这一思想挑战了当时流行的基于谓词逻辑的表示方法,强调了常识性知识的模块化与默认假设的重要性

1.3 与脚本理论(Schank)的关联

几乎同时,耶鲁大学的罗杰·香克(Roger Schank)提出了“脚本理论”(Script Theory),用以描述人们对特定序列事件的认知,如“餐厅脚本”包括“进入—点餐—进食—付账”等步骤。脚本与框架本质上是同一种知识表示的变体:框架侧重于静态的结构(对象、属性、关系),脚本侧重于动态的流程(时间顺序的行动);二者共享“槽位填充”与“默认值”的核心机制。明斯基的框架理论和香克的脚本理论在人工智能的早期回合中相互补充,前者更适用于视觉场景和知识库,后者则深入自然语言理解中的故事解析。

2 基本概念

2.1 框架的定义

框架被定义为一个用于表示典型情境的知识结构,由一组节点(称为“槽位”)和约束关系组成。每个框架对应一种类型的概念或场景,例如“汽车”“办公室”“购买商品”等。当系统遇到新实例时,它会从记忆中调用最匹配的框架,用实例中的具体值填充槽位,从而完成理解。框架不是孤立存在的,而是通过层次、继承和关联与其他框架连接,构成一个知识网络。一个框架整体上提供了对该情境的一般性“模板”,使得信息处理可以基于预期而非穷举搜索。

2.2 槽位与方面

槽位(slots)是框架中固定的“位置”,代表了该情境中可能出现的属性或角色。例如,“汽车”框架可能包含槽位“品牌”“颜色”“发动机类型”“座位数”。“方面”(facets)则是对槽位属性更精细的描述,例如槽位“颜色”的方面可以包括:值的类型(字符串/分类值)、可取值集合(如“红、蓝、黑”)、默认值(如“黑色”)以及与其他槽位的约束关系(如“红色车身不能与黑色内饰冲突”)。方面使框架在表达力上超过简单的键值对,能够容纳类型检查、范围限制和启发式规则。

2.3 默认值及其作用

默认值(defaults)是框架在缺乏具体信息时自动采用的“假设立场”。它们反映了常识中对典型情况的预期。例如,“鸟”框架包含槽位“能飞”的默认值为“是”。默认值允许系统在信息不完整时仍然有效推理,无需每次都依赖完整的逻辑推导。其作用类似于认知中的“启发式填补”——当我们在黑暗中看到一条细长物体时,默认将其视为“绳子”而非“蛇”,这减少了信息处理的成本但保留一定的容错空间。

2.3.1 默认推理的典型性

默认推理的核心是“典型性”假设:框架中的默认值通常基于最常见的经验。在“办公室”框架中,“有桌子和椅子”是默认值,而“有宠物狗”则不是。这种典型性使得框架适用于大量常规情况,但同时也面临着例外情况时出错的危险。在人工智能中,默认推理常与非单调逻辑结合:新信息的加入可能撤销旧默认值。例如,得知某鸟是“企鹅”后,“能飞”的默认值就被覆盖了。

2.3.2 默认值的异常处理

当输入的实例与默认值冲突时,系统需要启动异常处理机制。常见方法包括:使用子框架特化(如下文中的“子框架继承”再覆盖)、设置“异常标志”以触发更复杂的推理、或采用置信度修正(降低默认值的置信度并收集额外证据)。例如在自然语言理解中,当句子“他走进一家没有椅子的餐厅”出现时,系统会识别出对“餐厅—椅子存在”默认值的违反,从而触发对情境的特殊解释(如“这是一家立食风格的餐厅”),避免理解崩溃。

2.4 框架层次结构(父框架与子框架)

框架之间可组织成层次结构(又称“框架网络”)。父框架(也称“泛化框架”)代表更抽象、通用的概念,如“动物”;子框架(“特化框架”)代表父框架下更具体的类型,如“鸟”“鱼”。子框架继承父框架中的所有槽位和默认值,并添加或修改某些槽位。例如,“鸟”框架继承自“动物”的槽位“呼吸方式”(默认值“肺呼吸”);同时,“鸟”新增槽位“翅膀数量”(默认值“2”)并覆盖父框架的“移动方式”默认值为“飞行”。层次结构不仅降低知识冗余,还支持向上抽象(子框架可引用父框架的属性)和向下细化(通过子框架处理例外情境)。

3 框架的表示与操作

3.1 框架的符号化表示方法

在符号化人工智能中,框架通常以类似于Lisp列表或网络结构的形式编码。一个典型的框架表示如:

(FRAME: 鸟
   IS-A: 动物
   SLOTS: (呼吸方式 肺)
          (翅膀数量 2)
          (能飞 是)
          (栖息地 多种)
   DEFAULTS: (能飞 是)
             (栖息地 树林))

这种表示可以存储于知识库的“槽-值”结构中。片段的数字标签和指针指向其他框架或具体值。明斯基原论文采用类似框架-属性-值的三元组,后来在实践中有更多变体,但核心均保持“框架名+槽位集合+默认值集合”的形式。这种表示与语义网络中的节点-边表示兼容,但增加了对上文提到的“方面”和约束的显式描述。

3.2 槽值的填充与继承

槽值填充是指系统从外部输入(如自然语言句子或视觉数据)中提取信息,并填充到当前框架的对应槽位中。例如,收到“张三在驾驶一辆红色跑车”这一输入时,系统在“驾驶”框架中找到“驾驶人”槽位填入“张三”,“车辆”槽位填入一个指向“跑车”子框架的指针。继承则是当当前框架缺少某槽位值时,自动从父框架中获取该槽位的默认值——乘客未列明时,可能继承父框架的默认值“1名”,并进一步从“汽车”父框架继承“有方向盘”等属性。

3.2.1 静态继承

静态继承指在系统初始化或解析前就固定好的继承路径,子框架自动获得父框架的所有槽位和默认值,除非在被显式覆盖。例如,“企鹅”子框架从“鸟”父框架继承“有羽毛”“卵生”等槽位,但显式覆盖“能飞”为“否”。这种继承无需推理,仅基于层次的定义即可完成。静态继承保证了知识的一致性,类似于面向对象编程中类的继承。

3.2.2 动态覆盖

动态覆盖允许在运行时根据具体情况临时修改或新增槽值,覆盖继承来的默认值。例如,在一个特定故事中,“一只翅膀受伤的鸟”导致“能飞”槽位的值被动态改为“否”(尽管其子框架层次继承自“鸟”的默认值是“是”)。动态覆盖的触发条件可以是输入数据冲突、上下文线索或启发性规则(如“如果鸟进入医院则假定不能飞”)。这种机制使得框架在面对例外时具有灵活性,但需要设计良好的冲突解决策略以避免推理混乱。

3.3 框架匹配与识别

框架匹配是系统将输入信息(完整或部分描述)与知识库中的框架进行对比、选出最合适的框架的过程。匹配不是简单的字符串相等,而是基于槽位值的相似度计算。例如,输入“有四条腿、一条尾巴、会吠叫的动物”则与“狗”框架匹配度高;而“狗”框架也可能部分匹配“狼”框架,这时需通过额外槽位(如“驯化程度”)进一步区分。

3.3.1 部分匹配与相似度

现实输入往往是不完整的,系统必须容忍部分匹配。相似度通常定义为:已匹配槽位占全部相关槽位数量之比,以及匹配值的精确度(如颜色值“红”和“暗红”接近)。如果输入只有“有羽毛、会飞”,则可能匹配“鸟”框架(匹配度40%)或“蜜蜂”框架(匹配度30%),需要权衡。部分匹配中,未匹配的槽位则由默认值填充以完成框架,这既可以是优势(填补空白带来理解),也是风险(可能产生错误推理)。

3.3.2 默认值触发与修正

当匹配完成但某些槽位未被显式输入给出时,系统自动调用默认值来填充这些槽位。例如,若激活了“鸟类”框架但未注明“栖息地”,则默认“树林”被采用。随后,如果输入提供了“栖息地是海边”的新信息,系统需要修正:将槽位值从默认“树林”覆盖为“海边”,且可能要进一步推理(是否需要修正其他关联槽位,如“食物来源”)。这一过程体现了默认值的“可修正性”——它们不是逻辑公理,而是可撤销的假设。修正可能引发级联更新(如改变“鸟”的生态位信息),亦可触发记录以改进日后的框架选择。

4 框架理论的应用

4.1 自然语言理解

自然语言理解(NLU)是框架理论最早也最成熟的应用领域之一。语言中的词汇和句子往往隐含了大量的背景知识,框架则为这些知识提供了组织模板。例如,动词“购买”关联一个“购买事件框架”,包含“买方”“卖方”“商品”“价格”“地点”等槽位。当句子“小明在商店用100元买了本书”出现时,NLU系统可自动填充槽位:“买方=小明”“商品=书”“价格=100元”“地点=商店”,从而捕捉事件的语义结构。

4.1.1 篇章分析与歧义消解

在篇章层面,框架帮助追踪指代和消除歧义。例如,在语篇“张三去了一家饭馆。他点了牛肉面。他吃了很久。”中,“他”的指代由“饭馆框架”的默认角色(服务员/顾客)来引导——更可能的指代是“张三”而非“服务员”。歧义消解常依赖于框架间的一致性:若“饭馆框架”被激活,则“点菜”动作自动对应“顾客”角色,避免了因同音词“点”引发的其他歧义(如“点亮灯”)。框架还能处理跨句连贯性,当出现“他抱怨菜太咸”时,系统通过“顾客—抱怨”的关联槽继承,确定这是“饭馆框架”下的合理发展。

4.1.2 事件框架(如“餐厅”“乘车”)

特定事件框架提供了对典型流程的模板。例如,“餐厅”框架包含子事件:①进入→②就座→③点餐→④等待→⑤用餐→⑥付账→⑦离开。每个子事件又有自己的槽位。当输入语段“他叫来服务员”可能被识别为对应“点餐”子事件,即使无显式的“点餐”文字。再如,“乘车”框架涉及“乘客”“司机”“车辆类型”“路线”“付款方式”等槽位,系统可以自发填充默认值(如“公交车”对应“投币”支付)。这类应用在早期自然语言系统如SAM(Schank & Abelson, 1977)和FRUMP(Minsky, 1981改进版本)中得到体现。

4.2 计算机视觉

计算机视觉中,框架理论被用于场景理解和对象识别。每类场景或物体被建模为一个框架,系统的视觉过程即是匹配视觉帧中的特征(边缘、形状、颜色、空间关系)到框架槽值的过程。例如,“客厅”框架包括“沙发”“茶几”“电视”“窗户”等槽位,以及它们之间的空间布局关系(如“沙发面对电视”)。

4.2.1 场景理解与对象识别

场景理解中的“框架”类似于“场景模板”,帮助系统在杂乱图像中快速定位目标。给定一张图像,系统尝试激活最适配的场景框架:如果检测到多个人的脸部、一张桌子以及背景中的黑板,则很可能是“教室”框架。对象识别也遵循类似逻辑——识别一只“狗”需要匹配“狗”框架的槽位(四腿、尾巴、大致体型)。早期视觉系统(如MIT的VISION, 1978)就利用了框架构成的分层描述:低层次提取原始特征,高层次用框架整合为语义实体。

4.2.2 视觉框架的层次组合

视觉框架支持从抽象到具体的层次组合。一个“人”框架可能包含“头部”“躯干”“四肢”的子框架,而“头部”框架又细分为“眼睛”“鼻子”“嘴巴”等。这种层级帮助系统从粗到细分析图像:先定位“人”的整体框架,确定大致区域,再递归向下匹配子框架;组合过程中每个子框架继承父框架的默认空间关系(例如“眼睛”默认在“鼻子”上方),从而降低识别复杂度。这种思想预演了后来的卷积神经网络中层级特征提取——虽然后者不依赖显式的符号框架,但与框架的层次化先验高度共鸣。

4.3 专家系统与知识工程

框架理论在专家系统中被用作知识表示的工具,提供了一种比规则系统更结构化的方式来编码领域专家知识。一个医学诊断专家系统可能包含“疾病框架”,槽位包括“症状”“实验室检查结果”“治疗方案”;当患者的症状填充槽位后,系统可以继承并推理出可能的治疗路径。

4.3.1 基于框架的知识库构建

在知识库构建中,框架使领域知识得到模块化存储。一个现代农业知识库可能包含“水稻种植框架”,下挂“土壤条件”“播种阶段”“病虫害管理”等子框架,子框架又继承父框架的默认值(如默认播种季节为“春季”)。这种结构使得知识库易于维护:修改父框架中的某个默认值(如“默认水分量”)将自动影响所有子框架。同时,知识工程师可以通过添加新子框架来扩充知识库,无需重写整个系统。典型系统如XCON(RI)的后续版本采用了框架式表示来管理计算机组件配置知识。

4.3.2 推理机与槽值传播

基于框架的推理机主要通过槽值传播进行工作。当系统中某个框架的某一槽位发生更改,推理机会根据事先定义的约束和继承规则,自动调整相关框架的槽值。例如,若“设备A”框架的“电压”槽从220V改为110V,则推理机槽位传播导致“电源适配器”子框架的兼容槽位自动更新,同时触发“不可用”标志。这种传播机制在故障诊断和规划系统中极为有用;例如,在航天任务的计划系统中,一个“燃料预计消耗”槽值的改变可以传播到“载重余量”和“返回时间”等多个槽位的再计算。此外,默认值在推理中充当“迅速答复”的角色,减少大量逻辑推导的运算。

5 批评与局限

5.1 框架的刚性:缺乏动态适应

框架理论的核心批评是框架的“刚性”:框架一旦设计完成,其槽位结构和对典型性的依赖往往难以适应未预见的新情况。例如,一个“汽车”框架最初用于小轿车,当出现三轮汽车或飞行汽车时,原有槽位(如“车门数=4”的默认值)可能导致误匹配。虽然动态覆盖和子框架可以部分缓解,但创建和维护大量子框架的成本极高,不可避免地存在“知识表示鸿沟”——框架覆盖的范围永远落后于现实世界的异构与变化。从认知角度看,它也过度简化了人类知识的高度动态性(人通过类比和在线学习不断调整基本结构,而非仅覆盖默认值)。

5.2 默认值的非单调推理问题

默认值的使用引入了非单调推理(non-monotonic reasoning)的问题:新知识的出现可能推翻已做出的推理。在框架中,系统可能依赖默认值“鸟会飞”得出结论“该鸟能逃离笼子”,但随后获取的新信息“该鸟是鸵鸟”则使得结论失效。这种非单调性在逻辑上带来了混乱:知识如何保证在没有矛盾时稳定?标准的单调逻辑(如经典逻辑)一旦断言则不会改变,而框架中的默认值总是“可能被覆盖”的。尽管非单调逻辑(如缺省逻辑)提供了形式化基础,但在实用中,框架系统往往需要额外的显式例外列表或关闭世界假设,导致推断过程难以追踪且容易崩溃。

5.3 与基于逻辑的知识表示的比较

与基于逻辑的知识表示(如一阶谓词演算、描述逻辑)相比,框架理论缺乏严格的语义基础。逻辑表示具有明确的真值条件、一致的证明理论和可判定的推理算法,而框架的槽位和默认值往往缺乏形式化的语义解释(例如,“默认值”是频次统计还是约定俗成?不同系统解释各异)。逻辑系统支持开放世界假设下的合理推演,而框架的默认值隐含了封闭世界假设的倾向(未被指出的通常取默认值——可能造成错误)。然而,框架的论据是其在处理常识和可读性上的优势:逻辑表示倾向于繁琐且难以存储大量默认常识,而框架提供了直观的近似方法。当前的折衷体现为“基于框架的描述逻辑”和“DAML+OIL”等混合方式,将框架的模块化纳入逻辑框架。

6 后续发展

6.1 面向对象编程中的框架思想

20世纪80年代起,框架理论被直接移植到面向对象编程(OOP)中。类(class)对应父框架,对象(object)对应具体框架实例;继承(inheritance)对应属性拷贝,方法(method)对应框架的行为操作。默认值在OOP中体现为字段的默认初始化值(如整数默认0)。更直接的对应可见于“原型对象”模式,其中对象可以直接复制并修改槽位(如JavaScript的原型链)。尽管面向对象语言将“框架”具体化并进行通用的代码复用,它保留了框架理论的核心:“模板+特化覆盖”。许多早期的OOP语言如Smalltalk和C++的设计中,明斯基的概念直接影响了“类”的建模思想。

6.2 概念框架与语义网络融合

在知识表示领域中,“概念框架”(conceptual frames)与语义网络逐渐融合。初始的框架理论倾向于紧耦合、固定结构,而语义网络则强调通过节点和弧的动态链接。这种融合产生了更灵活的表示如“概念图”(Conceptual Graphs,由John Sowa提出)和“构式语法”中的“构式槽位”思想。当前的知识图谱(如Wikidata、谷歌知识图谱)中,虽然不显式使用“框架”一词,但实体类型(如“人”)具有预设的“属性模版”(姓名、出生日期、国籍),这与框架的槽位完全一样。语义网络中的继承推理同样类比框架的“IS-A”层次。

6.3 现代深度学习中的“框架影子”(如Transformer中的结构化先验)

在当代深度学习领域,明斯基的“框架”没有以显式符号出现,但其“结构化先验”的理念在多个架构中以“影子”形式留存。例如,Transformer模型中的位置编码本质上提供了输入展开的“槽位”;自注意力机制通过“查询-键”对应框架的匹配过程。更直接的体现是“神经框架系统”,如“关系网络”(Relation Networks)和“结构化记忆模块”(Structured Memory Networks),它们预设实体和关系槽位,类似于框架的槽位绑定。多模态模型(如CLIP)在处理“场景”时,利用了“视觉框架”式的场景编码——包含对象、属性和空间关系的隐式表征。可以说,当代AI不抛弃框架的核心理念,而是将其内化为神经网络的先验结构和注意力机制,从而在灵活性与可解释性之间摇摆。明斯基在1975年的论文中预言了这种“将知识结构嵌入网络”的可能性,某种程度上在深度学习时代得到了回响。