我正在使用相同的Stanford CoreNLP(3.8.0)管道分析以下两句话。
我不明白为什么依赖解析器构建不同的树,即使句子在语法上相同。有没有办法强制实现一致性?
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.
这些解析如下:
这是使用引入名义短语的同一句子的变体的另一个例子。
以下是我运行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
答案 0 :(得分:2)
答案很简单,但可能非常令人失望:Stanford CoreNLP是由一个复杂的统计模型驱动的,这个模型是在手动注释的例子上训练的(所有现代依赖解析器都是如此),所以它有时会为不同的输入输出不同的结构,有时即使它们非常相似,实际上具有相同的底层结构。据我所知,没有规则可以强制执行一致的行为,只是预计大量一致注释的训练数据会导致大多数现实案例的一致性(这种情况会发生,不是吗?)。
在内部,解析器会对许多候选解析的证据进行权衡,并且多个因素可以影响这一点。你可以想象这是各种竞争被选中的结构。有时,两个备选读数可以具有由解析器指定的非常相似的概率。在这种情况下,即使句子其他部分的微小差异也可能影响其他部分的标签和依恋的最终决定(想想蝴蝶效应)。
帐户是一个无生命的名词,可能最常用作对象或被动构造。 用户通常是有生命的,因此更有可能扮演agens的角色。在查看这些句子时,很难猜出解析器究竟“思考”了什么,但是名词通常出现的上下文可以起决定作用(CoreNLP也处理单词嵌入)。
您可以采取哪些措施来强制执行一致性?理论上,您可以在训练语料库中添加额外的训练示例并自行训练解析器(在此处提及:https://nlp.stanford.edu/software/nndep.shtml)。我想这可能不是微不足道的,我也不确定原始的训练语料库是否公开。一些解析器提供了对现有模型进行后期训练的可能性。我遇到了类似于你的问题,并设法通过Spacy依赖解析器中的后期训练来克服它们(如果你感兴趣,请参阅https://github.com/explosion/spaCy/issues/1015下的讨论)。
这些例子中可能会发生什么?
其中每一项都被贴错标签。我认为主要动词'的意思'应该指向它的句子补语(带有'created'的子句)和ccomp
依赖(http://universaldependencies.org/u/dep/ccomp.html),但这种情况从未发生过。也许更重要的是,“所有或任何帐户”应该是本条款的主题,这也不会反映在任何这些结构中。解析器猜测这个短语要么是副词修饰符(有点怪异),要么是直接对象(帐户意味着全部)。
我的猜测是,“手段”与其家属的联系受到其他解析者猜测的严重影响(这是一个复杂的概率模型,在一个句子中做出的所有决定都可能影响其他部分做出的决策的概率)。 / p>