Drift av maskininlärning i Mail.ru Mail

Drift av maskininlärning i Mail.ru Mail

Baserat på mina tal på Highload++ och DataFest Minsk 2019.

För många idag är post en integrerad del av livet på nätet. Med dess hjälp bedriver vi affärskorrespondens, lagrar all slags viktig information relaterad till ekonomi, hotellbokningar, beställningar och mycket mer. I mitten av 2018 formulerade vi en produktstrategi för postutveckling. Hur ska modern post vara?

Mail måste vara smart, det vill säga att hjälpa användare att navigera i den ökande mängden information: filtrera, strukturera och tillhandahålla den på det mest bekväma sättet. Det måste hon vara användbar, så att du kan lösa olika uppgifter direkt i din brevlåda, till exempel betala böter (en funktion som jag tyvärr använder). Och samtidigt måste förstås post ge informationsskydd, skära bort skräppost och skydda mot hacking, det vill säga vara säker.

Dessa områden definierar ett antal nyckelproblem, av vilka många kan lösas effektivt med hjälp av maskininlärning. Här är exempel på redan befintliga funktioner som utvecklats som en del av strategin – en för varje riktning.

  • Smart svar. Mail har en smart svarsfunktion. Det neurala nätverket analyserar brevets text, förstår dess innebörd och syfte och erbjuder som ett resultat de tre lämpligaste svarsalternativen: positiv, negativ och neutral. Detta hjälper till att avsevärt spara tid när du svarar på brev, och svarar också ofta på ett icke-standardiserat och roligt sätt.
  • Gruppera e-postmeddelandenrelaterade till beställningar i nätbutiker. Vi handlar ofta online och som regel kan butiker skicka flera e-postmeddelanden för varje beställning. Till exempel, från AliExpress, den största tjänsten, kommer många bokstäver in för en beställning, och vi beräknade att i terminalfallet kunde deras antal nå upp till 29. Därför extraherar vi beställningsnumret med modellen Named Entity Recognition. och annan information från texten och gruppera alla bokstäver i en tråd. Vi visar även grundläggande information om beställningen i en separat ruta, vilket gör det enklare att arbeta med den här typen av mejl.

    Drift av maskininlärning i Mail.ru Mail

  • Antiphishing. Nätfiske är en särskilt farlig bedräglig typ av e-post, med hjälp av vilken angripare försöker få ekonomisk information (inklusive användarens bankkort) och inloggningar. Sådana brev efterliknar verkliga brev som skickas av tjänsten, inklusive visuellt. Därför, med hjälp av Computer Vision, känner vi igen logotyper och designstilen på brev från stora företag (till exempel Mail.ru, Sber, Alfa) och tar hänsyn till detta tillsammans med text och andra funktioner i våra spam- och nätfiskeklassificerare .

Maskininlärning

Lite om maskininlärning i e-post i allmänhet. Mail är ett mycket laddat system: i genomsnitt 1,5 miljarder brev per dag passerar våra servrar för 30 miljoner DAU-användare. Ett 30-tal maskininlärningssystem stöder alla nödvändiga funktioner och funktioner.

Varje bokstav går igenom en hel klassificeringspipeline. Först stänger vi bort spam och lämnar bra mejl. Användare märker ofta inte arbetet med antispam, eftersom 95-99% av skräpposten inte ens hamnar i lämplig mapp. Spamigenkänning är en mycket viktig del av vårt system, och den svåraste, eftersom det inom anti-spamområdet finns en ständig anpassning mellan försvars- och attacksystem, vilket ger en kontinuerlig teknisk utmaning för vårt team.

Därefter skiljer vi brev från människor och robotar. E-postmeddelanden från människor är det viktigaste, så vi tillhandahåller funktioner som Smart Reply för dem. Brev från robotar är uppdelade i två delar: transaktionella - det här är viktiga brev från tjänster, till exempel bekräftelser på köp eller hotellbokningar, ekonomi och information - dessa är företagsreklam, rabatter.

Vi anser att transaktionella e-postmeddelanden är lika viktiga som personlig korrespondens. De bör finnas till hands, eftersom vi ofta snabbt behöver hitta information om en beställning eller flygbiljett, och vi lägger tid på att leta efter dessa bokstäver. Av bekvämlighetsskäl delar vi dem därför automatiskt in i sex huvudkategorier: resor, beställningar, ekonomi, biljetter, registreringar och slutligen böter.

