在解析斯坦福的句子时,可以通过在TreeAnnotation中保存的基于成分的输出上调用 .score 来获得解析的(负)对数概率。因此,在创建了一个名为 my-basic-annotation object 的斯坦福管道对象之后(为了简洁起见,使用Clojure这些例子),然后解析句子"马骑过去谷仓倒塌了。" 像这样
>>> (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.>
可以在基本解析的上调用 .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和斯坦福邮件列表对这个分数的一些解释,但是没有运气(我认为SR解析器对于人们来说太新了)这个问题呢)。任何帮助将不胜感激。
答案 0 :(得分:1)
是的,这是预料之中的。由shift-reduce解析器输出的树的得分是所有转换的预测得分的总和而不是负对数概率。
解析器使用多类感知器来预测转换,因此每个转换的得分以及树的得分也可以是任意数字。
有关解析器的更多信息以及讨论它如何工作的论文参考,请参阅shift-reduce parser documentation。