[英]Wrong probability calculation in context-free grammar (NLTK, Python 3)
我在使用 NLTK 的概率語法顯示某些句子的最可能的選區結構時遇到問題。
這是我的句子“Ich sah den Tiger under der Felse”
這是我的代碼:
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.