Informationsbrev är den största och förmodligen mindre viktiga gruppen, som inte kräver ett omedelbart svar, eftersom inget väsentligt kommer att förändras i användarens liv om han inte läser ett sådant brev. I vårt nya gränssnitt komprimerar vi dem i två trådar: sociala nätverk och nyhetsbrev, vilket rensar inkorgen visuellt och lämnar bara viktiga meddelanden synliga.

Drift av maskininlärning i Mail.ru Mail

Utnyttjande

Ett stort antal system orsakar många svårigheter i drift. När allt kommer omkring försämras modeller med tiden, som vilken programvara som helst: funktioner går sönder, maskiner misslyckas, koden blir sned. Dessutom förändras data ständigt: nya läggs till, användarbeteendemönster omvandlas etc, så en modell utan ordentligt stöd kommer att fungera sämre och sämre med tiden.

Vi får inte glömma att ju djupare maskininlärning tränger in i användarnas liv, desto större inverkan har de på ekosystemet, och som ett resultat desto mer ekonomiska förluster eller vinster kan marknadsaktörerna få. Därför, inom ett ökande antal områden, anpassar sig spelare till arbetet med ML-algoritmer (klassiska exempel är reklam, sökning och redan nämnda antispam).

Maskininlärningsuppgifter har också en egenhet: alla, även mindre, förändringar i systemet kan generera mycket arbete med modellen: arbete med data, omskolning, implementering, vilket kan ta veckor eller månader. Därför, ju snabbare miljön där dina modeller fungerar förändras, desto mer ansträngning kräver det att underhålla dem. Ett team kan skapa många system och vara glada över det, men sedan spendera nästan alla sina resurser på att underhålla dem, utan möjlighet att göra något nytt. Vi stötte en gång i en sådan situation i antispam-teamet. Och de drog den uppenbara slutsatsen att supporten måste automatiseras.

Automation

Vad kan automatiseras? Nästan allt, faktiskt. Jag har identifierat fyra områden som definierar maskininlärningsinfrastrukturen:

  • datainsamling;
  • ytterligare utbildning;
  • distribuera;
  • testning & övervakning.

Om miljön är instabil och ständigt förändras så visar sig hela infrastrukturen kring modellen vara mycket viktigare än själva modellen. Det kan vara en gammal bra linjär klassificerare, men om du matar den med rätt funktioner och får bra feedback från användarna, kommer den att fungera mycket bättre än State-Of-The-Art-modeller med alla klockor och visselpipor.

Återkopplingsslinga

Denna cykel kombinerar datainsamling, ytterligare utbildning och driftsättning - i själva verket hela modellens uppdateringscykel. Varför är det viktigt? Titta på registreringsschemat i mailet:

Drift av maskininlärning i Mail.ru Mail

En maskininlärningsutvecklare har implementerat en anti-bot-modell som förhindrar bots från att registrera sig i e-post. Grafen sjunker till ett värde där endast riktiga användare finns kvar. Allt är bra! Men fyra timmar går, botsarna justerar sina skript och allt återgår till det normala. I den här implementeringen tillbringade utvecklaren en månad med att lägga till funktioner och träna om modellen, men spammaren kunde anpassa sig på fyra timmar.

För att inte ha så fruktansvärt ont och inte behöva göra om allt senare måste vi till en början fundera på hur återkopplingsslingan kommer att se ut och vad vi gör om miljön förändras. Låt oss börja med att samla in data - det här är bränslet för våra algoritmer.

Datainsamling

Det är tydligt att för moderna neurala nätverk, ju mer data, desto bättre, och de genereras faktiskt av användare av produkten. Användare kan hjälpa oss genom att markera data, men vi kan inte missbruka detta, för någon gång kommer användare att tröttna på att färdigställa dina modeller och byta till en annan produkt.

Ett av de vanligaste misstagen (här gör jag en hänvisning till Andrew Ng) är för mycket fokus på mätvärden på testdatauppsättningen, och inte på feedback från användaren, vilket faktiskt är det främsta måttet på kvaliteten på arbetet, eftersom vi skapar en produkt för användaren. Om användaren inte förstår eller inte gillar modellens arbete, är allt förstört.

