Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Па матывах маіх выступаў на Highload++ і DataFest Minsk 2019 г.

Для многіх сёння пошта з'яўляецца неад'емнай часткай жыцця ў сетцы. З яе дапамогай мы вядзем бізнес-перапіску, захоўваем разнастайную важную інфармацыю, звязаную з фінансамі, браніраваннем гатэляў, афармленнем заказаў і многім іншым. У сярэдзіне 2018 года мы сфармулявалі харчовую стратэгію развіцця пошты. Які ж павінна быць сучасная пошта?

Пошта павінна быць разумны, гэта значыць дапамагаць карыстачам арыентавацца ў які павялічваецца аб'ёме інфармацыі: фільтраваць, структураваць і падаваць яе найболей зручным спосабам. Яна павінна быць карысны, дазваляючы прама ў паштовай скрыні вырашаць розныя задачы, напрыклад, аплачваць штрафы (функцыя, якой я, на свой жаль, карыстаюся). І пры гэтым, зразумела, пошта павінна забяспечваць інфармацыйную абарону, адсякаючы спам і абараняючы ад узломаў, гэта значыць быць бяспечнай.

Гэтыя напрамкі вызначаюць шэраг ключавых задач, многія з якіх могуць быць эфектыўна вырашаны з дапамогай машыннага навучання. Вось прыклады ўжо дзеючых фічаў, распрацаваных у рамках стратэгіі - па адным на кожны напрамак.

  • разумны адказ. У пошце ёсць функцыя разумнага адказу. Нейрасець аналізуе тэкст ліста, разумее яго сэнс і мэту, і ў выніку прапануе тры найбольш прыдатныя варыянты адказу: пазітыўны, негатыўны і нейтральны. Гэта дапамагае істотна эканоміць час пры адказах на лісты, а таксама часта адказваць нестандартна і пацешна для сябе.
  • Групоўка лістоў, якія адносяцца да заказаў у інтэрнэт-крамах. Мы часта здзяйсняем пакупкі ў інтэрнэце, і, як правіла, крамы могуць дасылаць па некалькі лістоў на кожны заказ. Напрыклад, ад АліЭкспрэса, самага буйнога сэрвісу, прыходзіць вельмі шмат лістоў па адной замове, і мы палічылі, што ў тэрмінальным выпадку іх колькасць можа даходзіць да 29. Таму з дапамогай мадэлі Named Entity Recognition мы вылучаем нумар замовы і іншую інфармацыю з тэксту і групуем усе лісты ў адзін трэд. Таксама паказваем асноўную інфармацыю аб замове ў асобнай плашцы, што палягчае працу з гэтым тыпам лістоў.

    Эксплуатацыя машыннага навучання ў Пошце Mail.ru

  • Антыфішынг. Фішынг - асабліва небяспечны ашуканскі тып лістоў, з дапамогай якога зламыснікі спрабуюць завалодаць фінансавай інфармацыяй (у тым ліку аб банкаўскіх картах карыстальніка) і лагінамі. Такія лісты мімікрыруюць пад сапраўдныя, разасланыя сэрвісам, у тым ліку візуальна. Таму з дапамогай Computer Vision мы распазнаем лагатыпы і стыль афармлення лістоў буйных кампаній (напрыклад, Mail.ru, Сбер, Альфа) і ўлічваем гэта разам з тэкстам і іншымі прыкметамі ў нашых класіфікатарах спаму і фішынгу.

машыннае навучанне

Трохі пра машыннае навучанне ў пошце ў цэлым. Пошта - высоканагружаная сістэма: праз нашы сервера праходзіць у сярэднім па 1,5 млрд лістоў у суткі для 30 млн карыстальнікаў DAU. Абслугоўваюць усе неабходныя функцыі і фічы каля 30 сістэм машыннага навучання.

Кожны ліст праходзіць праз цэлы канвеер класіфікацыі. Спачатку мы адсякаем спам і пакідаем добрыя лісты. Карыстальнікі часта не заўважаюць працу антыспаму, таму што 95-99% спаму не трапляюць нават у адпаведную тэчку. Распазнанне спаму - вельмі важная частка нашай сістэмы, і найболей складаная, бо ў сферы антыспаму ідзе сталая адаптацыя паміж сістэмамі абароны і напады, што пастаўляе бесперапынны інжынерны челленж для нашай каманды.

