我正在尝试使用在依赖关系图上定义的简单规则/模式从句子中提取非常基本的信息(例如,三元组,例如主语->谓语->宾语)。我开始使用StanfordNLP,因为它易于设置并使用GPU以获得更好的性能。但是,我注意到对于某些句子,所得到的依存关系图看起来不像我期望的那样-尽管我不是专家。因此,我尝试了另外两个解决方案:spaCy和Stanford CoreNLP(我知道它们是由不同的小组维护的吗?)
对于例句“汤姆让山姆相信爱丽丝患有癌症。” 我已经打印了这三种方法的依赖性。 CoreNLP和spaCy产生相同的依赖关系,并且与StanfordNLP的依赖关系不同。因此,我倾向于使用CoreNLP和spaCy(另一个优点是它们与NER一起提供)。
有没有人有更多的经验或反馈可以帮助您从这里走到哪里?我不希望CoreNLP和spaCy总是会在相同的依赖关系图中产生,但是在示例语句中,将StandfordNLP所做的Sam
视为obj
,而不是nsubj
(CoreNLP ,spaCy)似乎有很大的不同
Format:
token dependency_tag parent_token
StanfordNLP
Tom nsubj made
made ROOT ROOT
Sam obj made
believe ccomp made
that mark has
Alice nsubj has
has ccomp believe
cancer obj has
. punct made
CoreNLP
Tom nsubj made
made ROOT ROOT
Sam nsubj believe
believe ccomp made
that mark has
Alice nsubj has
has ccomp believe
cancer dobj has
. punct made
spaCy
Tom nsubj made
made ROOT ROOT
Sam nsubj believe
believe ccomp made
that mark has
Alice nsubj has
has ccomp believe
cancer dobj has
. punct made
答案 0 :(得分:1)
不确定如何解决您的问题,但我建议您仔细阅读Stanford CoreNLP的文档:https://nlp.stanford.edu/software/lex-parser.shtml
在程序包中,可以使用几个语法和依赖项解析器。仅查看语法分析,就有一个检索k最佳分析的选项,并且如果您处理对它们的依赖性,则很可能会获得每种依赖性。
这与解析器中的错误和自然语言中的歧义有关。