上下文无关语法中的错误概率计算(NLTK,Python 3)

上下文无关语法中的错误概率计算(NLTK,Python 3),python,nltk,probability,context-free-grammar,text-parsing,Python,Nltk,Probability,Context Free Grammar,Text Parsing,我在使用NLTK的概率语法显示某个句子最可能的选区结构时遇到了一个问题 这是我的一句话“我在地狱里见到老虎” 这是我的密码: from nltk import PCFG tiger_grammar = PCFG.fromstring(""" S -> NP VP [1.0] NP -> ART NN [0.25] | PPER [0.5] | NP PP [0.25] VP -> VVFIN NP [0.75] | VVFIN NP PP [0.25] PP -> APP

我在使用NLTK的概率语法显示某个句子最可能的选区结构时遇到了一个问题

这是我的一句话“我在地狱里见到老虎”

这是我的密码:

from nltk import PCFG
tiger_grammar = PCFG.fromstring("""
S -> NP VP [1.0]
NP -> ART NN [0.25] | PPER [0.5] | NP PP [0.25]
VP -> VVFIN NP [0.75] | VVFIN NP PP [0.25]
PP -> APPR NP [1.0]
APPR -> 'unter' [1.0]
PPER -> 'Ich' [1.0]
VVFIN -> 'sah' [1.0]
NN -> 'Tiger' [0.5] | 'Felse' [0.5]
ART -> 'den' [0.5] | 'der' [0.5]
""")
viterbi_parser = nltk.ViterbiParser(tiger_grammar)
trees = viterbi_parser.parse(['Ich', 'sah', 'den', 'Tiger', 'unter', 'der', 'Felse'])
for t in trees:
    print(t)
以下是我得到的:

(S
  (NP (PPER Ich))
  (VP
    (VVFIN sah)
    (NP (ART den) (NN Tiger))
    (PP (APPR unter) (NP (ART der) (NN Felse))))) (p=0.000488281)
但预期的结果是:

(S
  (NP (PPER Ich))
  (VP
    (VVFIN sah)
    (NP
      (NP (ART den) (NN Tiger))
      (PP (APPR unter) (NP (ART der) (NN Felse))))))
(我没有在这里添加概率,但它也应该显示出来)

根据语法,从
VVFIN
NP
形成
VP
的概率高于从
VVFIN
NP
PP
。但是解析器显示了第二种结构

我做错了什么


非常感谢您的建议

仅仅是因为你想要的结果比你得到的结果概率低。我们可以计算您期望结果的概率:

S -> NP VP       1.0

NP -> PPER       0.5
PPER -> Ich      1.0

VP -> VVFIN NP   0.75
VVFIN -> sah     1.0
NP -> NP PP      0.25

NP -> ART NN     0.25
ART -> den       0.5
NN -> Tiger      0.5

PP -> APPR NP    1.0
APPR -> unter    1.0

NP -> ART NN     0.25
ART -> der       0.5
NN -> Felse      0.5

相乘得到概率
0.0003662109375
,这肯定比您得到的结果要小
0.000488281

谢谢!我更改了行
NP->ART-NN[0.05]| PPER[0.05]| NP-PP[0.9]
,得到了p=00000 263671875,而p=000000 1953125。现在一切都对了