CoreNLP 在3.9.x版本中,结合Quote使用DepParse,

watbbzwu  于 5个月前  发布在  其他
关注(0)|答案(5)|浏览(81)

我正在使用poorna-kumar/gendermeme-core与CoreNLP一起使用,自从升级到最新版本后,由于Quote标注器的更改,我无法使任何功能正常工作。
我需要的标注器负载完整设置是

['pos', 'lemma', 'ner', 'parse', 'depparse', 'dcoref', 'quote', 'openie']

(考虑到前几个作为依赖项被拉入,可以简化为['depparse', 'dcoref', 'coref', 'openie', 'quote']) ...但似乎Quote和DepParse标注器完全不兼容。
我想我可以降级到3.8.x版本,但如果可能的话,我不想这样做......有什么建议吗?谢谢!

y1aodyip

y1aodyip1#

你能详细说明你看到的错误是什么吗?depparse应该对引号没有问题。

z3yyvxxp

z3yyvxxp2#

例如,这个管道应该可以正常工作:

tokenize,ssplit,pos,lemma,ner,depparse,coref,natlog,openie,quote
xtfmy6hx

xtfmy6hx3#

我认为Quote Annotator在这里强制使用了默认的depparse模型:
CoreNLP/src/edu/stanford/nlp/quoteattribution/QuoteAttributionUtils.java
第223行
| | staticDependencyParserparser = DependencyParser.loadFromModelFile(DependencyParser.DEFAULT_MODEL, newProperties()); |
我在代码中找不到任何地方检查depparse.model属性,所以如果@Aendrew在管道中有自定义depparse,它可能会冲突。

klh5stk1

klh5stk14#

我认为QuoteAttributionAnnotator的属性在当前流程中被覆盖了。以下是我追踪到的内容:

AnnotationImplementor在创建QuoteAnnotator时传递属性quote.*
CoreNLP/src/edu/stanford/nlp/pipeline/AnnotatorImplementations.java
第264行至第268行

publicAnnotatorquote(Propertiesproperties) {
    PropertiesrelevantProperties = PropertiesUtils.extractPrefixedProperties(properties, Annotator.STANFORD_QUOTE + '.');
    returnnewQuoteAnnotator(relevantProperties);
}

QuoteAnnotator使用截断的属性创建QuoteAttributionAnnotator
CoreNLP/src/edu/stanford/nlp/pipeline/QuoteAnnotator.java
第171行

quoteAttributionAnnotator = newQuoteAttributionAnnotator(props);

由于AnnotatorImplementations的截断,quoteattribution.*属性从未传递给QuoteAttributionAnnotator,因此如果任何支持文件(model、familyWordsFile、animacyWordsFile、genderNamesFile)不在默认路径上,管道将无法加载。
此外,QuoteAttributionAnnotator使用QuoteAttributionUtils从硬编码的默认路径加载DependencyParser。如果依赖解析器不在默认路径上,管道加载将失败。
大家对于如何传递quoteattribution.*和depparse.*属性有什么偏好吗?一种简单的方法是在创建QuoteAnnotator时通过属性传递它们,然后根据需要使用它们。这种传递方法需要处理一下QuoteAttributionUtils的调用顺序,但可能不会太难看。
depparse问题的调用顺序

  1. QAA.annotate -> QAU.addEnhancedSentences -> QAU.constructSentence -> QAU.getParse
  2. QAA.annotate -> QAU.annotateForDependencyParse -> QAU.getParse
    或者,QuoteAttributionAnnotator的创建方式可以进行调整,但这可能是一个架构问题。
q0qdq0h2

q0qdq0h25#

@sillystring13 我不知道是否有自定义的depparse(至少就我所知?),仅供参考!
@J38 哎呀,我完全忘记了实际的错误是什么,抱歉,这真是一个糟糕的问题报告。下次有机会我会尝试你建议的顺序。👍

相关问题