рдПрдХ рднреЛрд▓рд╛ рдмреЗрдпрд╕ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ (рдЖрд░ рдХреЗ рд▓рд┐рдП рдХреЛрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд╕рдПрдордПрд╕ рд╕реНрдкреИрдо рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛

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



рдиреИрд╡реЗ рдмреЗрд╕ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░



рдХреБрдЫ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕реЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ D = {dq, d2, ..., dm} , рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ F = {f1, f2, ..., fq} рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓реЗрдмрд▓ рдХреЗ рд╕реЗрдЯ рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд┐рд╣реНрди рд╣реИред C = {c1, c2, ..., cr} ред рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ Fd = {fd1, fd2, ..., fdn} рдХреЗ рд╕реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ d рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд░реНрдЧ / рд▓реЗрдмрд▓ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ C рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рдЬрд┐рд╕ рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯреАрд░рд┐рдпрд░ рдЕрдзрд┐рдХрддрдо ( рдЕрдзрд┐рдХрддрдо рдкреЛрд╕реНрдЯреАрд░рд┐рдпрд░ рдкреНрд░рд╛рдпрд┐рдХрддрд╛ , рдПрдордПрдкреА) рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред





рднреЛрд▓рд╛ рдмреЗрдпрд░реНрд╕ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдореЙрдбрд▓ рджреЛ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдЗрддрдирд╛ рднреЛрд▓рд╛ рдмрдирд╛рддрд╛ рд╣реИ:
  1. рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдХреНрд░рдо рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛;
  2. рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╕рдВрдХреЗрддреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ: ред


рдЙрдкрд░реЛрдХреНрдд рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рд╕реВрддреНрд░реЛрдВ рдХреА рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред





рд╣рдо рдПрдХ рднреЛрд▓реЗ рдмреЗрдпрд╕ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреЗ рдПрдХ рдЧреНрд░рд╛рдлрд┐рдХ рдореЙрдбрд▓ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЪрд┐рддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рд╕реНрдкреИрдо рдХреНрд▓рд╛рд╕реАрдлрд╛рдпрд░


рдЕрдм рд╕рд╛рдорд╛рдиреНрдп рд╡рд░реНрдЧреАрдХрд░рдг рдХрд╛рд░реНрдп рд╕реЗ рд╣рдо рд╕реНрдкреИрдо рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдореЗрдВ рд▓рдЧреЗрдВрдЧреЗред рддреЛ, рд╕реЗрдЯ рдбреА рдореЗрдВ рдПрд╕рдПрдордПрд╕ рд╕рдВрджреЗрд╢ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рд╕реЗрдЯ C = {рд╣реИрдо, рд╕реНрдкреИрдо} рд╕реЗ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рд╕рдВрдХреЗрддреЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╢рдмреНрдж рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЙрдбрд▓ рдХреЗ рдмреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╣реИрдо рдПрд╕рдПрдордПрд╕ рд╕рдВрджреЗрд╢ рд╣реИрдВ

hi how are you
how old are you

рддрдм рд╣рдо рдПрдХ рдЯреЗрдмрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ

рд╢рдмреНрджрдЖрд╡реГрддреНрддрд┐
рд╣рд╛рдп1
рдХреИрд╕реЗ2
рдХрд░ рд░рд╣реЗ рд╣реИрдВ2
рдЖрдк2
рдкреБрд░рд╛рдирд╛1


рдЧреИрд░-рд╕реНрдкреИрдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдХреЗрд╡рд▓ 8 рд╢рдмреНрдж рд╣реЛрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣рдо рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдиреБрдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╢рдмреНрдж рдХреА рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рдмреНрдж "рдХреИрд╕реЗ" рдХреА рд╕рдВрднрд╛рд╡рдирд╛, рдмрд╢рд░реНрддреЗ рдХрд┐ рд╕рдВрджреЗрд╢ рд╕реНрдкреИрдо рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╣реЛрдЧрд╛:

рдкреА (рдлрд╛рдИ = "рдХреИрд╕реЗ" | рд╕реА = рд╣реИрдо) = 2/8 = 1/4

рдпрд╛ рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

, рдЬрд╣рд╛рдВ рдХреНрдпреВ рд╢рдмреНрджрдХреЛрд╖ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╢рдмреНрджреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд╣реИред

рд▓рд╛рдкреНрд▓рд╛рд╕ рдмреНрд▓рд░


рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдпрд╣ рдирд┐рдореНрди рд╕рдорд╕реНрдпрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рджреЛ рд╣реИрдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ, рдФрд░ рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрджреЗрд╢ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдпрд╛: " рд╣рд╛рдп рднрд╛рдИ ", рдФрд░, рдорд╛рди рд▓реАрдЬрд┐рдП, рдЧреИрд░-рд╕реНрдкреИрдо рдкреА (рд╣реИрдо) = 1/2 рдХреА рдПрдХ рдкреНрд░рд╛рдердорд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ред рд╣рдо рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ:

  1. рдкреА ("рд╣рд╛рдп" | рд╣реИрдо) = 1/8
  2. рдкреА ("рдмреНрд░реЛ" | рд╣реИрдо) = 0/8 = 0


рд╕реВрддреНрд░ 2.8 рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ рдФрд░ c = рд╣реИрдо рдХреЗ рд╕рд╛рде argmax рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ:


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдо рдпрд╛ рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ рдЕрдирдВрддрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╢реВрдиреНрдп рдкрд░ рд▓рдШреБрдЧрдгрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо рд▓рдШреБрдЧрдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╕ 0 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддред рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╢реВрдиреНрдп рд╣реЛрдЧреА, рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рд╛рднрдХрд╛рд░реА рд╣реИред

рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдкреНрд▓рд╛рд╕ рдпрд╛ рдХреЗ-рдПрдбрд┐рдЯрд┐рд╡ рд╕реНрдореВрдерд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдзреБрдВрдзрд▓рд╛ рдХрд░рдирд╛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрдкрд╖реНрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдзреБрдВрдзрд▓рд╛ рд╣реЛрдиреЗ рджреЗрддреА рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

, рдЬрд╣рд╛рдВ z> = 0 рдзрдмреНрдмрд╛ рдЧреБрдгрд╛рдВрдХ рд╣реИ, рдФрд░ q рдЙрди рдорд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЪрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХрдХреНрд╖рд╛ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ; рдФрд░ q рд╢рдмреНрджреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдХреЛ рдкрдврд╝рд╛рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЧрдИ рдереАред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реИрдо рдФрд░ рд╕реНрдкреИрдо рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп, рд╣рдореЗрдВ 10 рдЕрджреНрд╡рд┐рддреАрдп рд╢рдмреНрдж рдорд┐рд▓реЗ, рдлрд┐рд░ P ("hi" | рд╣реИрдо) = (1 + 1) / (8 + 1 * 10) = 2/18 = 1/9 рдПрдХ рдзреБрдВрдзрд▓рд╛ рдЧреБрдгрд╛рдВрдХ z рдХреЗ рд╕рд╛рде = 1. рдФрд░ рд╢реВрдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛ рдРрд╕реА рд╣реЛрддреА рд╣реИ: P ("рдмреНрд░реЛ" | рд╣реИрдо) = (0 + 1) / (8 + 1 * 10) = 1/18 ред

рдмрд╛рдпреЗрд╕рд┐рдпрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рд╡рд┐рдзрд┐ рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╡рд┐рддрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ z рдХреЗ рджреНрд╡рд╛рд░рд╛ рдбрд┐рд░рд┐рдЪрд▓реЗрдЯ рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯреЗрдб рдбрд┐рд╕реНрдЯреНрд░рд┐рдмреНрдпреВрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдкреАрдЫреЗ рдХреЗ рд╡рд┐рддрд░рдг рдХреА рдЧрдгрд┐рддреАрдп рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

рдкреНрд░рдпреЛрдЧ рдФрд░ рдХреЛрдб


рдореИрдВ рдХреИрдореНрдкрд┐рдирд╛рд╕ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ 4827 рд╕рд╛рдорд╛рдиреНрдп рдПрд╕рдПрдордПрд╕ рд╕рдВрджреЗрд╢ (рд╣реИрдо) рдФрд░ 747 рд╕реНрдкреИрдо рд╕рдВрджреЗрд╢ рд╣реИрдВред

рдореИрдВрдиреЗ рдХреЛрдИ рдЧрдВрднреАрд░ рдкрд╛рда рдкреВрд░реНрд╡-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯреЗрдорд┐рдВрдЧ , рдмрд╕ рдХреБрдЫ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди:


рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛрдб
 PreprocessSentence <- function(s) { # Cut and make some preprocessing with input sentence words <- strsplit(gsub(pattern="[[:digit:]]+", replacement="1", x=tolower(s)), '[[:punct:][:blank:]]+') return(words) } LoadData <- function(fileName = "./Data/Spam/SMSSpamCollection") { # Read data from text file and makes simple preprocessing: # to lower case -> replace all digit strings with 1 -> split with punctuation and blank characters con <- file(fileName,"rt") lines <- readLines(con) close(con) df <- data.frame(lab = rep(NA, length(lines)), data = rep(NA, length(lines))) for(i in 1:length(lines)) { tmp <- unlist(strsplit(lines[i], '\t', fixed = T)) df$lab[i] <- tmp[1] df$data[i] <- PreprocessSentence(tmp[2]) } return(df) } 



рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреБрдХреНрдд рдЕрдиреБрдкрд╛рдд рдореЗрдВ рдбреЗрдЯрд╛ рд╕рд░рдгреА рдХрд╛ рдПрдХ рд╡рд┐рднрд╛рдЬрди рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг, рд╕рддреНрдпрд╛рдкрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ:

рдкреГрдердХреНрдХрд░рдг рддрд┐рдерд┐
 CreateDataSet <- function(dataSet, proportions = c(0.6, 0.2, 0.2)) { # Creates a list with indices of train, validation and test sets proportions <- proportions/sum(proportions) hamIdx <- which(df$lab == "ham") nham <- length(hamIdx) spamIdx <- which(df$lab == "spam") nspam <- length(spamIdx) hamTrainIdx <- sample(hamIdx, floor(proportions[1]*nham)) hamIdx <- setdiff(hamIdx, hamTrainIdx) spamTrainIdx <- sample(spamIdx, floor(proportions[1]*nspam)) spamIdx <- setdiff(spamIdx, spamTrainIdx) hamValidationIdx <- sample(hamIdx, floor(proportions[2]*nham)) hamIdx <- setdiff(hamIdx, hamValidationIdx) spamValidationIdx <- sample(spamIdx, floor(proportions[2]*nspam)) spamIdx <- setdiff(spamIdx, spamValidationIdx) ds <- list( train = sample(union(hamTrainIdx, spamTrainIdx)), validation = sample(union(hamValidationIdx, spamValidationIdx)), test = sample(union(hamIdx, spamIdx)) ) return(ds) } 



рддрдм рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдРрд░реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдореЙрдбрд▓ рдирд┐рд░реНрдорд╛рдг
 CreateModel <- function(data, laplaceFactor = 0) { # creates naive bayes spam classifier based on data m <- list(laplaceFactor = laplaceFactor) m[["total"]] <- length(data$lab) m[["ham"]] <- list() m[["spam"]] <- list() m[["hamLabelCount"]] <- sum(data$lab == "ham") m[["spamLabelCount"]] <- sum(data$lab == "spam") m[["hamWordCount"]] <- 0 m[["spamWordCount"]] <- 0 uniqueWordSet <- c() for(i in 1:length(data$lab)) { sentence <- unlist(data$data[i]) uniqueWordSet <- union(uniqueWordSet, sentence) for(j in 1:length(sentence)) { if(data$lab[i] == "ham") { if(is.null(m$ham[[sentence[j]]])) { m$ham[[sentence[j]]] <- 1 } else { m$ham[[sentence[j]]] <- m$ham[[sentence[j]]] + 1 } m[["hamWordCount"]] <- m[["hamWordCount"]] + 1 } else if(data$lab[i] == "spam") { if(is.null(m$spam[[sentence[j]]])) { m$spam[[sentence[j]]] <- 1 } else { m$spam[[sentence[j]]] <- m$spam[[sentence[j]]] + 1 } m[["spamWordCount"]] <- m[["spamWordCount"]] + 1 } } } m[["uniqueWordCount"]] <- length(uniqueWordSet) return(m) } 



рдореЙрдбрд▓ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ:

рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдмрд╛рдж
 ClassifySentense <- function(s, model, preprocess = T) { # calculate class of the input sentence based on the model GetCount <- function(w, ls) { if(is.null(ls[[w]])) { return(0) } return(ls[[w]]) } words <- unlist(s) if(preprocess) { words <- unlist(PreprocessSentence(s)) } ham <- log(model$hamLabelCount/(model$hamLabelCount + model$spamLabelCount)) spam <- log(model$spamLabelCount/(model$hamLabelCount + model$spamLabelCount)) for(i in 1:length(words)) { ham <- ham + log((GetCount(words[i], model$ham) + model$laplaceFactor) /(model$hamWordCount + model$laplaceFactor*model$uniqueWordCount)) spam <- spam + log((GetCount(words[i], model$spam) + model$laplaceFactor) /(model$spamWordCount + model$laplaceFactor*model$uniqueWordCount)) } if(ham >= spam) { return("ham") } return("spam") } 



рд╕реЗрдЯ рдкрд░ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдореЙрдбрд▓ рдкрд░реАрдХреНрд╖рдг
 TestModel <- function(data, model) { # calculate percentage of errors errors <- 0 for(i in 1:length(data$lab)) { predictedLabel <- ClassifySentense(data$data[i], model, preprocess = F) if(predictedLabel != data$lab[i]) { errors <- errors + 1 } } return(errors/length(data$lab)) } 



рдЗрд╖реНрдЯрддрдо рдзреБрдВрдзрд▓рд╛ рдЧреБрдгрд╛рдВрдХ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реА рд╕реЗрдЯ рдкрд░ рдХреНрд░реЙрд╕-рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдХреНрд░реЙрд╕ рд╕рддреНрдпрд╛рдкрди рдореЙрдбрд▓
 CrossValidation <- function(trainData, validationData, laplaceFactorValues, showLog = F) { cvErrors <- rep(NA, length(laplaceFactorValues)) for(i in 1:length(laplaceFactorValues)) { model <- CreateModel(trainData, laplaceFactorValues[i]) cvErrors[i] <- TestModel(validationData, model) if(showLog) { print(paste(laplaceFactorValues[i], ": error is ", cvErrors[i], sep="")) } } return(cvErrors) } 



рдирд┐рдореНрди рдХреЛрдб рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, 0 рд╕реЗ 10 рддрдХ рдмреНрд▓рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдмрдирд╛рддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдЕрдкреНрд░рдпреБрдХреНрдд рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯ рдкрд░ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдмреНрд▓рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдХреНрд░реЙрд╕-рд╕рддреНрдпрд╛рдкрди рд╕реЗрдЯ рдкрд░ рддреНрд░реБрдЯрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдПрдХ рдЧреНрд░рд╛рдл рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯ рдкрд░ рдЕрдВрддрд┐рдо рддреНрд░реБрдЯрд┐ рд╕реНрддрд░:

 rm(list = ls()) source("./Spam/spam.R") set.seed(14880) fileName <- "./Data/Spam/SMSSpamCollection" df <- LoadData() ds <- CreateDataSet(df, proportions = c(0.7, 0.2, 0.1)) laplaceFactorValues <- 1:10 cvErrors <- CrossValidation(df[ds$train, ], df[ds$validation, ], 0:10, showLog = T) bestLaplaceFactor <- laplaceFactorValues[which(cvErrors == min(cvErrors))] model <- CreateModel(data=df[ds$train, ], laplaceFactor=bestLaplaceFactor) testResult <- TestModel(df[ds$test, ], model) plot(cvErrors, type="l", col="blue", xlab="Laplace Factor", ylab="Error Value", ylim=c(0, max(cvErrors))) title("Cross validation and test error value") abline(h=testResult, col="red") legend(bestLaplaceFactor, max(cvErrors), c("cross validation values", "test value level"), cex=0.8, col=c("blue", "red"), lty=1) 




рд╕рднреА рдХреЛрдб github рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╡рд┐рдзрд┐ рд╕рд░рд▓ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рднреА рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рд╣реИ, рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯ рдкрд░ рддреНрд░реБрдЯрд┐ рд╕реВрдЪрдХ (рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рдд) рдХреЗрд╡рд▓ 2.32% рд╣реИ ред рдЖрдк рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдкрд░ рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рдЖрдкрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ 1 рд╕реЗ 5 рддрдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рд░реЗрдЯрд┐рдВрдЧ рджрд░реНрдЬ рдХреА рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ; рдлрд┐рд░ рдЖрдк рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд░реЗрдЯрд┐рдВрдЧ рд░реИрдВрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/In184574/


All Articles