李:
一个困扰我的问题是跨层次结构歧义的表达:“他要整个高大上的节目献给全国人民”:
“整个”分析成定语。但口语中,它还有动词谓语的可能:“整个”=“整出(创制)一个”。上面示意了一下,为表达识别出来的歧义,这里需要打破 base XP 的框框。第二条依存关系路径是:“要”是谓语“整个”的儿子(情态),“节目”也是“整个”的儿子,是其宾语(O)。值得注意的是,这个歧义表达要求短语内部的定语跳出来做句子的谓语。
白:
其实,有了从句,树已经成了DAG。既做得初一,索性做十五,大面积地画DAG好了。
李:
如上图所示,加上这两条路径,基本就算在同一颗树里面表达了两个 parses 的路径。昨天一直在想这事,感觉与白老师初一十五一样,可以做。不就是需要一个表达手段么?也不影响 formalism 本体。
白:
还是有点两张皮,不是个一贯的东东。
李:
层次纠缠的结构歧义的表达,如果不生成多颗全树,而是表达在一颗树里面,的确不是一个一贯的东西,是两张皮。但是好处也是明显的,经济实惠,共享了句中大部分与歧义无关的依存关系。句法识别这样的结构歧义原则上不难。有“整个”这个词去drive的话,总是可以识别的。
白: O前是表示生产、制作、呈现意义的动词,O后是双宾动词的情况,可以激活“整个”的分解语义。
李:
先不说排歧,因为排歧很多时候人也有难处。咱们先讨论清楚结构歧义的表达。识别完了,怎么表达?需要一点斟酌。因为只有表达合适了,后去才可以用(无论是后去的排歧,或者不排歧提供给人去互动或干预)。关键是,这个表达要好用。后去觉得不好用,那就白表达了。因为大多数其他的依存关系是可以共用的,所以结构歧义,是可以在同一颗依存树里面表达的。
结构歧义在不牵涉 base XP 层次纠缠的案例中,我们已经常用。PP-attachment 就可以把PP既连接到前面的NP也连接到前面的VG谓语。因为所谓的base NP, 这个base是把后面的PP定语排除在边界之外。这样一来,表达起来完全没有层次(xbar)的纠缠问题。还有我以前显示的一个NP既接成VG的S,也连接为O,这些都好办。汉语的兼语也可以表达为前面VG的宾语(O)和后面VG的主语(S)。
在多年的实践中,发现在依存表达中,加入 base XP 的短语结构,会带来很多很多便利。结果就人为地在本来应该没有非终结节点的纯粹的以词为基础的依存树里面,强加了这个 XP 的表达。这样一来,就出现了结构歧义的层次纠缠问题。如果当时决定从base XP更进一步,允许XP的短语结构有嵌套,那么PP-attachement中的PP就可能成为一个扩展的NP里面的成分。这时候,PP再拿出来做谓语的状语,就同样面临层次纠缠问题。这表明,这一切都是人为的。是我们为了方便做了权衡的一种表达方法。关于这种baseXP 短语结构与依存关系的 hybrid 的好处,新来的朋友参见:《新智元笔记:基本短语是浅层和深层parsing的重要接口》。在多数时候,它的确是方便的,短语这一刀给我们带来了极大的便利,但在层次纠缠的结构歧义表达时候也给我们带来一些不便。不便之处,花点功夫可以克服。人为的东西都是可以人为克服的。
对于结构歧义在同一颗依存关系树上的表达,后续的应用,需要专门为这种表达写一个歧义检索程序,用起来就没有问题了。这个检索算法,我昨天想了一下,也不难。你从任一个节点出发,一路遍历它的子子孙孙。如果其结果是树上的所有节点都访问到了,那么这个节点就是天王老爷。如果有多个天王老爷,就说明有结构歧义。就这么简单。因为依存关系的结构原则是,有且仅有一个天王老爷。多了,就是歧义。在我们的“整个”的那句案例中,从“要”出发可以遍历。从“整个”出发,也可以遍历。其他的所有节点都不具有这个遍历终结节点的可能。白老师,这样有问题么?
这个方案纯粹是一个所谓 side effect 的工程,不牵扯 formalism 本体。只要想做,找一个不笨的工程师就可以做:歧义结构的依存关系表达,以及歧义结构的依存关系检索。至于检索后的应用,那是下一个系统(IE或其他语用模块)的问题,不是句法的问题了。句法合适地识别了歧义,又提供了检索接口,可以说是仁至义尽了。
这一讲的题目可以叫做NLP中“跨层次结构歧义的识别表达痛点”。
其实,也不算太痛。就是messy一点,做总是可以做的。Note:这里讨论的问题与传统 parser 生成了许多个伪 parses,鱼目混珠、沙多珠少的情形不一样,这里说的是具有相当确定性的结构歧义。不是伪 parses 成堆的传统 parser 里的那些 false alarms。这些歧义的识别大多是细颗粒度或词驱动的句法都可以预示和搞定的任务。如果上述方案实施了,就引导句法开发者多在识别上下功夫,而不要浪费资源做那些搞不定的排歧任务。前者是 tractable 的任务。
前几天提到的“一张嘴”的词启动歧义识别也是如此:
后一个 parsing 由于词驱动的 hidden ambiguity 没有表达,现在是错的。 但是如果照上面的方案解决了歧义识别表达的问题,就可以把另一个可能挖出来。
刘:
我是一只特立独行的猪,这个结果会是咋样呢?
李:
“结果”取了副词的用法,也说得过去,但错过了其名词的用法,虽然总体语义无大碍。
这个也有一个错,“树”应该做定语的,可是分析成“看”的宾语了,大局没错。
这些漏掉的歧义结构,从道理上都可以识别,如果歧义表达和检索按照今天说的方案那样到位的话。不过做起来还是有些繁难,以后再说吧。要点就是,对于一个已经基本对于 false parses 免疫了的细颗粒 parser 而言,与其追求不大切合实际的结构排歧,不如把下一步的重点放在歧义识别、表达和检索上。
首发科学网 《新智元笔记:跨层次结构歧义的识别表达痛点》
【相关】