Далей падзяляем лісты ад людзей і робатаў. Лісты ад людзей найболей важныя, таму для іх мы падаем функцыі тыпу Smart Reply. Лісты ад робатаў дзеляцца на дзве часткі: транзакцыйныя - гэта важныя лісты ад сэрвісаў, напрыклад, пацверджання пакупак або броні гатэля, фінансы, і інфармацыйныя - гэта бізнес-рэклама, зніжкі.

Мы лічым, што транзакцыйныя лісты па значнасці роўныя асабістай перапісцы. Яны павінны быць пад рукой, паколькі часта бывае трэба хутка знайсці інфармацыю аб замове або броню авіябілета, а мы трацім час на пошук гэтых лістоў. Таму мы для зручнасці аўтаматычна дзелім іх на шэсць асноўных катэгорый: падарожжы, заказы, фінансы, білеты, рэгістрацыі і, нарэшце, штрафы.

Інфармацыйныя лісты - самая шматлікая і, мусіць, меней важная група, не патрабавальная імгненнай рэакцыі, бо нічога істотнага не зменіцца ў жыцці карыстача, калі ён не прачытае падобны ліст. У нашым новым інтэрфейсе мы згортваем іх у два трэда: сацсеткі і рассыланні, такім чынам візуальна чысцячы скрыню і пакідаючы навідавоку толькі важныя лісты.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Эксплуатацыя

Вялікая колькасць сістэм дастаўляе нямала цяжкасцяў у эксплуатацыі. Бо мадэлі са часам дэградуюць, як і любы софт: ламаюцца прыкметы, адмаўляюць машыны, накатваецца крывы код. Да таго ж увесь час змяняюцца дадзеныя: дадаюцца новыя, трансфармуецца патэрн паводзін карыстачоў і т.д., таму мадэль без належнай падтрымкі са часам будзе працаваць усё горш і горш.

Нельга забываць і пра тое, што чым глыбей машыннае навучанне пранікае ў жыццё карыстачоў, тым большы ўплыў яны аказваюць на экасістэму, і, як следства, тым больш фінансавых страт ці профіту могуць атрымаць гульцы рынка. Таму ва ўсё большай колькасці абласцей гульцы адаптуюцца да працы ML-алгарытмаў (класічныя прыклады - рэклама, пошук і ўжо згаданы антыспам).

Таксама задачы машыннага навучання валодаюць асаблівасцю: любая, хай і малаважная, змена ў сістэме можа спарадзіць шмат працы з мадэллю: праца з дадзенымі, перанавучанне, дэплой, што можа зацягнуцца на тыдні ці месяцы. Таму чым хутчэй мяняецца асяроддзе, у якім аперуюць вашыя мадэлі, тым больш намаганняў патрабуе іх падтрымка. Каманда можа стварыць мноства сістэм і цешыцца гэтаму, а потым марнаваць амаль усе рэсурсы на іх падтрымку, без магчымасці зрабіць нешта новае. З такой сітуацыяй мы неяк раз аднойчы сутыкнуліся ў камандзе антыспаму. І зрабілі відавочную выснову, што суправаджэнне трэба аўтаматызаваць.

Аўтаматызацыя

Што можна аўтаматызаваць? Насамрэч амаль усё. Я вылучыў чатыры напрамкі, якія вызначаюць інфраструктуру машыннага навучання:

  • збор даных;
  • данавучанне;
  • дэплой;
  • тэсціраванне & маніторынг.

Калі асяроддзе няўстойлівае і ўвесь час змяняецца, то ўся інфраструктура вакол мадэлі апыняецца значна важней, чым сама мадэль. Гэта можа быць стары добры лінейны класіфікатар, але калі ў яго правільна падаць прыкметы і наладзіць добрую зваротную сувязь ад карыстачоў, то ён будзе працаваць значна лепш, чым State-Of-The-Art-мадэлі са ўсімі наваротамі.

Цыкл зваротнай сувязі

Гэты цыкл аб'ядноўвае ў сабе збор дадзеных, данавучанне і дэплой - па сутнасці, увесь цыкл абнаўлення мадэлі. Чаму гэта важна? Паглядзіце на графік рэгістрацыі ў пошце:

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Распрацоўнік машыннага навучання ўкараніў мадэль антыбота, якая не дазваляе робатам рэгістравацца ў пошце. Графік падае да значэння, дзе застаюцца толькі рэальныя карыстачы. Усё выдатна! Але праходзіць чатыры гадзіны, батаводы падкручваюць свае скрыпты, і ўсё вяртаецца на кругі свая. У дадзеным укараненні распрацоўшчык выдаткаваў месяц, дадаючы прыкметы і данавучаючы мадэль, але спамер за чатыры гадзіны змог адаптавацца.