Därför ska användaren alltid kunna rösta och ska ges ett verktyg för feedback. Om vi ​​tror att ett brev relaterat till ekonomi har kommit in i brevlådan behöver vi markera det som "ekonomi" och rita en knapp som användaren kan klicka på och säga att detta inte är ekonomi.

Feedbackkvalitet

Låt oss prata om kvaliteten på användarfeedback. För det första kan du och användaren lägga olika betydelser i ett koncept. Till exempel tror du och dina produktchefer att ”ekonomi” betyder brev från banken och brukaren tycker att ett brev från mormor om hennes pension också syftar på ekonomi. För det andra finns det användare som tanklöst älskar att trycka på knappar utan någon logik. För det tredje kan användaren ha djupt fel i sina slutsatser. Ett slående exempel från vår praxis är implementeringen av en klassificerare Nigeriansk skräppost, en väldigt rolig typ av spam där användaren uppmanas att ta flera miljoner dollar från en plötsligt hittad avlägsen släkting i Afrika. Efter att ha implementerat denna klassificerare kontrollerade vi "Inte skräppost"-klick på dessa e-postmeddelanden, och det visade sig att 80 % av dem var saftig nigeriansk spam, vilket tyder på att användare kan vara extremt godtrogna.

Och låt oss inte glömma att knapparna inte bara kan klickas av människor utan också av alla möjliga bots som utger sig för att vara en webbläsare. Så rå feedback är inte bra för lärande. Vad kan du göra med denna information?

Vi använder två metoder:

  • Feedback från länkad ML. Vi har till exempel ett online anti-bot-system, som, som jag nämnde, fattar ett snabbt beslut baserat på ett begränsat antal tecken. Och det finns ett andra, långsamt system som fungerar i efterhand. Den har mer information om användaren, hans beteende osv. Som ett resultat fattas det mest välgrundade beslutet, och därför har det högre noggrannhet och fullständighet. Du kan rikta skillnaden i driften av dessa system till det första som träningsdata. Således kommer ett enklare system alltid att försöka närma sig prestandan hos ett mer komplext.
  • Klicka klassificering. Du kan helt enkelt klassificera varje användarklick, utvärdera dess giltighet och användbarhet. Vi gör detta i antispam-post, med hjälp av användarattribut, hans historia, avsändarattribut, själva texten och resultatet av klassificerarna. Som ett resultat får vi ett automatiskt system som validerar användarfeedback. Och eftersom det behöver omskolas mycket mer sällan, kan dess arbete bli grunden för alla andra system. Huvudprioriteringen i denna modell är precision, eftersom träning av modellen på felaktiga data är fylld med konsekvenser.

Medan vi rensar data och vidareutbildar våra ML-system får vi inte glömma användarna, för för oss är tusentals, miljoner fel på grafen statistik, och för användaren är varje bugg en tragedi. Förutom att användaren på något sätt måste leva med ditt fel i produkten, efter att ha fått feedback, förväntar han sig att en liknande situation kommer att elimineras i framtiden. Därför är det alltid värt att ge användare inte bara möjligheten att rösta, utan också att korrigera beteendet hos ML-system, skapa till exempel personlig heuristik för varje feedbackklick; i fallet med e-post kan detta vara möjligheten att filtrera sådana brev efter avsändare och titel för denna användare.

Du behöver också bygga en modell baserad på vissa rapporter eller samtal till support i halvautomatiskt eller manuellt läge så att andra användare inte drabbas av liknande problem.

Heuristik för lärande

Det finns två problem med dessa heuristik och kryckor. Den första är att det ständigt ökande antalet kryckor är svårt att underhålla, än mindre deras kvalitet och prestanda under lång tid. Det andra problemet är att felet kanske inte är frekvent, och några klick för att vidareutbilda modellen räcker inte. Det verkar som om dessa två orelaterade effekter kan neutraliseras avsevärt om följande tillvägagångssätt tillämpas.

  1. Vi skapar en tillfällig krycka.
  2. Vi skickar data från den till modellen, den uppdaterar sig regelbundet, inklusive mottagen data. Här är det naturligtvis viktigt att heuristiken har hög noggrannhet för att inte försämra kvaliteten på datan i träningssetet.
  3. Sedan ställer vi in ​​övervakningen för att utlösa kryckan, och om kryckan efter en tid inte längre fungerar och är helt täckt av modellen, kan du säkert ta bort den. Nu är det osannolikt att det här problemet kommer att hända igen.

