- 签证留学 |
- 笔译 |
- 口译
- 求职 |
- 日/韩语 |
- 德语
避免这种问题的一个方法是按不同的顺序来扩充成分。例如,选择哪个词做主语,取决于动词及动词短语的结构,比如是主动语态还是被动语态,等等。因此,先扩充动词短语,然后再生成适当的主语,可能是一种比较有效的做法。事实上,一种比较好的策略是,先扩充中心成分,然后再填入其他成分。图1给出了一种简单的实现算法。这种算法对一个成分列表进行操作,它和基本自顶向下句法分析器很相似。其过程是不断改写列表中的成分,直到列表全部由词法成分组成,表中的每一点都可生成一个词。
图1 中心成分驱动的实现算法
推广这个算法很容易,只须利用特定语法,借助回溯技术,可以遍历所有可能的实现方式。这种方法有效的原因是,首先扩展中心成分,算法可以很快到达词法一级,并选择最能影响整个句子结构的词。一旦选好中心词,成分中剩下的结构基本上都可以判断出来了。
让我们分析用语法2实现的算法,其初始输入是:
(S SEM (<PAST SEES1> s1 (NAME j1 "Jill") <THE d1 (DOG1 d1)>))
我们基于语法中的规则1改写了S成分,生成如下的成分列表:
(NP SEM ?semsubj)
(VP SUBJ ?semsubj
SEM (<PAST SEES1> s1 (NAME j1 "Jill") <THE d1 (DOG1 d1)>))
非词法中心成分以斜体字表示。接下来对VP进行扩展。只有规则3符合SEM结构。根据匹配的结果,以下变量必然会出现:
?semv ←<PAST SEES1>
?v ← S1
?semsubj ← (NAME j1 "Jill)
?semnp←<THE d1 (DOG1 d1)>
在改写VP之后,得到成分列表如下。实例化列表中的所有变量,得到:
(NP SEM(NAME j1“Jill”))
(V[_np) SEM <PAST SEES1>)
(NP SEM <THE d1 (DOG1 d1)>)
由于没有非词法中心成分,算法现在先挑选出含有必不可少的SEM的非词法成分,比如第一个NP。只有规则5与之匹配,这样就得到词法成分(NAME SEM“Jill”),并输出成分列表:
(NAME SEM "Jill")
(V[_np] SEM <PAST SEES1>)
(NP SEM <THE d1 (DOG1 d1)>)
接下来再挑选剩下的NP。规则6与之匹配,这样就生成子成分(ART SEM THE)和(CNP SEM DOG1),并输出成分列表:
(NAME SEM "Jill")
(V[_np] SEM <PAST SEES1>)
(ART SEM THE)
(CNP SEM DOG1)
接下来选择CNP成分,并利用SEM DOG1将其改写为普通名词,这样算法就结束了。现在的成分列表是一串词类:
(NAME SEM "Jill")
(V[_np] SEM <PAST SEES1>)
(ART SEM THE)
(N SEM DOG1)
利用词法成分来生成句子“Jill saw the dog”还是很简单的。
本例用到的语法很简单,因此,句子只有一种实现方法。如果用更大规模的语法,会有更多的形式可供挑选。举例来说,如果只确定了SEM特征,那么句子生成器就会随机选择可以和动词搭配的主动句或被动句。对于其他情况,实现生成器可能还要在不同的次语类结构之中进行挑选。例如,同样的逻辑形式既可以用“Jill gave the dog to Jack”来实现,也可以用“Jill gave Jack the dog”来实现。根据词义的数量多少以及不同的词是否有公共意义这两个条件,句子生成器可能会从不同的逻辑形式词汇实现中随机挑选一个。例如,某个逻辑形式既可以用“Jill gave the money to the Humane Society”(Jill把钱给了慈善社团)实现,也可以用“Jack donated the money to the Humane Society”(Jack 把钱捐给了慈善社团)实现。
这些不同的形式在上下文中有不同的效果,但这些差异在逻辑形式中无法体现。如果一定要实现为某种形式,需要指定除SEM特征之外的其他特征。例如,可能需要为主动语态设定VOICE特征,这样才肯定能得到主动语态句。
责任编辑:admin