Каб не было так пакутліва балюча і не прыйшлося потым усё перарабляць, трэба першапачаткова думаць аб тым, як будзе выглядаць цыкл зваротнай сувязі, і што мы будзем рабіць, калі асяроддзе зменіцца. Пачнём са збору дадзеных - гэта паліва для нашых алгарытмаў.

збор дадзеных

Зразумела, што сучасным нейронавым сеткам чым больш дадзеных, тым лепш, а іх, у сутнасці, генеруюць карыстачы прадукта. Нам могуць дапамагаць карыстачы, пазначаючы дадзеныя, але марнатравіць гэтым нельга, таму што карыстачам у нейкі момант ім надакучыць давучваць вашы мадэлі і яны пяройдуць на іншы прадукт.

Адна з самых частых памылак (тут я раблю рэферэнс на Andrew Ng) - занадта моцная арыентацыя на метрыкі на тэставым датасет, а не на зваротную сувязь ад карыстальніка, што на самой справе з'яўляецца галоўнай меркай якасці працы, так як мы ствараем прадукт для карыстальніка. Калі карыстачу незразумелая ці не падабаецца праца мадэлі, значыць усё тлен.

Таму карыстач заўсёды павінен мець магчымасць прагаласаваць, варта даць яму прыладу для зваротнай сувязі. Калі мы лічым, што ў скрыню прыйшоў ліст, які адносіцца да фінансаў, трэба яго пазначыць «фінансы», і намаляваць кнопку, якую карыстач можа націснуць і сказаць, што гэта не фінансы.

Якасць зваротнай сувязі

Пагаворым аб якасці карыстацкага фідбэка. Па-першае, вы з карыстачом можаце ўкладваць розны сэнс у адно паняцце. Напрыклад, вы з продакт-мэнэджарамі лічыце, што «фінансы» - гэта лісты з банка, а карыстальнік лічыць, што ліст ад бабулі пра пенсію таксама адносіцца да фінансаў. Па-другое, ёсць карыстачы, якія бяздумна кахаюць ціснуць на кнопкі без усякай логікі. Па-трэцяе, карыстач можа глыбока памыляцца ў сваіх высновах. Яскравы прыклад з нашай практыкі - укараненне класіфікатара нігерыйскага спаму, Вельмі пацешнага тыпу спаму, калі карыстачу прапануецца забраць некалькі мільёнаў даляраў у раптоўна знойдзенага далёкага сваяка ў Афрыцы. Пасля ўкаранення дадзенага класіфікатара мы праверылі клікі "Не спам" на гэтыя лісты, і аказалася, што 80% з іх - сакавіты нігерыйскі спам, што кажа аб тым, што карыстальнікі могуць быць вельмі даверлівыя.

І не будзем забываць, што па кнопках могуць тыкаць не толькі людзі, але і ўсякія робаты, якія прыкідваюцца браўзэрам. Так што волкая зваротная сувязь не падыходзіць для навучання. Што можна зрабіць з гэтай інфармацыяй?

Мы ўжываем два падыходы:

  • Фідбэк ад звязанага ML. Напрыклад, у нас ёсць анлайн-сістэма антыбота, якая, як я ўжо згадваў, прымае хуткае рашэнне на аснове абмежаванай колькасці прыкмет. І ёсць другая, павольная сістэма, якая працуе постфактум. Яна мае больш дадзеных аб карыстальніку, аб яго паводзінах і г.д. Як следства, прымаецца найболей узважанае рашэнне, адпаведна яна мае вышэй дакладнасць і поўнасць. Можна накіраваць розніцу працы гэтых сістэм у першую чаргу як дадзеныя для навучання. Такім чынам, прасцейшая сістэма будзе заўсёды спрабаваць наблізіцца да перформансу больш складанай.
  • Класіфікацыя клікаў. Можна проста класіфікаваць кожны клік карыстальніка, ацэньваць яго валіднасць і магчымасць выкарыстання. Мы так робім у антыспаме пошты, выкарыстоўваючы прыкметы карыстальніка, яго гісторыю, прыкметы адпраўніка, сам тэкст і вынік працы класіфікатараў. У выніку атрымліваем аўтаматычную сістэму, якая валідуе карыстацкі фідбэк. І бо яе трэба данавучаць істотна радзей, яе праца можа стаць асноўнай для ўсіх астатніх сістэм. Асноўны прыярытэт у гэтай мадэлі мае precision, таму што навучаць мадэль на недакладных дадзеных багата наступствамі.

