2005年11月18日

互动小说 人工智能 互动小说交谈排列模型

  作者:Jorn Barger

  译者:Amiyami

  摘要:一种尚待讨论的观点认为,互动小说需要一个内容丰富,能够知道怎样做出仿真式反应,包括对人类行为的模拟的智能对象库支持。Doug Lenat的Cyc工程已经从传统人工智能的角度触及了这个问题,但对于互动小说来说这种对象库可能仅仅意味着搜集特定形式的文本――而且在互联网上,一个新的邮件列表正致力于建造这样的一个文本库。如果这个库能够将所有最有趣的情节线索连接起来,那么计算机的功能将变为以机敏、同步的安排同玩家进行交谈,展开尽可能多的有趣的情节。在之前的一些论题中(IED 7.4),Chris Crawford讨论了若干最基本的互动小说结构(topologies)――并证明了其中每一种都有着致命的缺陷。最基本的,互动性要求玩家进行选择,故事会因此分化变为树状结构(topologies)。但Chris证明,故事树要么必须用某种非常有限的方式形成封闭结构(fold back on themselves),要么它们的大部分分支都被迫进行平衡并导致生硬的结束(have most of their branches trimmed to (violent)dead-ends)。如果以上情况都没有发生,则故事结构必须进行指数式的扩张……因此,在一些糟糕的例子中,高额预算并未能产生相应效果,而是造就了既过于简单化又不吸引人的游戏。在对遥远未来的幻想中,计算机能够提供一个近乎无限的虚拟现实世界,人物、物体都能够模拟出真实生活中的最小细节。人们能够步入狄根斯或是托尔斯泰的小说世界,完全自由地同里面的人物进行互动……但是……怎样的设计方案才能使这种形式的互动小说变为现实?当然,正确的一步是告诉计算机最基本的互动规则,同时这也是对传统AI的挑战。

  在这篇文章中,我将首先对AI世界中最有可能实现"真实智能(truly intelligent)"的一个项目:Cyc工程进行说明。然后我会指出Cyc模式是如何与传统的文字冒险游戏(traditional text-adventure)交迭(overlap)的。我还要讨论一种富有潜力同时能更为简单地建立一个互动小说专用"Cyc"的策略――用一种被称为"完全文本(meta-story)"的结构,同时还会提供一些例子来证明这种结构能够按照人们的直觉思维方式将知识组织起来(capture knowledge in an intuitive way)。最后,我将要探索一种新的互动小说范例――互动小说式交谈排列模型(confabulating-arranger model)

  基本认识:Cyc工程

  游戏设计师们觉得近三十年的学术性AI研究产生的实用成果很少。学者们所研究问题的领域太狭隘,而且采用的程序结构对于实时游戏(realtime gameplay)来说太慢。迫于需要,游戏界不得不发明自己的AI风格。

  过去十年,一个非常野心勃勃的计划(令人惊讶地低调)正在奥斯丁、得克萨斯实施,试图组织起人类常识的所有内容。Cyc(取自百科全书英文名enCYClopedia的一部分)工程的目的是提供一种能够阅读报纸,明白其内容,发现与常识不符之处,就像我们读者一样能干的程序。

  就其已经达到的程度而言,至少在理论上,Cyc工程对维持一个虚拟世界中的内在联系(internal consistency)非常有用。由Doug Lenat领导的Cyc小组,正在试图将人们的理解力(human understanding)分解为数以千计的被称作"微理论(micro-throries)"的东西,比如疾病,食物的制备,交流,合作行为,并尝试将它们用逻辑符号翻译成为基本的规则。当他们需要说"如果某人窒息了,那么他不能呼吸"的时候,他们会这么表达:

  (LogImplication

  (LogAnd

  (allInstancesOf $AIL Asphyxiation)

  (bodilyInvolved $AIL $AGT))

  (holdsIn $AIL

  (LogNot (behaviorCapable $AGT Breathing bodilyInvolved))))

  where $AIL and $AGT are the variables for ailment and agent,

  LogAnd, LogNot, and LogImplication are simple logical connectives and "holdsIn" defines the context within which this 'axiom' holds.

  (译者:我给作者发信确认这段话的意思,以下是他的回复:

  behaviorCapable: is the person capable of the behavior?

  $AGT:agent=person

  breathing=the behavior here is 'breathing'

  bodilyInvolved= I forget why they need this-- apparently some behaviors don't involve the body?

  Together they say 'the person can not breathe')

  根据Cyc模型,如果游戏程序需要知道在某个特定地点发生了什么,比如,某人将一个精巧的花瓶摔在了地上――程序会提交一个给Cyc的查询信息,数秒钟后,Cyc会返回一个消息,声称花瓶掉在了坚硬的地面上,摔得粉碎。

  不幸的是,如果你在短时间内重复进行这种行为数次(multiply that plausible retrieval-time times),那便需要成千乃至上百万的演算来保证一个互动小说的仿真性。因此我们得出结论:Cyc无法足够的运行速度来支持互动小说。

  可能Cyc最糟糕的问题还是在于――与一些大型的工程不同,Cyc不是采取自顶向下,逐步细化的方法建立的。更确切的说,Cyc采取了相当冒险的策略,将细节性的缺乏已知的全面性了解的小段一个一个累积起来…而后将所有的东西汇合而成一个"核心知识库"。对互动小说而言,让这个库变得足够精炼是个最大的难题。

  所以,就其希望收录的知识而言,Cyc提供了一个很好的互动小说理论的起点,虽然并不十分适合存在实时运行限制的情况。我们确实知道某种层级的实时互动小说是可能的――Zork和Hitchhiker's Guide(相关资料请查阅http://www.game-over.net/retro/april99/infocom/)是最好的证明。但是能否建立一个互动小说引擎将一些Cyc里面的东西包含进去(让引擎功能变得更强)?

  文字冒险游戏的开发语言

  文字冒险游戏,特别是80年代早期Infocom的游戏的流行,促使一些人去设计文字游戏开发专用的语言。其中的一些能够在Internet上免费获得。rec.arts.int-fiction新闻组给这些开发文字冒险游戏的设计师提供了一个交流、成长的地方。(这个新闻组在ftp.gmd.de的/if-archive/有文件夹)

  Michael J.Roberts设计的TADS(文字冒险游戏开发系统)可能是最流行的开发环境,因为在TADS上开发的游戏能够在各种硬件平台上运行。TADS提供了一个合适的预定义对象类(predefined object-types),每一种都至少包含了一级关于它们行为的智能设置。举个例子,罐子和车"知道"放在它们里面的东西可以随着它们而移动,而且在它们被打开前是看不见的。再一个例子是,角色会"知道"饥饿,如果他们不吃东西,最后会死掉。

  TADS是面向对象的,其对象包括了大多数的"文本元素(story elements)"。

  class openable: container

  contentsReachable = { return( self.isopen ); }

  contentsVisible = { return( self.isopen ); }

  isopenable = true

  ldesc =

  {

  caps(); self.thedesc;

  if ( self.isopen )

  { " is open. ";

  pass ldesc;}

  else " is closed. "; }

  [etc]

  (这是TADS的一般结构,看不懂也无所谓)

  TADS的对象层级(object-hierarchy)牢牢建立在语言实用学的基础上。例如:

  Thing

  Item: vehicle, surface, lightsource, key, food, container, clothing

  FixedItem: switch, dial, button, decoration, actor, chair

  Room

  东西(thing,有人想说服我用"存在"这个词)

  物品(Item):车,水面,光源,钥匙,食物,容器,衣服

  固定物品(FixedItem):开关,转盘,按钮,装饰,演员(actor,我想是npc),椅子

  房间

  相比较而言,Cyc提供了一个比较高,但忽略实效且不完整的对象层级

  Thing

  Intangible

  IndividualObject

  Event

  Stuff

  Process

  SomethingExisting

  TangibleObject

  东西

  无形的

  个体对象

  事件

  素材

  步骤

  存在的某样东西

  可以触到的物体

  智慧问答邮件列表

  如果一个类似于TADS的知识库能够逐渐扩充达到Cyc的程度,应该是向更好的互动小说迈出了一大步。考虑到这一点,rec.arts.int-fiction中的一些人建立了一个邮件列表,探索一种公共领域(public-domain)的互动小说用Cyc的可能性。

  邮件列表――智慧问答(Wisdom FAQ)――由互联网上经常使用的FAQs(经常会问到的问题)命名,试图使用最易理解的方式浓缩最有用的信息――包括任何主题。智慧问答可以被看作一个(非常宏大的)经常被问到的问题的镜像,包容世界上的所有智慧,所有的主题……刚开始的时候当然只包括那些对互动小说最有用的信息。(需要订阅请给wisdom-request@mcs.com发送请求 。文件可以在ftp.mcs.com的mcsnet users/jorn/wisdom中找到。如果需要email给你,请务必告知你的邮箱一次能够接受邮件的大小)

  邮件列表所聚集的人有两个任务:首先,累积"文本元素"或公理;其次,也是更加艰难的任务:使用标准方式发布搜集的信息。第二个任务更加技术性,显得不那么有趣,因而会由一个"子邮件列表"来完成。

  列举文本元素的任务不那么技术性。因此,智慧问答欢迎不擅长技术的热心者――知道一点总结故事线索的诀窍,或者是擅长编织复杂情节…等等

  每一个对象都可说是一个故事(文本)…不是吗?

  最明显的组织文本元素的方法是根据对象所在的层级进行组织。让对象根据这种规则组织起来并不是很难。某种能够让你涌现出无数灵感的策略如下:

  * Where does this object come from?

  对象来自哪里?

  * How does a person come into relationship with it?

  一个人如何与其发生联系?

  * How might the person use the object?

  人们如何使用这个对象?

  * How might they change it?

  人们如何对其进行改变?

  * How might they be changed by it?

  它会(对人,对世界)有什么影响?

  * How might their relationship with it end?

  这种联系如何结束?

  * How might it cease to exist?

  怎样会让这个对象消失?

  因此而形成方便于组织这些问题的答案的方法叫做"完全文本(meta-story)":

  食物的完全文本:人们照料一个菜园或是农场,养殖动物,种植农作物以供食用或是出售。他们在恰到好处的时候收获食物,然后或是卖或是贮藏或是制作或是吃或是提供给朋友和家人。如果制作得当,人们的食欲得到满足,他们就会高兴。食物经过他们的消化最终排泄出来。如果他们得不到足够的好的食物,他们会变得消瘦乃至死掉。制作食物的人可能在其中放毒来暗算食客。放毒者可能需要掩饰毒物的味道。也许他们(放毒)的技巧很差以至于食物吃起来很糟糕。

  瓶子的完全文本:一个人在坩埚中加热沙子,然后将空气用一根管子吹入其中直到它变成瓶子。瓶子冷却后,他们用它来盛装液体,然后用软木塞或是瓶帽塞住瓶口防止液体外泄或是蒸发。他们也可以把瓶子浸入液体中来装满它。把塞子拿掉就可以把液体倒出来。两个或更多的人会互相传递瓶子来分享里面的液体。如果他们把瓶子扔到了坚硬的东西上,瓶子可能会碎掉,液体会泄露出来。碎玻璃可能割伤不小心碰到它的人。碎片可以导致爆胎。一个裸足的人踩在上面也会被割伤。碎片可以作为聚光镜来集中阳光引致着火,或者是放大一些细小的东西(有干净的液体在内的瓶子同样可以作为聚光镜)。人们可以用瓶子砸到一个人的头上导致其失去知觉。也可以用来演奏"瓶颈吉他(bottlenect guitar)"。也可以将瓶子像用擀面杖一样地用来摊平面团。(等等)

  所以一个加入了智慧问答邮件列表(Wisdom-list)项目的人需要累积类似于儿童用百科全书的这类"完全文本",并将它们阐述到规则所需要的层次。仅仅是积累智能对象并不必定意味着互动小说的作者可以更轻松。简单地说,对一个游戏的对象而言,存在越多被预定义了的行为,越难于预见所有可能的情况……实际上,我们越在这一方面深入,整个基于谜题的互动小说的想法就越发显得缺乏吸引力…

  互动小说和"心理对象(psychology objects)"

  Cyc已经离描述人类戏剧艺术的任务越来越近。它声称已经建立了一个可行的关于感情和动机的工作模式。智慧问答邮件列表没可能达到这一点,除非它直面对文学情节(literary plots)(相对于对象)进行编码的问题。

  George Polti曾作出过关于文学情节的经典分析:"三十六种戏剧性情境"。Polti分析了文学上的众多经典故事情节,声称如下情境为其最基本的构成:祈愿(Supplication),释放(Deliverance),报复(Revenge),血亲复仇(Vengeance by Family upon Family),追击(Pursuit),残忍或是不幸的牺牲品(Victim of Cruelty or Misfortune),灾难(Disaster),反抗(Revolt),大胆的事业(Daring Enterprise),诱拐(Abduction),谜(Enigma),收获(Obtaining),家族仇恨(Familial Hatred),家族竞赛(Familial Rivalry),危险的通奸(Murderous Adultery),疯狂(Madness),致命的轻率(Fatal Imprudence),无意间的为爱而犯罪(Involuntary Crimes of Love),同族的不知情杀害(Kinsman Kills Unrecognised Kinsman),为理想的自我牺牲(Self Sacrifice for an Ideal),为家族的自我牺牲(Self Sacrifice for Kindred),因为激情而全部牺牲(All Sacrificed for Passion),为爱的人而牺牲(Sacrifice of Loved Ones),阶层间的竞争(Rivalry Between Superior and Inferior),通奸(Adultery),为爱而犯罪(Crimes of Love),发现爱人并不清白(Discovery of Dishonor of a Loved One),爱的障碍(Obstacles to Love),爱上了敌人(An Enemy Loved),野心(Ambition),与神的冲突(Conflict with a God),误会而致的嫉妒(Mistaken Jealousy),不完善的判决(Faulty Judgement),懊悔(Remorse),最后一人的复苏(Recovery of a Lost One),失去爱人(Loss of Loved Ones)

  上文所列只有很少会出现在建构"完全文本"的过程中,因为最重要的文学情节的"对象"是心理上的,比如感情和动机(相对于一般"对象"而言)。尽管"完全文本"只需要累积文本元素就可以工作得很好――就算选择一个相当无理的起点(例如,催眠)――如果你觉得故事中的东西能令你满意的话

  催眠的完全文本:偶然地,人们发现他们可以通过催眠来控制其他人。所以他们催眠了别人来取得不属于自己的金钱、权力、健康、自尊。受害者甚至不知道在他们身上发生了什么。最后情况变得如此之糟以至于他们对于了解事件的根源已经绝望了。然而总会有一个人看到冰山的一角,可能会被迷惑,但又会再次发现并了解到真相,然后尝试着告诉别人――不出意外的话会被误解为疯子,被攻击,但结局是所有的人都了解到了真相,并将压迫他们的人打倒。

  结论就是,如果富于文本结构的直觉,那么在任何主题上都可以进行充分的发挥

  反向推导偶然事件

  在那些希望通过一些"容易规则"来导出大量的有趣的故事的人工生命理论家(artificial-life)看来,通过"偶然事件(emergent behavior)"原则,"完全文本"正在试图消解他们的劳动成果,依靠一种"作弊"的方法――你提出一个你希望"突然发生(emerge)"的故事,然后进行分析并试图用反向工程来解析出其中的简单规则,进行再创造。

  如Maslow的需求层级(hierarchy of needs)(生理的,安全的,归属和爱,尊重,认知,感性,自我实现)一般简单的东西,看起来似乎可以以之作为一系列上文提到的"容易规则"的起点。但用完全文本进行分析并揭示其内在(inobvious)模式(至少从数学的观点上看)之后,这些东西把我们引向了偶然事件。

  生理需求的完全文本:经常的,人们有对食物和饮料的渴望。他们会把这些东西放在附近可以保证卫生的地方。他们制备食物和饮料,烹调,切割,混合,调味,使得享用的过程变得更愉快。又或者他们指望别人能够为他们代劳。经常的,一群住在一起的人会一同坐在一个有碟子、银器或是玻璃器皿的桌子旁边吃东西。之后,必须有人打扫干净。有时候他们在饭馆吃东西,或者是在旅行中的车上。他们可能拿着水罐喝水(可能用有营养的、刺激的或是令人发醉的东西调味),或者是停在一个自动贩卖机、喷泉或是咖啡机前面。如果一个人的每日所摄入卡路里少于他每日所消耗的,他们会减重。如果他们摄入得比较多,他们会增肥。如果他们减重过多,或者是没能喝足够的水,他们会死掉。

  水和废物靠尿,消化后的废物靠大便排泄出去,。

  安全需求的完全文本:人们会感到不安全,他们不喜欢这样。当有不被信任的人或动物在身边,或是他们的家不够可靠的时候,他们会觉得不安全。或许他们在白天会被迫把家的安全放在一边(去上班)。或许是自然界的危险,例如悬崖峭壁,洞穴,流沙,大量的热的、冷的或是速度过快的水,等等。或许保养很差的工程(poorly maintained technology)也是危险的来源。人们改变他们的环境或是他们的行为来使危险消失从而得到安全。

  归属和爱的需求的完全文本:人们会孤单。他们在其他的公司中寻找,表现得富有吸引力以便受欢迎……或者他们表现得有权有势让别人害怕拒绝他们……或者他们表现得受伤害以便获得同情。

  获得尊重的需求的完全文本:人们会觉得别人完全不尊重或是敬仰他。然后他们试图做一些令人敬佩的事情,并确信有人知道这件事。或者他们会撒谎做了一些令人敬佩的事情。

  认知需求的完全文本:人们需要知道一些事情,可能仅仅是因为好奇。他们寻找可供阅读的书籍,或者是寻找可供学习的老师,问他们问题。他们会观察一些现象,深入地进行思考,或许还会做实验。如果他们发现一些新东西他们可能会发表他们的发现。

  认同需求的完全文本:在一个无聊或者是丑陋的环境中,人们会觉得压抑,他们创作、一再要求或是寻找能令他们愉快的东西。如果他们记录了创作的过程,那么这个创作行为在此之后会被别人一再重复。或许他们会记录下他们的创造,然后就能一再体会那种快乐。也许这种快乐持续一段时间后就会开始令人厌倦。

  自我实现的完全文本:一个人有了他所需要的所有东西,但并不满足――他们扪心自问,寻找他们的心最需要的是什么,然后奉行这个的指引…

  模拟现实(SimNormal)(译者:作者声称他出于对Normal和Illinois的尊敬而取了这个名字。他在信中确认了这句话的意思:There's a real town in Illinois called 'Normal' which sounds funny in English, as if the town is very ordinary. So 'SimNormal' means a

  completely ordinary town.确实有一座叫做"Normal"的小城在伊利诺伊州,这个名字听起来很搞笑,好像是说这个城市曾经很正常似的。所以"Simnormal"意思就是一个普通的小城镇)

  反观智慧问答的雄心,有可能会导致其陷入如此大量文本的泥沼中而失去对起点的判断――一个实际实施的互动小说程序也有可能发生这种事。一种保证完全文本"与真实亲密接触"的方法是假想它们正演示在一个计算机屏幕上,就像在King's Quest(国王密使)中一样。如果你的文本对这些实现技术而言过于抽象,那么还需要进一步地考虑来充分细化。我喜欢想象一种与模拟城市类似的环境,在那里很多小人走着他们日常走的路,完全是一种机械的风格,没有突发事件。再看一次上面的归属的完全文本,很明显你需要根据特定的需求来尽可能的细化,以便最终在一个类似于模拟现实(SimNormal)的环境中实现。

  偶然相识(The casual-acquaintance)的完全文本:某人经他人介绍或是自我介绍,亦或是经常走同一条路而认识了另一个人。相遇的时候,他们会轻轻点头互相致意,稍微聊一会天气,新闻,闲话,娱乐方面的东西。如果没有什么不愉快,他们会逐渐打开心扉,更加相信对方。

  最简单的编码方式莫过于给每个人一个亲密级别(intimacy-level)。0意味着对方是完全陌生的人,但每次他们看到这人亲密级别就会加一。假设达到了5,即变成偶然相识模式,会互相问候。另一方面,如果陌生人之间以某种形式互相介绍,他们的亲密级别也可以达到5。随着这个数字的增长,他们的问候时间会变长,如果他们不忙的话会停下来聊天(应该有一个聊天动画设计为循环播放,直到聊天结束为止)。发现共同的兴趣可能引致亲密级别迅速提高。发现不相容的地方,或者是很长时间没能见面,可能导致他们的亲密级别下降。

  最好的朋友(The best-friend)的完全文本:人们开始深入了解对方,乐于同他在一起(或者仅仅是出于一种突然的紧密联系)他们把时间安排在一起,一起干事情,煲电话粥。他们告诉彼此私人性质的难处,并试图互相帮助。这些交流能让他们感觉更好。有时他们会互相攻击,然后和解或就此决裂。或许他们中的一个离开了(gets an S.O.。译者:我不知道这是什么意思……谁能告诉我?),这样会导致他们分离。或许仅仅是因为在一起时不再有那么多的乐趣,他们决定分开。

  人们可能会有一个与他关系最亲密的人的名单,觉得无聊或心绪不宁的时候他们会从这些人中寻求帮助。某甲安慰某乙的故事可能很简单――时间过去,某乙平静(反而某甲可能会觉得很糟――如果是这样,那么他们之间的友谊肯定出了问题)。发生冲突会有一个限度,依彼此个性而定,同时也要考虑他们是否在争夺稀缺的资源。

  同志(pals,集团,开个玩笑,呵呵)的完全文本:人们有一个或更多的最好的朋友,他们形成了一个集团,而且源源不断地有人加入进来――无论是收到邀请或仅仅是看到便跟随。如果新人不受欢迎他们会被要求离开。他们一星期至少会见几次面。或许两个想成为领袖的人中间存在着权力斗争。或许他们会一个接一个地离开,由其他人取代他们的位置。

  把一群自由思考的人集合到一起的计划比仅有两个人的情况复杂得多得多。他们中的任何一个人都可能邀请对方――需要一个"彼此相处的完全文本"来解决这个问题。

  同居的完全文本:某人搬进了一个地方与一个或更多的人同住,共享空间。一般来说,室友扮演了某种程度上的朋友角色,会倾听对方每日的故事。一些室友比其他人更加爱整洁,这可能导致冲突。当账单到达的时候,他们可能会进行不均衡的分配并因此而导致关系紧张。其中一个可能最负责而签署了支票,等等。每个人都可能有一个或更多令人讨厌,考验他人耐性的地方。或许他们会一个接一个地离开,被其他人取代抑或他们全都走了。

  合作者的完全文本:某人在某个地方得到了某个工作。同事中的一些成为朋友,其他人可能是熟人,另一些则成为了敌人。就算在他们争斗的时候,他们也需要在一起工作。离开或是调离是一种潜在的结果。他们的敌人可能会耍一些手段使他们在老板看来很糟糕。

  互动小说式对话排列模型

  如果我们继续向这方面研究,互动小说会变成怎样?怎样才能给玩家一个不确定的自由空间,同时又有足够的控制力让他们始终沉浸在有趣的故事中?如果计算机"知道"所有最有趣的戏剧性因素(dramas in literature),那么有一种策略能够连续、圆滑地修正场景后面的虚拟世界――仅仅是张开尽可能多的故事线。

  游戏可能以一个在他住在公寓内的人开始。不错的早晨,他正在散步。一旦出了门,他可能被邻居们看见,从而发生富有戏剧性的故事..不过没有一种戏剧性需要预先演算。而且,基于玩家的选择计算机会在现实性允许的范围内持续生成新的可能性。如果玩家选择不跟上任何"线头",那么也不会有任何问题…总会有若干待探索的选项在等待着玩家。

  就这样,过去如同未来一样不确定,而且没有边界的限制――只有玩家听过的,看过的,说过的,做过的才是限制。计算机在自动提供新的可能性,而且是最有趣的可能――"交谈中的真实"(confabulating reality),借用一个精神病学上的术语。就这点而言,互动小说式对话排列模型可能最接近我们的大脑在梦中的工作模式……

没有评论:

发表评论