рднреНрд░рд╛рдВрддрд┐рдкреВрд░реНрдг рдЬрдирд░реЗрдЯрд░: рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдЧреНрд░рдВрде рдмрдирд╛рдПрдВ

рд╣рд╛рдп, рд╣реИрдмреНрд░ред

рдпрд╣ рд▓реЗрдЦ "рд╢реБрдХреНрд░рд╡рд╛рд░" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╣реЛрдЧрд╛, рдЖрдЬ рд╣рдо рдПрдирдПрд▓рдкреА рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред рдПрдирдПрд▓рдкреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдХрд┐рддрд╛рдмреЗрдВ рдЕрдВрдбрд░рдкрд╛рд╕ рдореЗрдВ рдмреЗрдЪреА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдХрд┐ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд╛рда рдкреАрдврд╝реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ, рд░реВрд╕реА рдпрд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕реЗ, C ++ рддрдХ рдЧреНрд░рдВрдереЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдЖрдк рд╢рд╛рдпрдж рддрд╕реНрд╡реАрд░ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХрдЯ рдХреЗ рддрд╣рдд рд╣реИрдВред

рдбреЗрдЯрд╛ рдХреА рддреИрдпрд╛рд░реА


рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рддрдерд╛рдХрдерд┐рдд рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ (RNN)ред рдпрд╣ рдиреЗрдЯрд╡рд░реНрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдореЗрдВ рдореЗрдореЛрд░реА рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рд╣рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдорд╛рдирд╡ рд╕реНрдореГрддрд┐ рдХреЗ рдХрд░реАрдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рднреА рд╣рд░ рд╡рд┐рдЪрд╛рд░ "рдЦрд░реЛрдВрдЪ" рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо LSTM (рд▓реЙрдиреНрдЧ рд╢реЙрд░реНрдЯ-рдЯрд░реНрдо рдореЗрдореЛрд░реА) рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЗрд░рд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред



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

input: output: ""
input: : output: ""
input: : output:""
input: : output: ""
input: : output: "".

рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдирдкреБрдЯ рдкрд░ рдкрд╛рда рдХреЗ рдЯреБрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╡рд░реНрдг рдЬреЛ рдЗрд╕реЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рд╣реИ, рдХреЗрд╡рд▓ рд╢рдмреНрджреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдкреВрд░реЗ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдирдкреБрдЯ рдкрд░ рд╢рдмреНрджреЛрдВ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдЦреНрдпрд╛ рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИред

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

рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг


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

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ 5 рдорд┐рдирдЯ:

рдЕрдм рддрдХ, рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрддреНрд░реЛрдВ рдХреЗ рдХреБрдЫ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рд╕рдВрдпреЛрдЬрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

. . . ┬л

15 рдорд┐рдирдЯ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг:

рдкрд░рд┐рдгрд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╣рддрд░ рд╣реИ:



1 рдШрдВрдЯреЗ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг:

┬л ┬╗ тАФ ┬л ┬╗ ┬╗ тАФ

рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА рдЧреНрд░рдВрде рдмрд┐рдирд╛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдФрд░ рдмрд┐рдирд╛ рдкреВрдВрдЬреА рдкрддреНрд░реЛрдВ рдХреЗ рдирд┐рдХрд▓реЗ, рд╢рд╛рдпрдж utf-8 рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрд╣ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред рдХреЗрд╡рд▓ рдкреНрд░рддреАрдХреЛрдВ рдХреЗ рдХреЛрдбреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдпрд╛рдж рдХрд░рдХреЗ, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ" рд░реВрд╕реА рд╢рдмреНрдж рд╕реАрдЦрддрд╛ рд╣реИ, рдФрд░ рдХрд╛рдлреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╛рда рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдХреЛрдИ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рддрдереНрдп рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд╛рда рд╢реИрд▓реА рдХреЛ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреБрдЫ рдХрд╛рдиреВрди рдХреЗ рдкрд╛рда рдХреЛ рд╢рд┐рдХреНрд╖рдг рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рд╕рдордп 5 рдорд┐рдирдЯред

