人工智能/知识表示
知识表示 (KR) 是我们用来描述如何在人工系统中编码知识、信念、行动、情感、目标、愿望、偏好以及所有其他心理状态的名称。由于几乎所有的人工智能研究都是通过编程计算机完成的,因此这些表示最终往往会成为软件中某种字符集。但是,我们可以用比代码更高的层次来讨论它们:信息层。
例如,假设我们有一个 2000 年北美国家列表。我们编码的知识将是三个国家:美国、加拿大和墨西哥。这是一个无序列表。然后我们可以用不同的计算机编程语言以不同的方式表示这种知识。例如
Python: NorthAmericanCountries = ("The United States", "Canada", "Mexico")
LISP: (setq north-american-countries '(the-united-states canada mexico))
等等。世界是一个复杂的地方,人工智能程序员的任务是决定哪些细节需要编码在 KR 中,哪些可以忽略。有时这很简单。例如,如果你在为一台计算机编程以决定棋盘上的走棋,那么没有必要精确地编码每个棋子在方格中的位置。这与将要进行的移动无关。其他决定则更加困难。
总之,你希望拥有你所需要的复杂性,但不要更多。这样做的原因是,增加表示复杂性会导致在运行人工智能程序时,编程和计算过程更加复杂。
拥有“你所需要的复杂性”要求“表示充分性”,这意味着你的表示包含它需要完成其任务所需的信息。评估 KR 的三种方式是清晰度、精确度和自然性。
清晰度
具有清晰度的 KR 是一个非歧义的 KR。我们使用编程语言的原因之一是我们自然使用的语言(如英语)是模糊的。编程语言被设计为没有歧义。
精确度
具有精确度的 KR 达到了所需的细节程度。在国际象棋中,仅仅知道棋子在棋盘上是不够的——代理需要知道棋子在哪个方格上,是什么类型的棋子,以及是什么颜色。棋子是否有划痕与下国际象棋无关,因此可以将此类细节排除在表示之外。
自然性
第三个标准是自然性,即 KR 多么容易被人理解,或者,也许,多么容易被转化为人们可以理解的东西。这很重要,因为在许多情况下,人们不希望简单地相信人工智能告诉他们的东西——他们想要解释。能够看到人工智能用来生成其输出的理由只有在 KR 具有某种程度的自然性时才有用。
自然性对于程序员也很重要。拥有一个自然的 KR 很好,这样未来的程序员(也许是你!)以后就能理解编写的内容。出于这个原因,你的 KR 必须具有明确的语义和语法。
例如,看看这个表示
red(car)
这意味着什么?red
和 car
只是符号;它们可以代表我们想要的任何意思。让我们假设 KR 被设计为自然的,并且它们的意思与英语中看起来的意思一样。仍然存在歧义。这意味着所有汽车都是红色的吗?一辆特定的汽车是红色的吗?它是一个如果汽车是红色的就返回 true 的函数吗?或者它是一个命令来将汽车漆成红色?
在编程时看起来很明显的东西,以后可能会令人困惑。
让我们回到上面关于表示北美国家的例子。列表中的三个国家没有理由必须按顺序排列。但是,在 LISP 和 Python 中,列表数据结构是有序的。例如,在 Smalltalk 语言中,有一个名为“bag”的数据结构,它可以容纳无序的项目集合。我们选择的编程语言通常会对 KR 施加约束。
北美有多少个国家?有三个,但这在上面的代码中明确表示了吗?没有。列表被表示。如果我们想明确地编码列表长度,我们可以做类似的事情
NorthAmericanCountries = (3, "The United States", "Canada", "Mexico")
然而,计算列表中的内容很容易,所以大多数程序员会在需要时使用函数重新计算列表长度。这也使系统无需在每次列表长度更改时更改显式表示的数字。
这体现了 KR 的**推理充分性**,即系统使用 KR 推断其所需内容的程度。**表示效率**是指人工智能使用 KR 进行推理的效率——根据时间或计算资源,视情况而定。
尽管任何程序员都可以创建他们想要的任何 KR,但已经存在很多 KR,并且它们的属性已被充分理解。使用一个众所周知的 KR 通常比自己创建 KR 更明智。在这本书中,我们将向你展示许多不同的 KR。在接下来的部分中,我们将讨论其中两个:语义网络和框架。
重要词汇
- 知识表示
- KR
- 表示充分性
- 清晰度
- 精确度
- 自然性
- 推理充分性
- 表示效率
下一部分:语义网络