рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ NgramModel рдореЗрдВ рдмреИрдХрдСрдлрд╝ рд╕реНрдореВрдерд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИред
рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдмреИрдХрдСрдлрд╝ рдЧрдгрдирд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрджрд░реНрдн 'рдмреА' рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ:
рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЙрди рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдпреВрдиреАрдЧреНрд░рд╛рдо рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдореЗрдВ рдЕрджрд▓рд╛-рдмрджрд▓реА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд▓рд╛рдкрддрд╛ рд╕рдВрднрд╛рд╡реНрдпрддрд╛ рджреНрд░рд╡реНрдпрдорд╛рди рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд┐рдП рдЧрдП, рдмрд┐рдЧреНрд░рд╛рдо рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдереЗред
рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдБ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ NgramModel рдореЗрдВ рдХреЛрдб рдХреБрдЫ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рдирд┐рдХрд╛рд▓ рд╕рдХрд╛ред
рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдЧ рд╣реИред
рдЕрдЧрд░ рд╣рдо рдЗрд╕ рд╕реЗрдЯрдЕрдк рдХреЛ рдорд╛рдирддреЗ рд╣реИрдВ:
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 рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ 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ред рдкрд╣рд▓реЗ рд╣реА рд╕реНрдирд╛рддрдХ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рдПрдирдЧреНрд░рд╛рдо рдореБрджреНрджрд╛ рдореМрдЬреВрдж рд╣реИ
рдЧреНрд░реАрд╖реНрдо рдЛрддреБ!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
2016 рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдФрд░ 'рдПрдирдЧреНрд░рд╛рдо рдореЙрдбрд▓' рдХреЗ рдореБрджреНрджреЗ рдореЗрдВ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред