控制期望生成的一个方法是储存一种大的信息单元,这种信息单元通常称为脚本。脚本给定了我们感兴趣的领域内的常见情境和情节。我们不是使用前面的因果推理原则来生成期望,而是用脚本来表示期望。为了有效地控制推理,脚本必须涉及很多来自不同主体的行为,并且描述了这些行为之间的因果联系。用目前实现的行为表示方法足以表示脚本。图1显示了一个“TRAVEL,BY-TRAIN”行为(或脚本),描述一位乘客乘火车的典型场景,包括去火车站、买票、去相应站台和上火车等行为。这个脚本也包括大量的约束,这些约束详细描述了这些对象之间的关系。
图1 乘火车旅行的脚本
在自然语言理解中使用基于脚本的知识会出现两个主要的问题。第一个问题是脚本选择,即这个系统怎么知道哪个脚本是相关的?第二个问题是确定脚本中的哪个部分是当前正在描述的内容。这一问题与剧作家使用剧本排戏有很大程度的相似性。首先,必须识别目前是哪一场戏,然后,必须找到与正在进行的表演对应的剧本中的剧情发展情况。我们称之为“当前点”(now point),因为它从脚本的角度表明了当前时间。
根据句子描述内容的不同,可以用不同的方法将句子与脚本结构进行匹配。例如,描述目标的句子可以用来确定相关的脚本,描述行为的句子用来更新脚本的进程。具体说来,如果没有任何脚本在进展中,我们有三种方法来引入这样一个脚本:
1. 把行为描述为目标,如在句子“Jack wanted to take the train to Rochester”(Jack 想要乘火车去Rochester)中。在这些情况下,可以用期望的行为来命名这个脚本。
2. 把状态描述为目标,如在句子“Jack needed to be in Rochester”(Jack 要赶到Rochester)中。在这些情况下,句子内容与脚本的结果相匹配,由此发现能够达到期望状态的脚本。
3. 描述进行中的行为,如在句子“Jack walked up to the ticket booth”(Jack步行去售票口)中。在这些情况下,句子内容与脚本的分解相匹配以发现这一行为是实现目标的一个步骤。
一旦选择了一个脚本,当给定行为的描述时,这个脚本会更新,如在句子“Jack walked up to the ticket booth”(Jack步行去售票口)中。在这种情况下,脚本的“当前点”会相应改变到下一个行为。
现在,我们讨论脚本“TRAVEL-BY-TRAIN”是怎样用来分析下面的故事片段的:
1 a. Sam wanted to take a train to Rochester.(Sam想乘火车去Rochester。)
1 b. He purchased a ticket at the station.(他在火车站买了一张票。)