Неправильный расчет вероятности в контекстно-свободной грамматике (NLTK, Python 3) - PullRequest
1 голос
/ 14 марта 2020

У меня проблема с отображением наиболее вероятной структуры избирательного округа для некоторого предложения с использованием вероятностной грамматики NLTK c.

Вот мое предложение "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))))))

(я не добавил вероятность здесь, но она должна отображаться также)

Согласно грамматике, вероятность для формирования VP из VVFIN и NP выше, чем из VVFIN, NP и PP. Но парсер показывает вторую структуру.

Что я делаю не так?

Буду благодарен за предложения!

1 Ответ

1 голос
/ 14 марта 2020

Просто потому, что ваш желаемый результат имеет меньшую вероятность, чем результат, который вы получили. Мы можем вычислить вероятность вашего желаемого результата:

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.

...