Funkciado de maŝinlernado en Mail.ru Mail

Funkciado de maŝinlernado en Mail.ru Mail

Surbaze de miaj paroladoj ĉe Highload++ kaj DataFest Minsk 2019.

Por multaj hodiaŭ, poŝto estas integra parto de interreta vivo. Kun ĝia helpo, ni faras komercan korespondadon, konservas ĉiajn gravajn informojn rilatajn al financoj, hotelaj rezervoj, mendoj kaj multe pli. Meze de 2018, ni formulis produktan strategion por poŝta disvolviĝo. Kia devus esti moderna poŝto?

Poŝto devas esti inteligenta, tio estas, helpi uzantojn navigi la kreskantan volumon de informoj: filtri, strukturi kaj provizi ĝin en la plej oportuna maniero. Ŝi devas esti utila, ebligante al vi solvi diversajn taskojn ĝuste en via leterkesto, ekzemple, pagi monpunojn (funkcio kiun, bedaŭrinde, mi uzas). Kaj samtempe, kompreneble, poŝto devas provizi informan protekton, fortranĉante spamon kaj protektante kontraŭ hakado, tio estas, esti sekura.

Tiuj areoj difinas kelkajn ŝlosilajn problemojn, multaj el kiuj povas esti efike solvitaj uzante maŝinlernadon. Jen ekzemploj de jam ekzistantaj funkcioj evoluigitaj kiel parto de la strategio - unu por ĉiu direkto.

  • Smart Reply. Poŝto havas inteligentan respondfunkcion. La neŭrala reto analizas la tekston de la letero, komprenas ĝian signifon kaj celon, kaj kiel rezulto proponas la tri plej taŭgajn respondopciojn: pozitiva, negativa kaj neŭtrala. Ĉi tio helpas signife ŝpari tempon dum respondado de leteroj, kaj ankaŭ ofte respondi en ne-norma kaj amuza maniero.
  • Grupigi retpoŝtojnrilata al mendoj en interretaj vendejoj. Ni ofte aĉetas interrete, kaj, kiel regulo, vendejoj povas sendi plurajn retpoŝtojn por ĉiu mendo. Ekzemple, de AliExpress, la plej granda servo, multaj leteroj venas por unu mendo, kaj ni kalkulis, ke en la fina kazo ilia nombro povus atingi ĝis 29. Tial, uzante la modelon de Named Entity Recognition, ni ĉerpas la mendan numeron. kaj aliaj informoj el la teksto kaj grupigu ĉiujn literojn en unu fadeno. Ni ankaŭ montras bazajn informojn pri la mendo en aparta skatolo, kio faciligas labori kun ĉi tiu tipo de retpoŝto.

    Funkciado de maŝinlernado en Mail.ru Mail

  • Kontraŭ-phishing. Phishing estas precipe danĝera fraŭda tipo de retpoŝto, kun la helpo de kiu atakantoj provas akiri financajn informojn (inkluzive la bankkartojn de la uzanto) kaj ensalutojn. Tiaj leteroj imitas verajn senditajn de la servo, inkluzive vide. Sekve, kun la helpo de Komputila Vido, ni rekonas emblemojn kaj la dezajnostilon de leteroj de grandaj kompanioj (ekzemple, Mail.ru, Sber, Alfa) kaj konsideras tion kune kun teksto kaj aliaj funkcioj en niaj spamado kaj phishing klasigiloj. .

Maŝinlernado

Iom pri maŝinlernado en retpoŝto ĝenerale. Poŝto estas tre ŝarĝita sistemo: mezumo de 1,5 miliardoj da leteroj ĉiutage pasas tra niaj serviloj por 30 milionoj da uzantoj de DAU. Ĉirkaŭ 30 maŝinlernado-sistemoj subtenas ĉiujn necesajn funkciojn kaj funkciojn.

Ĉiu letero pasas tra tuta klasifika dukto. Unue ni fortranĉas spamon kaj lasas bonajn retpoŝtojn. Uzantoj ofte ne rimarkas la laboron de kontraŭspamo, ĉar 95-99% de spamo eĉ ne finiĝas en la taŭga dosierujo. Spam-rekono estas tre grava parto de nia sistemo, kaj la plej malfacila, ĉar en la kampo de kontraŭ-spamo estas konstanta adapto inter defendo kaj ataksistemoj, kiu provizas kontinuan inĝenieran defion por nia teamo.

