Nltk: NgramModel рдмреИрдХрдСрдлрд╝ рд╕реНрдореВрдерд┐рдВрдЧ рдХреИрд▓рдХреБрд▓реЗрд╢рди рдореЗрдВ рддреНрд░реБрдЯрд┐?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдорд╛рд░реНрдЪ 2013  ┬╖  18рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: nltk/nltk

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ NgramModel рдореЗрдВ рдмреИрдХрдСрдлрд╝ рд╕реНрдореВрдерд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред

  • "рд╢рдмреНрджреЛрдВ" рдХреЗ рдЕрдиреБрдХреНрд░рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: aaaabaaccbacb рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде ['a','b','c']
  • рдПрдХ рдмрд┐рдЧреНрд░рд╛рдо рдореЙрдбрд▓ рдмрдирд╛рдПрдВ (n=2)ред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП LidstoneProbDist рд╕реНрдореВрдерд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рдХреНрд░рдо рдореЗрдВ 'рдмреА' рдпрд╛ 'рд╕реА' рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдмрд┐рдЧреНрд░рд╛рдо рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрд┐рдЧреНрд░рд╛рдо 'bb', 'bc' рдФрд░ 'ca' рдХреА рдкреНрд░рд╛рдпрд┐рдХрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХрдСрдлрд╝ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
  • рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП = ['a'], model.prob(w,context) рд╕рднреА рд╢рдмреНрджреЛрдВ рдФрд░ 1 рдХреЗ рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ
  • рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП = ['рдмреА'], model.prob(w,context) рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдпреЛрдЧ> 1 рд╣реИ

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдмреИрдХрдСрдлрд╝ рдЧрдгрдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрджрд░реНрдн 'рдмреА' рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ:

  • 'рдмреА' рд╕рдВрджрд░реНрдн (рдпрд╛рдиреА рдмреАрдмреА рдФрд░ рдмреАрд╕реА) рдореЗрдВ рдЕрдирджреЗрдЦреА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрд▓ "рдЧрд╛рдпрдм" рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рдмрд┐рдЧреНрд░рд╛рдо рд╕реНрддрд░ рдкрд░, рдЗрд╕ рдмреАрдЯрд╛ 2 рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
  • рдЗрди рдЕрдирджреЗрдЦреА рдореВрд▓реНрдпреЛрдВ (рдпрд╛рдиреА 'рдмреА' рдФрд░ 'рд╕реА') рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдпреВрдиреАрдЧреНрд░рд╛рдо рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ, рдЗрд╕ рдмреАрдЯрд╛ 1 рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ
  • рд╡рд╛рдкрд╕реА (рдмреАрдЯрд╛ 2 / рдмреАрдЯрд╛ 1) * backoff.prob ()

рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрди рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдпреВрдиреАрдЧреНрд░рд╛рдо рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рдЕрджрд▓рд╛-рдмрджрд▓реА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд▓рд╛рдкрддрд╛ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рджреНрд░рд╡реНрдпрдорд╛рди рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд┐рдП рдЧрдП, рдмрд┐рдЧреНрд░рд╛рдо рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдереЗред

рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NgramModel рдореЗрдВ рдХреЛрдб рдХреБрдЫ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

2016 рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдФрд░ 'рдПрдирдЧреНрд░рд╛рдо рдореЙрдбрд▓' рдХреЗ рдореБрджреНрджреЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рд╕рднреА 18 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред

рдЕрдЧрд░ рд╣рдо рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЛ рдорд╛рдирддреЗ рд╣реИрдВ:

from nltk.model import NgramModel
from nltk.probability import LidstoneProbDist

word_seq = list('aaaababaaccbacb')
words = ['a', 'b', 'c', '']

est = lambda freqdist, bins: LidstoneProbDist(freqdist, 0.2, bins=bins)
model = NgramModel(2, word_seq, True, True, est, 4)

рд╣рдо рдмрд╣реБрдд рдЬрд▓реНрджреА рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

sum(model.prob(w, ['b']) for w in words)
Out[150]: 2.4583333333333335
sum(model.prob(w, ['a']) for w in words)
Out[151]: 1.0

[(w, model.prob(w, ['b'])) for w in words]
Out[152]: 
[('a', 0.6666666666666667),
 ('b', 0.875),
 ('c', 0.6666666666666667),
 ('', 0.25)]

[(w, model.prob(w, ['a'])) for w in words]
Out[153]: 
[('a', 0.47727272727272724),
 ('b', 0.25),
 ('c', 0.25),
 ('', 0.022727272727272728)]

