跳轉到

1975-Minsky框架理論#

案件摘要#

1975 年,Marvin Minsky 在 MIT AI Memo 306《A Framework for Representing Knowledge》中提出「框架」(frame)理論,企圖解決常識知識表示的懸案。邏輯式表示法在處理「典型情境」時屢屢碰壁,Minsky 主張知識應組織成一個個帶有槽位(slot)與預設值(default)的結構。這份文件後來收錄於《The Psychology of Computer Vision》論文集,成為知識表示法的轉捩點。本案的破案時刻在於:用「結構 + 預設 + 填入」取代「原子 + 邏輯連接詞」,讓機器第一次能「預期」世界。

前因 -- 為什麼會有這個案子#

  • 一階邏輯(predicate logic)只能表達「為真的事實」,無法優雅地表達「預設」(default)與「典型情境」——「鳥會飛,除非是企鵝」這種常識讓邏輯學家頭痛。
  • 視覺理解研究發現:人看房間時並非從零建構,而是「召喚」一個房間的模板再檢查細節;語言理解同樣依賴情境預期。
  • Erving Goffman 1974 年《Frame Analysis》從社會學角度指出人用「框架」詮釋情境;Schank 的概念依賴理論(Conceptual Dependency)也主張意義背後有深層結構。
  • Minsky 在 MIT AI Lab 長期研究常識推理,深知機器人可以下棋,卻不懂「走進餐廳會發生什麼」。
  • 當時 AI 界需要一種能同時承載視覺、語言、計劃的統一知識結構。

線索與推理 -- 數學式、程式、理論#

框架的表示法#

一個框架是「名稱 + 槽位集合」:每個 slot 可填入 filler(具體值)、default(預設值)或另一個框架的參照。形式上可寫成:

\[ F = \langle \text{name}, \{(s_1, v_1), (s_2, v_2), \ldots\} \rangle, \quad v_i \in \{\text{filler}, \text{default}, F'\} \]

查詢槽位時的取值規則:先看實例是否填入,否則沿繼承鏈上溯取預設:

\[ v(s) = \begin{cases} \text{filler}(s, F) & \text{若有填入} \\ v_{\text{parent}}(s) & \text{否則遞迴上溯} \\ \text{default}(s, F_{\text{root}}) & \text{抵達根類別} \end{cases} \]

餐廳腳本與航班框架#

Minsky 舉例:進入餐廳的框架有 slot「入座、點菜、用餐、付帳」,每個 slot 有典型預設(付帳通常是「付現金或刷卡」)。飛機航班框架則示範了繼承:航班 有 slot「出發地、目的地、起飛時間」,國際航班 繼承並附加新 slot「護照檢查」。

框架與物件導向的同構#

框架與物件導向程式設計(OOP)幾乎同構,但哲學層次不同——Simula 1967 是 OOP 的程式實作,frame 是知識表示(KR)層次的主張:

框架 OOP
frame(框架) class(類別)
slot(槽位) attribute(屬性)
default(預設值) default value
實例化填入 filler instance + constructor
框架附加 inheritance / composition

填充-匹配的推理流程#

理解 = 選一個候選框架,把觀察到的線索填入 slot,不匹配處用 default 補齊並標記為「待檢查」。這是一種「預期驅動」的自上而下推理,與資料驅動的自下而上匹配互補。

Python 實作 mini 框架系統#

class Frame:
    def __init__(self, name, parent=None, slots=None):
        self.name = name
        self.parent = parent
        self.slots = slots or {}   # slot -> {"default": v} 或 {"value": v}

    def set(self, slot, value):
        self.slots[slot] = {"value": value}

    def get(self, slot):
        f = self
        while f is not None:
            entry = f.slots.get(slot)
            if entry:
                if "value" in entry:          # 優先取填入的 filler
                    return entry["value"]
                if "default" in entry:        # 其次取預設值
                    return entry["default"]
            f = f.parent                       # 沿繼承鏈上溯
        return None

    def instantiate(self, name, fillers):
        child = Frame(name, parent=self)
        for slot, value in fillers.items():
            child.set(slot, value)
        return child


# 建構「餐廳腳本」框架
restaurant = Frame("Restaurant", slots={
    "sit_down":  {"default": "找空位入座"},
    "order":     {"default": "看菜單點菜"},
    "eat":       {"default": "用餐"},
    "pay":       {"default": "付現金或刷卡"},
})

# 飛機航班框架與繼承
flight = Frame("Flight", slots={
    "origin":    {"default": "本地機場"},
    "dest":      {"default": "未知"},
    "boarding":  {"default": "憑登機證登機"},
})
intl_flight = Frame("IntlFlight", parent=flight, slots={
    "passport":  {"default": "護照檢查"},   # 附加新 slot
})

# 實例化:填入 filler
dinner = restaurant.instantiate("Dinner-2025-01", {"pay": "用 App 付款"})
trip = intl_flight.instantiate("Trip-TPE-NRT", {"dest": "東京成田"})

print(dinner.get("pay"))      # 填入值覆蓋預設 -> 用 App 付款
print(dinner.get("order"))    # 無填入,取預設 -> 看菜單點菜
print(trip.get("dest"))       # 填入值 -> 東京成田
print(trip.get("boarding"))   # 從父類 Flight 繼承 -> 憑登機證登機
print(trip.get("passport"))   # 自己的預設 -> 護照檢查

結案 -- 後果與影響#

  • 框架成為知識表示法的標準範式,衍生出 KL-ONE(1983)與日後的描述邏輯(description logic)。
  • 為物件導向設計提供哲學先聲:frame = class 的同構讓 KR 社群與程式語言社群開始對話。
  • 腳本理論(Schank 與 Abelson 1977《Scripts, Plans, Goals, and Understanding》)以框架為理論基礎,推動故事理解研究。
  • 缺陷浮現:預設推理會產生矛盾(「企鵝是鳥但不會飛」破壞繼承),催生 1980 年代的非單調邏輯(non-monotonic logic)。
  • 「預期驅動理解」的思想延續到日後的統計語言模型:現代 LM 同樣在做「召喚典型情境再填空」。

關鍵人物與文獻#

  • Marvin Minsky (1975). A Framework for Representing Knowledge. MIT AI Memo 306;收錄於 P. Winston (ed.), The Psychology of Computer Vision. McGraw-Hill, 1975, pp. 211-277.
  • Marvin Minsky (1968). Semantic Information Processing. MIT Press.
  • Erving Goffman (1974). Frame Analysis: An Essay on the Organization of Experience. Harvard University Press.
  • Roger Schank (1972). Conceptual Dependency: A Theory of Natural Language Understanding. Cognitive Psychology 3(4), 552-631.
  • Roger Schank & Robert Abelson (1977). Scripts, Plans, Goals, and Understanding. Lawrence Erlbaum.
  • Ronald Brachman & James Schmolze (1985). An Overview of the KL-ONE Knowledge Representation System. Cognitive Science 9(2), 171-216.