Poste ni apartigas leterojn de homoj kaj robotoj. Retpoŝtoj de homoj estas la plej gravaj, do ni provizas funkciojn kiel Smart Reply por ili. Leteroj de robotoj estas dividitaj en du partojn: transakciaj - ĉi tiuj estas gravaj leteroj de servoj, ekzemple, konfirmoj de aĉetoj aŭ hotelaj rezervoj, financoj, kaj informaj - tio estas komerca reklamado, rabatoj.

Ni kredas, ke transakciaj retpoŝtoj estas egalaj en graveco al persona korespondado. Ili devus esti ĉemane, ĉar ni ofte bezonas rapide trovi informojn pri mendo aŭ flugbileta rezervado, kaj ni pasigas tempon serĉante ĉi tiujn leterojn. Tial, por oportuno, ni aŭtomate dividas ilin en ses ĉefajn kategoriojn: vojaĝoj, mendoj, financo, biletoj, aliĝoj kaj, fine, monpunoj.

Informleteroj estas la plej granda kaj verŝajne malpli grava grupo, kiuj ne postulas tujan respondon, ĉar nenio grava ŝanĝiĝos en la vivo de la uzanto se li ne legas tian leteron. En nia nova interfaco, ni kolapsas ilin en du fadenojn: sociaj retoj kaj informiloj, tiel videble purigante la enirkeston kaj lasante nur gravajn mesaĝojn videblaj.

Funkciado de maŝinlernado en Mail.ru Mail

Ekspluato

Granda nombro da sistemoj kaŭzas multajn malfacilaĵojn en funkciado. Post ĉio, modeloj degradas laŭlonge de la tempo, kiel iu ajn programaro: funkcioj rompas, maŝinoj malsukcesas, kodo iĝas malrekta. Krome, datumoj konstante ŝanĝiĝas: novaj estas aldonitaj, uzantkondutpadronoj estas transformitaj, ktp., do modelo sen taŭga subteno funkcios pli kaj pli malbone kun la tempo.

Ni ne devas forgesi, ke ju pli profunda maŝinlernado penetras en la vivojn de uzantoj, des pli granda estas la efiko kiun ili havas sur la ekosistemo, kaj, kiel rezulto, des pli da financaj perdoj aŭ profitoj la merkataj ludantoj povas ricevi. Tial, en kreskanta nombro da areoj, ludantoj adaptiĝas al la laboro de ML-algoritmoj (klasikaj ekzemploj estas reklamado, serĉo kaj la jam menciita kontraŭspamo).

Ankaŭ, maŝinlernado-taskoj havas proprecon: ajna, eĉ negrava, ŝanĝo en la sistemo povas generi multan laboron kun la modelo: laborado kun datumoj, retrejnado, disfaldiĝo, kio povas daŭri semajnojn aŭ monatojn. Tial, ju pli rapide ŝanĝiĝas la medio en kiu viaj modeloj funkcias, des pli da penado ĝi postulas por konservi ilin. Teamo povas krei multajn sistemojn kaj esti feliĉa pri ĝi, sed poste elspezi preskaŭ ĉiujn siajn rimedojn por konservi ilin, sen la ŝanco fari ion novan. Ni iam renkontis tian situacion en la kontraŭspama teamo. Kaj ili faris la evidentan konkludon, ke subteno devas esti aŭtomatigita.

Aŭtomatigo

Kio povas esti aŭtomatigita? Preskaŭ ĉio, fakte. Mi identigis kvar areojn kiuj difinas la maŝinlernan infrastrukturon:

  • kolekto de datumoj;
  • aldona trejnado;
  • deploji;
  • testado kaj monitorado.

Se la medio estas malstabila kaj konstante ŝanĝanta, tiam la tuta infrastrukturo ĉirkaŭ la modelo montriĝas multe pli grava ol la modelo mem. Ĝi povas esti bona malnova lineara klasigilo, sed se vi nutras al ĝi la ĝustajn funkciojn kaj ricevos bonajn reagojn de uzantoj, ĝi funkcios multe pli bone ol Plej altnivelaj modeloj kun ĉiuj sonoriloj kaj fajfiloj.

Reago Buklo

Ĉi tiu ciklo kombinas datumkolektadon, plian trejnadon kaj disfaldiĝon - fakte, la tutan modelan ĝisdatigciklon. Kial ĝi estas grava? Rigardu la aliĝilon en la poŝto:

Funkciado de maŝinlernado en Mail.ru Mail

Maŝinlernado-programisto efektivigis kontraŭ-bot-modelon, kiu malhelpas robotojn registriĝi en retpoŝto. La grafikaĵo falas al valoro kie restas nur realaj uzantoj. Ĉio estas bonega! Sed kvar horoj pasas, la robotoj ĝustigas siajn skriptojn, kaj ĉio normaliĝas. En ĉi tiu efektivigo, la programisto pasigis monaton aldonante funkciojn kaj retrejnante la modelon, sed la spamisto povis adaptiĝi en kvar horoj.

