到目前为止,我们已经讨论了如何对语言进行句法分析,但是并没有说如何生成它。语言生成也是一个同样丰富的话题。选择合适的话语表示命题涉及的很多选择都与对话语进行句法分析的选择相同。
记住 DCG 是一个逻辑程序设计系统,它指明了字符串与其句法分析结果之间的约束。我们知道谓词Append的逻辑程序设计定义不仅能够用于告诉我们在Append( [1, 2], [3], x)中我们得到x = [1, 2, 3],而且可以用于枚举能使Append(x,y,[1,2,3])为真的x和y的值。用同样的方法,我们可以写出可用于两种用途的S的定义:对于句法分析,我们询问S(sem, [John, Loves, Mary] ),并得到结果sem =Loves(John, Mary);对于语言生成,我们询问S(loves(John, Mary), words),并得到结果words = [John, Loves, Mary]。我们同样能够通过询问S(sem, words)对语法进行测试,并得到由语法生成的 [sem, words]二元组构成的流,作为答案。
上述方法对于本章中的简单语法是可行的,但是随着语法的规模扩大,困难也会出现。用于逻辑推理引擎中的搜索策略是很重要的。深度优先策略可能导致无限循环。在语义形式的确切细节方面必须多加小心。可能的情况是某个给定的语法对于X和Y的某些取值,无法表达逻辑形式X∧Y,但是能表达Y∧X。这就表明我们需要将语义形式规范化,或者对合一例程进行扩展,使X∧Y和Y∧X是可以合一的。
在语言生成中重要的研究工作倾向于使用截然不同于句法分析语法的更为复杂的生成模型,并为如何表达语义成份提供更准确的控制。系统化的语法是一种能很容易强调语义形式中最重要的部分的方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。