nlp - StanfordNLP、CoreNLP、spaCy - 不同的依赖图
问题描述
我正在尝试使用在依赖图上定义的简单规则/模式从句子中提取非常基本的信息(例如,三元组,例如主题->谓词->宾语)。我开始使用StanfordNLP是因为它很容易设置和利用 GPU 以获得更好的性能。但是,我注意到对于某些句子,生成的依赖关系图看起来不像我预期的那样——虽然我不是专家。因此,我尝试了另外两个解决方案:spaCy和Stanford CoreNLP(我知道这些是由不同的团体维护的?)
例如句子“Tom 让 Sam 相信 Alice 得了癌症”。我已经打印了所有三种方法的依赖关系。CoreNLP 和 spaCy 产生相同的依赖关系,但它们与 StanfordNLP 的依赖关系不同。因此,我倾向于切换到 CoreNLP 和 spaCy(另一个优势是它们带有开箱即用的 NER)。
有没有人有更多的经验或反馈可以帮助从这里去哪里?我不希望 CoreNLP 和 spaCy 总是在相同的依赖图中产生,但在例句中,考虑Sam
到obj
StandfordNLP 所做的与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
解决方案
不确定如何解决您的问题,但我建议您仔细阅读斯坦福 CoreNLP 的文档:https ://nlp.stanford.edu/software/lex-parser.shtml
在包中,您可以使用几个语法和依赖项解析器。只需查看语法解析,就有一个检索 k-best 解析的选项,如果您处理对它们的依赖关系,您很可能会为每个解析获得不同的依赖关系。
这与解析器的不准确性和自然语言的歧义有关。
推荐阅读
- php - 将较长的 PHP **for** 语句分成多行
- javascript - 通过 ajax 将带有表单数据的附加数据发送到 php
- python - 在 Python 中的函数之间交替?
- excel - 无法设置列表属性,类型不匹配 - 列表框
- flutter - 如何创建一个主题持有人
- javascript - 科尔多瓦 sip 插件错误未捕获的类型错误:无法读取未定义的属性“sip”
- flutter - 如何将 Future 变成 ListView 的流
- python - 带有代理的请求不起作用但在 curl 中有效
- php - 检查结果的替代方法 num_rows >0
- c# - 为什么在减去坐标时这种洪水填充方法会导致堆栈溢出?