Por ne esti tiom terure dolora kaj ne devi ĉion refari poste, ni devas komence pensi pri kiel aspektos la reago kaj kion ni faros se la medio ŝanĝiĝos. Ni komencu kun kolektado de datumoj - ĉi tio estas la brulaĵo por niaj algoritmoj.

Kolekto de datumoj

Estas klare, ke por modernaj neŭralaj retoj, ju pli da datumoj, des pli bone, kaj ili fakte estas generitaj de uzantoj de la produkto. Uzantoj povas helpi nin markante datumojn, sed ni ne povas misuzi ĉi tion, ĉar iam uzantoj laciĝos de kompletigi viajn modelojn kaj ŝanĝos al alia produkto.

Unu el la plej oftaj eraroj (ĉi tie mi faras referencon al Andrew Ng) estas tro da fokuso sur metrikoj sur la testa datumaro, kaj ne pri sugestoj de la uzanto, kiu fakte estas la ĉefa mezuro de la kvalito de laboro, ĉar ni kreas. produkto por la uzanto. Se la uzanto ne komprenas aŭ ne ŝatas la laboron de la modelo, tiam ĉio estas ruinigita.

Tial, la uzanto ĉiam devus povi voĉdoni kaj devus ricevi ilon por retrosciigo. Se ni opinias, ke letero rilata al financo alvenis en la leterkeston, ni devas marki ĝin "financo" kaj desegni butonon, kiun la uzanto povas klaki kaj diri, ke ĉi tio ne estas financo.

Reago-kvalito

Ni parolu pri la kvalito de uzantreagoj. Unue, vi kaj la uzanto povas meti malsamajn signifojn en unu koncepton. Ekzemple, vi kaj viaj produktmanaĝeroj opinias, ke "financo" signifas leterojn de la banko, kaj la uzanto opinias, ke letero de avino pri ŝia pensio ankaŭ rilatas al financo. Due, estas uzantoj, kiuj senpripense amas premi butonojn sen ia logiko. Trie, la uzanto povas profunde erari pri siaj konkludoj. Frapa ekzemplo de nia praktiko estas la efektivigo de klasigilo Niĝeria spamo, tre amuza speco de spamo kie la uzanto estas petata preni plurajn milionojn da dolaroj de subite trovita malproksima parenco en Afriko. Post efektivigi ĉi tiun klasigilon, ni kontrolis la klakojn "Ne Spamo" sur ĉi tiuj retpoŝtoj, kaj montriĝis, ke 80% el ili estis suka niĝeria spamo, kio sugestas, ke uzantoj povas esti ekstreme naivuloj.

Kaj ni ne forgesu, ke la butonoj povas esti klakitaj ne nur de homoj, sed ankaŭ de ĉiaj robotoj, kiuj ŝajnigas esti retumilo. Do kruda retrosciigo ne estas bona por lernado. Kion vi povas fari kun ĉi tiu informo?

Ni uzas du alirojn:

  • Reago de ligita ML. Ekzemple, ni havas interretan kontraŭ-bot-sistemon, kiu, kiel mi menciis, faras rapidan decidon surbaze de limigita nombro da signoj. Kaj ekzistas dua, malrapida sistemo, kiu funkcias post la fakto. Ĝi havas pli da datumoj pri la uzanto, lia konduto, ktp. Kiel rezulto, la plej informita decido estas farita; sekve, ĝi havas pli altan precizecon kaj kompletecon. Vi povas direkti la diferencon en la funkciado de ĉi tiuj sistemoj al la unua kiel trejnaj datumoj. Tiel, pli simpla sistemo ĉiam provos alproksimiĝi al la agado de pli kompleksa.
  • Alklaku klasifikon. Vi povas simple klasifiki ĉiun uzantan klakon, taksi ĝian validecon kaj uzeblecon. Ni faras tion en kontraŭspam-poŝto, uzante uzant-atributojn, lian historion, sendintajn atributojn, la tekston mem kaj la rezulton de la klasigiloj. Kiel rezulto, ni ricevas aŭtomatan sistemon, kiu validigas uzantajn rimarkojn. Kaj ĉar ĝi devas esti retrejnita multe malpli ofte, ĝia laboro povas fariĝi la bazo por ĉiuj aliaj sistemoj. La ĉefa prioritato en ĉi tiu modelo estas precizeco, ĉar trejni la modelon pri malprecizaj datumoj estas plena de konsekvencoj.

Dum ni purigas la datumojn kaj plu trejnas niajn ML-sistemojn, ni ne devas forgesi pri la uzantoj, ĉar por ni miloj, milionoj da eraroj sur la grafikaĵo estas statistikoj, kaj por la uzanto ĉiu cimo estas tragedio. Krom la fakto, ke la uzanto devas iel vivi kun via eraro en la produkto, post ricevi reagojn, li atendas, ke simila situacio estos forigita en la estonteco. Sekve, ĉiam valoras doni al uzantoj ne nur la ŝancon voĉdoni, sed ankaŭ korekti la konduton de ML-sistemoj, kreante, ekzemple, personajn heŭristikojn por ĉiu responda klako; en la kazo de poŝto, ĉi tio povus esti la kapablo filtri. tiaj leteroj laŭ sendinto kaj titolo por ĉi tiu uzanto.

Vi ankaŭ devas konstrui modelon bazitan sur iuj raportoj aŭ petoj por subteni duonaŭtomatan aŭ mana reĝimon por ke aliaj uzantoj ne suferu similajn problemojn.

Heŭristiko por lernado

Estas du problemoj kun ĉi tiuj heŭristiko kaj lambastonoj. La unua estas, ke la ĉiam kreskanta nombro da lambastonoj malfacilas konservi, des malpli ilian kvaliton kaj rendimenton dum longa tempo. La dua problemo estas, ke la eraro eble ne estas ofta, kaj kelkaj klakoj por plu trejni la modelon ne sufiĉos. Ŝajnus, ke ĉi tiuj du senrilataj efikoj povas esti signife neŭtraligitaj se la sekva aliro estas aplikata.

  1. Ni kreas provizoran lambastonon.
  2. Ni sendas datumojn de ĝi al la modelo, ĝi regule ĝisdatigas sin, inkluzive de la ricevitaj datumoj. Ĉi tie, kompreneble, gravas, ke la heŭristiko havas altan precizecon por ne redukti la kvaliton de la datumoj en la trejna aro.
  3. Tiam ni agordas la monitoradon por ekigi la lambastonon, kaj se post iom da tempo la lambastono ne plu funkcias kaj estas tute kovrita de la modelo, tiam vi povas sekure forigi ĝin. Nun ĉi tiu problemo verŝajne ne okazos denove.

Do armeo de lambastonoj estas tre utila. La ĉefa afero estas, ke ilia servo estas urĝa kaj ne konstanta.

Plia trejnado

Retrejnado estas la procezo aldoni novajn datumojn akiritajn kiel rezulto de retrosciigo de uzantoj aŭ aliaj sistemoj, kaj trejnado de ekzistanta modelo sur ĝi. Povas esti pluraj problemoj kun plia trejnado:

  1. La modelo eble simple ne subtenas plian trejnadon, sed lernas nur de nulo.
  2. Nenie en la libro de la naturo estas skribite, ke plia trejnado certe plibonigos la kvaliton de laboro en produktado. Ofte okazas la malo, tio estas, nur difekto eblas.
  3. Ŝanĝoj povas esti neantaŭvideblaj. Ĉi tio estas sufiĉe subtila punkto, kiun ni mem identigis. Eĉ se nova modelo en A/B-testo montras similajn rezultojn kompare kun la nuna, tio ne signifas, ke ĝi funkcios idente. Ilia laboro povas diferenci je nur unu procento, kio povas alporti novajn erarojn aŭ redoni malnovajn, kiuj jam estis korektitaj. Kaj ni kaj la uzantoj jam scias kiel vivi kun nunaj eraroj, kaj kiam granda nombro da novaj eraroj aperas, la uzanto eble ankaŭ ne komprenas kio okazas, ĉar li atendas antaŭvideblan konduton.

Tial, la plej grava afero en plia trejnado estas certigi, ke la modelo estas plibonigita, aŭ almenaŭ ne plimalbonigita.

La unua afero, kiu venas al la menso, kiam ni parolas pri plia trejnado, estas la Aktiva Lernado. Kion ĉi tio signifas? Ekzemple, la klasigilo determinas ĉu retpoŝto rilatas al financo, kaj ĉirkaŭ ĝia decida limo ni aldonas specimenon de etikeditaj ekzemploj. Ĉi tio funkcias bone, ekzemple, en reklamado, kie estas multaj sugestoj kaj vi povas trejni la modelon interrete. Kaj se estas malmulte da sugestoj, tiam ni ricevas tre biaitan specimenon rilate al la produktada datuma distribuo, surbaze de kiu estas neeble taksi la konduton de la modelo dum operacio.

Funkciado de maŝinlernado en Mail.ru Mail

Fakte, nia celo estas konservi malnovajn ŝablonojn, jam konatajn modelojn, kaj akiri novajn. Kontinueco estas grava ĉi tie. La modelo, kiun ni ofte multe zorgis por ruliĝi, jam funkcias, do ni povas koncentriĝi pri ĝia agado.

Malsamaj modeloj estas uzataj en poŝto: arboj, liniaj, neŭralaj retoj. Por ĉiu ni faras nian propran aldonan trejnan algoritmon. En la procezo de plia trejnado, ni ricevas ne nur novajn datumojn, sed ankaŭ ofte novajn funkciojn, kiujn ni konsideros en ĉiuj algoritmoj sube.

Liniaraj modeloj

Ni diru, ke ni havas loĝistikan regreson. Ni kreas perdan modelon el la sekvaj komponantoj:

  • LogLoss sur novaj datumoj;
  • ni reguligas la pezojn de novaj funkcioj (ni ne tuŝas la malnovajn);
  • ni ankaŭ lernas de malnovaj datumoj por konservi malnovajn ŝablonojn;
  • kaj, eble, la plej grava afero: ni aldonas Harmonian Reguligon, kiu garantias, ke la pezoj ne multe ŝanĝiĝos rilate al la malnova modelo laŭ la normo.

Ĉar ĉiu Perdo-komponento havas koeficientojn, ni povas elekti la optimumajn valorojn por nia tasko per krucvalidado aŭ surbaze de produktaj postuloj.

Funkciado de maŝinlernado en Mail.ru Mail

Arboj

Ni transiru al decidaj arboj. Ni kompilis la sekvan algoritmon por plia trejnado de arboj:

  1. La produktado prizorgas arbaron de 100-300 arboj, kiu estas trejnita sur malnova datumaro.
  2. Fine ni forigas M = 5 pecojn kaj aldonas 2M = 10 novajn, trejnitajn sur la tuta datuma aro, sed kun alta pezo por la novaj datumoj, kio nature garantias pliigan ŝanĝon en la modelo.

Evidente, kun la tempo, la nombro da arboj multe pliiĝas, kaj ili devas esti periode reduktitaj por plenumi la tempon. Por fari tion, ni uzas la nun ĉiean Distiladon de Scio (KD). Mallonge pri la principo de ĝia funkciado.

  1. Ni havas la nunan "kompleksan" modelon. Ni kuras ĝin sur la trejna datumo kaj ricevas la klasan probablodistribuon ĉe la eligo.
  2. Poste, ni trejnas la studentan modelon (la modelon kun malpli da arboj en ĉi tiu kazo) por ripeti la rezultojn de la modelo uzante la klasdistribuon kiel la celvariablon.
  3. Gravas rimarki ĉi tie, ke ni neniel uzas la datummarkon, kaj tial ni povas uzi arbitrajn datumojn. Kompreneble, ni uzas datuman specimenon de la batalfluo kiel trejnan specimenon por la studenta modelo. Tiel, la trejna aro permesas al ni certigi la precizecon de la modelo, kaj la flua specimeno garantias similan agadon pri la produktada distribuo, kompensante la antaŭjuĝon de la trejna aro.

Funkciado de maŝinlernado en Mail.ru Mail

La kombinaĵo de ĉi tiuj du teknikoj (aldonado de arboj kaj periode redukti ilian nombron uzante Knowledge Distillation) certigas la enkondukon de novaj padronoj kaj kompletan kontinuecon.

Kun la helpo de KD, ni ankaŭ faras malsamajn operaciojn pri modelaj funkcioj, kiel forigi funkciojn kaj labori pri mankoj. En nia kazo, ni havas kelkajn gravajn statistikajn funkciojn (de sendintoj, tekstaj haŝoj, URL-oj, ktp.), kiuj estas konservitaj en la datumbazo, kiuj tendencas malsukcesi. La modelo, kompreneble, ne estas preta por tia evoluo de eventoj, ĉar malsukcesaj situacioj ne okazas en la trejna aro. En tiaj kazoj, ni kombinas KD kaj aŭgmentajn teknikojn: dum trejnado por parto de la datumoj, ni forigas aŭ restarigas la necesajn funkciojn, kaj ni prenas la originalajn etikedojn (produktaĵoj de la nuna modelo), kaj la studenta modelo lernas ripeti ĉi tiun distribuon. .