Пакуль мы чысцім дадзеныя і данавучаем нашы ML-сістэмы, нельга забываць пра карыстальнікаў, бо для нас тысячы, мільёны памылак на графіцы - гэта статыстыка, а для карыстальніка кожны баг - трагедыя. Акрамя таго, што карыстачу трэба неяк жыць з вашай памылкай у прадукце, ён пасля зваротнай сувязі чакае выключэння падобнай сітуацыі ў будучыні. Таму варта заўсёды даваць карыстачам не толькі магчымасць галасаваць, але і выпраўляць паводзіны ML-сістэм, ствараючы, да прыкладу, персанальныя эўрыстыкі на кожны клік зваротнай сувязі, у выпадку з поштай гэта можа быць магчымасць фільтраваць падобныя лісты па адпраўніку і загалоўку для гэтага карыстача.

Таксама трэба на аснове якіх-небудзь справаздач або зваротаў у саппорт у паўаўтаматычным ці ручным рэжыме мыліць мадэль, каб іншыя карыстачы таксама не пакутавалі ад падобных праблем.

Эўрыстыкі для навучання

З дадзенымі эўрыстыкі і мыліцамі ёсць дзве праблемы. Першая складаецца ў тым, што ўвесь час якая расце колькасць мыліц цяжка падтрымліваць, не кажучы ўжо пра іх якасць і працу на доўгай дыстанцыі. Другая праблема складаецца ў тым, што памылка можа быць не частотнай, і некалькіх клікаў для данавучання мадэлі будзе недастаткова. Здавалася б, гэтыя два не звязаныя эфекты можна істотна нівеліраваць, калі прымяніць наступны падыход.

  1. Ствараем часовы мыліца.
  2. Накіроўваем дадзеныя з яго ў мадэль, яна рэгулярна давучваецца, у тым ліку на атрыманых дадзеных. Тут, зразумела, важна, каб эўрыстыка мела высокую дакладнасць, каб не змяншаць якасць дадзеных у трэніровачным сэце.
  3. Затым вешаем маніторынг на спрацоўванне мыліцы, і калі праз нейкі час мыліца больш не спрацуе і цалкам пакрываецца мадэллю, то можна яго смела выдаляць. Цяпер гэта праблема наўрад ці паўторыцца.

Так што войска мыліц вельмі карысна. Галоўнае, каб іх служба была тэрміновай, а не сталай.

Данавучанне

Данавучанне - гэта працэс дадання новых дадзеных, атрыманых у выніку зваротнай сувязі ад карыстальнікаў або іншых сістэм, і навучання існуючай мадэлі на іх. З данавучаннем можа быць некалькі праблем:

  1. Мадэль можа проста не падтрымліваць данавучанне, а вучыцца толькі з нуля.
  2. Нідзе ў кнізе прыроды не напісана, што данавучанне абавязкова палепшыць якасць працы на прадакшэне. Часта здараецца якраз наадварот, то бок, магчыма толькі пагаршэнне.
  3. Змяненні могуць быць непрадказальнымі. Гэта дастаткова тонкі момант, які мы выявілі для сябе. Нават калі новая мадэль у А/У-тэсце паказвае падобныя вынікі ў параўнанні з бягучай, гэта зусім не значыць, што яна будзе працаваць ідэнтычна. Іх праца можа адрознівацца ў якім-небудзь адным працэнты, які можа прынесці новыя памылкі ці вярнуць ужо выпраўленыя старыя. З бягучымі памылкамі як мы, так і карыстачы, ужо ўмеем жыць, і калі ўзнікае вялікая колькасць новых памылак, карыстач таксама можа не разумець, што адбываецца, бо ён чакае прадказальных паводзін.

Таму самае галоўнае ў данавучанні - гэта гарантавана паляпшаць мадэль, ці хаця б не пагаршаць яе.