Så en armé av kryckor är väldigt användbar. Huvudsaken är att deras service är brådskande och inte permanent.

Ytterligare utbildning

Omskolning är processen att lägga till ny data som erhålls som ett resultat av feedback från användare eller andra system, och träna en befintlig modell på det. Det kan finnas flera problem med ytterligare utbildning:

  1. Modellen kanske helt enkelt inte stöder ytterligare utbildning, utan lär sig bara från grunden.
  2. Ingenstans i naturens bok står det skrivet att ytterligare utbildning säkerligen kommer att förbättra kvaliteten på arbetet i produktionen. Ofta händer det motsatta, det vill säga endast försämring är möjlig.
  3. Förändringar kan vara oförutsägbara. Detta är en ganska subtil punkt som vi har identifierat för oss själva. Även om en ny modell i ett A/B-test visar liknande resultat jämfört med den nuvarande, betyder det inte att den kommer att fungera identiskt. Deras arbete kan skilja sig åt på bara en procent, vilket kan leda till nya fel eller returnera gamla som redan har rättats. Både vi och användarna vet redan hur vi ska leva med aktuella fel, och när ett stort antal nya fel uppstår kanske användaren inte heller förstår vad som händer, eftersom han förväntar sig ett förutsägbart beteende.

Därför är det viktigaste i tilläggsutbildningen att se till att modellen förbättras, eller åtminstone inte försämras.

Det första som kommer att tänka på när vi pratar om tilläggsutbildning är tillvägagångssättet Active Learning. Vad betyder det här? Till exempel bestämmer klassificeraren om ett e-postmeddelande är relaterat till ekonomi, och runt dess beslutsgräns lägger vi till ett urval av märkta exempel. Detta fungerar bra till exempel i annonsering, där det finns mycket feedback och man kan träna modellen online. Och om det finns lite feedback, får vi ett mycket partiskt urval i förhållande till produktionsdatadistributionen, på grundval av vilket det är omöjligt att utvärdera modellens beteende under drift.

Drift av maskininlärning i Mail.ru Mail

Faktum är att vårt mål är att bevara gamla mönster, redan kända modeller och skaffa nya. Kontinuitet är viktigt här. Modellen, som vi ofta ansträngde oss för att rulla ut, fungerar redan, så vi kan fokusera på dess prestanda.

Olika modeller används i post: träd, linjära, neurala nätverk. För varje gör vi vår egen extra träningsalgoritm. I processen med ytterligare utbildning får vi inte bara ny data, utan också ofta nya funktioner, som vi kommer att ta hänsyn till i alla algoritmer nedan.

Linjära modeller

Låt oss säga att vi har logistisk regression. Vi skapar en förlustmodell av följande komponenter:

  • Loggförlust på ny data;
  • vi reglerar vikten av nya funktioner (vi rör inte de gamla);
  • vi lär oss också av gamla data för att bevara gamla mönster;
  • och kanske det viktigaste: vi lägger till Harmonic Regularization, som garanterar att vikterna inte kommer att förändras mycket i förhållande till den gamla modellen enligt normen.

Eftersom varje förlustkomponent har koefficienter kan vi välja de optimala värdena för vår uppgift genom korsvalidering eller baserat på produktkrav.

Drift av maskininlärning i Mail.ru Mail

Деревья

Låt oss gå vidare till beslutsträden. Vi har sammanställt följande algoritm för ytterligare träning av träd:

  1. Produktionen driver en skog med 100-300 träd, som tränas på en gammal datamängd.
  2. I slutet tar vi bort M = 5 stycken och lägger till 2M = 10 nya, tränade på hela datamängden, men med en hög vikt för den nya datan, vilket naturligtvis garanterar en stegvis förändring i modellen.

