你好,在dkpro的StanfordCoreferenceResolver中,我发现了以下问题:
Stanford CoreNLP(v3.4.1)似乎计划对IndexedWord进行更改:word()和value()都存在,但根据一条评论,应该在某个时候统一。
详情:
StanfordCoreferenceResolver通过以下方式创建折叠依赖关系:
ParserAnnotatorUtils.fillInParseAnnotations(false, true, gsf, sentence, treeCopy);
Dcoref的Document.java使用SemanticGraph的getNodeByWordPattern函数,后者反过来使用w.word()。这似乎没有被fillInParseAnnotations设置。
然而,value()是设置的,所以我在StanfordCoreferenceResolver中添加了以下代码来初步解决问题。
SemanticGraph deps = sentence.get(SemanticGraphCoreAnnotations.CollapsedDependenciesAnnotation.class);
for (IndexedWord vertex : deps.vertexSet()) {
vertex.setWord(vertex.value());
}
问题应该在StanfordCoreNLP中得到解决。
3条答案
按热度按时间dhxwm5r41#
是的,传统上由于word()和value()的分离,确实存在各种bug,尽管这其中有一些合理的原因。
但是你尝试在v3.5或当前的主分支上重现这个问题了吗?我刚刚根据你上面的代码,在StanfordCoreNLPITest:test()测试中添加了代码:
这段代码对我来说是可以通过的。所以也许这个问题已经解决了?如果没有,你能提供一个失败的测试用例吗?
(我知道你现在可能有保持不在Java 8上的兼容性原因,但我怀疑现在我们没有精力发布v3.4.2版本,除非发现更多或更严重的问题......)
lrpiutwd2#
我已经复制了DKPro Core的斯坦福共指解析器(StanfordCoreferenceResolver)的主线版本中出现的问题,该版本使用了CoreNLP 3.5.0。
在调用MentionExtractor之前,我们使用以下步骤将所需的注解从UIMA CAS表示转换为CoreNLP表示:
在这个过程中,value()和word()没有被设置为相同的值。我按照Anne的建议添加了代码作为解决方法。
所以我想你是说,当tokens从UIMA转换为CoreNLP时,DKPro Core应该将word()和value()设置为相同的值吗?目前,我们只设置了以下内容:
goqiplq23#
我尝试在DKPro Core中通过调用setValue(token-text)来修复这个问题,当将UIMA token转换为CoreNLP token(实际上是CoreLabel)时。同时移除了Anne建议的修复方法。然而,这种替代修复方法并不起作用。不确定在上述过程中"value"在哪里/为什么丢失。