Першае, што прыходзіць у галаву, калі мы гаворым пра данавучанне, гэта падыход Active Learning. Што гэта азначае? Напрыклад, класіфікатар вызначае, ці адносіцца ліст да фінансаў, і вакол яго мяжы прыняцця рашэння мы дадаем выбарку з размечаных прыкладаў. Гэта добра працуе, напрыклад, у рэкламе, дзе зваротнай сувязі вельмі шмат і можна навучаць мадэль у анлайн-рэжыме. А калі зваротнай сувязі мала, то мы атрымліваем моцна зрушаную выбарку адносна прадакшэны размеркавання дадзеных, на аснове якой нельга ацаніць паводзіны мадэлі падчас эксплуатацый.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Насамрэч наша мэта - захаваць старыя патэрны, ужо вядомыя мадэлі, і набыць новыя. Тут важная пераемнасць. Мадэль, якую мы часта з вялікай працай выкацілі, ужо працуе, таму можам арыентавацца на яе прадукцыйнасць.

У пошце прымяняюцца розныя мадэлі: дрэвы, лінейныя, нейрасеткі. Для кожнай які робіцца свой алгарытм данавучання. У працэсе данавучання ў нас з'яўляюцца не толькі новыя дадзеныя, але і часта новыя прыкметы, якія мы будзем улічваць ва ўсіх алгарытмах ніжэй.

Лінейныя мадэлі

Дапушчальны, у нас лагістычная рэгрэсія. Складаем лосс мадэлі з наступных кампанентаў:

  • LogLoss на новых дадзеных;
  • регуляризуем вагі новых прыкмет (старыя не чапаем);
  • вучымся і на старых дадзеных, каб захаваць старыя патэрны;
  • і, мабыць, найважнейшае: наважваем Harmonic Regularization, якая гарантуе не моцная змена шаляў адносна старой мадэлі па норме.

Паколькі ў кожнага кампанента Loss ёсць каэфіцыенты, мы можам падабраць аптымальныя для нашай задачы значэння на крос-валідацыі ці зыходзячы з прадуктовых патрабаванняў.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

дрэвы

Пяройдзем да дрэў рашэнняў. Мы запілавалі наступны алгарытм данавучання дрэў:

  1. На продзе працуе лес са 100—300 дрэў, які навучаны на старым дата-сэце.
  2. Выдаляем у канцы M = 5 штук і дадаем 2M = 10 новых, навучаныя на ўсім дата-сетцы, але з высокай вагай у новых дадзеных, што натуральна гарантуе інкрыментальную змену мадэлі.

Відавочна, што з часам колькасць дрэў моцна павялічваецца, і іх трэба перыядычна скарачаць, каб укладвацца ў таймінгі. Для гэтага выкарыстоўваны ўсюдыісны сягоння Knowledge Distillation (KD). Коратка аб прынцыпе яго працы.

  1. У нас ёсць бягучая "складаная" мадэль. Запускаем яе на трэніровачным дата-сетцы і атрымліваем размеркаванне верагоднасцяў класаў на выхадзе.
  2. Далей вучым мадэль-вучня (мадэль з меншай колькасцю дрэў у дадзеным выпадку) паўтараць вынікі працы мадэлі, выкарыстоўваючы размеркаванне класаў як мэтавую зменную.
  3. Тут важна адзначыць, што мы ніяк не выкарыстоўваем разметку дата-сэта, і таму можам выкарыстоўваць адвольныя дадзеныя. Зразумела, мы выкарыстоўваем сэмпл дадзеных з баявога струменя, як навучальную выбарку для мадэлі вучня. Такім чынам, трэніровачны сэт дазваляе нам забяспечваць дакладнасць мадэлі, а сэмпл патоку гарантуе падобны перформанс на прадакшэн-размеркаванні, кампенсуючы зрушэнне навучальнай выбаркі.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Спалучэнне гэтых двух методык (даданне дрэў і перыядычнае скарачэнне іх колькасці з дапамогай Knowledge Distillation) забяспечвае ўвядзенне новых патэрнаў і поўную пераемнасць.

З дапамогай KD мы таксама выконваем адрозненне аперацыі з прыкметамі мадэлі, напрыклад, выдаленне прыкметаў і працу на пропусках. У нашым выпадку ў нас ёсць шэраг важных статыстычных прыкмет (па адпраўніках, тэкставых хэшах, урлам і г.д.), якія захоўваюцца ў базе дадзеных, якія маюць уласцівасць адмаўляць. Да такога развіцця падзей мадэль, зразумела, не гатовая, бо ў трэйнінг-сэце не сустракаецца сітуацый адмовы. У падобных выпадках мы спалучаем тэхнікі KD і аугментацыі: пры навучанні для часткі дадзеных мы выдаляем або абнуляем неабходныя прыкметы, а пазнакі (выхады бягучай мадэлі) бярэм першапачатковыя, мадэль-вучань вучыць паўтараць гэтае размеркаванне.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Мы заўважылі, што чым больш сур'ёзная маніпуляцыя мадэляў адбываецца, тым больш у працэнтных суадносінах патрабуецца сэмла патоку.