Uppenbarligen ökar antalet träd kraftigt med tiden, och de måste periodvis minskas för att hålla tidpunkterna. För att göra detta använder vi den nu allestädes närvarande Knowledge Destillation (KD). Kort om principen för dess funktion.

  1. Vi har den nuvarande "komplexa" modellen. Vi kör det på träningsdatauppsättningen och får klasssannolikhetsfördelningen vid utgången.
  2. Därefter tränar vi elevmodellen (modellen med färre träd i det här fallet) att upprepa modellens resultat med hjälp av klassfördelningen som målvariabel.
  3. Det är viktigt att notera här att vi inte använder datamängdsuppmärkningen på något sätt, och därför kan vi använda godtyckliga data. Naturligtvis använder vi ett dataprov från stridsströmmen som ett träningsprov för elevmodellen. Sålunda tillåter träningsuppsättningen oss att säkerställa modellens noggrannhet, och strömprovet garanterar en liknande prestanda på produktionsfördelningen, vilket kompenserar för träningsuppsättningens bias.

Drift av maskininlärning i Mail.ru Mail

Kombinationen av dessa två tekniker (att lägga till träd och periodiskt minska antalet med hjälp av kunskapsdestillation) säkerställer införandet av nya mönster och fullständig kontinuitet.

Med hjälp av KD utför vi även olika operationer på modellfunktioner, som att ta bort funktioner och arbeta med luckor. I vårt fall har vi ett antal viktiga statistiska funktioner (av avsändare, texthashar, webbadresser etc.) som lagras i databasen, som tenderar att misslyckas. Modellen är naturligtvis inte redo för en sådan utveckling av händelser, eftersom felsituationer inte uppstår i träningsuppsättningen. I sådana fall kombinerar vi KD- och förstärkningstekniker: när vi tränar för en del av datan tar vi bort eller återställer de nödvändiga funktionerna, och vi tar de ursprungliga etiketterna (utgångarna från den nuvarande modellen), och elevmodellen lär sig att upprepa denna distribution .

Drift av maskininlärning i Mail.ru Mail

Vi märkte att ju allvarligare modellmanipulation som förekommer, desto större andel av trådprovet krävs.

Funktionsborttagning, den enklaste operationen, kräver bara en liten del av flödet, eftersom bara ett par funktioner ändras, och den nuvarande modellen tränades på samma set - skillnaden är minimal. För att förenkla modellen (att minska antalet träd flera gånger) krävs redan 50 till 50. Och för utelämnanden av viktiga statistiska egenskaper som allvarligt kommer att påverka modellens prestanda krävs ännu mer flöde för att jämna ut arbetet i ny utelämnande modell på alla typer av bokstäver.

Drift av maskininlärning i Mail.ru Mail

Snabbtext

Låt oss gå vidare till FastText. Låt mig påminna dig om att representationen (Inbäddning) av ett ord består av summan av inbäddningen av själva ordet och alla dess bokstav N-gram, vanligtvis trigram. Eftersom det kan vara ganska många trigram används Bucket Hashing, det vill säga omvandlar hela utrymmet till en viss fast hashmap. Som ett resultat erhålls viktmatrisen med dimensionen på det inre lagret per antal ord + hinkar.

Med ytterligare träning dyker nya tecken upp: ord och trigram. Inget väsentligt händer i standarduppföljningsutbildningen från Facebook. Endast gamla vikter med korsentropi tränas om på nya data. Således används inte nya funktioner, naturligtvis har detta tillvägagångssätt alla de ovan beskrivna nackdelarna förknippade med oförutsägbarheten hos modellen i produktionen. Det är därför vi modifierade FastText lite. Vi lägger till alla nya vikter (ord och trigram), utökar hela matrisen med korsentropi och lägger till harmonisk regularisering i analogi med den linjära modellen, vilket garanterar en obetydlig förändring av de gamla vikterna.

Drift av maskininlärning i Mail.ru Mail

CNN

Konvolutionella nätverk är lite mer komplicerade. Om de sista lagren är klara i CNN, så kan du naturligtvis tillämpa harmonisk regularisering och garantera kontinuitet. Men om ytterligare utbildning av hela nätverket krävs, kan sådan reglering inte längre tillämpas på alla lager. Det finns dock ett alternativ att träna kompletterande inbäddningar genom Triplet Loss (originalartikel).

Trippel förlust

Med hjälp av en anti-phishing-uppgift som exempel, låt oss titta på Triplet Loss i allmänna termer. Vi tar vår logotyp, samt positiva och negativa exempel på logotyper från andra företag. Vi minimerar avståndet mellan den första och maximerar avståndet mellan den andra, vi gör detta med en liten lucka för att säkerställa större kompaktitet i klasserna.

Drift av maskininlärning i Mail.ru Mail

