在斯坦福大学的 LabeledScoredTreeNode 上解释 Shift-Reduce Parser 解析的分数
Interpreting score of Shift-Reduce Parser parse on Stanford's LabeledScoredTreeNode
在斯坦福解析一个句子时,可以通过对保存在 TreeAnnotation 中的基于成分的输出调用 .score 来获得解析的(负)对数概率。因此,在创建一个名为 my-basic-annotation object 的 Stanford 管道对象之后(为简洁起见,对这些示例使用 Clojure)然后解析句子 "The horse rode past the barn fell."
像这样
>>> (def basic-sentence-annotation (first (.get my-basic-annotation-object CoreAnnotations$SentencesAnnotation)))
>>> sentence-annotation
#<Annotation The horse rode past the barn fell.>
>>> (def basic-parsed (.get basic-sentence-annotation TreeCoreAnnotations$TreeAnnotation))
>>> basic-parsed
#<LabeledScoredTreeNode (ROOT (S (NP (DT The) (NN horse)) (VP (VBD rode)
(SBAR (S (NP (IN past) (DT the
) (NN barn)) (VP (VBD fell))))) (. .)))> The horse rode past the barn fell.>
可以在 basic-parsed:
上调用 .score
>>> (.score basic-parsed)
-60.86048126220703
但是当我改用 Shift Reduce Parser 并在 TreeAnnotation 上调用 .score 时,我得到一个非常大的正数而不是负对数概率:
>>> (def sr-sentence-annotation (first (.get my-sr-annotation-object CoreAnnotations$SentencesAnnotation)))
>>> sr-sentence-annotation
#<Annotation The horse rode past the barn fell.>
>>> (def sr-parsed (.get sr-sentence-annotation TreeCoreAnnotations$TreeAnnotation))
>>> sr-parsed
#<LabeledScoredTreeNode (ROOT (S (NP (NP (DT The) (NN horse)) (VP (VBD rode) (PP (IN past) (NP (DT the) (NN barn))))) (VP (VBD fell)) (. .)))>
>>> (.score sr-parsed)
6497.833389282227
我花了一些时间查看 API 和 Stanford 邮件列表以了解对这个分数的一些解释,但没有任何运气(我认为 SR 解析器对人们来说太新了遇到过这个问题)。任何帮助将不胜感激。
是的,这是预期的。 shift-reduce 解析器输出的树的分数是所有转换的预测分数之和,而不是负对数概率。
解析器使用多类感知器来预测转换,因此每个转换的分数以及树的分数都可以是任意数字。
请参阅 shift-reduce parser documentation 了解有关解析器的更多信息以及对讨论其工作原理的论文的参考。
在斯坦福解析一个句子时,可以通过对保存在 TreeAnnotation 中的基于成分的输出调用 .score 来获得解析的(负)对数概率。因此,在创建一个名为 my-basic-annotation object 的 Stanford 管道对象之后(为简洁起见,对这些示例使用 Clojure)然后解析句子 "The horse rode past the barn fell." 像这样
>>> (def basic-sentence-annotation (first (.get my-basic-annotation-object CoreAnnotations$SentencesAnnotation)))
>>> sentence-annotation
#<Annotation The horse rode past the barn fell.>
>>> (def basic-parsed (.get basic-sentence-annotation TreeCoreAnnotations$TreeAnnotation))
>>> basic-parsed
#<LabeledScoredTreeNode (ROOT (S (NP (DT The) (NN horse)) (VP (VBD rode)
(SBAR (S (NP (IN past) (DT the
) (NN barn)) (VP (VBD fell))))) (. .)))> The horse rode past the barn fell.>
可以在 basic-parsed:
上调用 .score>>> (.score basic-parsed)
-60.86048126220703
但是当我改用 Shift Reduce Parser 并在 TreeAnnotation 上调用 .score 时,我得到一个非常大的正数而不是负对数概率:
>>> (def sr-sentence-annotation (first (.get my-sr-annotation-object CoreAnnotations$SentencesAnnotation)))
>>> sr-sentence-annotation
#<Annotation The horse rode past the barn fell.>
>>> (def sr-parsed (.get sr-sentence-annotation TreeCoreAnnotations$TreeAnnotation))
>>> sr-parsed
#<LabeledScoredTreeNode (ROOT (S (NP (NP (DT The) (NN horse)) (VP (VBD rode) (PP (IN past) (NP (DT the) (NN barn))))) (VP (VBD fell)) (. .)))>
>>> (.score sr-parsed)
6497.833389282227
我花了一些时间查看 API 和 Stanford 邮件列表以了解对这个分数的一些解释,但没有任何运气(我认为 SR 解析器对人们来说太新了遇到过这个问题)。任何帮助将不胜感激。
是的,这是预期的。 shift-reduce 解析器输出的树的分数是所有转换的预测分数之和,而不是负对数概率。
解析器使用多类感知器来预测转换,因此每个转换的分数以及树的分数都可以是任意数字。
请参阅 shift-reduce parser documentation 了解有关解析器的更多信息以及对讨论其工作原理的论文的参考。