【问题标题】:How may I resolve "Tree not correctly binarized" error in StanfordCoreNLP?如何解决 StanfordCoreNLP 中的“树未正确二值化”错误?
【发布时间】:2020-10-04 23:36:49
【问题描述】:

我在运行 stanfordCoreNLP 时遇到错误,如下所示:我目前使用的是 4.0.0 版本,请您指教?

SentimentCostAndGradient: 警告: 树未正确二值化: (ROOT (: --) (S (VB let) (SBARQ (NP's) (@SBARQ (ADVP just)) (@SBARQ (VBP say) (SQ (S (VBG假设)(SBAR(NP你)(VP(@VP(@VP(VBP得到)(NP(JJ支持)(NN立法)))(NP(DT本)(NN年)))(PP(IN in) (NP (DT the) (@NP (NNP Texas) (NN legislature)))))))) (@SQ (, ,) (@SQ (SBARQ (WHNP what) (SQ (VBZ)) (NP (NP(DT)(@NP(NN时间)(NN线)))(PP(IN到)(S(VBG获取)(S(NP(DT an))(@NP(NNP AMI)(NN程序) )) (VP 已部署))))))) (@SQ (, ,) (@SQ (@SQ (MD 应) (NP 我们)) (VP (@VP (@VP (@VP (VB 说)) ( , ,)) (INTJ 右)) (, ,)) (S (ADVP so) (VP (@VP (@VP (VBG 起始) (PP (IN from) (NP midyear))) (NP (DT this) (NN 年))) (ADVP 起))))))))))))) (. ?)) 线程“主”java.lang.AssertionError 中的异常:树未正确二值化 在 edu.stanford.nlp.sentiment.SentimentCostAndGradient.forwardPropagateTree(SentimentCostAndGradient.java:532) 在 edu.stanford.nlp.sentiment.SentimentCostAndGradient.forwardPropagateTree(SentimentCostAndGradient.java:512) 在 edu.stanford.nlp.pipeline.SentimentAnnotator.doOneSentence(SentimentAnnotator.java:115) 在 edu.stanford.nlp.pipeline.SentenceAnnotator.annotate(SentenceAnnotator.java:102) 在 edu.stanford.nlp.pipeline.AnnotationPipeline.annotate(AnnotationPipeline.java:76) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.annotate(StanfordCoreNLP.java:640) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.annotate(StanfordCoreNLP.java:650) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.processFiles(StanfordCoreNLP.java:1245) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.processFiles(StanfordCoreNLP.java:1079) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.run(StanfordCoreNLP.java:1362) 在 edu.stanford.nlp.pipeline.StanfordCoreNLP.main(StanfordCoreNLP.java:1408)

我输入到 StanfordCoreNLP 模块的文本:

你能听到我说话吗?因此,如果可以,请提出一些后续问题。首先,让我在这里谈谈信贷方面和股权融资的一些细节。您如何看待您的[某种]债务指标,它们今天在哪里?显然,这些机构已经发表了一些评论。但是——你需要去哪里?我知道您说过您今天不会具体说明所需的总股本,但只是想确保我们了解您今天的情况以及从信用角度来看您需要去哪里。我假设你想维持你目前各自的评级。明白了,好吧。然后让我回到这个转折,据我所知,关于 50 到 150 兆瓦——或者更确切地说,采购之外的好处,也许是更好的说法,对吧?所以你运行了 RFP。你已经宣布了这些结果。但是,在此处的幻灯片中,您谈到购买,这似乎是一个额外的数量,如果我 - 如果你愿意的话。你能谈谈这个吗?然后在这里澄清一下,很明显,你授予了——或者你提议在这里授予 PPA。这会是一种潜在的建设-拥有-转让情况吗?实际上甚至可能——让我扩大范围,最初授予的 RFP 容量是否可能是一种自建转让的情况?如果你不介意提醒我,那是什么时间线?就这些而言——我知道你对今年完成这些合同的时间有一个广泛的描述。但是时间线特别是围绕建设-拥有-转让,BOT,也许是其中的一部分。明白了,太好了。然后很抱歉,最后一个是关于 AMI 工作的。那里的时间线,你怎么想 - 假设你今年在德克萨斯州立法机关获得支持性立法,部署 AMI 计划的时间线是什么,我们应该说,对,所以从今年年中开始向前?在 2019 年的指南中,对于输电和配电,以及德州的输电和配电,假设了何种程度的费率减免?好的。因为看起来根据您归档这些东西的方式,似乎传输一个应该在夏季高峰期可用,而分配增加可能不会在夏季高峰期出现。不,我当然欣赏并理解这一点。但是,在 1600 万美元的申请中,假设这些美元总和得到批准,根据时间线,19 年与 20 年的实际比例是多少?好的。此外,就股权而言,就您的指导而言,就您的 2019 年指导而言,就增量股权而言,股票计数假设是什么?此外,您已经提交并- 等待批准请求。高达2亿美元。我想,您能否在时间方面为我们提供帮助 - 就如何 - 在几年内或您如何考虑这一点?如果您能够像 Julien 所描述的那样与一些 RFP 获胜者达成协议,建立购买,这种灵活性是否也考虑了为股权提供资金的能力?你能给我们一些关于到目前为止你在第一季度看到的天气的颜色吗?好的。你能告诉我们到目前为止你在德克萨斯州立法机构看到的关于 AMI 的情况吗?好的。就 - 你给了我们一些关于今年 DCRF 可能会是什么样子的想法。你认为这些数字是基准年度数字的样子吗?或者你是否远远落后于这些可能比正常的前进方式有点高?所以也许像一半?假设您的客户和负载继续以相似的速度增长,这可能表明大约一半将是未来的速度。是的。我的理解是,立法机构正在努力授权 PUCT 能够将预测的测试年份用于费率案例,以帮助缓解监管滞后。我只是想知道你是什么样的人——你对这种努力和状态以及你认为的前景有什么了解。是的。我想我是指代骑手,可能更多的是在更广泛的背景下。但是你——如果它现在特别关注一代骑手,我猜你怎么看——你现在怎么看?对不起,伙计们,在这里跟进。但我只是想澄清一下,您如何看待您在 19 年指南中获得的 ROE?同样,我知道您谈论的是标准化天气,但我只想了解获得的 ROE 预期以及这些预期是如何建立的。我真的很明显地在分配方面比传输方面要求更多,如果我们可以深入研究的话。知道了。但反映在两个司法管辖区之间的分销方面的平均值略低于分销方面的 9%。

这是我运行模型的方式,我使用的是 4.1.0 版本:

java -mx3g -cp "/home/cxiao/release_date/stanford-corenlp-4.1.0/*" edu.stanford.nlp.pipeline.StanfordCoreNLP -props.q1

对于 props.q1:

annotators = tokenize, ssplit, pos, parse, sentiment
outputFormat = JSON 
outputDirectory = /path_to/standard_input/fail/
timeout = 500000
output.includeText = False
parse.model = edu/stanford/nlp/models/srparser/englishSR.ser.gz
continueOnAnnotateError = True
filelist = /path_to/stanford-corenlp-4.1.0/q/flist1.lst

对于文件列表:

/pathto/failed_file.txt

【问题讨论】:

  • 您能解释一下您是如何运行它的吗?如果我将所有文本放入一个文件并像这样运行它,我不会收到当前 CoreNLP 的错误:java edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators "tokenize, ssplit, pos, parse, mood" --file foo.txt
  • 注意他用的是4.1.0
  • @John 我已将我的运行方式添加到问题的底部。我也在使用 4.1.0 但仍然失败。
  • @StanfordNLPHelp 我使用的是 4.1.0,仍然有同样的错误。将我正在使用的命令和属性文件添加到原始帖子中。谢谢。
  • @John 嘿!我注意到,如果我从属性文件中删除 parse.model = edu/stanford/nlp/models/srparser/englishSR.ser.gz 行,该模型实际上可以工作。但是我可以知道为什么我不能使用那个解析器吗?

标签: machine-learning nlp stanford-nlp


【解决方案1】:

这是 sr 解析器中一个非常模糊的错误,由最近添加的训练集中的一小部分训练树破坏了所有树以 S、FRAG 等结尾的假设,然后将其作为 ROOT一元过渡。这里产生的错误只是导致问题的句子的一部分,并且 sr 解析器试图将该句子分成两个具有两个独立根的部分。事实上,问题甚至比这更奇怪,因为这只会在其中一个 ROOT 有 3 个或更多片段时导致下游错误。

无论如何,可以通过强制 ROOT 节点仅出现在树的最顶端来修复该错误。该修复位于源代码树的此分支中:

https://github.com/stanfordnlp/CoreNLP/tree/fix_sr_binary

如果你在那里没有看到一个分支,那意味着它已经被合并到了

https://github.com/stanfordnlp/CoreNLP/tree/dev

计划在接下来的几周内发布一个新版本,此时您可以简单地使用新版本而不是从源代码构建以获得此错误修复。

编辑:你特别想要这个改变

https://github.com/stanfordnlp/CoreNLP/commit/10881ca4727b6d114e5157d2aa547bceac18d294

任何过去都无法加载旧模型的内容,因为需要对 readObject 进行 hack 才能使其加载旧模型,并且我们将使用更新的转换规则重做模型

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-13
    • 2018-05-18
    • 2017-01-17
    • 2019-12-16
    • 2017-06-13
    • 2022-11-15
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多