1

我正在使用相同的斯坦福 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
4

1 回答 1

2

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

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

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

你可以做些什么来加强一致性?从理论上讲,您可以将额外的训练示例添加到训练语料库中并自己训练解析器(此处提到:https ://nlp.stanford.edu/software/nndep.shtml )。我想这可能不是微不足道的,我也不确定原始训练语料库是否可以公开获得。一些解析器提供了对现有模型进行后训练的可能性。我遇到了与您类似的问题,并通过在 Spacy 依赖解析器中进行后期训练来克服它们(如果您有兴趣,请参阅https://github.com/explosion/spaCy/issues/1015下的讨论)。

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

这些都被贴错了标签。我认为主要动词“意思”应该指向它的从句补语(以“创建”为标题的子句)与ccomp依赖(http://universaldependencies.org/u/dep/ccomp.html),但这从未发生过。也许更重要的是,“所有或任何帐户”应该是本条款的主题,这也没有反映在任何这些结构中。解析器猜测这个短语要么是副词修饰语(这有点奇怪),要么是直接宾语(account 表示全部)。我的猜测是,“手段”与其依赖项的联系受到其他解析器猜测的严重影响(这是一个复杂的概率模型,一个句子中做出的所有决定都可能影响其他部分做出的决定的概率)。

于 2017-08-07T08:14:25.280 回答