Funkciado de maŝinlernado en Mail.ru Mail

Ni rimarkis, ke ju pli serioza modela manipulado okazas, des pli granda estas la procento de fadena specimeno bezonata.

Forigo de trajtoj, la plej simpla operacio, postulas nur malgrandan parton de la fluo, ĉar nur kelkaj trajtoj ŝanĝiĝas, kaj la nuna modelo estis trejnita sur la sama aro - la diferenco estas minimuma. Por simpligi la modelon (reduktante la nombron da arboj plurfoje), jam necesas 50 ĝis 50. Kaj por preterlasoj de gravaj statistikaj trajtoj, kiuj serioze influos la agadon de la modelo, necesas eĉ pli da fluo por ebenigi la laboron de la modelo. nova preterlasa modelo sur ĉiaj literoj.

Funkciado de maŝinlernado en Mail.ru Mail

RapidaTeksto

Ni transiru al FastText. Mi memorigu al vi, ke la reprezento (Enigo) de vorto konsistas el la sumo de la enigo de la vorto mem kaj ĉiuj ĝiaj literoj N-gramoj, kutime trigramoj. Ĉar povas esti sufiĉe multe da trigramoj, Bucket Hashing estas uzata, tio estas, konverti la tutan spacon en certan fiksan hashmapon. Kiel rezulto, la pezomatrico estas akirita kun la dimensio de la interna tavolo per nombro da vortoj + siteloj.

Kun plia trejnado, novaj signoj aperas: vortoj kaj trigramoj. Nenio signifa okazas en norma sekva trejnado de Facebook. Nur malnovaj pezoj kun kruc-entropio estas retrejnitaj sur novaj datenoj. Tiel, novaj funkcioj ne estas uzataj; kompreneble, ĉi tiu aliro havas ĉiujn supre priskribitajn malavantaĝojn asociitajn kun la neantaŭvidebleco de la modelo en produktado. Tial ni iomete modifis FastText. Ni aldonas ĉiujn novajn pezojn (vortoj kaj trigramoj), vastigas la tutan matricon kun kruc-entropio kaj aldonas harmonian reguligon analoge kun la lineara modelo, kiu garantias sensignifan ŝanĝon en la malnovaj pezoj.

Funkciado de maŝinlernado en Mail.ru Mail

CNNa

Konvoluciaj retoj estas iom pli komplikaj. Se la lastaj tavoloj estas kompletigitaj en la CNN, tiam, kompreneble, vi povas apliki harmonian reguligon kaj garantii kontinuecon. Sed se necesas plia trejnado de la tuta reto, tiam tia reguligo ne plu povas esti aplikata al ĉiuj tavoloj. Tamen, ekzistas eblo trejni komplementajn enkonstruaĵojn per Triopa Perdo (originala artikolo).

Triobla Perdo

Uzante kontraŭ-phishing taskon kiel ekzemplon, ni rigardu Tripleto-Perdo ĝenerale. Ni prenas nian emblemon, kaj ankaŭ pozitivajn kaj negativajn ekzemplojn de emblemoj de aliaj kompanioj. Ni minimumigas la distancon inter la unua kaj maksimumigas la distancon inter la dua, ni faras tion kun malgranda breĉo por certigi pli grandan kompaktecon de la klasoj.

Funkciado de maŝinlernado en Mail.ru Mail

Se ni plu trejnas la reton, tiam nia metrika spaco tute ŝanĝiĝas, kaj ĝi fariĝas tute nekongrua kun la antaŭa. Ĉi tio estas grava problemo en problemoj kiuj uzas vektorojn. Por ĉirkaŭiri ĉi tiun problemon, ni miksos malnovajn enkonstruaĵojn dum trejnado.

Ni aldonis novajn datumojn al la trejnado kaj trejnas la duan version de la modelo de nulo. En la dua etapo, ni plue trejnas nian reton (Finetuning): unue la lasta tavolo estas kompletigita, kaj tiam la tuta reto estas malfrostita. En la procezo de komponado de trinasktioj, ni kalkulas nur parton de la enkonstruadoj uzante la trejnitan modelon, la reston - uzante la malnovan. Tiel, en la procezo de plia trejnado, ni certigas la kongruon de metrikaj spacoj v1 kaj v2. Unika versio de harmonia reguligo.

Funkciado de maŝinlernado en Mail.ru Mail

Tuta arkitekturo

