- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
很多自然语言处理应用程序都是用编程语言PROLOG实现的,或者用建立在PROLOG上的某种扩充来实现。PROLOG被证明是一种有用的工具,它建立在合一和搜索的概念基础上。这样,它提供了很多人工智能应用所必需的基本构造单元。
PROLOG建立在霍恩子句(Horn clause)的概念基础上,霍恩子句可以定义为一个逻辑蕴涵式,蕴涵式的左侧是单一的简单命题。这样,PROLOG中的表达式:
friendly(fido1) :- dog(fido1) well-fed(fido1)
对应于断言:Fido是友好的,如果它是一条狗而且它吃饱了。这在一阶谓词演算中表达如下:
(Dog (Fido1 ) & Well-Fed(Fido1))⊃ Friendly( Fido1)
当然,更有用的规则会使用变量,以便应用于一系列的实体。一个关于“吃饱了的狗是友好的”一般性语句表达如下,其中,变量用一个大写字母开头的符号表示:
1. friendly(X) :- dog(X) well-fed(X)
这等价于一阶谓词演算中的断言Vx(DOG(x)&WELL-FED(x))⊃FRIENDLY(x)。在PROLOG中,它的解释是过程性的:对任何实体x,要证明x是友好的,可以证明x是一条狗,而且x吃饱了。
没有右侧的霍恩子句称为事实。要声明Fifi是一条狗而且它吃饱了,可以加入以下事实:
2. dog(fifi) :-
3. well-fed(fifi) :-
使用子句1,子句2和子句3,PROLOG现在可以如下证明Fif是友好的:
Goal: Friendly(fifi)
使用合一算法,子句1被具体化以便用于这个目标(也就是说,变量X被绑定到ffi)
4. friendly(fifi) :- dog(fifi) well-fed(fifi)
为了根据这条规则给出目标的证明,需要证明以下子目标:
5. Goal: dog(fifi)
6. Goal: well-fed(fifi)
由于这些子目标就是子句2和子句3的断言,其证明是不言而喻的,所以初始的目标得到证明。
一般地,很多不同的规则可以应用于一个目标。可以逐个尝试它们,直到有一个成功。作为另外一个例子,考虑以下公理:
所有的鱼都生活在海里。
7. live-in-sea(X) :- fish(X)
所有的鳕都是鱼。
8. fish(X):-cod(X)
所有的鲭都是鱼。
9. fish(X) :- mackerel(X)
鲸生活在海里。
10. live-in-sea(X) :- whale(X)
Homer是一条鳕。
11. mackerel(homer):-
Willie是一头鲸。
12. whale(willie) :-
给定这些公理,系统可以证明Willie生活在海里,证明中使用的方法称为回溯搜索。它使用深度优先搜索策略来系统地搜索每一种可能的子句应用序列,用以检查目标是否确立。
图1显示了一个典型的PROLOG搜索,根据前面给定的子句,目标是:
live-in-sea(willie)
感觉PROLOG最好的办法就是运行系统,并使用跟踪工具来精确地观察它是如何工作的。
PROLOG系统在大多数类型的工作站和个人计算机上都可以得到。
图1 live-in-sea(willie)的证明
责任编辑:admin