依赖解析不一致?

Inconsistent dependecy parsing?

我正在使用相同的 Stanford CoreNLP (3.8.0) 管道分析以下两个句子。

我不明白的是为什么依赖分析器构建不同的树,即使句子在语法上是相同的。有没有办法加强一致性?

示例 1

S1: “Admin Account” means all or any account created in connection with this website.
S2: “Admin Account” means all or any user created in connection with this website.
S3: “Admin Account” means all or any cat created in connection with this website.
S4: “Admin Account” means all or any dog created in connection with this website.

这些被解析为以下内容:


示例 2

这是另一个使用同一个句子的变体来引入名词短语的示例。


这是我 运行 corenlp 服务器

的方式
java -mx20g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9001 -timeout 35000 -parse.model edu/stanford/nlp/models/srparser/englishSR.beam.ser.gz -tokenize.language en -tagger edu/stanford/nlp/models/pos-tagger/english-bidirectional/english-bidirectional-distsim.tagger -depparse.model edu/stanford/nlp/models/parser/nndep/english_SD.gz

答案很简单,但可能非常令人失望:Stanford CoreNLP 是由一个复杂的统计模型驱动的,该模型是在手动注释的示例上训练的(所有现代依赖解析器也是如此),因此它有时会针对不同的输入输出不同的结构,有时即使它们非常相似并且实际上具有相同的底层结构。据我所知,没有任何规则可以强制执行一致的行为,只是预计大量一致注释的训练数据会导致 大多数 现实案例中的一致性(和这会发生,不是吗?)。

解析器在内部权衡许多候选解析的证据,并且有多种因素会影响这一点。您可以将其想象为各种结构竞争被选中。有时,解析器分配的两个替代读数可能具有非常相似的概率。在这种情况下,即使句子其他部分的差异非常小,也可能会影响其他部分发生的标签和依恋的最终决定(想想蝴蝶效应)。

Account 是一个无生命名词,可能最常用作宾语或被动结构。 用户通常是有生命力的,所以更可能扮演代理人的角色。很难猜测解析器在看到这些句子时到底“想”了什么,但名词通常出现的上下文可以起决定作用(CoreNLP 也处理词嵌入)。

你可以做什么来加强一致性?理论上你可以在训练语料库中添加额外的训练示例并自己训练解析器(这里提到:https://nlp.stanford.edu/software/nndep.shtml). I guess this is might be not trivial, I'm also not sure if the original training corpus is publicly available. Some parsers offer a possibility of post-training an existing model. I've faced issues similar to yours and managed to overcome them by post-training in Spacy dependency parser (see the discussion under https://github.com/explosion/spaCy/issues/1015 如果你有兴趣)。

这些例子中可能发生了什么?

这些都被贴错了标签。我认为主要动词“means”应该指向它的从句补语(以“created”开头的从句),具有 ccomp 依存关系(http://universaldependencies.org/u/dep/ccomp.html),但这从未发生过。也许更重要的是,“所有或任何账户”应该是该条款的主题,这也没有反映在任何这些结构中。解析器猜测这个短语要么是副词修饰语(有点奇怪)要么是直接宾语(account 意思是全部)。