Для выдалення прыкмет, самай простай аперацыі, патрабуецца толькі невялікая частка струменя, бо змяняецца ўсяго толькі пару прыкмет, а бягучая мадэль вучылася на тым жа сэце – розніца мінімальная. Для спрашчэння мадэлі (зніжэнне колькасці дрэў у некалькі разоў) патрабуецца ўжо 50 на 50. А на пропускі важных статыстычных прыкмет, якія сур'ёзна афектзяць перфоманс мадэлі, патрабуецца яшчэ больш струменя, каб выраўнаваць працу новай устойлівай да пропускаў мадэлі на ўсіх тыпах лістоў.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

FastText

Пяройдзем да FastText. Нагадаю, што прадстаўленне (Embedding) слова складаецца з сумы embedding'а самога слова і ўсіх яго літарных N-gram, звычайна трыграмы. Бо триграмм можа быць досыць шмат, выкарыстоўваецца Bucket Hashing, гэта значыць пераўтварэнне ўсёй прасторы ў нейкі фіксаваны хэшмэп. У выніку матрыца шаляў атрымліваецца памернасцю ўнутранага пласта на колькасць слоў + бакетаў.

Пры данавучанні ўзнікаюць новыя прыкметы: словы і триграммы. У стандартным данавучанні ад Facebook нічога істотнага не адбываецца. Данавучаюцца толькі старыя вагі з крос-энтрапіяй на новых дадзеных. Такім чынам, новыя прыкметы не выкарыстоўваюцца, зразумела, гэты падыход валодае ўсімі вышэйапісанымі недахопамі, злучанымі з непрадказальнасцю мадэлі на прадакшэне. Таму мы крыху дапрацавалі FastText. Дадаем усе новыя вагі (словы і триграммы), давучваем усю матрыцу з крос-энтрапіяй і дадаем гарманічную регуляризацию па аналогіі з лінейнай мадэллю, якая гарантуе неістотнае змяненне старых вагаў.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

CNN

З згортачнымі сеткамі некалькі складаней. Калі ў CNN давучваюцца апошнія пласты, то, зразумела, можна ўжываць гарманічную регуляризацию і гарантаваць пераемнасць. Але ў тым выпадку, калі патрабуецца данавучанне ўсёй сеткі, то такую ​​регуляризацию ужо не навесіш на ўсе пласты. Аднак ёсць варыянт з навучаннем кампліментарных эмбедынгаў праз Triplet Loss (арыгінальны артыкул).

Triplet Loss

На прыкладзе задачы антыфішынгу разбяром у агульных рысах Triplet Loss. Бярэм наш лагатып, а таксама пазітыўныя і негатыўныя прыклады лагатыпаў іншых кампаній. Мінімізуем адлегласць паміж першымі і максымізуем адлегласць паміж другімі, які робіцца гэта з невялікім зазорам, каб забяспечыць вялікую кампактнасць класаў.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Калі мы данавучаем сетку, то ў нас цалкам змяняецца метрычная прастора, і яна становіцца абсалютна несумяшчальнай з папярэдняй. Гэта сур'ёзная праблема ў задачах, якія выкарыстоўваюць вектары. Каб абысці гэтую праблему, будзем падмешваць падчас навучання старыя эмбедынгі.

Мы дадалі новыя дадзеныя ў трэйнінг-сэт і з нуля навучаны другую версію мадэлі. На другім этапе мы данавучаем нашу сетку (Finetuning): спачатку давучваецца апошні пласт, а потым размарожваецца ўся сетка. У працэсе складання трыплет толькі частка эмбедынгаў вылічаем з дапамогай навучэнцаў мадэлі, астатнія - з дапамогай старой. Такім чынам, у працэсе данавучання мы забяспечваем сумяшчальнасць метрычных прастор v1 і v2. Своеасаблівы варыянт гарманічнай регуляризации.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Архітэктура цалкам

Калі разглядаць усю сістэму цалкам на прыкладзе антыспаму, то мадэлі не ізаляваныя, а ўкладзеныя сябар у сябра. Бярэм карцінкі, тэкст і іншыя прыкметы, з дапамогай CNN і Fast Text атрымліваем эмбедынгі. Далей па-над эмбедынгам ужываюцца класіфікатары, якія выдаюць хуткія для розных класаў (тыпы лістоў, спаму, наяўнасць лагатыпа). Хуткі і прыкметы ўжо трапляюць у лес дрэў на прыняцце фінальнага рашэння. Асобныя класіфікатары ў гэтай схеме дазваляюць лепш інтэрпрэтаваць вынікі працы сістэмы і больш прыцэльна данавучаць кампаненты ў выпадку ўзнікнення праблем, чым чым у волкім выглядзе падаваць усе дадзеныя ў дрэвы рашэнняў.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

У выніку мы гарантуем пераемнасць на кожным узроўні. На ніжнім узроўні ў CNN і Fast Text мы выкарыстоўваем гарманічную регуляризацию, для класіфікатараў у сярэдзіне – таксама гарманічную регуляризацию і каліброўку хутка для сумяшчальнасці размеркавання верагоднасці. Ну а бустынг дрэў навучаецца інкрыментальна ці з дапамогай Knowledge Distillation.

У цэлым падтрымка такой укладзенай сістэмы машыннага навучання звычайна ўяўляе боль, бо любы кампанент на ніжнім узроўні вядзе да абнаўлення ўсёй сістэмы вышэй. Але бо ў нашым сетапе кожны кампанент змяняецца малаважна і ён сумяшчальны з папярэднім, то ўся сістэма можа абнаўляецца па кавалачках без патрэбы перанавучаць усю структуру, што і дазваляе падтрымліваць яе без сур'ёзнага звышеда.

Дэплой

Мы разабралі збор дадзеных і данавучанне розных тыпаў мадэляў, таму пераходзім да іх дэплою ў прадакшэн асяроддзе.

А/B-тэставанне

Як я казаў раней, падчас збору дадзеных мы, як правіла, атрымліваем зрушаную выбарку, па якой немагчыма ацаніць прадакшэн-перфоманс мадэлі. Таму пры разгортванні мадэль абавязкова трэба параўноўваць з папярэдняй версіяй, каб разумець, як насамрэч ідуць справы, гэта значыць праводзіць A/B-тэсты. Насамрэч працэс выкаткі і аналіз графікаў досыць руцінны і выдатна паддаецца аўтаматызацыі. Мы выкочваем нашы мадэлі паступова на 5%, на 30%, на 50% і на 100% карыстальнікаў, пры гэтым збіраючы ўсе даступныя метрыкі па адказах мадэлі і фідбэку карыстальнікаў. У выпадку нейкіх сур'ёзных выкідаў мы аўтаматычна адкочваем мадэль, а для астатніх выпадкаў, набраўшы дастатковую колькасць клікаў карыстальнікаў, прымаем рашэнне аб павышэнні працэнта. У выніку даводзім новую мадэль да 50% карыстачоў цалкам аўтаматычна, а выкатку на ўсю аўдыторыю аппрувит чалавек, хоць і гэты крок можна аўтаматызаваць.

Аднак працэс A/B-тэстаў уяўляе прастор для аптымізацыі. Справа ў тым, што любы A/B-тэст досыць працяглы (у нашым выпадку ён займае ад 6 да 24 гадзін у залежнасці ад колькасці фідбэка), што робіць яго даволі дарагім і з абмежаванымі рэсурсамі. Апроч гэтага патрабуецца досыць высокі адсотак струменя для тэсту, каб па ісце паскорыць агульны час А/B-тэсту (набіраць статыстычна значную выбарку для адзнакі метрык на малым адсотку можна вельмі доўга), што робіць колькасць A/B-слотаў вельмі абмежаваным. Відавочна, што нам трэба выводзіць у тэст толькі самыя перспектыўныя мадэлі, якіх у працэсе данавучання мы атрымліваем вельмі шмат.

Для рашэння гэтай задачы мы навучылі асобны класіфікатар, які прадказвае паспяховасць A/B-тэсту. Для гэтага ў якасці прыкмет бярэм статыстыку прыняцця рашэнняў, Precision, Recall і іншыя метрыкі на навучальным мностве, на адкладзеным і на сэмпле з патоку. Таксама параўноўваем мадэль з бягучай на прадакшэне, з эўрыстыкі, і бярэм у разлік складанасць (Complexity) мадэлі. Выкарыстоўваючы ўсе гэтыя прыкметы, навучаны на гісторыі тэстаў класіфікатар паскорыць мадэлі-кандыдаты, у нашым выпадку гэта лясы дрэў, і прымае рашэнне, які з іх пусціць у A/B-тэст.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

У момант укаранення гэты падыход дазволіў у некалькі разоў павялічыць колькасць паспяховых A/B-тэстаў.

Тэставанне & маніторынг

Тэсціраванне і маніторынг, як ні дзіўна, не шкодзяць нашаму здароўю, хутчэй, наадварот, паляпшаюць і пазбаўляюць ад лішніх стрэсаў. Тэставанне дазваляе прадухіліць збой, а маніторынг - своечасова выявіць яго, каб паменшыць уплыў на карыстальнікаў.

Тут важна разумець, што рана ці позна ваша сістэма заўсёды будзе памыляцца - гэта звязана з цыклам распрацоўкі любога софту. У пачатку распрацоўкі сістэмы заўсёды шмат багаў датуль, пакуль усё не ўстаканіцца і не завершыцца асноўны этап новаўвядзенняў. Але з часам энтрапія бярэ сваё, і зноў з'яўляюцца памылкі - з-за дэградацыі кампанентаў вакол і змены дадзеных, пра што я казаў спачатку.

Тут я жадаў бы адзначыць, што любую сістэму машыннага навучання трэба разглядаць з пункта гледжання яе профіту на працягу ўсяго жыццёвага цыклу. Ніжэй на графіцы паказаны прыклад працы сістэмы па адлове рэдкага выгляду спаму (на графіцы лінія ў раёне нуля). Аднойчы з-за няправільна закэшаванай прыкметы яна сышла з розуму. Як на злосць, не было маніторынгу на анамальнае спрацоўванне, у выніку сістэма пачала захоўваць лісты ў тэчку «спам» на мяжы прыняцця рашэння ў вялікай колькасці. Нягледзячы на ​​выпраўленне наступстваў, сістэма ўжо столькі разоў памылілася, што не акупіць сябе і за пяць гадоў. А гэта поўны правал з пункта гледжання жыццёвага цыклу мадэлі.

Эксплуатацыя машыннага навучання ў Пошце Mail.ru

Таму такая простая рэч як маніторынг можа стаць ключавой у жыцці мадэлі. Апроч стандартных і відавочных метрык, мы лічым размеркаванне адказаў і хуткаў мадэлі, а таксама размеркаванне значэнняў ключавых прыкмет. З дапамогай KL-дывергенцыі мы можам параўнаць бягучае размеркаванне з гістарычным або значэння на A/B-тэсце з астатнімі патокам, што дазваляе заўважаць анамаліі ў мадэлі і своечасова адкочваць змены.

У большасці выпадкаў мы запускаем нашы першыя версіі сістэм з дапамогай простых эўрыстык ці мадэляў, якія ў будучыні выкарыстоўваем у якасці маніторынгу. Напрыклад, маніторым NER-мадэль у параўнанні з рэгуляркамі для канкрэтных інтэрнэт-крам, і калі пакрыццё класіфікатара прасочваецца ў параўнанні з імі, то разбіраемся ў прычынах. Яшчэ адно карыснае прымяненне эўрыстык!

Вынікі

Пройдземся яшчэ раз па ключавых думках артыкула.

  • Фібдэк. Заўсёды думаем пра карыстальніка: як ён будзе жыць з нашымі памылкамі, як зможа паведаміць пра іх. Не забываем, што карыстачы - не крыніца чыстага фідбэка для навучання мадэляў, і яго неабходна прачышчаць з дапамогай дапаможных ML-сістэм. Калі няма магчымасці сабраць сігнал ад карыстача, то шукаем альтэрнатыўныя крыніцы фідбэка, напрыклад, злучаныя сістэмы.
  • Данавучанне. Тут асноўнае - гэта пераемнасць, таму абапіраемся на бягучую прадакшэн-мадэль. Новыя мадэлі навучаем так, каб яны не моцна адрозніваліся ад папярэдняй за рахунак гарманічнай регуляризации і падобных трукаў.
  • Дэплой. Аўтадэплой па метрыках моцна скарачае час на ўкараненне мадэляў. Маніторынг статыстыкі і размеркаванні прыняцця рашэнняў, колькасці фолзаў ад карыстальнікаў абавязковы для вашага спакойнага сну і прадуктыўных выходных.

Што ж, спадзяюся, што прачытанае дапаможа вам хутчэй паляпшаць вашыя ML-сістэмы, паскараць іх выснову на рынак і рабіць іх больш надзейнымі, змяншаючы колькасць стрэсу ад працы.

Крыніца: habr.com

Дадаць каментар