Om vi ​​tränar nätverket ytterligare förändras vårt metriska utrymme helt, och det blir helt inkompatibelt med det föregående. Detta är ett allvarligt problem i problem som använder vektorer. För att komma runt detta problem kommer vi att blanda in gamla inbäddningar under träningen.

Vi har lagt till ny data i träningssetet och tränar den andra versionen av modellen från grunden. I det andra steget tränar vi vårt nätverk vidare (Fintuning): först är det sista lagret färdigt, och sedan frysas hela nätverket. I processen att komponera tripletter beräknar vi bara en del av inbäddningarna med den tränade modellen, resten - med den gamla. Därför säkerställer vi kompatibiliteten för metriska utrymmen v1 och v2 under ytterligare utbildning. En unik version av harmonisk regularisering.

Drift av maskininlärning i Mail.ru Mail

Hela arkitekturen

Om vi ​​betraktar hela systemet som använder antispam som ett exempel, så är modellerna inte isolerade, utan kapslade inuti varandra. Vi tar bilder, text och andra funktioner, med CNN och Fast Text får vi inbäddningar. Därefter tillämpas klassificerare ovanpå inbäddningarna, som ger poäng för olika klasser (typ av brev, skräppost, närvaro av en logotyp). Signalerna och skyltarna går redan in i trädskogen för att det slutgiltiga beslutet ska tas. Individuella klassificerare i detta schema gör det möjligt att bättre tolka systemets resultat och mer specifikt omskola komponenter vid problem, snarare än att mata in all data i beslutsträd i en rå form.

Drift av maskininlärning i Mail.ru Mail

Som ett resultat garanterar vi kontinuitet på alla nivåer. På bottennivån i CNN och Fast Text använder vi harmonisk regularisering, för klassificerarna i mitten använder vi även harmonisk regularisering och hastighetskalibrering för konsekvens av sannolikhetsfördelningen. Tja, trädförstärkning tränas inkrementellt eller med hjälp av Knowledge Destillation.

Generellt sett är det vanligtvis jobbigt att underhålla ett sådant kapslat maskininlärningssystem, eftersom varje komponent på den lägre nivån leder till en uppdatering av hela systemet ovan. Men eftersom i vår installation varje komponent ändras något och är kompatibel med den tidigare, kan hela systemet uppdateras bit för bit utan att behöva träna om hela strukturen, vilket gör att det kan stödjas utan allvarliga kostnader.

Distribuera

Vi har diskuterat datainsamling och ytterligare utbildning av olika typer av modeller, så vi går vidare till deras distribution i produktionsmiljön.

A/B-testning

Som jag sa tidigare, i processen att samla in data, får vi vanligtvis ett partiskt urval, från vilket det är omöjligt att utvärdera modellens produktionsprestanda. Därför måste modellen vid driftsättning jämföras med den tidigare versionen för att förstå hur det faktiskt går, det vill säga genomföra A/B-tester. Faktum är att processen att rulla ut och analysera diagram är ganska rutin och kan enkelt automatiseras. Vi rullar ut våra modeller gradvis till 5 %, 30 %, 50 % och 100 % av användarna, samtidigt som vi samlar in alla tillgängliga mätvärden om modellsvar och användarfeedback. I fallet med några allvarliga extremvärden rullar vi automatiskt tillbaka modellen, och i andra fall, efter att ha samlat in ett tillräckligt antal användarklick, beslutar vi oss för att öka andelen. Som ett resultat tar vi den nya modellen till 50 % av användarna helt automatiskt, och lanseringen till hela publiken kommer att godkännas av en person, även om detta steg kan automatiseras.

A/B-testprocessen erbjuder dock utrymme för optimering. Faktum är att alla A/B-test är ganska långa (i vårt fall tar det från 6 till 24 timmar beroende på mängden feedback), vilket gör det ganska dyrt och med begränsade resurser. Dessutom krävs en tillräckligt hög procentandel av flödet för testet för att väsentligt påskynda den totala tiden för A/B-testet (att rekrytera ett statistiskt signifikant urval för att utvärdera mätvärden med en liten procentandel kan ta mycket lång tid), vilket gör antalet A/B-platser extremt begränsat. Självklart behöver vi bara testa de mest lovande modellerna, av vilka vi får en hel del under den extra utbildningsprocessen.

