1970-SHRDLU#
案件摘要#
1968 至 1970 年,Terry Winograd 在 MIT 人工智慧實驗室完成 SHRDLU——一個能以自然語言對話、操縱虛擬「積木世界」的程式,並於 1971 年以博士論文《Procedures as a Representation for Data in a Computer Program for Understanding Natural Language》結案。SHRDLU 整合了語法(Halliday 系統語法)、語義(程序化語義)與推理(PLANNER 式目標導向搜尋)三層,能回答「the block on the table 是哪一塊」這類需要指稱消解的問題。它是規則式 NLP 的巔峰之作:在一個小得不能再小的世界裡,機器展現了真正的「理解」。但它的成功同時也是判決書——無法擴展到真實世界的規則法,註定在 1970 年代末迎來 AI 寒冬。
前因 -- 為什麼會有這個案子#
- Chomsky 的轉換生成語法提供了語法理論基礎,但如何在程式裡「使用」語法來理解意義,仍是懸案。
- LISP 語言(McCarthy, 1958)的「程序即資料」(code as data,即 homoiconicity)特性,讓 Winograd 可以把語義直接寫成 LISP 程序。
- 1960 年代問答系統的局限:Baseball(1961)只靠關鍵字模式匹配、SIR(1964)只有粗糙的物性推理;ELIZA(1966)更只是無理解的心理諮商師模仿。
- Halliday 的系統語法(systemic grammar)強調語法選擇由功能與語境驅動,適合與語義、推理整合——Winograd 選它而非 Chomsky 學派。
- 「積木世界」(blocks world)策略:把領域縮到桌面上的幾塊積木,讓「完整理解」在封閉世界裡成為可能——這是當時 AI 的聰明妥協。
- PLANNER(Hewitt, 1969-1971)提供目標導向(goal-directed)的推理語言,成為 SHRDLU 的推理層。
線索與推理 -- 數學式、程式、理論#
三層架構:語法、語義、推理的合流#
SHRDLU 的偵探手法是「三層分工、即時對話」:
- 語法層:Halliday 系統語法的剖析器,把句子解析成結構特徵。
- 語義層:程序化語義(procedural semantics)——一個詞或句子的「意義」就是它所觸發的 LISP 程序。意義不是靜態的邏輯式,而是一段「如何在積木世界裡執行」的程式碼。
- 推理層:PLANNER 式目標導向搜尋。要回答問題,就設定一個目標(goal),讓系統反覆嘗試可滿足目標的動作與查詢。
形式化地,理解句子 u 可以寫成三步合成:
指稱消解與語境追蹤#
SHRDLU 最精彩的線索是指稱消解(reference resolution):當使用者說「Find a block which is taller than the one you are holding」,系統必須:
- 維護對話語境(discourse context):追蹤「你正在拿的那一塊」是哪塊積木。
- 對候選積木逐一檢查性質,用目標導向搜尋找出滿足條件的物件。
- 若有歧義,反問使用者澄清——這是 1968 年就出現的澄清式對話。
典型對話:使用者問「How many blocks are not in the box?」,SHRDLU 查詢當前世界狀態(哪些積木不在箱子裡)並回答「Four of them」——語義程序直接查詢世界模型。
「程序即資料」的哲學#
Winograd 的論文標題就是線索:資料的表示法是「程序」。積木的性質(紅色、在箱子上方)不是存在資料庫裡的布林值,而是可以呼叫的 LISP 函式。這呼應了 LISP 的 homoiconicity:
知識與行動在語言層面上是同一種東西——這是 1970 年知識表示(KR)最有哲學野心的主張。
可執行程式:迷你積木世界 QA#
# mini blocks world: 簡單語法 + 世界狀態查詢 + 移動指令
world = {"A": {"color": "red", "on": "table"},
"B": {"color": "blue", "on": "table"},
"C": {"color": "red", "on": "A"},
"BOX": {"color": "green", "on": "table"}}
def blocks_on(x): # 直接壓在 x 上的積木
return [b for b, v in world.items() if v["on"] == x]
def find_block(pred): # 目標導向搜尋:找第一個滿足條件的積木
for b in world:
if b != "BOX" and pred(b): return b
return None
def move_block(src, dst): # PTRANS 原語:移動
if world[src]["on"] != "table" and src in blocks_on(world[src]["on"]):
pass
world[src]["on"] = dst
return f"Moved {src} onto {dst}."
# 問答:「紅色的積木在哪裡?」
print(find_block(lambda b: world[b]["color"] == "red")) # A
# 指令:「把藍色積木放到箱子上」
b = find_block(lambda b: world[b]["color"] == "blue")
print(move_block(b, "BOX")) # Moved B onto BOX.
print({k: v["on"] for k, v in world.items()}) # 世界狀態更新
程式示範了 SHRDLU 的三個核心:查詢即函式呼叫(程序化語義)、find_block 即目標導向搜尋(PLANNER 精神)、move_block 即對世界狀態的操作。
結案 -- 後果與影響#
- SHRDLU 是規則式 NLP 的巔峰:完整的三層整合、真正的指稱消解、澄清式對話,在 1970 年無出其右。
- 同時是幻滅的開始:系統無法擴展到開放世界——每換一個領域就要重寫所有語法、語義程序與推理規則,「知識獲取瓶頸」浮上檯面。
- 1970 年代末 AI 寒冬(第一波):過度承諾的規則法專案(含機器翻譯、語音識別)遭遇資金縮減,SHRDLU 常被引用為「受限領域的勝利與天花板」的雙面教材。
- 「受限領域」(microworld)策略本身有價值:證明了「理解 = 語法 + 語義 + 推理 + 世界模型」的架構在小規模上可行,成為後世對話系統的設計參照。
- 對話系統的先驅:ELIZA(1966)是無理解的模式匹配,SHRDLU 是有世界模型與推理的真理解——這條界線在 2020 年代 LLM 對話系統的哲學辯論中被反覆重新審視:LLM 像極了超大規模的 ELIZA,還是某種 SHRDLU?
- Winograd 後來轉向批評 AI(與 Flores 合著《Understanding Computers and Cognition》, 1986),成為這樁案件最耐人尋味的結局。
關鍵人物與文獻(條例)#
- Terry Winograd (1971). Procedures as a Representation for Data in a Computer Program for Understanding Natural Language. PhD dissertation, MIT (AI Memo 235; 1972 年由 Birkhäuser 出版成書 Understanding Natural Language).
- Terry Winograd (1972). "Understanding Natural Language." Cognitive Psychology, 3(1), 1-191.
- Carl Hewitt (1969). "PLANNER: A Language for Manipulating theorems and Proving Theorems in a Robot." MIT AI Memo 168.
- M. A. K. Halliday (1967-1968). 系統語法理論,SHRDLU 語法層的基礎。
- Joseph Weizenbaum (1966). "ELIZA — A Computer Program for the Study of Natural Language Communication between Man and Machine." Communications of the ACM, 9(1), 36-45.
- Terry Winograd & Fernando Flores (1986). Understanding Computers and Cognition. Ablex.