
YouScan рдореЗрдВ , рд╣рдо рдПрдХ рджрд┐рди рдореЗрдВ рд▓рдЧрднрдЧ 100 рдорд┐рд▓рд┐рдпрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдХрдИ рдирд┐рдпрдо рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдорд╛рд░реНрдЯ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рд╕рд╣реА рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдЬреНрдЮреЗрдп рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдПрдХ рдЧреБрдгрд╡рддреНрддрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рджрд┐рдЦрд╛рдПрдВрдЧреЗред рдиреЗрдЯрд╡рд░реНрдХред
рд▓реЗрдЦ рдХреА рд░реВрдкрд░реЗрдЦрд╛
- рднрд╛рд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ
- рд╕рд╕реНрддреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рдзрд╛рди
- рдХреЙрдореНрдкреИрдХреНрдЯ рднрд╛рд╖рд╛ рдбрд┐рдЯреЗрдХреНрдЯрд░ 2
- FastText
- рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдЖрдХрд▓рди
- рдирд┐рд╖реНрдХрд░реНрд╖
1. рднрд╛рд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ
рднрд╛рд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдПрдХ рдкреБрд░рд╛рдиреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдХрдИ рд▓реЛрдЧ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдмрд╣реБрднрд╛рд╖рд╛рд╡рд╛рдж рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдкреБрд░рд╛рдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрди-рдЧреНрд░рд╛рдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрди-рдЧреНрд░рд╛рдо рдХреА рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП "рдЧрддрд┐" рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рдореЙрдбрд▓реЛрдВ рдХрд╛ рдореБрдЦреНрдп рджреЛрд╖ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрджрд░реНрдн рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕рдорд╛рди рднрд╛рд╖рд╛ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдореЙрдбрд▓реЛрдВ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдПрдХ рдЙрдЪреНрдЪ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЕрддреНрдпрдзрд┐рдХ рднрд░реА рд╣реБрдИ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИред рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк, рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рдПрдХ, рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рдпрд╣ рд╕рдорд╛рдзрд╛рди рди рдХреЗрд╡рд▓ рдПрди-рдЧреНрд░рд╛рдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рдВрджрд░реНрдн рдХреЛ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХрд╛рдо рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдореЗрдВ рдЯрд┐рдХреА рд╣реБрдИ рд╣реИред рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦреЛрдВ рдкрд░ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдкрд╛рда рд╣реИрдВ рдЬреЛ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реИрдВред рдФрд░ рдЕрдкрдиреЗ рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ, рдЙрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдлрд┐рд░ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рд╣рдорд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ, рд╣рдо рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
2. рдЙрдкрд▓рдмреНрдз рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдорд╛рдзрд╛рди
рдХреЙрдореНрдкреИрдХреНрдЯ рднрд╛рд╖рд╛ рдбрд┐рдЯреЗрдХреНрдЯрд░ 2
CLD2 рдПрдХ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдмреЗрд╕реНрдб рдкреНрд░реЛрдмреЗрдмрд┐рд▓рд┐рд╕реНрдЯрд┐рдХ рдореЙрдбрд▓ (Naive Baessian classifier) тАЛтАЛрд╣реИ рдЬреЛ UTF-8 рдпрд╛ html / xml рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд╛рда рдХреЗ рд▓рд┐рдП 83 рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдорд┐рд╢реНрд░рд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдореЙрдбрд▓ рд╢реАрд░реНрд╖ 3 рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рдЧрдгрдирд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдкрд╛рда рдХреЗ рдЕрдиреБрдорд╛рдирд┐рдд рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдореЙрдбрд▓ рдЗрд╕рдХреЗ рдЙрддреНрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ "рдЕрдирдЪрд╛рд╣рд╛" рдЯреИрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдореЙрдбрд▓ рдХреА рд╕рдЯреАрдХрддрд╛ рдФрд░ рдкреВрд░реНрдгрддрд╛ рдХрд╛рдлреА рдЕрдЪреНрдЫреЗ рд╕реНрддрд░ рдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд▓рд╛рдн рдЧрддрд┐ рд╣реИред рд░рдЪрдирд╛рдХрд╛рд░ 1ms рдореЗрдВ 30kb рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╛рдпрдерди рд░реИрдкрд░ рдХреЗ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рд╣рдореЗрдВ 1ms рдореЗрдВ 21 рд╕реЗ 26kb (70,000-85,000 рд╕рдВрджреЗрд╢ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб) рдкреНрд░рд╛рдкреНрдд рд╣реБрдП, рдЬрд┐рд╕рдХрд╛ рдФрд╕рдд рдЖрдХрд╛рд░ 0.8kb рдФрд░ рдордВрдЭрд▓рд╛ 0.3kb рд╣реИред
рдЗрд╕ рдШреЛрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЕрдЬрдЧрд░ рд░реИрдкрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдпрд╛ рд╣рдорд╛рд░реЗ рдбреЙрдХрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ pycld2
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдХреЛрдб рдХреА рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦреЗрдВ:
Cld2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднрд╛рд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ import pycld2 as cld2 cld2.detect("Bonjour, Habr!")
рдбрд┐рдЯреЗрдХреНрдЯрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рддреАрди-рддрддреНрд╡ рдЯрдкрд▓ рд╣реИ:
- рднрд╛рд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ;
- рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛;
- рддреАрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ, рдЬрд╣рд╛рдВ рдкреВрд░рд╛ рдирд╛рдо рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ,
рджреВрд╕рд░рд╛ рдЖрдИрдПрд╕рдУ 3166 рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╣реИ, рддреАрд╕рд░рд╛ рдЗрд╕ рднрд╛рд╖рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдгреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рд╢рдд рд╣реИ, рдФрд░ рдЪреМрдерд╛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред
FastText
FastText , рдЧреНрд░рдВрдереЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡реА рдЕрдзреНрдпрдпрди рдФрд░ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдлреЗрд╕рдмреБрдХ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рдПрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдлреЗрд╕рдмреБрдХ рд░рд┐рд╕рд░реНрдЪ рдиреЗ 157 рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрд╛рдзреБрдирд┐рдХ рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рднрд╛рд╖рд╛ рдФрд░ рдЕрдиреНрдп рдкрд░реНрдпрд╡реЗрдХреНрд╖реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рд╣реИред
рд▓реИрдВрдЧреНрд╡реЗрдЬ рдбреЗрдлрд┐рдиреЗрд╢рди рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛, рддрддреЛрдЗрдмрд╛ рдФрд░ рд╕реЗрдЯрд╛рдЗрдореНрд╕ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдлрд╛рдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреЗ рдлрд╛рд╕реНрдЯрдЯреЗрдХреНрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдлреЗрд╕рдмреБрдХ рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреЛ рдореЙрдбрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:
рдЕрдЬрдЧрд░ рдореЗрдВ рдЗрди рдореЙрдбрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдлрд╛рд╕реНрдЯрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ рдЖрд╡рд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЧреАрдереВрдм рдкрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкрд╛рд▓рди рдХрд░рдиреЗ рдпрд╛ рд╣рдорд╛рд░реЗ рдбреЙрдХрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рдореЙрдбрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдлреЗрд╕рдмреБрдХ рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рднрд╛рд╖рд╛ рдХрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреЛрдб рдХреА рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рдлрд╛рд╕реНрдЯрдЯреЗрдХреНрд╕реНрдЯ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рднрд╛рд╖рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ from pyfasttext import FastText model = FastText('../model/lid.176.bin') model.predict_proba(["Bonjour, Habr!"], 3)
FastText'a рдореЙрдбрд▓ рдПрди-рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ n = 1 рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдордиреЗ рд╢реАрд░реНрд╖ 3 рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдШрдЯрд╛ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рда рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рди рдХрд┐ рдЙрди рдкрд╛рддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рднрд╛рд╖рд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ cld2 рдореЙрдбрд▓ рдореЗрдВ рдорд╛рдорд▓рд╛ рдерд╛ред рдЧрддрд┐ рднреА рдХрд╛рдлреА рдЕрдзрд┐рдХ рд╣реИ - рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 60,000 рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрджреЗрд╢ред
3. рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдЖрдХрд▓рди
рд╣рдо YouScan рдкреНрд░рдгрд╛рд▓реА (рд▓рдЧрднрдЧ 500 рд╣рдЬрд╛рд░ рд╕рдВрджрд░реНрдн) рд╕реЗ рд▓рд┐рдП рдЧрдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП, рдирдореВрдирд╛ рдореЗрдВ рдХреНрд░рдорд╢рдГ рдЕрдзрд┐рдХ рд░реВрд╕реА рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛рдПрдВ, 43% рдФрд░ 32%, рдпреВрдХреНрд░реЗрдиреА, рд╕реНрдкреЗрдирд┐рд╢ рдФрд░ рдкреБрд░реНрддрдЧрд╛рд▓реА рд╣реЛрдВрдЧреЗ - рд▓рдЧрднрдЧ ... рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ 2%, рд╢реЗрд╖ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ 1% рд╕реЗ рдХрдо рд╣реИред рд╕рд╣реА рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо Google рдЕрдиреБрд╡рд╛рдж рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рд░реНрдХрдЕрдк рд▓реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕рдордп Google рди рдХреЗрд╡рд▓ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЧреНрд░рдВрдереЛрдВ рдХреА рднрд╛рд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рднреА рд╣реИред рдмреЗрд╢рдХ, рдЗрд╕рдХрд╛ рдорд╛рд░реНрдХрдЕрдк рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рднрд╛рд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рд╕рдЯреАрдХрддрд╛, рдкреВрд░реНрдгрддрд╛ рдФрд░ рдПрдл 1 рд╣реЛрдЧрд╛ред рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдЧрд┐рдирддреЗ рд╣реИрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рджреЛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рддреБрд▓рдирд╛ with open("../data/lang_data.txt", "r") as f: text_l, cld2_l, ft_l, g_l = [], [], [], [] s = '' for i in f: s += i if ' |end\n' in s: text, cld2, ft, g = s.strip().rsplit(" ||| ", 3) text_l.append(text) cld2_l.append(cld2) ft_l.append(ft) g_l.append(g.replace(" |end", "")) s='' data = pd.DataFrame({"text": text_l, "cld2": cld2_l, "ft": ft_l, "google": g_l}) def lang_summary(lang, col): prec = (data.loc[data[col] == lang, "google"] == data.loc[data[col] == lang, col]).mean() rec = (data.loc[data["google"] == lang, "google"] == data.loc[data["google"] == lang, col]).mean() return round(prec, 3), round(rec, 3), round(2*prec*rec / (prec + rec),3) results = {} for approach in ["cld2", "ft"]: results[approach] = {} for l in data["google"].value_counts().index[:20]: results[approach][l] = lang_summary(l, approach) res = pd.DataFrame.from_dict(results) res["cld2_prec"], res["cld2_rec"], res["cld2_f1"] = res["cld2"].apply(lambda x: [x[0], x[1], x[2]]).str res["ft_prec"], res["ft_rec"], res["ft_f1"] = res["ft"].apply(lambda x: [x[0], x[1], x[2]]).str res.drop(columns=["cld2", "ft"], inplace=True) arrays = [['cld2', 'cld2', 'cld2', 'ft', 'ft', 'ft'], ['precision', 'recall', 'f1_score', 'precision', 'recall', 'f1_score']] tuples = list(zip(*arrays)) res.columns = pd.MultiIndex.from_tuples(tuples, names=["approach", "metrics"])
рдЖрджрд░реНрд╢ | | cld2 | | | рдлреБрдЯ | | | ans | |
---|
рдореИрдЯреНрд░рд┐рдХреНрд╕ | prec | рдЖрд░рдИрд╕реА | f1 | prec | рдЖрд░рдИрд╕реА | f1 | prec | рдЖрд░рдИрд╕реА | f1 |
ar | 0.992 | 0.725 | 0.838 | 0.918 | 0697 | 0.793 | 0.968 | 0.788 | 0.869 |
az | 0.95 | 0.752 | 0.839 | 0.888 | 0.547 | 0677 | 0.914 | 0.787 | 0.845 |
bg | 0.529 | 0.136 | 0.217 | 0.286 | 0.178 | 0.219 | 0.408 | 0.214 | 0.281 |
en | 0.949 | 0844 | 0.894 | 0.885 | 0.869 | 0.877 | 0.912 | 0.925 | 0.918 |
es | 0.987 | 0.653 | 0.786 | 0.709 | 0.814 | 0758 | 0.828 | 0.834 | 0831 |
fr | 0.991 | 0713 | 0829 | 0.53 | 0.803 | 0.638 | 0713 | 0.81 | 0758 |
рдЖрдИрдбреА | 0.763 | 0.543 | 0.634 | 0481 | 0.404 | 0439 | 0.659 | 0.603 | 0.63 |
рдпрд╣ | 0.975 | 0.466 | 0631 | 0.519 | 0778 | 0.622 | 0.666 | 0.752 | 0706 |
ja | 0.994 | 0.899 | 0.944 | 0602 | 0.842 | 0.702 | 0847 | 0.905 | 0.875 |
ka | 0.962 | 0.995 | 0.979 | 0.959 | 0.905 | 0.931 | 0.958 | 0.995 | 0.976 |
рдХреЗ.рдХреЗ. | 0.908 | 0.653 | 0759 | 0.804 | 0.584 | 0677 | 0831 | 0713 | 0767 |
ko | 0.984 | 0.886 | 0.933 | 0.94 | 0.704 | 0.805 | 0.966 | 0.91 | 0.937 |
рдПрдордПрд╕ | 0.801 | 0.578 | 0.672 | 0.369 | 0.101 | 0.159 | 0.73 | 0586 | 0.65 |
pt | 0.968 | 0.753 | 0847 | 0.805 | 0.771 | 0.788 | 0.867 | 0.864 | 0.865 |
рдЖрд░рдпреВ | 0.987 | 0.809 | 0.889 | 0.936 | 0.933 | 0.935 | 0.953 | 0948 | 0.95 |
sr | 0.093 | 0.114 | 0.103 | 0.174 | 0.103 | 0.13 | 0.106 | 0.16 | 0.128 |
рд╡реЗрдВ | 0.989 | 0.986 | 0.987 | 0.973 | 0927 | 0.95 | 0.979 | 0.986 | 0.983 |
рдЯреАрдЖрд░ | 0961 | 0.639 | 0.768 | 0.607 | 0.73 | 0663 | 0769 | 0.764 | 0767 |
рдпреВрдХреЗ | 0.949 | 0671 | 0.786 | 0.615 | 0.733 | 0669 | 0.774 | 0.777 | 0.775 |
рдЙрдЬ | 0.666 | 0.512 | 0.579 | 0.77 | 0.169 | 0.278 | 0.655 | 0.541 | 0.592 |
рдкрд░рд┐рдгрд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рднрд╛рд╖рд╛ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ cld2 рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ 90% рд╕реЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ, рдФрд░ 90% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдлрд╛рд╕реНрдЯрдЯреЗрдХреНрд╕ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╕рдорд╛рди рдкреВрд░реНрдгрддрд╛ рдХреЗ рд╕рд╛рде, f1 cld2 рдкрд░ рддреЗрдЬ рд╣реИред
Cld2 рдореЙрдбрд▓ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ, рдпрд╣ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред Fasttext'a рдореЙрдбрд▓ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдЯреАрдХрддрд╛ рдХрд╛рдлреА рдХрдо рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рдкреВрд░реНрдгрддрд╛ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдзреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрдо рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдлрд╛рд╕реНрдЯрдЯреЗрдХреНрд╕ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рджрд╣рд▓реАрдЬ рдХреЛ "рдореЛрдбрд╝" рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
4. рдирд┐рд╖реНрдХрд░реНрд╖
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рджреЛрдиреЛрдВ рдореЙрдбрд▓ рдЕрдЪреНрдЫреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдбреЛрдореЗрди рдореЗрдВ рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрдирдХрд╛ рдореБрдЦреНрдп рд▓рд╛рдн рдЙрдЪреНрдЪ рдЧрддрд┐ рд╣реИ, рдЬреЛ рддрдерд╛рдХрдерд┐рдд "рдкрд╣рдирд╛рд╡рд╛" рдмрдирд╛рдиреЗ рдФрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рдЖрдк рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдФрд░ рд╣рдорд╛рд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк рдПрдХ рдЕрдиреНрдп рд▓реЗрдЦ рдореЗрдВ рдЗрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ 6 рдкрд╢реНрдЪрд┐рдореА рдпреВрд░реЛрдкреАрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдЯреАрдХрддрд╛ рдФрд░ рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред