
Minu esinemiste kÔrvale Highload++ ja DataFest Minsk 2019.
Paljude jaoks on postiteenus tÀna lahutamatu osa veebielust. Selle abil viime lÀbi Àritegevust, salvestame erinevat olulist teavet, mis on seotud rahanduse, hotellide broneerimise, tellimuste tÀitmise ja paljuga muuga. 2018. aasta keskpaiku sÔnastasime postiteenuse arendamise tootestriateegia. Milline peaks olema tÀnapÀevane postiteenus?
Postiteenus peab olema nutikas, see tÀhendab, et ta peab aitama kasutajatel orienteeruda kasvavas informatsiooni mahus: filtreerima, struktureerima ja esitama seda kÔige mugavamal viisil. Ta peab olema kasulikuks, vÔimaldades otse postkastis lahendada erinevaid probleeme, nagu nÀiteks trahvide maksmine (funktsioon, mida ma, oma kahjuks, kasutan). Ja sellega peab postiteenus samuti tagama informatsioonilise kaitse, blokeerides rÀmpsposti ja kaitstes hÀkkimise eest, see tÀhendab olema ohutust.
Need suunad mÀÀravad mitmeid pĂ”hiĂŒlesandeid, millest paljusid saab tĂ”husalt lahendada masinĂ”ppe abil. Siin on nĂ€idised juba toimivatest funktsioonidest, mis on vĂ€lja töötatud strateegia raames â iga suuna kohta ĂŒks.
- Nutika vastuse funktsioon. Postiteenuses on nutika vastuse funktsioon. NeuralvĂ”rk analĂŒĂŒsib kirja sisu, mĂ”istab selle tĂ€hendust ja eesmĂ€rki ning pakub seejĂ€rel kolme kĂ”ige sobivamat vastusevarianti: positiivne, negatiivne ja neutraalne. See aitab oluliselt sÀÀsta aega kirjadele vastamisel ning sageli vastata ebatavaliselt ja naljakalt.
- Kirjade gruppeerimine, mis on seotud Interneti-poodide tellimustega. Me sageli ostame veebist, ja tavaliselt saadavad kauplused iga tellimuse kohta mitu kirja. NĂ€iteks tuleb AliExpressilt, suurimalt teenuselt, palju kirju ĂŒhe tellimuse kohta, ja me oleme leidnud, et lĂ”pliku juhul vĂ”ivad need arvud ulatuda kuni 29-ni. SeetĂ”ttu kasutame nimetuste tuvastamise mudelit, et selgitada vĂ€lja tellimuse number ja muu teave tekstist ning gruppeerida kĂ”ik kirjad ĂŒhte teema. NĂ€itame ka tellimuse pĂ”hiteavet eraldi ribas, mis lihtsustab selle tĂŒĂŒpi kirjadega tegelemist.

- Anti-phishing. Phishing on ohtlik petuskeem, mille abil pĂŒĂŒavad kurjategijad saada kĂ€tte finantsandmeid (sealhulgas kasutajate pangakaarditeavet) ja sisselogimisi. Sellised kirjad jĂ€ljendavad tĂ”elisi, mida saadab teenus, sealhulgas visuaalselt. SeetĂ”ttu tunnustame Computer Vision abil suurte ettevĂ”tete (nĂ€iteks Mail.ru, Sber, Alfa) logo ja kirjade kujundust ning arvestame seda koos teksti ja muude tunnustega meie rĂ€mpsposti ja phishingu klassifikaatorites.
MasinÔpe
Veidi masinĂ”ppest e-kirjade kontekstis. E-post on kĂ”rgelt koormatud sĂŒsteem: meie serverite kaudu lĂ€bib keskmiselt 1,5 miljardit kirja pĂ€evas 30 miljoni aktiivse kasutaja kohta. KĂ”iki vajalikke funktsioone ja omadusi haldab umbes 30 masinĂ”ppe sĂŒsteemi.
Iga kiri lĂ€bib kogu klassifitseerimise protsessi. Esiteks filtreerime rĂ€mpsposti ja jĂ€tame head kirjad alles. Kasutajad ei mĂ€rka sageli rĂ€mpsposti tĂ”rje tööd, sest 95â99% rĂ€mpspostist ei jĂ”ua isegi vastavasse kausta. RĂ€mpsposti tuvastamine on meie sĂŒsteemi vĂ€ga oluline ja samas keeruline osa, kuna rĂ€mpsposti tĂ”rje valdkonnas toimub pidev kohandumine kaitse- ja rĂŒnnakeskuste vahel, mis esitab meie meeskonnale pideva insenerliku vĂ€ljakutse.
SeejÀrel eristame inimeste ja robotite kirju. Inimeste kirjad on kÔige olulisemad, seega pakume nende jaoks funktsioone nagu Smart Reply. Robotite kirjad jagunevad kaheks: tehingulised - need on tÀhtsad kirjad teenustest, nÀiteks ostude vÔi hotellide broneeringute kinnitused, finantsandmed, ja teavitavad - need on Àritooted, allahindlused.
Peame, et tehingulised kirjad on sama olulised kui isiklikud vestlused. Need peavad olema kÀepÀrast, kuna sageli on vaja kiiresti leida teavet tellimuse vÔi lennupileti broneeringu kohta, ja me kulutame aega nende kirjade otsimisele. SeetÔttu jagame me mugavuse huvides need automaatselt kuue pÔhikategooriasse: reisid, tellimused, finantsid, piletid, registreerimised ja lÔpuks karistused.
Teabesid on kĂ”ige enam levinud ja tĂ”enĂ€oliselt vĂ€hem oluline rĂŒhm, mis ei nĂ”ua kohest reaktsiooni, kuna kasutaja elus ei muutu midagi olulist, kui ta sellist kirja ei loe. Meie uues liideseosas koondame need kahte teema: sotsiaalmeedia ja uudiskirjad, visuaalselt puhastades postkasti ja jĂ€ttes nĂ€htavale vaid olulised kirjad.

KĂ€itus
Suur arv sĂŒsteeme tekitab palju raskusi kasutamises. Aja jooksul degradeeruvad mudelid, nagu iga tarkvara: murravad funktsioonid, masinad ebaĂ”nnestuvad, tuleb ette tĂ”rkeid koodis. Lisaks muutuvad pidevalt andmed: lisatakse uusi, muudetakse kasutajate kĂ€itumismustreid jne, seetĂ”ttu hakkab mudel ilma vajaliku hoolduseta aja jooksul ĂŒha halvemini toimima.
Ei saa unustada ka seda, et mida sĂŒgavamale masinĂ”pe siseneb kasutajate ellu, seda suuremat mĂ”ju see avaldab ökosĂŒsteemile ning sellest tulenevalt, seda suuremaid rahalisi kaotus vĂ”i kasumit saavad turu mĂ€ngijad. SeetĂ”ttu adaptiirivad ĂŒha enamates valdkondades mĂ€ngijad ML-algoritmide kasutamisele (klassikalised nĂ€ited - reklaam, otsing ja juba mainitud rĂ€mpsposti tĂ”rje).
Kuna masinĂ”ppe ĂŒlesannetel on ka eripĂ€ra: iga, olgu see siis vĂ€ike, muudatus sĂŒsteemis vĂ”ib tekitada palju tööd mudeliga: andmetega töötamine, uuesti koolitamine, juurutamine, mis vĂ”ib vĂ”tta nĂ€dalaid vĂ”i isegi kuid. SeetĂ”ttu, mida kiiremini keskkond, kus teie mudelid tegutsevad, muutub, seda rohkem ressursse nĂ”uab nende hooldus. Tiim vĂ”ib luua palju sĂŒsteeme ja nende ĂŒle rÔÔmustada, kuid seejĂ€rel kulutada peaaegu kĂ”ik ressursid nende hooldamiseks, ilma et oleks vĂ”imalust midagi uut teha. Me olime kunagi sellise olukorraga silmitsi, kui töötasime rĂ€mpsposti tĂ”rje tiimis. Ja jĂ”udsime ilmselgele jĂ€reldusele, et hooldust tuleb automatiseerida.
Automatiseerimine
Mida saab automatiseerida? Tegelikult peaaegu kÔike. Olen vÀlja toonud neli suunda, mis mÀÀravad masinÔppe infrastruktuuri:
- andmete kogumine;
- tÀiendav koolitus;
- juurutamine;
- testimine ja jÀlgimine.
Kui keskkond on ebastabiilne ja pidevalt muutuv, on kogu infrastruktuur mudeli ĂŒmber olulisem kui mudel ise. See vĂ”ib olla vana hea lineaarne klassifikaator, aga kui sellele Ă”igesti tunnuseid esitletakse ja tagasiside kasutajatelt on hĂ€sti organiseeritud, toimib see palju paremini kui kĂ”ikvĂ”imalike vingetega State-Of-The-Art mudelid.
Tagasiside ring
See ring hĂ”lmab andmete kogumist, tĂ€iendĂ”pet ja juurutamist â pĂ”himĂ”tteliselt kogu mudeli uuendamise tsĂŒkkel. Miks see oluline on? Vaadake postal ÄÄngi graafikut:

MasinÔppe arendaja rakendas antiboti mudelit, mis takistab botide registreerumist postis. Graafik langeb vÀÀrtusele, kus jÀÀvad alles ainult pÀris kasutajad. KÔik on suurepÀrane! Kuid neli tundi hiljem kohendavad botimeistrid oma skripte, ja kÔik naaseb algsesse seisundisse. Selles rakenduses kulutas arendaja kuu aega, lisades tunnuseid ja tÀiendades mudelit, kuid spÀmmija suudab nelja tunni jooksul kohaneda.
Kuna vĂ”ib olla nii valus ja hiljem kĂ”ik uuesti teha, tuleks alguses mĂ”elda, milline tagasiside ring vĂ€lja nĂ€eb ja mida me teeme, kui keskkond muutub. Alustame andmete kogumisest â see on kĂŒtus meie algoritmidele.
Andmete kogumine
Selge on, et tĂ€napĂ€evaste nĂ€rvivĂ”rkude puhul on andmete hulk alati parem, ja neid genereerivad sisuliselt toote kasutajad. Kasutajad vĂ”ivad meid aidata andmete mĂ€rgistamisel, aga seda ei saa kuritarvitada, sest kasutajatele vĂ”ib mingil hetkel tĂŒkkida teie mudelite tĂ€iustamine ja nad vĂ”ivad minna teise toote juurde.
Ăks kĂ”ige sagedasemaid vigu (siin viitan Andrew Ng-le) â liigne keskendumine mÔÔdikutele testandmestikus, mitte kasutajate tagasisidele, mis on tegelikult peamine kvaliteedi mÔÔdik, kuna loome toodet kasutajale. Kui kasutajale ei ole mudeli töö arusaadav vĂ”i ei meeldi, siis on kĂ”ik asjatu.
SeetÔttu peab kasutajal alati olema vÔimalus hÀÀletada, peaksime talle andma tagasiside tööriista. Kui arvame, et kasti on saabunud kiri, mis kuulub finantseerimise alla, tuleks see markeerida 'finantseerimine', ja joonistada nupp, mida kasutaja vÔib vajutada ja öelda, et see ei ole finantseerimine.
Tagasiside kvaliteet
RÀÀgime kasutajate tagasiside kvaliteedist. Esiteks, teil ja kasutajal vĂ”ib olla erinev arusaam samast mĂ”isted. NĂ€iteks, teie ja tootearendajatega peetakse "rahandust" pangakirjadeks, samas kui kasutaja arvab, et ka vanaema kiri pensionist kuulub rahanduse alla. Teiseks, on kasutajaid, kes mĂ”tlematult vajutavad nuppudele ilma igasuguse loogikata. Kolmandaks, kasutaja vĂ”ib oma jĂ€reldustes tugevalt eksida. Ăks selge nĂ€ide meie praktikast on klassifikaatori juurutamine , ĂŒsna naljakas spĂ€mmiliik, kus kasutajale pakutakse vĂ”imalust saada mitmeid miljoneid dollareid Ă€kitselt leitud kauges sugulasest Aafrikas. PĂ€rast selle klassifikaatori juurutamist kontrollisime nuppu "Ei ole spĂ€mm" nende kirjade puhul ja selgus, et 80% neist on mahlane Nigeeria spĂ€mm, mis nĂ€itab, et kasutajad vĂ”ivad olla ÀÀrmiselt usaldavad.
Ja Àra unustagem, et nuppe vÔivad vajutada mitte ainult inimesed, vaid ka igasugused robotid, mis teesklevad olevat brauserid. Nii et too tagasiside ei sobi Ôpetamiseks. Mida saaks sellega teavet teha?
Kasutame kahte lÀhenemist:
- Kasutajate tagasiside seoses ML. NĂ€iteks meil on online-antiboti sĂŒsteem, mis, nagu ma juba mainisin, teeb kiire otsuse piiratud hulga tunnuste pĂ”hjal. Ja on teiseks, aeglane sĂŒsteem, mis töötab tagantjĂ€rele. Sellel on rohkem andmeid kasutaja, tema kĂ€itumise jne kohta. Selle tulemusena tehakse tasakaalustatud otsus, mistĂ”ttu on selle tĂ€psus ja tĂ€ielikkus kĂ”rgemad. Erinevuse töö nendel sĂŒsteemidel saab suunata esimesse kui Ă”ppeandmed. Nii et lihtsam sĂŒsteem pĂŒĂŒab alati lĂ€heneda keerukama jĂ”udlusele.
- Klikkide klassifitseerimineIga kasutaja kliki saab lihtsalt klassifitseerida, hinnata selle kehtivust ja kasutusvĂ”imet. Me teeme seda e-posti spĂ€mmivastaselt, kasutades kasutaja tunnuseid, tema ajalugu, saatja omadusi, teksti ning klassifikaatorite töö tulemust. Tulemusena saame automaatse sĂŒsteemi, mis valideerib kasutaja tagasisidet. Kuna seda tuleb oluliselt harvem uuesti Ă”petada, vĂ”ib selle töö saada aluseks kĂ”igile teistele sĂŒsteemidele. Selles mudelis on peamine prioriteet tĂ€psus, kuna mudeli Ă”petamine ebatĂ€psete andmete pĂ”hjal vĂ”ib kaasa tuua tagajĂ€rgi.
Kuni me puhastame andmeid ja Ă”petame meie masinĂ”ppimise sĂŒsteeme, ei tohi unustada kasutajaid. Sajad ja miljonid vead graafikus on statistika, kuid iga veakogemus kasutaja jaoks on tragöödia. Lisaks sellele, et kasutaja peab elama teie tootearenduse vea tĂ”ttu, ootab ta tagasisidestamise jĂ€rel, et sellised olukorrad ei korduks. Seega tasub alati anda kasutajatele vĂ”imalus mitte ainult hÀÀletada, vaid ka mĂ”jutada masinĂ”ppimise sĂŒsteemide kĂ€itumist, luues nĂ€iteks iga tagasiside kliki jaoks isiklikke heuristilisi meetodeid; nĂ€iteks vĂ”ib see e-posti puhul tĂ€hendada vĂ”imalust filtreerida sarnaseid kirju saatja ja pealkirja alusel.
Samuti on vajalik, et mingite aruannete vĂ”i tugipöördumiste pĂ”hjal pooleautomaatsetes vĂ”i kĂ€sitsi moodustatud sĂŒsteemides kohandatakse mudelit, et teised kasutajad ei kannataks sarnaste probleemide all.
Heuristikad Ôppimiseks
Nende andmete heuristikate ja kohandustega on kaks probleemi. Esiteks on pidevalt kasvava arvu kohanduste hooldamine keeruline, rÀÀkimata nende kvaliteedist ja pikaajalise töökindluse tagamisest. Teiseks, viga ei pruugi olla sagedane ning mitmed klikkimised mudeli ĂŒmberĂ”petamiseks vĂ”ivad olla ebapiisavad. Tundub, et neid kahte mitteseotud efekti on vĂ”imalik tunduvalt vĂ€hendada, kui rakendada jĂ€rgmist lĂ€henemist.
- Loome ajutise kohanduse.
- Suuname andmed sellest mudelisse, mis Ôpib regulaarselt ka saadud andmete pÔhjal. Siin on muidugi oluline, et heuristika oleks kÔrge tÀpsusega, et mitte vÀhendada treeningandmete kvaliteeti.
- SeejĂ€rel paneme jĂ€lgimise takisti aktiveerimisele ja kui mingi aja pĂ€rast takisti enam ei aktiveeru ja katab tĂ€ielikult mudeli, siis vĂ”ib selle julgelt eemaldada. NĂŒĂŒd on see probleem ebatĂ”enĂ€oline, et kordub.
Seega on takistite armee vĂ€ga kasulik. Peamine on, et nende teenus oleks ajutine, mitte pĂŒsiv.
JĂ€tkamine
JĂ€tkamine on uusandmete lisamise protsess, mis saadakse kasutajatelt vĂ”i teistelt sĂŒsteemidelt tagasiside kaudu, ning olemasoleva mudeli nende pĂ”hjal koolitamine. JĂ€tkamisega vĂ”ib kaasneda mitmeid probleeme:
- Mudel ei pruugi lihtsalt toetada jÀtkamist ning peab Ôppima ainult nullist.
- Looduse raamatus ei ole kirjas, et jÀtkamine paratamatult parandab toimetulekut tootmises. Tihti juhtub vastupidi, see tÀhendab, et olukord vÔib ainult halveneda.
- Muutused vÔivad olla ettearvamatud. See on piisavalt Ôrn teema, mille oleme endale avastanud. Isegi kui uus mudel A/B-testimisel nÀitab sarnaseid tulemusi kui praegune, ei tÀhenda see sugugi, et see töötab identselt. Nende töö vÔib erineda isegi mÔnes protsendis, mis vÔib tuua uusi vigu vÔi taastada juba parandatud vanad. Praeguste vigadega oskame me ja kasutajad juba elada ning kui uusi vigu tuleb hulgi, vÔib ka kasutaja mitte mÔista, mis toimub, kuna ta ootab ettearvatavat kÀitumist.
Seega on jÀtkamise juures kÔige olulisem garanteerida mudeli parandamine vÔi vÀhemalt mitte halvendamine.
Esimene asi, mis pĂ€he tuleb, kui rÀÀgime jĂ€tkamisest, on aktiivĂ”ppe lĂ€henemine. Mida see tĂ€hendab? NĂ€iteks klassifikaator mÀÀrab, kas kiri kuulub rahandusse, ja tema otsustuspiiri ĂŒmber lisame valimi mĂ€rgistatud nĂ€idetest. See toimib hĂ€sti, nĂ€iteks reklaamides, kus tagasisidet tuleb palju ja mudelit saab koolitada reaalajas. Kuid kui tagasisidet on vĂ€he, saame tugevalt moonutatud valimi, mis ei vasta tootmisandmete jaotusele, mille pĂ”hjal on vĂ”imatu hinnata mudeli kĂ€itumist kasutamise ajal.

Meie eesmÀrk on sÀilitada vanad mustrid, tuttavad mudelid, ja omandada uusi. JÀtkusuutlikkus on siin oluline. Mudel, mida me sageli suure vaevaga arendasime, töötab juba hÀsti, seetÔttu saame toetuda selle jÔudlusele.
Postitustes kasutatakse erinevaid mudeleid: puud, lineaarsed, nĂ€rvivĂ”rgud. IgaĂŒhe jaoks loome oma tĂ€iendamisalgoritmi. TĂ€iendamisprotsessis tekivad meil uued andmed, kuid sageli ka uued tunnused, mida arvestame allpool kĂ”igis algoritmides.
Lineaarmudelid
Oletame, et meil on logistiline regressioon. Koostame mudeli kaotuse jÀrgmiste komponentide pÔhjal:
- LogLoss uute andmete pÔhjal;
- reguleerime uute tunnuste kaalusid (vanaid ei puutu);
- Ôpime ka vanade andmete pÔhjal, et sÀilitada vanu mustreid;
- ja mis veelgi olulisem: rakendame Harmoonilise Regulaarimise, mis tagab, et kaalude muutus vÔrreldes vana mudeliga on minimaalne.
Kuna iga kaotuse komponendi puhul on koefitsiendid, saame valida meie ĂŒlesande jaoks optimaalsed vÀÀrtused ristvalideerimise vĂ”i toote nĂ”uete alusel.

Puud
Liigume edasi otsustuspuude juurde. Oleme vÀlja töötanud jÀrgmise puude tÀiendamisalgoritmi:
- Töös on 100â300 puu mets, mis on koolitatud vanal andmestikul.
- Eemaldame lĂ”puks M = 5 tĂŒkki ja lisame 2M = 10 uut, mis on koolitatud kogu andmestiku pĂ”hjal, kuid uute andmete kĂ”rge kaalu tĂ”ttu, mis loomulikult tagab mudeli jĂ€rkjĂ€rgulise muutumise.
On ilmne, et aja jooksul kasvab puude arv mĂ€rkimisvÀÀrselt ja neid tuleb perioodiliselt vĂ€hendada, et mahtuda ajaraamidesse. Selleks kasutame igapĂ€evarutiini nĂŒĂŒd juba laialdaselt kasutatavat Teadmiste Destilleerimist (KD). LĂŒhidalt selle tööpĂ”himĂ”ttest.
- Meil on praegune âkeerulineâ mudel. KĂ€ivitame selle treeningandmestikul ja saame klasside tĂ”enĂ€osuste jaotuse vĂ€ljundiks.
- SeejÀrel koolitame Ôpilasmudelit (antud juhul madalama puude arvuga mudel) kordama mudeli töö tulemusi, kasutades klasside jaotust sihimuutujana.
- Siin on oluline mÀrkida, et me ei kasuta andmekogude struktuuri ja seetÔttu vÔime kasutada suvalisi andmeid. Loomulikult kasutame aktiivse vooluga seotud andmete proovide komplekti, et koolitada Ôpikmodelli. Seega vÔimaldab treeningkomplekt tagada mudeli tÀpsuse, samas kui vooluprognoos tagab sarnase jÔudluse tootmisjaotuses, tasandades treeningkomplekti kallutatusi.

Nende kahe meetodi (puude lisamine ja nende arvu perioodiline vÀhendamine teadlikkuse destilleerimise kaudu) kombinatsioon tagab uute mustrite sissetoomise ja tÀieliku jÀrjepidevuse.
KD abil saame ka teostada erinevusi mudeli tunnuste operatsioonides, nÀiteks tunnuste eemaldamist ja puuduolevate andmete töötlemist. Meil on rida olulisi statistilisi tunnuseid (saatjate, tekstihÀkkide, URL-ide jms kohta), mis on salvestatud andmebaasi, millel on ebaÔnnestumise omadus. TÔsise jÀrgnevuse saavutamiseks ei ole mudel selliste olukordadega harjunud, kuna treeningkomplektis ei esine ebaÔnnestumise olukordi. Sarnastes olukordades kombineerime KD ja andmete suurendamise tehnikaid: andmete treenimise kÀigus eemaldame teatud tunnuseid vÔi nullime need ning mudeli lÀhtemÀrgid (moodulite vÀljundid) jÀÀvad algseteks, Ôppija mudel Ôpib neid jaotusi kordama.

Me oleme mÀrganud, et mida tÔsisemaid manipuleerimisi mudelitega tehakse, seda rohkem on vaja vooluprognoosi protsendi jÀrgi.
Tunnuste eemaldamiseks, kĂ”ige lihtsamale operatsioonile, on vajalik vaid vĂ€ike osa voolust, kuna muutub vaid mĂ”ned tunnused ja kĂ€esolev mudel on Ă”ppinud samal komplekis â erinevus on minimaalne. Mudeli lihtsustamiseks (puude arvu vĂ€hendamiseks mitu korda) on siiski vajalik 50:50. Oluliste statistiliste tunnuste, mis tĂ”siselt mĂ”jutavad mudeli jĂ”udlust, puuduolekute korral on vajalik veelgi rohkem voolude, et tasakaalustada uue puuduste suhtes vastupidava mudeli toimimist kĂ”ikide kirjade tĂŒĂŒpide peal.

FastText
Liigume edasi FastText'i juurde. Meeles pidada, et sĂ”na esitus (Embedding) koosneb sĂ”na enda embedding'ist ja kĂ”igist selle tĂ€heline N-gram'ist, tavaliselt kolmigrammidest. Kuna kolmigrameid vĂ”ib olla ĂŒsna palju, kasutatakse Bucket Hashing'ut, st kogu ruumi teisendamist kindlaks hachimepiks. Tulemuseks on kaalu maatriks, mille suurus on sisemise kihi ja sĂ”nade + bucketite arv.
TĂ€iendĂ”ppes ilmnevad uued tunnused: sĂ”nad ja kolmigrammid. Facebooki standardse tĂ€iendĂ”ppe kĂ€igus ei toimu midagi olulist. TĂ€iendatakse ainult vanu kaalu, kasutades rist-entropiat uute andmete peal. Seega uusi tunnuseid ei kasutata, loomulikult on see lĂ€henemine kĂ”igi ĂŒlaltoodud puudustega, mis on seotud mudeli ettearvamatuses tootmises. SeetĂ”ttu oleme teinud FastText'ile mĂ”ned tĂ€iendused. Lisame kĂ”ik uued kaalu (sĂ”nad ja kolmigrammid), tĂ€iustame kogu maatriksit rist-entropiaga ja lisame harmoonilise regulatsiooni sarnane lineaarse mudeliga, mis tagab vanade kaalu vĂ€henematu muutumise.

CNN
Konvolutsiooniliste vÔrkudega on veidi keerulisem. Kui CNN'i viimaseid kihte tÀiustatakse, saab loomulikult kasutada harmoonilist regulatsiooni ja tagada jÀrjepidevuse. Kuid juhul, kui on vajalik kogu vÔrgu tÀiustamine, siis sellist regulatsiooni ei saa rakendada kÔigile kihtidele. Siiski on olemas vÔimalus koolitada komplementaarseid embedding'e Triplet Loss'i kaudu ().
Triplet Loss
Vaatame Triplet Loss'i kaudu antifishingu ĂŒlesande nĂ€itel. VĂ”tame meie logo ning positiivseid ja negatiivseid nĂ€iteid teiste ettevĂ”tete logodest. Minimeerime vahemaa esimeste vahel ja maksimeerime teise vahel, tehes seda vĂ€ikese varuga, et tagada klasside suurem kompaktsus.

Kui me tĂ€iustame vĂ”rku, siis meie mÔÔtmisruum muutub tĂ€ielikult ja see muutub eelneva suhtes tĂ€iesti ĂŒhildumatuks. See on tĂ”sine probleem ĂŒlesannetes, mis kasutavad vektoreid. Selle probleemi vĂ€ltimiseks hakkame koolitamise kĂ€igus vanu embedding'e segama.
Oleme lisanud uut teavet treeningkomplekti ja Ă”petame mudeli teise versiooni nullist. Teises etapis tĂ€iustame meie vĂ”rku (Finetuning): esmalt Ă”petatakse viimane kiht, seejĂ€rel avatakse kogu vĂ”rk. Tripletide koostamise protsessis arvutame vaid osa embeddings'eid Ă”petatava mudeli abil, ĂŒlejÀÀnud aga vana mudeli abil. Nii tagame tĂ€iustamisprotsessi kĂ€igus, et v1 ja v2 mÔÔtmisruumid oleksid ĂŒhilduvad. See on omamoodi harmoonilise regulatsiooniga variant.

Arhitektuur tervikuna
Kui vaadata kogu sĂŒsteemi tervikuna nĂ€iteks rĂ€mpsposti kontekstis, siis mudelid ei ole isoleeritud, vaid ĂŒksteisesse integreeritud. VĂ”tame pildid, teksti ja muud omadused, kasutame CNN-i ja Fast Text'i, et saada embeddings'eid. Edasi rakendatakse embeddings'ide peal klassifikaatoreid, mis vĂ€ljastavad skoorid erinevate klasside jaoks (kirjade tĂŒĂŒbid, rĂ€mpspost, logo olemasolu). Skoorid ja omadused satuvad puude metsadesse, kus tehakse lĂ”plik otsus. Erinevad klassifikaatorid selles skeemis vĂ”imaldavad paremini tĂ”lgendada sĂŒsteemi töö tulemusi ja sihipĂ€rasemalt tĂ€iustada komponente probleemide korral, mitte aga esitada kĂ”iki andmeid toorelt otsustuspuusse.

KokkuvĂ”ttes tagame jĂ€rjepidevuse igal tasandil. Alumisel tasemel kasutame CNN-is ja Fast Text-is harmoonilist regulatsiooni, keskmises klassifikaatorites samuti harmoonilist regulatsiooni ja skoori kalibreerimist tĂ”enĂ€osusjaotuse ĂŒhilduvuse tagamiseks. Boosting puid aga koolitatakse inkrementaalselt vĂ”i kasutades Knowledge Distillation'i.
Ăldiselt toob sellise pesustatud masinĂ”ppesĂŒsteemi tugi sageli kaasa valusaid hetki, kuna iga alamkomponent toob endaga kaasa kogu ĂŒlemise sĂŒsteemi uuendamise. Kuid kuna meie seadistuses muutub iga komponent vaid vĂ€he ja on eelneva versiooniga ĂŒhilduv, saab kogu sĂŒsteemi uuendada osade kaupa ilma vajaduseta kogu struktuuri uuesti koolitada, mis vĂ”imaldab seda toetada ilma tĂ”siste ĂŒlekoormusteta.
KĂ€ivitamine
Oleme arutanud andmete kogumist ja erinevat tĂŒĂŒpi mudelite tĂ€iustamist, seega liigume edasi nende juurutamise juurde tootmiskeskkonda.
A/B-testimine
Nagu ma varem ĂŒtlesin, andmete kogumise protsessis saame me tavaliselt moonutatud valimi, mille pĂ”hjal ei ole vĂ”imalik mudeli tootmisvĂ”imet hinnata. SeetĂ”ttu tuleb mudeli juurutamisel vĂ”rrelda seda eelneva versiooniga, et mĂ”ista, kuidas asjad tegelikult on, st lĂ€bi viia A/B-testid. Tegelikult on mudeli vĂ€ljalaskmisprotsess ja graafikute analĂŒĂŒs ĂŒsna rutinne ning hĂ€sti automatiseeritav. Me vabastame oma mudelid jĂ€rk-jĂ€rgult 5%, 30%, 50% ja 100% kasutajatest, samal ajal kogudes kĂ”iki saadaval olevaid mÔÔdikuid mudeli vastuste ja kasutajate tagasiside kohta. Kui esineb tĂ”siseid kĂ”rvalekaldeid, tagastame mudeli automaatselt, kuid muude juhtumite korral, kui oleme kogunud piisavalt kasutajate klikke, teeme otsuse protsendi suurendamise kohta. LĂ”ppkokkuvĂ”ttes viime uue mudeli automaatselt 50% kasutajateni, ja kogu publiku vabastamise heakskiidab inimene, kuigi ka selle sammu saab automatiseerida.
KĂŒll aga pakub A/B-testimise protsess optimeerimise vĂ”imalusi. Asi on selles, et iga A/B-test on piisavalt pikk (meie puhul kestab see 6 kuni 24 tundi, sĂ”ltuvalt tagasiside arvust), mis teeb selle ĂŒsna kulukaks ja piiratud ressurssidega. Lisaks on vajalik testimiseks piisavalt suur liiklusprotsent, et sisuliselt kiirendada A/B-testi ĂŒldist aega (statistiliselt olulise valimi kogumine vĂ€hese protsendi kohta vĂ”ib vĂ”tta vĂ€ga kaua aega), mis vĂ€hendab A/B-slotide arvu ÀÀrmiselt piiratud. On ilmne, et peame testimiseks valima ainult kĂ”ige paljutĂ”otavamad mudelid, mida me tĂ€iendĂ”ppe protsessis saame vĂ€ga palju.
Selle probleemi lahendamiseks oleme koolitanud eraldi klassifitseerijat, mis ennustab A/B-testi tulemuslikkust. Selleks vÔtame tunnusteks otsuste vastuvÔtmise statistika, tÀpsuse (Precision), tagasikutsumise (Recall) ja muud mÔÔdikud koolituskomplektis, kÔrvale jÀetud andmetes ja voogudest vÔetavas valimis. Samuti vÔrreldame mudelit praeguse tootmismudeliga, heuristikaga, ja arvestame mudeli keerukust (Complexity). Kasutades kÔiki neid tunnuseid, hindab ajalooga testidel koolitatud klassifitseerija kandidaatmudeleid, milleks meie puhul on puude mets, ja teeb otsuse, millist neist A/B-testi lasta.

Selle lÀhenemise rakendamise hetkel vÔimaldas see mitme korra vÔrra suurendada edukaid A/B teste.
Testimine & jÀlgimine
Testimine ja jĂ€lgimine, imelik kĂŒll, ei kahjusta meie tervist, vaid vastupidi, parandavad ja vabastavad liigsetest stressidest. Testimine vĂ”imaldab ennetada tĂ”rkeid, jĂ€lgimine aga tuvastada need Ă”igel ajal, et vĂ€hendada mĂ”ju kasutajatele.
Siin on oluline mĂ”ista, et varem vĂ”i hiljem teeb teie sĂŒsteem alati vigu â see on seotud igasuguse tarkvara arendamise tsĂŒkliga. Arenduse alguses on sĂŒsteemis alati palju vigu, alles siis, kui kĂ”ik on stabiilne ja peamine uuenduste etapp on lĂ”ppenud, saab kĂ”ik korda. Kuid aja jooksul vĂ”tab entropia oma, ja vead ilmuvad taas â komponentide degradatsiooni ja andmete muutumise tĂ”ttu, millest ma alguses rÀÀkisin.
Siin tahaksin mĂ€rkida, et iga masinĂ”ppesĂŒsteemi tuleb vaadata selle kasu seisukohast kogu elutsĂŒkli vĂ€ltel. Alloleval graafikul on toodud nĂ€ide sĂŒsteemi tööst, mis pĂŒĂŒab kinni haruldasi rĂ€mpskirju (graafikul joon on nulli lĂ€hedal). Ăks kord, vale vahemĂ€lu tĂ”ttu, lĂ€ks ta hulluks. Kahjuks polnud anomaalia jĂ€lgimist, mille tulemusena hakkas sĂŒsteem salvestama kirju kausta "rĂ€mps" otsuste piiril suures koguses. Hoolimata tagajĂ€rgede parandamisest on sĂŒsteem juba nii palju kordi eksinud, et ei tasu end tagasi isegi viie aasta jooksul. See on tĂ€ielik ebaĂ”nnestumine mudeli elutsĂŒkli seisukohast.

Seega vÔib selline lihtne asi nagu jÀlgimine olla mudeli elus vÔtmetÀhtsusega. Lisaks standardsetele ja ilmselgetele mÔÔdikutele arvestame me ka mudeli vastuste ja skooride jaotust ning vÔtmeomaduste vÀÀrtuste jaotust. KL-eralduse abil saame vÔrrelda praegust jaotust ajaloolise vÔi A/B-testimise teiste voogudega, mis vÔimaldab mÀrgata mudeleid anomaaliaid ja Ôigel ajal muudatusi tagasi pöörata.
Enamasti kĂ€ivitame oma sĂŒsteemide esimesed versioonid lihtsate heuristikute vĂ”i mudelite abil, mida kasutame tulevikus jĂ€lgimiseks. NĂ€iteks jĂ€lgime NER mudeli toimivust vĂ”rreldes regulaarsete vĂ€ljenditega teatud veebipoodides ning kui klassifikaatori katvus langeb nende vĂ”rdluses, analĂŒĂŒsime pĂ”hjuseid. Veel ĂŒks kasulik heuristikute rakendus!
Summary
KÀime jÀlle lÀbi artikli peamised mÔtted.
- FibdĂ€k. MĂ”tleme alati kasutajale: kuidas ta elab meie vigadega, kuidas ta saab neist teatada. Ei tohi unustada, et kasutajad ei ole puhta tagasiside allikas mudelite koolitamiseks ning seda tuleb puhastada abistavate ML-sĂŒsteemide abil. Kui pole vĂ”imalik koguda signaali kasutajalt, siis otsime alternatiivseid tagasiside allikaid, nĂ€iteks seotud sĂŒsteemid.
- JÀtkamine. Siin on peamine jÀrjepidevus, seega toetume praegusele tootmisnÀidisemale. Uute mudelite koolitamine toimub nii, et need ei erineks oluliselt eelmisest, kasutades harmoonilist regulatsiooni ja sarnaseid nippe.
- KÀivitamine. Automaatne juurutamine mÔÔdikute pÔhjal vÀhendab mudelite juurutamise aega oluliselt. Statistika ja otsuste vastuvÔtmise jaotuse jÀlgimine, samuti kasutajate valeotsuste arv on vajalik teie rahuliku une ja tootlike nÀdalavahetuste jaoks.
Loodan, et see, mida lugesite, aitab teil oma ML-sĂŒsteeme kiiremini tĂ€iustada, kiirendab nende turule toomist ja muudab need usaldusvÀÀrsemaks, vĂ€hendades töö stressi.
Allikas: habr.com

