上下文无关语法中的错误概率计算(NLTK,Python 3)
我在使用NLTK的概率语法显示某个句子最可能的选区结构时遇到了一个问题 这是我的一句话“我在地狱里见到老虎” 这是我的密码:上下文无关语法中的错误概率计算(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
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。现在一切都对了