Se ni konsideras la tutan sistemon uzante kontraŭspamon kiel ekzemplon, tiam la modeloj ne estas izolitaj, sed nestitaj unu en la alia. Ni prenas bildojn, tekston kaj aliajn funkciojn, uzante CNN kaj Fast Text ni ricevas enkonstruojn. Poste, klasigiloj estas aplikataj supre de la enkonstruaĵoj, kiuj provizas poentarojn por diversaj klasoj (specoj de leteroj, spamo, ĉeesto de emblemo). La signaloj kaj signoj jam eniras la arbaron de arboj por la fina decido esti farita. Individuaj klasifikiloj en ĉi tiu skemo ebligas pli bone interpreti la rezultojn de la sistemo kaj pli specife retrejni komponentojn en kazo de problemoj, prefere ol nutri ĉiujn datumojn en decidarbojn en kruda formo.

Funkciado de maŝinlernado en Mail.ru Mail

Kiel rezulto, ni garantias kontinuecon je ĉiu nivelo. Ĉe la malsupra nivelo en CNN kaj Rapida Teksto ni uzas harmonian reguligon, por la klasigiloj en la mezo ni ankaŭ uzas harmonian reguligon kaj tazkalibradon por konsistenco de la probabla distribuo. Nu, arba akcelo estas trejnita laŭgrade aŭ uzante Scion Distiladon.

Ĝenerale, konservi tian nestitan maŝinlernsistemon kutime estas doloro, ĉar iu ajn komponanto ĉe la pli malalta nivelo kondukas al ĝisdatigo de la tuta sistemo supre. Sed ĉar en nia aranĝo ĉiu komponanto ŝanĝiĝas iomete kaj kongruas kun la antaŭa, la tuta sistemo povas esti ĝisdatigita peco post peco sen neceso retreni la tutan strukturon, kio ebligas ĝin subteni sen serioza superkosto.

Deploji

Ni diskutis pri kolekto de datumoj kaj plia trejnado de malsamaj specoj de modeloj, do ni iras al ilia disfaldo en la produktadmedion.

A/B-testado

Kiel mi diris antaŭe, en la procezo de kolektado de datumoj, ni kutime ricevas antaŭjuĝan specimenon, el kiu estas neeble taksi la produktan rendimenton de la modelo. Tial, dum deplojiĝo, la modelo devas esti komparita kun la antaŭa versio por kompreni kiel aferoj efektive iras, tio estas, fari A/B-testojn. Fakte, la procezo de ruliĝo kaj analizo de leteroj estas sufiĉe rutina kaj povas esti facile aŭtomatigita. Ni disvolvas niajn modelojn iom post iom al 5%, 30%, 50% kaj 100% de uzantoj, dum ni kolektas ĉiujn disponeblajn metrikojn pri modelaj respondoj kaj uzant-reagoj. En la kazo de iuj gravaj eksteruloj, ni aŭtomate retroiras la modelon, kaj por aliaj kazoj, kolektinte sufiĉan nombron da uzantklakoj, ni decidas pliigi la procenton. Kiel rezulto, ni alportas la novan modelon al 50% de uzantoj tute aŭtomate, kaj la lanĉo al la tuta publiko estos aprobita de persono, kvankam ĉi tiu paŝo povas esti aŭtomatigita.

Tamen, la A/B-testa procezo ofertas spacon por optimumigo. La fakto estas, ke ĉiu A/B-testo estas sufiĉe longa (en nia kazo ĝi daŭras de 6 ĝis 24 horoj depende de la kvanto de sugestoj), kio faras ĝin sufiĉe multekosta kaj kun limigitaj rimedoj. Krome, sufiĉe alta procento de fluo por la testo estas postulata por esence akceli la totalan tempon de la A/B-testo (rekruti statistike signifan provaĵon por taksi metrikon je malgranda procento povas preni tre longan tempon), kio faras la nombro da A/B-fendoj ekstreme limigita. Evidente, ni devas testi nur la plej promesplenajn modelojn, el kiuj ni ricevas sufiĉe multe dum la aldona trejnado.

Por solvi ĉi tiun problemon, ni trejnis apartan klasigilon, kiu antaŭdiras la sukceson de A/B-testo. Por fari tion, ni prenas decidajn statistikojn, Precizecon, Revokon kaj aliajn metrikojn pri la trejna aro, pri la prokrastita kaj sur la specimeno de la rivereto kiel funkciojn. Ni ankaŭ komparas la modelon kun la nuna en produktado, kun heŭristiko, kaj konsideras la Kompleksecon de la modelo. Uzante ĉiujn ĉi tiujn funkciojn, klasigilo trejnita pri testa historio taksas kandidatojn modelojn, en nia kazo ĉi tiuj estas arbaroj de arboj, kaj decidas kiun uzi en la A/B-testo.