För att lösa detta problem tränade vi en separat klassificerare som förutsäger framgången för ett A/B-test. För att göra detta tar vi beslutsstatistik, Precision, Recall och andra mätvärden på träningsuppsättningen, på den uppskjutna och på provet från strömmen som funktioner. Vi jämför också modellen med den nuvarande i produktion, med heuristik, och tar hänsyn till modellens komplexitet. Genom att använda alla dessa funktioner utvärderar en klassificerare utbildad i testhistorik kandidatmodeller, i vårt fall är dessa trädskogar, och bestämmer vilken som ska användas i A/B-testet.

Drift av maskininlärning i Mail.ru Mail

Vid tidpunkten för implementeringen tillät detta tillvägagångssätt oss att öka antalet framgångsrika A/B-tester flera gånger.

Test & övervakning

Testning och övervakning skadar konstigt nog inte vår hälsa, utan tvärtom förbättrar de den och befriar oss från onödig stress. Testning låter dig förhindra ett fel, och övervakning gör att du kan upptäcka det i tid för att minska påverkan på användarna.

Det är viktigt att förstå här att ditt system förr eller senare alltid kommer att göra misstag - detta beror på utvecklingscykeln för alla program. I början av systemutvecklingen finns det alltid många buggar tills allt ordnar sig och huvudstadiet av innovation är avslutat. Men med tiden tar entropin ut sin rätt, och fel dyker upp igen - på grund av nedbrytningen av komponenter runt omkring och förändringar i data, som jag pratade om i början.

Här skulle jag vilja notera att vilket maskininlärningssystem som helst bör betraktas ur dess vinstsynpunkt under hela dess livscykel. Grafen nedan visar ett exempel på hur systemet fungerar för att fånga en sällsynt typ av skräppost (linjen i grafen är nära noll). En dag, på grund av ett felaktigt cachat attribut, blev hon galen. Som tur var fanns det ingen övervakning för onormal triggning, som ett resultat började systemet spara brev i stora mängder till "spam"-mappen vid beslutsfattande gränsen. Trots att man korrigerat konsekvenserna har systemet redan gjort misstag så många gånger att det inte kommer att löna sig ens om fem år. Och detta är ett fullständigt misslyckande ur modellens livscykel.

Drift av maskininlärning i Mail.ru Mail

Därför kan en så enkel sak som övervakning bli nyckeln i en modells liv. Utöver vanliga och uppenbara mätvärden tar vi hänsyn till fördelningen av modellsvar och poäng, såväl som fördelningen av nyckelfunktionsvärden. Med hjälp av KL-divergens kan vi jämföra den nuvarande fördelningen med den historiska eller värdena i A/B-testet med resten av strömmen, vilket gör att vi kan upptäcka anomalier i modellen och återställa förändringar i tid.

I de flesta fall lanserar vi våra första versioner av system med enkla heuristik eller modeller som vi använder som övervakning i framtiden. Till exempel övervakar vi NER-modellen i jämförelse med de vanliga för specifika nätbutiker, och om klassificerarens täckning sjunker i jämförelse med dem, förstår vi orsakerna. En annan användbar användning av heuristik!

Resultat av

Låt oss gå igenom de viktigaste idéerna i artikeln igen.

  • Fibdeck. Vi tänker alltid på användaren: hur han kommer att leva med våra misstag, hur han kommer att kunna rapportera dem. Glöm inte att användarna inte är en källa till ren återkoppling för träningsmodeller, och den måste rensas med hjälp av extra ML-system. Om det inte går att samla in en signal från användaren så letar vi efter alternativa källor för återkoppling, till exempel anslutna system.
  • Ytterligare utbildning. Huvudsaken här är kontinuitet, så vi förlitar oss på den nuvarande produktionsmodellen. Vi tränar nya modeller så att de inte skiljer sig mycket från den tidigare på grund av harmonisk regularisering och liknande knep.
  • Distribuera. Automatisk distribution baserad på mätvärden minskar avsevärt tiden för implementering av modeller. Övervakning av statistik och fördelning av beslutsfattande, antalet fall från användare är obligatoriskt för din vilsamma sömn och produktiva helg.

Tja, jag hoppas att detta hjälper dig att förbättra dina ML-system snabbare, få dem att marknadsföras snabbare och göra dem mer pålitliga och mindre stressande.

Källa: will.com

Lägg en kommentar