"" , , , , , , , ,

рдФрд░ рдпрд╣рд╛рдВ, рджрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЪрд┐рдХрд┐рддреНрд╕рд╛ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдирдкреБрдЯ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рд╕рдордп 5 рдорд┐рдирдЯред



, ,

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

рдЗрд╕ рддрд░рд╣ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдордЬреЗрджрд╛рд░ рдЙрджрд╛рд╣рд░рдг рдирд╛рдо рдХреА рдкреАрдврд╝реА рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреБрд░реБрд╖ рдФрд░ рдорд╣рд┐рд▓рд╛ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЕрдкрд▓реЛрдб рдХрд░рдХреЗ, рдореБрдЭреЗ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдирдП рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓реЗ рдЬреЛ рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рди рдХрдерд╛ рдЙрдкрдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реЛрдВрдЧреЗ: рд░рд╛рд▓рд╛рд░, рд▓рд╛рдЖ, рдЖрд░рд┐рдпрд╛, рдЕрд░реЗрд░рд╛, рдПрд▓рд┐рдпрд╛, рдирд┐рдирд╛рд░рди, рд╡рд╛рдпреБред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ Efremov рдХреА рд╢реИрд▓реА рдФрд░ рдПрдВрдбреНрд░реЛрдореЗрдбрд╛ рдиреЗрдмреБрд▓рд╛ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ ...

рд╕реА ++


рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдФрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдЬреИрд╕рд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдЪрд░рдг рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдерд╛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ C ++ рд╕реНрд░реЛрдд рд▓рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдкрд░рд┐рдгрд╛рдо рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддрд╛ рд╣реИред

5 рдорд┐рдирдЯ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг

