SHRDLU

SHRDLU是由特里·威诺格拉德于1968年至1970年在麻省理工学院开发的一种早期的自然语言理解计算机程序。在该程式中，用户可以与电脑对话，对这种精简的“ 积木世界”的内部状态进行移动物体、命名集合、查询等操作（积木世界本质上是一个虚拟盒子，内部充满了不同积木）。

SHRDLU是以Micro Planner和Lisp编程语言在DEC PDP-6电脑和DEC图形终端上编写而成。后来在犹他大学的计算机图形实验室进行了补充，加入了对SHRDLU“世界”的完整3D渲染。

名称“SHRDLU”衍生自ETAOIN SHRDLU， ETAOIN SHRDLU是Linotype排字机上字母键配置，也就是照字母使用频率，以降序方式排列的12个字母序列。

## 功能

SHRDLU主要是一种语言解析器，它允许用户使用英语术语进行互动。用户指示SHRDLU在“积木世界”中移动各种物体，包含各种基本物体：积木（块体）、锥体、球体等。SHRDLU的独特之处在于将四个简单想法的组合起来，这些想法加总在一起，使得在对“理解力”的模拟上，更具说服力。

其中一个原因是，SHRDLU的世界非常简单，以致于整个物体和位置的集合可以透过大约50个单词来描述：名词如"积木"（block）和"锥体"（cone），动词如"放置在"（place on）和"移动到"（move to），以及形容词如"巨大的"（big）和"蓝色的"（blue）。这些基本的语言建筑模块的可能组合相当简单，程式完全有办法弄懂用户的意思。

SHRDLU还包括一个基本内存来提供语境。人们可以要求SHRDLU“把绿锥放在红块上”，然后“把锥子拿下来”；“锥体”会被认为是指刚才说的绿锥。在大多数情况下，当提供了额外的形容词时，SHRDLU可以透过互动进一步回溯寻找合适的语境。用户也可以问一些历史问题，比如“在捡到锥体之前，你有没有捡过任何东西？”

这种内存的附带效果，也是SHRDLU标准配置的基本规则，即该程式可以回答关于世界上什么问题是可能的，什么问题是不可能的。SHRDLU会透过寻找例子推断出积木可以堆叠，但在尝试过三角形后，会了解到三角形不能堆叠。“世界”包含了使积木掉落的基本物理机制，而这与语言解析器无关。

最后，SHRDLU还可以记住物体的名称或它们的排列方式。例如，人们可以说 "尖塔是一个高大的长方形上面的小三角形"；SHRDLU就可以回答积木世界中关于尖塔的问题，并建造新的尖塔。

## 选录

这是SHRDLU的著名演示：

人：Pick up a big red block.

电脑： OK.

人：Grasp the pyramid.

电脑：I DON'T UNDERSTAND WHICH PYRAMID YOU MEAN.

人：(changing their mind): Find a block which is taller than the one you are holding and put it into the box.

电脑：BY "IT", I ASSUME YOU MEAN THE BLOCK WHICH IS TALLER THAN THE ONE I AM HOLDING.

电脑：OK.

人：What does the box contain?

电脑：THE BLUE PYRAMID AND THE BLUE BLOCK.

人: What is the pyramid supported by?

电脑：THE BOX.

人：How many blocks are not in the box?

电脑：FOUR OF THEM.

人：Is at least one of them narrower than the one which i told you to pick up?

电脑：YES, THE RED CUBE.

人：Is it supported?

电脑：YES, BY THE TABLE.

人：Can the table pick up blocks?

电脑：NO.

人：Can a pyramid be supported by a block?

电脑：YES.

人：Can a pyramid support a pyramid?

电脑：I DON'T KNOW.

人：Stack up two pyramids.

电脑：I CAN'T.

人：Will you please stack up both of the red blocks and either a green cube or a pyramid?

电脑：OK.

人：Which cube is sitting on the table?

电脑：THE LARGE GREEN ONE WHICH SUPPORTS THE RED PYRAMID.

人：Is there a large block behind a pyramid?

电脑：YES, THREE OF THEM: A LARGE RED ONE, A LARGE GREEN CUBE, AND THE BLUE ONE.

人：Put a small one onto the green cube which supports a pyramid.

电脑：OK.

人：Put the littlest pyramid on top of it.

电脑：OK.

人：Does the shortest thing the tallest pyramid's support supports support anything green?

电脑：YES, THE GREEN PYRAMID.

人：What color is it?