Funkciado de maŝinlernado en Mail.ru Mail

En la momento de efektivigo, ĉi tiu aliro permesis al ni pliigi la nombron da sukcesaj A/B-testoj plurfoje.

Testado kaj Monitorado

Testado kaj monitorado, strange, ne damaĝas nian sanon; male, ili plibonigas ĝin kaj malpezigas nin de nenecesa streso. Testado permesas malhelpi malsukceson, kaj monitorado permesas vin detekti ĝin ĝustatempe por redukti la efikon al uzantoj.

Gravas kompreni ĉi tie, ke pli aŭ malpli frue via sistemo ĉiam eraros - tio estas pro la evoluciklo de iu ajn programaro. Komence de la sistemo-disvolviĝo ĉiam estas multaj eraroj ĝis ĉio trankviliĝas kaj la ĉefa etapo de novigado finiĝas. Sed kun la tempo, entropio prenas sian paspagon, kaj eraroj aperas denove - pro la degenero de komponantoj ĉirkaŭe kaj ŝanĝoj en datumoj, pri kiuj mi parolis komence.

Ĉi tie mi ŝatus noti, ke ajna maŝinlernada sistemo devus esti konsiderata el la vidpunkto de sia profito dum sia tuta vivociklo. La suba grafikaĵo montras ekzemplon pri kiel la sistemo funkcias por kapti maloftan specon de spamo (la linio en la grafikaĵo estas proksime de nulo). Iun tagon, pro malĝuste kaŝmemorita atributo, ŝi freneziĝis. Kiel bonŝanco tion, ekzistis neniu monitorado por nenormala ekigado; kiel rezulto, la sistemo komencis konservi leterojn en grandaj kvantoj al la "spamo" dosierujo ĉe la decida limo. Malgraŭ korektado de la sekvoj, la sistemo jam faris erarojn tiom da fojoj, ke ĝi ne pagos por si eĉ post kvin jaroj. Kaj ĉi tio estas kompleta fiasko de la vidpunkto de la vivociklo de la modelo.

Funkciado de maŝinlernado en Mail.ru Mail

Tial tia simpla afero kiel monitorado povas fariĝi ŝlosilo en la vivo de modelo. Krom normaj kaj evidentaj metrikoj, ni konsideras la distribuadon de modelaj respondoj kaj interpunkcioj, same kiel la distribuadon de ŝlosilaj karakterizaj valoroj. Uzante KL-diverĝon, ni povas kompari la nunan distribuon kun la historia aŭ la valorojn en la A/B-testo kun la resto de la fluo, kio ebligas al ni rimarki anomaliojn en la modelo kaj restarigi ŝanĝojn ĝustatempe.

Plejofte, ni lanĉas niajn unuajn versiojn de sistemoj uzante simplajn heŭristikojn aŭ modelojn, kiujn ni uzas kiel monitoradon en la estonteco. Ekzemple, ni kontrolas la NER-modelon kompare kun la regulaj por specifaj interretaj vendejoj, kaj se la klasigilo-kovrado malpliiĝas kompare kun ili, tiam ni komprenas la kialojn. Alia utila uzo de heŭristiko!

Rezultoj

Ni reiru la ĉefajn ideojn de la artikolo.

  • Fibdeck. Ni ĉiam pensas pri la uzanto: kiel li vivos kun niaj eraroj, kiel li povos raporti ilin. Ne forgesu, ke uzantoj ne estas fonto de pura sugesto por trejnaj modeloj, kaj ĝi devas esti purigita helpe de helpaj ML-sistemoj. Se ne eblas kolekti signalon de la uzanto, tiam ni serĉas alternativajn fontojn de retrosciigo, ekzemple, konektitaj sistemoj.
  • Plia trejnado. La ĉefa afero ĉi tie estas kontinueco, do ni fidas je la nuna produktmodelo. Ni trejnas novajn modelojn por ke ili ne multe diferencas de la antaŭa pro harmonia reguligo kaj similaj lertaĵoj.
  • Deploji. Aŭtomata deplojo bazita sur metriko multe reduktas la tempon por efektivigado de modeloj. Monitorado de statistikoj kaj distribuado de decido, la nombro da faloj de uzantoj estas deviga por via trankvila dormo kaj produktiva semajnfino.

Nu, mi esperas, ke ĉi tio helpos vin plibonigi viajn ML-sistemojn pli rapide, akiri ilin surmerkatigi pli rapide kaj fari ilin pli fidindaj kaj malpli streĉaj.

fonto: www.habr.com

Aldoni komenton