рдЕрд░реЗ, рдпрд╣ рд▓рдЧрднрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реА ++ рд╣реИред

 if ( snd_pcm_state_channels = 0 ) { errortext_ = "rtapialsa::probedeviceopen: esror stream_.buffer stream!"; errortext_ = errorstream_.str(); goto unlock; } if ( stream_.mode == input && stream_.mode == output || false; if ( stream_.state == stream_stopped ) { for ( unsigned int i=0; i<stream_.nuserbuffer[i] ) { for (j=0; j<info.channels; } } } 

30 рдорд┐рдирдЯ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг

 void maxirecorder::stopstream() { for (int i = 0; i < ainchannels; i++ ) { int input=(stream, null; conternallock( pthread_cond_wate); // this should not ported to the device is a structure are is and the stream the buffer of the interleaved as and the probe the arauliored format for the the stream os and the software and the supported of the is so aa is set the directsound of allocates the reset and real the read the setup the buffer // this is the setup to the the devices. // asio will open the supported by the supported buffer are asioned structure. // this should not have to setup the counting and the proper in the position we mast it alw the aftware configuration. // this is the the stream and probe the supported be audio for sched/ond changed to this the sample rate it in the counting the fres // mecorend. windevoppart( null, 0, &phase ); possint=>buffersize( 1, bufferlist); } } } ///********************************************* void maxirecorder::abortdevice( device ) { if (cout << aindeff( thread_cont_start); for (int i = 0; i < sample_rates[0]) { if (count == int) { std::cout << "checksing of convernion allocation handler (" << device << ")."; errortext_ = errorstream_.str(); return failure; } } } if ( stream_.userbuffer[i] ) { errortext_ = "rtapicore::probedeviceopen: system error (" << geterrorcode( result ) << ") getting stream configuration info state."; error( rterror::warning ); return; } if ( stream_.mode == output || stream_.mode == duplex ) { callbackinfo *info = (const char *) callback( stream_.userbuffer[1], stream_.convertinfo[0] ); return info; } // setup buffer callback for conversion on do any the supported be audio bet that al alinums be of support of the supported buffer // the buffer size a stream and buffers. info.name = dsdevices[ device ]; return 0; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреВрд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо "рд╕реАрдЦрд╛" рд╣реИред рдЙрд╕реА рд╕рдордп, рдЗрд╕рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ "рдорд╛рдирд╡реАрдп" рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛, рдХреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдбрд╛рд▓ рджреА, рдФрд░ рд╡рд╣ рд╕рдмред рдореИрдВ рдРрд╕реА рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ ... рдмреЗрд╢рдХ, рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рдВрдХрд▓рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдиреЗ "рдЦреБрдж" рдХреЛ рдХреЛрд╖реНрдардХ рдФрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдбрд╛рд▓рдирд╛ рднреА рд╕реАрдЦрд╛ред

рдмреЗрд╢рдХ, рдЗрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рдд рдирд╣реАрдВ рд╣реИ - рдЕрд░реНрде , рдФрд░ рдЗрд╕рд▓рд┐рдП рдЕрд╕рд▓реА рджрд┐рдЦрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╡реЗ рдПрдХ рд╕рдкрдиреЗ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗ, рдпрд╛ рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╕реНрде рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗред рдлрд┐рд░ рднреА, рдкрд░рд┐рдгрд╛рдо рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИрдВред рдФрд░ рд╢рд╛рдпрдж рд╡рд┐рднрд┐рдиреНрди рдЧреНрд░рдВрдереЛрдВ рдХреА рдкреАрдврд╝реА рдХрд╛ рдЧрд╣рди рдЕрдзреНрдпрдпрди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реЛрдЧрд┐рдпреЛрдВ рдХреА рдХреБрдЫ рдорд╛рдирд╕рд┐рдХ рдмреАрдорд╛рд░рд┐рдпреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рд╡реИрд╕реЗ, рдЬреИрд╕рд╛ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдРрд╕реА рдорд╛рдирд╕рд┐рдХ рдмреАрдорд╛рд░реА рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рд╡реНрдпрд╛рдХрд░рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд░реНрдерд╣реАрди рдкрд╛рда ( рд╕реНрдХрд┐рдЬрд╝реЛрдлрд╝рд╛рд╕рд┐рдпрд╛ ) рдмреЛрд▓рддрд╛ рд╣реИред

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


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

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

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреМрд╢рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдкрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг:
- рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЙрдбрд▓ рдФрд░ рдкрд╛рда рдкреАрдврд╝реА:
рдЕрдЬрдЧрд░ред \ _ keras_textgen.py --text = text_habr.txt --epochs = 10 --out_len = 4000
- рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдкрд╛рда рдкреАрдврд╝реА:
рдЕрдЬрдЧрд░ред \ _ keras_textgen.py --text = text_habr.txt --epochs = 10 --out_len = 4000 --generate

keras_textgen.py
 import os # Force CPU os.environ["CUDA_VISIBLE_DEVICES"] = "-1" os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # 0 = all messages are logged, 3 - INFO, WARNING, and ERROR messages are not printed from keras.callbacks import LambdaCallback from keras.models import Sequential from keras.layers import Dense, Dropout, Embedding, LSTM, TimeDistributed from keras.optimizers import RMSprop from keras.utils.data_utils import get_file import keras from collections import Counter import pickle import numpy as np import random import sys import time import io import re import argparse # Transforms text to vectors of integer numbers representing in text tokens and back. Handles word and character level tokenization. class Vectorizer: def __init__(self, text, word_tokens, pristine_input, pristine_output): self.word_tokens = word_tokens self._pristine_input = pristine_input self._pristine_output = pristine_output tokens = self._tokenize(text) # print('corpus length:', len(tokens)) token_counts = Counter(tokens) # Sort so most common tokens come first in our vocabulary tokens = [x[0] for x in token_counts.most_common()] self._token_indices = {x: i for i, x in enumerate(tokens)} self._indices_token = {i: x for i, x in enumerate(tokens)} self.vocab_size = len(tokens) print('Vocab size:', self.vocab_size) def _tokenize(self, text): if not self._pristine_input: text = text.lower() if self.word_tokens: if self._pristine_input: return text.split() return Vectorizer.word_tokenize(text) return text def _detokenize(self, tokens): if self.word_tokens: if self._pristine_output: return ' '.join(tokens) return Vectorizer.word_detokenize(tokens) return ''.join(tokens) def vectorize(self, text): """Transforms text to a vector of integers""" tokens = self._tokenize(text) indices = [] for token in tokens: if token in self._token_indices: indices.append(self._token_indices[token]) else: print('Ignoring unrecognized token:', token) return np.array(indices, dtype=np.int32) def unvectorize(self, vector): """Transforms a vector of integers back to text""" tokens = [self._indices_token[index] for index in vector] return self._detokenize(tokens) @staticmethod def word_detokenize(tokens): # A heuristic attempt to undo the Penn Treebank tokenization above. Pass the # --pristine-output flag if no attempt at detokenizing is desired. regexes = [ # Newlines (re.compile(r'[ ]?\\n[ ]?'), r'\n'), # Contractions (re.compile(r"\b(can)\s(not)\b"), r'\1\2'), (re.compile(r"\b(d)\s('ye)\b"), r'\1\2'), (re.compile(r"\b(gim)\s(me)\b"), r'\1\2'), (re.compile(r"\b(gon)\s(na)\b"), r'\1\2'), (re.compile(r"\b(got)\s(ta)\b"), r'\1\2'), (re.compile(r"\b(lem)\s(me)\b"), r'\1\2'), (re.compile(r"\b(mor)\s('n)\b"), r'\1\2'), (re.compile(r"\b(wan)\s(na)\b"), r'\1\2'), # Ending quotes (re.compile(r"([^' ]) ('ll|'re|'ve|n't)\b"), r"\1\2"), (re.compile(r"([^' ]) ('s|'m|'d)\b"), r"\1\2"), (re.compile(r'[ ]?тАЭ'), r'"'), # Double dashes (re.compile(r'[ ]?--[ ]?'), r'--'), # Parens and brackets (re.compile(r'([\[\(\{\<]) '), r'\1'), (re.compile(r' ([\]\)\}\>])'), r'\1'), (re.compile(r'([\]\)\}\>]) ([:;,.])'), r'\1\2'), # Punctuation (re.compile(r"([^']) ' "), r"\1' "), (re.compile(r' ([?!\.])'), r'\1'), (re.compile(r'([^\.])\s(\.)([\]\)}>"\']*)\s*$'), r'\1\2\3'), (re.compile(r'([#$]) '), r'\1'), (re.compile(r' ([;%:,])'), r'\1'), # Starting quotes (re.compile(r'(тАЬ)[ ]?'), r'"') ] text = ' '.join(tokens) for regexp, substitution in regexes: text = regexp.sub(substitution, text) return text.strip() @staticmethod def word_tokenize(text): # Basic word tokenizer based on the Penn Treebank tokenization script, but # setup to handle multiple sentences. Newline aware, ie newlines are # replaced with a specific token. You may want to consider using a more robust # tokenizer as a preprocessing step, and using the --pristine-input flag. regexes = [ # Starting quotes (re.compile(r'(\s)"'), r'\1 тАЬ '), (re.compile(r'([ (\[{<])"'), r'\1 тАЬ '), # Punctuation (re.compile(r'([:,])([^\d])'), r' \1 \2'), (re.compile(r'([:,])$'), r' \1 '), (re.compile(r'\.\.\.'), r' ... '), (re.compile(r'([;@#$%&])'), r' \1 '), (re.compile(r'([?!\.])'), r' \1 '), (re.compile(r"([^'])' "), r"\1 ' "), # Parens and brackets (re.compile(r'([\]\[\(\)\{\}\<\>])'), r' \1 '), # Double dashes (re.compile(r'--'), r' -- '), # Ending quotes (re.compile(r'"'), r' тАЭ '), (re.compile(r"([^' ])('s|'m|'d) "), r"\1 \2 "), (re.compile(r"([^' ])('ll|'re|'ve|n't) "), r"\1 \2 "), # Contractions (re.compile(r"\b(can)(not)\b"), r' \1 \2 '), (re.compile(r"\b(d)('ye)\b"), r' \1 \2 '), (re.compile(r"\b(gim)(me)\b"), r' \1 \2 '), (re.compile(r"\b(gon)(na)\b"), r' \1 \2 '), (re.compile(r"\b(got)(ta)\b"), r' \1 \2 '), (re.compile(r"\b(lem)(me)\b"), r' \1 \2 '), (re.compile(r"\b(mor)('n)\b"), r' \1 \2 '), (re.compile(r"\b(wan)(na)\b"), r' \1 \2 '), # Newlines (re.compile(r'\n'), r' \\n ') ] text = " " + text + " " for regexp, substitution in regexes: text = regexp.sub(substitution, text) return text.split() def _create_sequences(vector, seq_length, seq_step): # Take strips of our vector at seq_step intervals up to our seq_length # and cut those strips into seq_length sequences passes = [] for offset in range(0, seq_length, seq_step): pass_samples = vector[offset:] num_pass_samples = pass_samples.size // seq_length pass_samples = np.resize(pass_samples, (num_pass_samples, seq_length)) passes.append(pass_samples) # Stack our sequences together. This will technically leave a few "breaks" # in our sequence chain where we've looped over are entire dataset and # return to the start, but with large datasets this should be neglegable return np.concatenate(passes) def shape_for_stateful_rnn(data, batch_size, seq_length, seq_step): """ Reformat our data vector into input and target sequences to feed into our RNN. Tricky with stateful RNNs. """ # Our target sequences are simply one timestep ahead of our input sequences. # eg with an input vector "wherefore"... # targets: herefore # predicts ^ ^ ^ ^ ^ ^ ^ ^ # inputs: wherefor inputs = data[:-1] targets = data[1:] # We split our long vectors into semi-redundant seq_length sequences inputs = _create_sequences(inputs, seq_length, seq_step) targets = _create_sequences(targets, seq_length, seq_step) # Make sure our sequences line up across batches for stateful RNNs inputs = _batch_sort_for_stateful_rnn(inputs, batch_size) targets = _batch_sort_for_stateful_rnn(targets, batch_size) # Our target data needs an extra axis to work with the sparse categorical # crossentropy loss function targets = targets[:, :, np.newaxis] return inputs, targets def _batch_sort_for_stateful_rnn(sequences, batch_size): # Now the tricky part, we need to reformat our data so the first # sequence in the nth batch picks up exactly where the first sequence # in the (n - 1)th batch left off, as the RNN cell state will not be # reset between batches in the stateful model. num_batches = sequences.shape[0] // batch_size num_samples = num_batches * batch_size reshuffled = np.zeros((num_samples, sequences.shape[1]), dtype=np.int32) for batch_index in range(batch_size): # Take a slice of num_batches consecutive samples slice_start = batch_index * num_batches slice_end = slice_start + num_batches index_slice = sequences[slice_start:slice_end, :] # Spread it across each of our batches in the same index position reshuffled[batch_index::batch_size, :] = index_slice return reshuffled def load_data(data_file, word_tokens, pristine_input, pristine_output, batch_size, seq_length=50, seq_step=25): global vectorizer try: with open(data_file, encoding='utf-8') as input_file: text = input_file.read() except FileNotFoundError: print("No input.txt in data_dir") sys.exit(1) skip_validate = True # try: # with open(os.path.join(data_dir, 'validate.txt'), encoding='utf-8') as validate_file: # text_val = validate_file.read() # skip_validate = False # except FileNotFoundError: # pass # Validation text optional # Find some good default seed string in our source text. # self.seeds = find_random_seeds(text) # Include our validation texts with our vectorizer all_text = text if skip_validate else '\n'.join([text, text_val]) vectorizer = Vectorizer(all_text, word_tokens, pristine_input, pristine_output) data = vectorizer.vectorize(text) x, y = shape_for_stateful_rnn(data, batch_size, seq_length, seq_step) print("Word_tokens:", word_tokens) print('x.shape:', x.shape) print('y.shape:', y.shape) if skip_validate: return x, y, None, None, vectorizer data_val = vectorizer.vectorize(text_val) x_val, y_val = shape_for_stateful_rnn(data_val, batch_size, seq_length, seq_step) print('x_val.shape:', x_val.shape) print('y_val.shape:', y_val.shape) return x, y, x_val, y_val, vectorizer def make_model(batch_size, vocab_size, embedding_size=64, rnn_size=128, num_layers=2): # Conversely if your data is large (more than about 2MB), feel confident to increase rnn_size and train a bigger model (see details of training below). # It will work significantly better. For example with 6MB you can easily go up to rnn_size 300 or even more. model = Sequential() model.add(Embedding(vocab_size, embedding_size, batch_input_shape=(batch_size, None))) for layer in range(num_layers): model.add(LSTM(rnn_size, stateful=True, return_sequences=True)) model.add(Dropout(0.2)) model.add(TimeDistributed(Dense(vocab_size, activation='softmax'))) model.compile(loss='sparse_categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) return model def train(model, x, y, x_val, y_val, batch_size, num_epochs): print('Training...') # print("Shape:", x.shape, y.shape) # print(num_epochs, batch_size, x[0], y[0]) train_start = time.time() validation_data = (x_val, y_val) if (x_val is not None) else None callbacks = None model.fit(x, y, validation_data=validation_data, batch_size=batch_size, shuffle=False, epochs=num_epochs, verbose=1, callbacks=callbacks) # self.update_sample_model_weights() train_end = time.time() print('Training time', train_end - train_start) def sample_preds(preds, temperature=1.0): """ Samples an unnormalized array of probabilities. Use temperature to flatten/amplify the probabilities. """ preds = np.asarray(preds).astype(np.float64) # Add a tiny positive number to avoid invalid log(0) preds += np.finfo(np.float64).tiny preds = np.log(preds) / temperature exp_preds = np.exp(preds) preds = exp_preds / np.sum(exp_preds) probas = np.random.multinomial(1, preds, 1) return np.argmax(probas) def generate(model, vectorizer, seed, length=100, diversity=0.5): seed_vector = vectorizer.vectorize(seed) # Feed in seed string print("Seed:", seed, end=' ' if vectorizer.word_tokens else '') model.reset_states() preds = None for char_index in np.nditer(seed_vector): preds = model.predict(np.array([[char_index]]), verbose=0) sampled_indices = [] # np.array([], dtype=np.int32) # Sample the model one token at a time for i in range(length): char_index = 0 if preds is not None: char_index = sample_preds(preds[0][0], diversity) sampled_indices.append(char_index) # = np.append(sampled_indices, char_index) preds = model.predict(np.array([[char_index]]), verbose=0) sample = vectorizer.unvectorize(sampled_indices) return sample if __name__ == "__main__": batch_size = 32 # Batch size for each train num_epochs = 10 # Number of epochs of training out_len = 200 # Length of the output phrase seq_length = 50 # 50 # Determines, how long phrases will be used for training use_words = False # Use words instead of characters (slower speed, bigger vocabulary) data_file = "text_habr.txt" # Source text file seed = "A" # Initial symbol of the text parser = argparse.ArgumentParser() parser.add_argument("-t", "--text", action="store", required=False, dest="text", help="Input text file") parser.add_argument("-e", "--epochs", action="store", required=False, dest="epochs", help="Number of training epochs") parser.add_argument("-p", "--phrase_len", action="store", required=False, dest="phrase_len", help="Phrase analyse length") parser.add_argument("-o", "--out_len", action="store", required=False, dest="out_len", help="Output text length") parser.add_argument("-g", "--generate", action="store_true", required=False, dest='generate', help="Generate output only without training") args = parser.parse_args() if args.text is not None: data_file = args.text if args.epochs is not None: num_epochs = int(args.epochs) if args.phrase_len is not None: seq_length = int(args.phrase_len) if args.out_len is not None: out_len = int(args.out_len) # Load text data pristine_input, pristine_output = False, False x, y, x_val, y_val, vectorizer = load_data(data_file, use_words, pristine_input, pristine_output, batch_size, seq_length) model_file = data_file.lower().replace('.txt', '.h5') if args.generate is False: # Make model model = make_model(batch_size, vectorizer.vocab_size) # Train model train(model, x, y, x_val, y_val, batch_size, num_epochs) # Save model to file model.save(filepath=model_file) model = keras.models.load_model(model_file) predict_model = make_model(1, vectorizer.vocab_size) predict_model.set_weights(model.get_weights()) # Generate phrases res = generate(predict_model, vectorizer, seed=seed, length=out_len) print(res) 


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

рдпрджрд┐ рдХреЛрдИ рд╡рд┐рд╖рдп рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде RNN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг http://karpathy.imtqy.com/2015/05/21/rnn-effectiveness/ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

xxx

рдХреБрдЫ рдХреЗ рд▓рд┐рдП, рдХреБрдХреАрдЬрд╝ рдореЗрдВ рдкрдХрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП - рдПрдХ рдмреНрд░реЗрдб рдХреЛрд░реНрдЯ рдореЗрдВ рд╢реБрднрдХрд╛рдордирд╛рдПрдВред
рдФрд░ рд╢рд╛рдо рдХреЛ рддрдордХреА рд╕реЗ
рдПрдХ рдореЛрдордмрддреНрддреА рдХреЗ рдиреАрдЪреЗ рдПрдХ рдкрд╣рд╛рдбрд╝ рд▓реЗ рд▓реЛред

xxx

рдЬрд▓реНрдж рд╣реА рдмреЗрдЯреЗ рдЯреНрд░рд╛рдо рдореЗрдВ рдкреЗрдЯрд╛рдЪрд╛рд╕ рдореЗрдВ рдореЛрдирд╕ рдХрд░рддреЗ рд╣реИрдВ
рдЕрджреГрд╢реНрдп рдкреНрд░рдХрд╛рд╢ рд╕реЗ рдЧрдВрдз рдЖрддреА рд╣реИ
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИ
рдЖрдк рдХрд┐рд╕реА рдЕрдЬреНрдЮрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреАрдорд╛рд░ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдХрдВрдкрд┐рдд рдУрдЧреЛрд░рд╛ рдореЗрдВ рджрд┐рд▓ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
рдпрд╣ рдЗрддрдирд╛ рдкреБрд░рд╛рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдирд╛рдЬ рдЦрд╛ рд░рд╣рд╛ рд╣реИ,
рдореИрдВ рдЪреЛрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЗрдВрдж рдХреЛ рдкреБрд▓ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдбреЛрдмрд╛ рдореЗрдВ рдбрд╛рд░рд┐рдирд╛,
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣рд╛рде рдкрд░ рдмрд░реНрдл рдХреЗ рджрд┐рд▓ рдореЗрдВ рд╕реБрдирд╛ред
рд╣рдорд╛рд░рд╛ рдЧрд╛рдирд╛ рдХрд┐рддрдирд╛ рд╢реНрд╡реЗрдд рд╣реИ
рдореИрдВрдиреЗ рдЕрдпрд╕реНрдХ рдЬрд╛рдирд╡рд░ рдХрд╛ рдЦрдВрдбрди рдХрд┐рдпрд╛ред

xxx

рдПрдХ рдЬрд╛рджреВ рдХреЗ рд╕рд╛рде рдкрд╢реБ рдЪрд┐рдХрд┐рддреНрд╕рдХ рдХреНрд░реВрд╕ рдкрд░ рдЪрдврд╝рдирд╛
рдФрд░ рднреВрд▓ рдХреЗ рддрд╣рдд рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ред
рдФрд░ рдЖрдк, рдХреНрдпреВрдмрд╛ рдХреА рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛
рдЗрд╕рдореЗрдВ рдЪрдордХреЗрдВред
рдУ рдЬрдХрд╛рддреЛ рдореЗрдВ рдордЬрд╝рд╛ рдЖрддрд╛ рд╣реИ
рджреВрдз рдХреА рдЙрдбрд╝рд╛рди рдХреЗ рд╕рд╛рдеред

рдУрд╣ рддреБрдо рдПрдХ рдЧреБрд▓рд╛рдм рд╣реЛ, рдкреНрд░рдХрд╛рд╢
рд╣рд╛рде рдкрд░ рдмрд╛рджрд▓ рдкреНрд░рдХрд╛рд╢:
рдФрд░ рднреЛрд░ рдореЗрдВ рд▓реБрдврд╝рдХрд╛
рддреБрдо рдХреИрд╕реЗ рд╣реЛ, рдореЗрд░реЗ рдШреБрдбрд╝рд╕рд╡рд╛рд░!

рд╡рд╣ рд╢рд╛рдо рдХреЛ рд╕реЗрд╡рд╛рд░рдд рд╣реИ, рд╣рдбреНрдбреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ,
рддрд╛рдиреНрдпрд╛ рд░рд╛рдд рдореЗрдВ рдиреАрд▓реА рд░реЛрд╢рдиреА рдореЗрдВ
рдПрдХ рддрд░рд╣ рдХреА рдЙрджрд╛рд╕реАред

рдФрд░ рд╢рдмреНрдж рд╡рд┐рдзрд╛ рд╕реЗ рд╕реАрдЦрдиреЗ рдХреЗ рдЕрдВрддрд┐рдо рдХреБрдЫ рдЫрдВрджред рдпрд╣рд╛рдБ рдХрд╡рд┐рддрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрд░реНрде рдкреНрд░рдХрдЯ рд╣реБрдЖ (?)ред

рдФрд░ рддреБрдо, рдЬреНрдпреЛрддрд┐ рд╕реЗ
рд╕рд┐рддрд╛рд░реЗред
рджреВрд░ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдмрд╛рдд рдХреАред

рддреБрдо рдЪрд┐рдВрддрд╛ рдХрд░рддреЗ рд╣реЛ, рдХрд▓ рдореЗрдВ рддреБрдоред
"рдХрдмреВрддрд░ рдХреА рдмрд╛рд░рд┐рд╢,
рдФрд░ рд╣рддреНрдпрд╛рд░реЛрдВ рдХреЗ рдШрд░,
рд░рд╛рдЬрдХреБрдорд╛рд░реА рд▓рдбрд╝рдХреА рдХреЗ рд▓рд┐рдП
рдЙрд╕рдХрд╛ рдЪреЗрд╣рд░рд╛ред

xxx

рдУрд╣ рд╢реЗрдлрд░реНрдб, рдЪреЗрдВрдмрд░реЛрдВ рдХреЛ рд▓рд╣рд░рд╛рдирд╛
рд╡рд╕рдВрдд рдореЗрдВ рдПрдХ рдЧреНрд░реЛрд╡ рдкрд░ред

рдореИрдВ рдШрд░ рдХреЗ рджрд┐рд▓ рд╕реЗ рддрд╛рд▓рд╛рдм рддрдХ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ,
рдФрд░ рдЪреВрд╣реЛрдВ perky
рдирд┐рдЬрд╝рдиреА рдиреЛрд╡рдЧреЛрд░реЛрдб рдХреА рдШрдВрдЯрд┐рдпрд╛рдБред

рд▓реЗрдХрд┐рди рдбрд░ рдирд╣реАрдВ, рд╕реБрдмрд╣ рдХреА рд╣рд╡рд╛,
рдПрдХ рдорд╛рд░реНрдЧ рдХреЗ рд╕рд╛рде, рдПрдХ рд▓реЛрд╣реЗ рдХреЗ рдХреНрд▓рдм рдХреЗ рд╕рд╛рде,
рдФрд░ рд╕реАрдк рдХреЗ рд╕рд╛рде рд╕реЛрдЪрд╛
рдПрдХ рддрд╛рд▓рд╛рдм рдкрд░ рд╢рд░рдг рд▓реА
рдмрд┐рдЧрдбрд╝рд╛ рд╣реБрдЖ рд░рдХреАрдЯ рдореЗрдВред

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


All Articles