电脑：BY "IT", I ASSUME YOU MEAN THE SHORTEST THING THE TALLEST PYRAMID'S SUPPORT SUPPORTS.

电脑：RED

人：How many things are on top of green cubes?

电脑：I'M NOT SURE WHAT YOU MEAN BY "ON TOP OF "IN THE PHRASE "ON TOP OF GREEN CUBES " .

DO YOU MEAN:

1 - DIRECTLY ON THE SURFACE

2 - ANWHERE ON TOP OF ?

人：2

电脑：THREE OF THEM.

人：Had you touched any pyramid before you put the green one on the little cube?

电脑：YES, THE GREEN ONE.

人：When did you pick it up?

电脑：WHILE I WAS STACKING UP THE RED CUBE, A LARGE RED BLOCK AND A LARGE GREEN CUBE.

人：Why?

电脑：TO GET RID OF IT.

人：Why did you do that?

电脑：TO CLEAN OFF THE RED CUBE.

人：Why did you clear off that cube?

电脑：TO PUT IT ON A LARGE GREEN CUBE.

人：Why did you do that?

电脑: TO STACK UP THE RED CUBE , A LARGE RED BLOCK AND A LARGE GREEN CUBE.

人：Why did you do that?

电脑：BECAUSE YOU ASKED ME TO.

人：How did you do it?

- 电脑：BY PUTTING A LARGE RED BLOCK ON THE TABLE
- THEN LETTING GO OF IT
- THEN PUTTING A LARGE GREEN CUBE ON IT
- THEN LETTING GO OF THAT CUBE
- THEN PUTTING THE RED CUBE ON THAT CUBE; THEN LETTING GO OF THAT CUBE.

人：How many objects did you touch while you were doing it?

电脑：FOUR OF THEM.

人：What did the red cube support before you started to clean it off?

电脑：THE GREEN PYRAMID.

人：There were five blocks to the left of the box then.

电脑：NO, ONLY FOUR OF THEM: THE RED CUBE, TWO LARGE GREEN CUBES AND A LARGE RED BLOCK.

人：Put the blue pyramid on the block in the box.

电脑：OK.

人：Is there anything which is bigger than every pyramid but is not as wide as the thing that supports it?

电脑：YES, THE BLUE BLOCK.

人：Does a steeple

电脑 (interrupting)：SORRY, I DON'T KNOW THE WORD "STEEPLE".

人：A "steeple" is a stack which contains two green cubes and a pyramid.

电脑：I UNDERSTAND.

人：Are there any steeples now?

电脑：NO.

人：Build one.

电脑：OK.

人：Call the biggest block "superblock".

电脑：OK.

人：Have you picked superblock up since we began?

电脑：YES.

人：Why did you drop it?

电脑：BY "IT", I ASSUME YOU MEAN THE SUPERBLOCK.

I CAN'T EXPLAIN A NON-EXISTENT EVENT.

人：Is there anything to the right of the red pyramid?

电脑：YES, FOUR THINGS: THE BOX , THE RED CUBE, THE BLUE PYRAMID AND THE BLOCK NAMED SUPERBLOCK

人：Thank you.

电脑：YOU'RE WELCOME!

## 影响

SHRDLU被认为是人工智能一次极其成功的演示。这导致其他AI研究人员过分乐观，但后来的系统试图处理现实中的更具模糊性和复杂性的情况时，这种乐观情绪很快就消失了。后续与SHRDLU同型的工作（例如Cyc）则倾向于专注为程式提供更加丰富的资讯，借此从中获得结论。

尽管不是有意为之，但是SHRDLU被认为是文字冒险游戏第一个已知的正式实例，这是因为用户能够以简单的指令在虚拟环境中移动物体来进行互动，尽管缺乏了常见于文字冒险游戏中特有的故事叙述。1976-1977年的游戏《巨洞冒险》被广泛认为是文字冒险游戏的第一个真正作品。

## 参考文献

- Terry Winograd, "Procedures as a Representation for Data in a Computer Program for Understanding Natural Language", MIT AI Technical Report 235, February 1971
- Understanding Natural Language by T. Winograd, Academic Press, 1972

## 外部链接

- SHRDLU – Terry Winograd's SHRDLU page, includes source code
- SHRDLU resurrection – re-written versions of SHRDLU, including a Java3D version

## 基本资料

- 类型：自然语言理解
- 平台：DEC
- 操作系统：PDP-6
- 编程语言：Micro Planner, LISP
- 发行日期：1968
- 作者：特里·威诺格拉德