рдЬрдм рдореИрдВ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ NgramModel рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рдпрд╣ рднреА рдпрд╛рдж рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдмреИрдХ-рдСрдл рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ред рдЕрдм рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рд╣рдЬ рд╕рдордЭ рдЦреЛ рджреА рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд╛рдЯреНрдЬрд╝ рдмреИрдХ-рдСрдлрд╝ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЧрдгрдирд╛рдПрдБ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреА рдЧрдгрдирд╛рдУрдВ рд╕реЗ рдереЛрдбрд╝реА рднрд┐рдиреНрди

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ LidstoneProbDist.discount NgramModel._beta рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред

def _alpha(self, tokens):
    return self._beta(tokens) / self._backoff._beta(tokens[1:])

def _beta(self, tokens):
    return (self[tokens].discount() if tokens in self else 1)

рдореБрдЭреЗ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдмреАрдЯрд╛ рдЧрдгрдирд╛рдПрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЪреАрдЬреЗрдВ рдЧрд▓рдд рд╣реЛ рд░рд╣реА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмрд┐рдЧреНрд░рд╛рдо рд╕реНрддрд░ рдкрд░ рдмреАрдЯрд╛ рдпреВрдиреАрдЧреНрд░рд╛рдо рд╕реНрддрд░ рдкрд░ рдмреАрдЯрд╛ рд╕реЗ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрдкрд╛рдд, рдЕрд▓реНрдлрд╛, рд╕рдХрд╛рд░рд╛рддреНрдордХ рдмрдирд╛рддрд╛ рд╣реИред

model._beta(('b',))
Out[154]: 0.16666666666666669
model._backoff._beta(())
Out[155]: 0.05063291139240506
model._alpha(('b',))
Out[155]: 3.291666666666667

рдореИрдВрдиреЗ рдпрд╣ рднреА рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ LidstoneProbDist рд╣реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ:

[(w, model._model[('b',)].prob(w)) for w in words]
Out[159]: 
[('a', 0.6666666666666667),
 ('b', 0.04166666666666667),
 ('c', 0.04166666666666667),
 ('', 0.25)]

sum([model._model[('b',)].prob(w) for w in words])
Out[161]: 1.0

рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдпреЗ рд╕рднреА рднрд╛рдЧ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдХреЛрдИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреВрджрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ (рдЬреИрд╕реЗ @deslinguist), рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕реЗрдЯ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдирдорд╕реНрддреЗ, рдФрд░ рдЗрд╕рдореЗрдВ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдмрд╕ рдХреБрдЫ рдФрд░ рд╡рд┐рдЪрд╛рд░:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЪреАрдЬ рдЬреЛ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реА рд╣реИ рд╡рд╣ рд╣реИ "рдЫреВрдЯ" рдХреА рд╡рд┐рднрд┐рдиреНрди рдзрд╛рд░рдгрд╛рдПрдВред рд╡рд┐рднрд┐рдиреНрди рдЪреМрд░рд╕рд╛рдИ рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдЫреВрдЯ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдзрд╛рд░рдг рд▓рд╛рдкреНрд▓рд╛рд╕рд┐рдпрди (рдПрдХ рдЬреЛрдбрд╝реЗрдВ) рд╕реНрдореВрдерд┐рдВрдЧ рдЫреВрдЯ рджреЗрдЦреЗ рдЧрдП рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рджреНрд░рд╡реНрдпрдорд╛рди рдХреЛ рдмрд┐рдирд╛ рджреЗрдЦреЗ рдЧрдП рд╢рдмреНрджреЛрдВ рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдбрд┐рд╕реНрдХрд╛рдЙрдВрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреЛ _beta рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, ProbDist рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рд╕реНрдореВрдерд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдмреИрдХрдСрдлрд╝ рд╕реНрдореВрдерд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ (рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЫреВрдЯ рдХреА рдмреИрдХрдСрдл рдзрд╛рд░рдгрд╛ рдХреЛ рдЙрдЪреНрдЪ рдХреНрд░рдо рдореЙрдбрд▓ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП "рдЧрд╛рдпрдм" (рдЕрдирджреЗрдЦреЗ) рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╣реА рдмрд╛рдд рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рдиреАрдЪреЗ рдХреБрдЫ рд╕реНрдирд┐рдкреЗрдЯ рд╕рд╛рдЭрд╛ рдХрд┐рдП рд╣реИрдВред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рдЙрди рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдореЗрдВ рдЧрд╛рдпрдм рд╣реИрдВ, рдФрд░ рдЙрд╕ рд╕рдмрд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЗрди "рд▓рд╛рдкрддрд╛" рд╢рдмреНрджреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрднрд╛рд╡рдирд╛ рдФрд░ рдмреИрдХрдСрдлрд╝ рдореЙрдбрд▓ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред рдЕрдиреБрдкрд╛рдд "рдЕрд▓реНрдлрд╛" рд╣реИ, рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╕рдВрджрд░реНрдн рдХрд╛ рдПрдХ рдХрд╛рд░реНрдп рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓рд┐рдВрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рд╕рд╛рде рд╣реА, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ _beta рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЕрдм рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рджред

    # (Code fragment for calculating backoff)

    # Now, for Katz backoff smoothing we need to calculate the alphas
    if self._backoff is not None:
        self._backoff_alphas = dict()

        # For each condition (or context)
        for ctxt in self._cfd.conditions():
            pd = self._model[ctxt] # prob dist for this context

            backoff_ctxt = ctxt[1:]
            backoff_total_pr = 0
            total_observed_pr = 0
            for word in self._cfd[ctxt].keys(): # this is the subset of words that we OBSERVED
                backoff_total_pr += self._backoff.prob(word,backoff_ctxt) 
                total_observed_pr += pd.prob(word)

            assert total_observed_pr <= 1 and total_observed_pr > 0
            assert backoff_total_pr <= 1 and backoff_total_pr > 0

            alpha_ctxt = (1.0-total_observed_pr) / (1.0-backoff_total_pr)

            self._backoff_alphas[ctxt] = alpha_ctxt

# Updated _alpha function, discarded the _beta function
def _alpha(self, tokens):
    """Get the backoff alpha value for the given context
    """
    if tokens in self._backoff_alphas:
        return self._backoff_alphas[tokens]
    else:
        return 1

рд╣рд╛рдп рд╕рдм, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рдЪрд░реНрдЪрд╛ рдкрд░ рдЭрдВрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ 1.0 рдХреЗ рдпреЛрдЧ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЦрд░рд╛рдм рд╣реИ

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЯреНрд░рд┐рдЧреНрд░рд╛рдо рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

#!/usr/bin/python
from nltk.model import NgramModel
from nltk.probability import LidstoneProbDist

word_seq = ['foo', 'foo', 'foo', 'foo', 'bar', 'baz']

# Set up a trigram model, nothing special  
est = lambda freqdist, bins: LidstoneProbDist(freqdist, 0.2, bins)
model = NgramModel(3, word_seq, True, True, est, 3)

# Consider the ngram ['bar', 'baz', 'foo']
# We've never seen this before, so the trigram model will fall back
context = ('bar', 'baz',)
word = 'foo'
print "P(foo | bar, baz) = " + str(model.prob(word,context))

# Result:
# P(foo | bar, baz) = 2.625

рд╣рд╛рдБ - рдпрд╣ рд╕рд╢рд░реНрдд рд╕рдВрднрд╛рд╡рдирд╛> 1.0 . рд╣реИ

рдмреБрд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдореЙрдбрд▓ рд╡рд╛рдкрд╕ рдЧрд┐рд░рддреЗ рд╣реИрдВ, рдЙрддрдиреА рд╣реА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдмрдврд╝ рдЬрд╛рддреА рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдФрд░ рднреА рдмрджрддрд░ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ!

word_seq = ['foo' for i in range(0,10000)]
word_seq.append('bar')
word_seq.append('baz')

est = lambda freqdist, bins: LidstoneProbDist(freqdist, 0.2, bins)
model = NgramModel(3, word_seq, True, True, est, 3)

# Consider the ngram ['bar', 'baz', 'foo']
# We've never seen this before, so the trigram model will fall back
context = ('bar', 'baz',)
word = 'foo'
print "P(foo | bar, baz) = " + str(model.prob(word,context))

# Result:
P(foo | bar, baz) = 6250.125

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЦрдбрд╝рд╛ рд╣реИ, NgramModel рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдХрдо рд╕реЗ рдХрдо рдПрдбрд┐рдЯрд┐рд╡ рд▓рд┐рдбрд╕реНрдЯреЛрди рд╕реНрдореВрдерд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред

@afourney : рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЗрд░рд╛рджрд╛ рд╣реИ (LidstoneProbDist рдореЗрдВ SUM_TO_ONE = False рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ)

@afourney рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдм рддрдХ рдпрд╣ рддрдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рддрдм рддрдХ NgramModel рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред

@kmike SUM_TO_ONE LidstoneProbDist рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд┐рддрд░рдг рдореЗрдВ рдирд╣реАрдВ рдереА рдФрд░ рдЖрдкрдиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдбрд┐рдмреНрдмреЗ рдХрд╛ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рддреЛ рдпрд╣ рдПрдХ рдХреЗ рд▓рд┐рдП рдпреЛрдЧ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ NgramModel рдХреА рдмреАрдЯрд╛ рдЧрдгрдирд╛ рд╣реИ, рди рдХрд┐ LidstoneProbDist рд╕реНрд╡рдпрдВред

@kmike : рд╣рд╛рдБ, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ SUM_TO_ONE рдЭреВрдард╛ рдерд╛ред рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдпрд╣ рдереА рдХрд┐ рдореЙрдбрд▓ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд╢рд░реНрдд рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ (рдПрдХрд▓ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП) рд▓реМрдЯрд╛ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 1 рд╕реЗ рдЕрдзрд┐рдХ рдереЗ - рдЙрдиреНрд╣реЗрдВ рдпреЛрдЧ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

@bcroy рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, _alpha рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:

  1. рдпрд╣ рджрд┐рдП рдЧрдП рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдмреИрдХрдСрдлрд╝ рдореЙрдбрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрди рд╢рдмреНрджреЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд░реНрддрдорд╛рди рдЙрдЪреНрдЪ-рдХреНрд░рдо рдореЙрдбрд▓ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд╣реИрдВред
  2. рдпрд╣ рдкреБрдирд░реНрд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдмреИрдХрдСрдлрд╝ рдореЙрдбрд▓ рдХреЛ рд╡рд░реНрддрдорд╛рди _model рдХреА "рд▓рд╛рдкрддрд╛"/рдЫреВрдЯ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ "рдлрд┐рдЯ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрддрд╛ рд╣реИред

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ NgramModel рдмреИрдХрдСрдлрд╝ рд░рдгрдиреАрддрд┐ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдк рд░рдгрдиреАрддрд┐ рднреА рдкреЗрд╢ рдХрд░реЗред рдпрд╣ рдЬреЗрд▓рд┐рдиреЗрдХ-рдорд░реНрд╕рд░ рдпрд╛ рд╡рд┐рдЯрди-рдмреЗрд▓ рд╕реНрдореВрдерд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдЧрд╛ - рдЬрд┐рдирдореЗрдВ рд╕реЗ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдореБрдЭреЗ рд╕рд░рд▓ рд▓рдЧрд╛, рдФрд░ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рджреЗрдЦреЗрдВ: http://nlp.stanford.edu/~wcmac/papers/20050421-smoothing-tutorial.pdf

рдХреНрдпрд╛ рдХреЛрдИ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЦреБрд▓рд╛ рдмрдЧ рд╣реИ?

рд╣рд╛рдБ, рдореБрдЭреЗ рдЕрднреА рднреА P(foo | bar, baz) = 2.625 . рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ

рд╕рдмрдХреЛ рдирдорд╕реНрддреЗ,

рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЦреБрд▓рд╛ рдмрдЧ рд╣реИ? рдореБрдЭреЗ P(foo | bar, baz) = 2.625 рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд░рд╣рддреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдПрдирдПрд▓рдкреА рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ NgramModel рд╕рд╛рде рдХрдИ рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдРрд╕рд╛ рдХрд░ рдкрд╛рдКрдВрдЧрд╛ред рдЬрдм рддрдХ рдХреЛрдИ рдЗрди рдмрдЧреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛, рддрдм рддрдХ NgramModel рдХреЛ nltk рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдбреИрди, рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЕрднреА рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдЗрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ?

@ZeerakW рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, ngram рдореЙрдбрд▓ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ, рдФрд░ рдЕрднреА рддрдХ рдХрд┐рд╕реА рдиреЗ рднреА рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

2016 рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдФрд░ 'рдПрдирдЧреНрд░рд╛рдо рдореЙрдбрд▓' рдХреЗ рдореБрджреНрджреЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

рджреЛрд╕реНрддреЛрдВ рд╣рдо рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :)

рдЕрдкрдбреЗрдЯ 2018ред рдкрд╣рд▓реЗ рд╣реА рд╕реНрдирд╛рддрдХ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рдПрдирдЧреНрд░рд╛рдо рдореБрджреНрджрд╛ рдореМрдЬреВрдж рд╣реИ

рдЧреНрд░реАрд╖реНрдо рдЛрддреБ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

goodmami picture goodmami  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jeryini picture jeryini  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

talbaumel picture talbaumel  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

chaseireland picture chaseireland  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

peterbe picture peterbe  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