Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Na podstawie moich wystąpień na Highload++ i DataFest Minsk 2019.

Dla wielu z nas poczta stała się nieodłączną częścią życia w sieci. Dzięki niej prowadzimy biznesową korespondencję, przechowujemy wszelkie ważne informacje związane z finansami, rezerwacjami hoteli, składaniem zamówień i nie tylko. W połowie 2018 roku sformułowaliśmy strategię rozwoju produktu poczty. Jaka powinna być nowoczesna poczta?

Poczta musi być inteligentna, to znaczy pomagać użytkownikom w orientacji w rosnącej ilości informacji: filtrować, strukturyzować i dostarczać je w najwygodniejszy sposób. Powinna być przydatna, pozwalając na wykonywanie różnych zadań bezpośrednio w skrzynce pocztowej, na przykład płacenie za mandaty (funkcja, z której, niestety, korzystam). Oczywiście poczta musi zapewniać ochronę informacji, odcinając spam i chroniąc przed włamaniami, czyli być bezpiecznej.

Te kierunki determinują szereg kluczowych zadań, z których wiele można efektywnie rozwiązać przy użyciu uczenia maszynowego. Oto przykłady już działających funkcji, opracowanych w ramach strategii — po jednym na każdy kierunek.

  • Inteligentna odpowiedź. W poczcie istnieje funkcja inteligentnej odpowiedzi. Sieć neuronowa analizuje tekst e-maila, rozumie jego sens i cel, a w efekcie proponuje trzy najbardziej odpowiednie warianty odpowiedzi: pozytywny, negatywny i neutralny. To znacznie oszczędza czas przy odpowiadaniu na e-maile, a także często pozwala na nietypowe i zabawne odpowiedzi.
  • Grupowanie e-maili, związanych z zamówieniami w internetowych sklepach. Często robimy zakupy online, a sklepy zazwyczaj mogą wysyłać po kilka wiadomości na każde zamówienie. Na przykład od AliExpress, największego serwisu, przychodzi wiele wiadomości dotyczących jednego zamówienia, i obliczyliśmy, że w ekstremalnym przypadku ich liczba może wynosić nawet 29. Dlatego za pomocą modelu rozpoznawania nazwanych jednostek выделяем номер zamówienia i inne informacje z tekstu i grupujemy wszystkie e-maile w jeden wątek. Wyświetlamy również podstawowe informacje o zamówieniu w oddzielnym pasku, co ułatwia pracę z tego typu wiadomościami.

    Zastosowanie uczenia maszynowego w Poczcie Mail.ru

  • Antyphishing. Phishing to szczególnie niebezpieczny typ oszustwa, w którym przestępcy próbują zdobyć informacje finansowe (w tym dane kart bankowych użytkowników) oraz loginy. Tego typu wiadomości podszywają się pod prawdziwe wiadomości wysyłane przez serwisy, w tym również wizualnie. Dlatego przy pomocy Computer Vision rozpoznajemy logotypy i styl wiadomości dużych firm (na przykład Mail.ru, Sber, Alfa) i uwzględniamy to obok treści oraz innych cech w naszych klasyfikatorach spamu i phishingu.

Uczenie maszynowe

Kilka słów o uczeniu maszynowym w poczcie w ogóle. Poczta to system o dużym obciążeniu: przez nasze serwery przechodzi średnio 1,5 miliarda wiadomości dziennie dla 30 milionów użytkowników DAU. Obsługują wszystkie niezbędne funkcje i cechy około 30 systemów uczenia maszynowego.

Każda wiadomość przechodzi przez cały proces klasyfikacji. Najpierw odrzucamy spam i pozostawiamy dobre wiadomości. Użytkownicy często nie zauważają działania antyspamu, ponieważ 95-99% spamu nawet nie trafia do odpowiedniego folderu. Rozpoznawanie spamu to bardzo ważna część naszego systemu i jedna z najtrudniejszych, ponieważ w zakresie antyspamu trwa ciągła adaptacja między systemami ochrony a atakami, co stanowi nieprzerwane wyzwanie inżynieryjne dla naszego zespołu.

Następnie dzielimy wiadomości od ludzi i robotów. Wiadomości od ludzi są najważniejsze, dlatego dla nich oferujemy funkcje takie jak Smart Reply. Wiadomości od robotów dzielą się na dwie części: transakcyjne — to ważne wiadomości z serwisów, na przykład potwierdzenia zakupów lub rezerwacji hotelowych, finansowe oraz informacyjne — to reklama biznesowa, zniżki.

Uważamy, że wiadomości transakcyjne pod względem znaczenia są równe osobistej korespondencji. Muszą być pod ręką, ponieważ często potrzebujemy szybko znaleźć informacje o zamówieniu lub rezerwacji biletu lotniczego, a my tracimy czas na ich poszukiwanie. Dlatego dla wygody automatycznie dzielimy je na sześć głównych kategorii: podróże, zamówienia, finanse, bilety, rejestracje i wreszcie mandaty.

Listy informacyjne to najliczniejsza i, być może, najmniej istotna grupa, która nie wymaga natychmiastowej reakcji, ponieważ nic istotnego nie zmieni się w życiu użytkownika, jeśli nie przeczyta takiego listu. W naszym nowym interfejsie grupujemy je w dwa wątki: media społecznościowe i newslettery, w ten sposób wizualnie porządkując skrzynkę i pozostawiając na widoku tylko ważne wiadomości.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Eksploatacja

Szeroka gama systemów powoduje wiele trudności w eksploatacji. Modele z czasem degraduje, podobnie jak wszelkie oprogramowanie: pojawiają się usterki, maszyny zawodzą, nawarstwia się błędny kod. Ponadto dane nieustannie się zmieniają: dodawane są nowe, a wzorce zachowań użytkowników ulegają transformacji, dlatego model bez odpowiedniego wsparcia z czasem będzie działać coraz gorzej.

Nie można również zapominać, że im głębsze przenikanie uczenia maszynowego w życie użytkowników, tym większy wpływ wywierają oni na ekosystem, a co za tym idzie, tym większe straty finansowe lub zyski mogą osiągnąć gracze rynkowi. Dlatego w coraz większej liczbie obszarów gracze dostosowują się do pracy algorytmów ML (klasyczne przykłady to reklama, wyszukiwanie oraz już wspomniany antyspam).

Ponadto zadania uczenia maszynowego mają szczególną cechę: każde, nawet niewielkie, zmiana w systemie może generować mnóstwo pracy związanej z modelem: praca z danymi, ponowne uczenie, wdrożenie, co może przeciągać się na tygodnie lub miesiące. Dlatego im szybciej zmienia się środowisko, w którym operują twoje modele, tym więcej wysiłku wymaga ich wsparcie. Zespół może stworzyć wiele systemów i cieszyć się tym, a potem wydawać prawie wszystkie zasoby na ich utrzymanie, bez możliwości wprowadzenia nowości. Z podobną sytuacją spotkaliśmy się kiedyś w zespole antyspamu. I doszliśmy do oczywistego wniosku, że wsparcie należy zautomatyzować.

Automatyzacja

Co można zautomatyzować? W zasadzie prawie wszystko. Wyodrębniłem cztery kierunki, które określają infrastrukturę uczenia maszynowego:

  • zbieranie danych;
  • douczenie;
  • wdrożenie;
  • testowanie & monitorowanie.

Jeśli środowisko jest niestabilne i ciągle się zmienia, to cała infrastruktura wokół modelu jest znacznie ważniejsza niż sam model. Może to być stary dobry klasyfikator liniowy, ale jeśli odpowiednio przekażemy cechy i nawiążemy dobrą informację zwrotną od użytkowników, będzie działał znacznie lepiej niż modele State-Of-The-Art z wszystkimi udogodnieniami.

Cykle informacji zwrotnej

Ten cykl łączy zbieranie danych, dalsze uczenie i wdrażanie — w zasadzie cały cykl aktualizacji modelu. Dlaczego to jest ważne? Zobacz wykres rejestracji w poczcie:

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Programista uczenia maszynowego wdrożył model antybota, który nie pozwala botom rejestrować się w poczcie. Wykres spada do wartości, gdzie pozostają tylko prawdziwi użytkownicy. Wszystko jest w porządku! Ale po czterech godzinach, botiści dostosowują swoje skrypty i wszystko wraca do normy. W tym wdrożeniu programista spędził miesiąc dodając cechy i doszkalając model, ale spammer w ciągu czterech godzin mógł się dostosować.

Aby nie bolało to tak strasznie i nie trzeba było potem wszystkiego przerabiać, należy od razu myśleć o tym, jak będzie wyglądał cykl informacji zwrotnej i co zrobimy, jeśli środowisko się zmieni. Zacznijmy od zbierania danych — to paliwo dla naszych algorytmów.

Zbieranie danych

Jasne, że nowoczesne sieci neuronowe potrzebują coraz więcej danych, a te w zasadzie generują użytkownicy produktu. Użytkownicy mogą pomóc poprzez oznaczanie danych, ale nie można z tego nadużywać, ponieważ w pewnym momencie użytkownikom znudzi się dalsze uczenie naszych modeli i przejdą do innego produktu.

Jednym z najczęstszych błędów (tutaj odwołuję się do Andrew Ng) jest zbyt duża orientacja na metryki na zestawie testowym, a nie na informację zwrotną od użytkownika, co w rzeczywistości jest głównym miernikiem jakości pracy, ponieważ tworzymy produkt dla użytkownika. Jeśli użytkownik nie rozumie lub nie podoba mu się działanie modelu, to znaczy, że wszystko jest bez sensu.

Dlatego użytkownik zawsze powinien mieć możliwość zagłosowania, należy dać mu narzędzie do informacji zwrotnej. Jeśli uważamy, że w skrzynce znalazło się pismo dotyczące finansów, należy je oznaczyć jako „finanse” i stworzyć przycisk, który użytkownik może nacisnąć i powiedzieć, że to nie finanse.

Jakość informacji zwrotnej

Porozmawiajmy o jakości opinii użytkowników. Po pierwsze, Ty i użytkownik możecie różnie interpretować to samo pojęcie. Na przykład, Ty i menedżerowie produktów uważacie, że "finanse" to wiadomości z banku, podczas gdy użytkownik myśli, że list od babci o emeryturze również dotyczy finansów. Po drugie, są użytkownicy, którzy bezmyślnie naciskają przyciski bez jakiejkolwiek logiki. Po trzecie, użytkownik może być głęboko w błędzie w swoich wnioskach. Jasny przykład z naszej praktyki to wdrożenie klasyfikatora nigeryjskiego spamu, dość zabawnego typu spamu, w którym użytkownik jest proszony o odebranie kilku milionów dolarów od nagle odnalezionego dalekiego krewnego w Afryce. Po wdrożeniu tego klasyfikatora sprawdziliśmy kliknięcia "Nie spam" na tych wiadomościach i okazało się, że 80% z nich to soczysty nigeryjski spam, co wskazuje na to, że użytkownicy mogą być niezwykle ufni.

I nie zapominajmy, że klikają nie tylko ludzie, ale także różne boty, które udają przeglądarki. Zatem surowe opinie nie nadają się do uczenia. Co można zrobić z tymi informacjami?

Zastosowaliśmy dwa podejścia:

  • Opinie od powiązanego ML. Na przykład mamy system antybota online, który, jak już wspomniałem, podejmuje szybkie decyzje na podstawie ograniczonej liczby cech. Istnieje również drugi, wolniejszy system działający post factum. Ma on więcej danych o użytkowniku, jego zachowaniu, itd. W rezultacie podejmowana jest najbardziej wyważona decyzja, co oznacza, że ma ona wyższą dokładność i kompletność. Można skierować różnicę w działaniu tych systemów do pierwszego jako dane do nauki. W ten sposób prostszy system będzie zawsze starał się zbliżyć do wydajności bardziej złożonego.
  • Klasyfikacja kliknięćMożna po prostu klasyfikować każdy klik użytkownika, oceniać jego ważność i możliwość wykorzystania. Tak robimy w antyspamie poczty, wykorzystując cechy użytkownika, jego historię, cechy nadawcy, sam tekst i wyniki pracy klasyfikatorów. W rezultacie uzyskujemy automatyczny system, który waliduje feedback od użytkowników. Ponieważ wymaga on znacznie rzadszego dalszego uczenia, może stać się podstawą dla wszystkich innych systemów. Głównym priorytetem w tym modelu jest precyzja, ponieważ uczenie modelu na niedokładnych danych niesie ze sobą niebezpieczeństwa.

Podczas gdy oczyszczamy dane i dalej uczymy nasze systemy ML, nie można zapominać o użytkownikach, ponieważ dla nas tysiące, miliony błędów na wykresie to statystyki, a dla użytkownika każdy błąd to tragedia. Oprócz tego, że użytkownik musi jakoś żyć z twoim błędem w produkcie, po zgłoszeniu oczekuje, że podobna sytuacja nie powtórzy się w przyszłości. Dlatego zawsze warto dać użytkownikom nie tylko możliwość głosowania, ale i poprawiania zachowania systemów ML, tworząc na przykład osobiste heurystyki dla każdego kliknięcia feedbacku; w przypadku poczty może to być możliwość filtracji podobnych wiadomości według nadawcy i tematu dla tego użytkownika.

Należy również na podstawie niektórych raportów lub zgłoszeń do wsparcia w półautomatycznym lub ręcznym trybie dostosować model, aby inni użytkownicy również nie cierpieli z powodu podobnych problemów.

Heurystyki do uczenia

Z danymi heurystyk i obejść są dwa problemy. Pierwszy polega na tym, że stale rosnąca liczba obejść jest trudna do utrzymania, nie mówiąc już o ich jakości i pracy na dłuższą metę. Drugi problem polega na tym, że błąd może nie być częsty, i kilka kliknięć do dalszego uczenia modelu może być niewystarczające. Wydaje się, że te dwa niespowiązane efekty można znacznie zniwelować, stosując następujące podejście.

  1. Tworzymy tymczasowe obejście.
  2. Przekazujemy dane z niego do modelu, który regularnie się uczy, w tym na podstawie otrzymanych danych. Oczywiście ważne jest, aby heurystyka miała wysoką precyzję, aby nie obniżać jakości danych w zestawie do treningu.
  3. Następnie włączamy monitoring, aby śledzić działanie obejścia, a jeśli po pewnym czasie obejście przestaje działać i całkowicie pokrywa się z modelem, można je z czystym sumieniem usunąć. Teraz ten problem raczej nie powtórzy się.

Tak więc armia obejść jest bardzo przydatna. Najważniejsze, aby ich użycie było pilne, a nie stałe.

Douczenie

Douczenie to proces dodawania nowych danych, uzyskanych w wyniku informacji zwrotnej od użytkowników lub innych systemów, oraz szkolenia istniejącego modelu na ich podstawie. Mogą wystąpić różne problemy z douczeniem:

  1. Model może po prostu nie obsługiwać douczenia, a uczyć się tylko od podstaw.
  2. Nigdzie w księdze natury nie jest napisane, że douczenie koniecznie poprawi jakość działania w produkcji. Często zdarza się wręcz odwrotnie, to znaczy możliwe jest jedynie pogorszenie.
  3. Zmiany mogą być nieprzewidywalne. To dość delikatna kwestia, którą odkryliśmy dla siebie. Nawet jeśli nowy model w testach A/B pokazuje podobne wyniki w porównaniu z aktualnym, nie oznacza to wcale, że będzie działał w identyczny sposób. Ich działanie może różnić się w jakimś jednym procencie, co może prowadzić do nowych błędów lub przywracania już naprawionych błędów. Z obecnymi błędami zarówno my, jak i użytkownicy już sobie radzimy, a gdy pojawia się duża liczba nowych błędów, użytkownik może również nie rozumieć, co się dzieje, ponieważ oczekuje przewidywalnego zachowania.

Dlatego najważniejszą rzeczą w douczeniu jest z gwarancją poprawić model, lub przynajmniej go nie pogarszać.

Pierwsza myśl, która przychodzi do głowy, gdy mówimy o douczeniu, to podejście Active Learning. Co to oznacza? Na przykład klasyfikator określa, czy e-mail dotyczy finansów, i wokół jego granic decyzji dodajemy próbkę z oznaczonymi przykładami. Działa to dobrze, na przykład w reklamie, gdzie istnieje wiele informacji zwrotnych i można uczyć model w trybie online. A jeśli informacji zwrotnych jest mało, otrzymujemy mocno zniekształconą próbkę w odniesieniu do produkcji danych, na podstawie której nie można ocenić zachowania modelu w trakcie użytkowania.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Naszym celem jest w rzeczywistości zachowanie starych wzorców, znanych już modeli, oraz nabywanie nowych. Ważna jest tu kontynuacja. Model, który z wielkim trudem wprowadziliśmy, już działa, więc możemy kierować się jego wydajnością.

W poczcie stosuje się różne modele: drzewa, modele liniowe, sieci neuronowe. Dla każdego opracowujemy własny algorytm dalszego uczenia. W trakcie tego procesu pojawiają się nie tylko nowe dane, ale często także nowe cechy, które będziemy uwzględniać we wszystkich poniższych algorytmach.

Modele liniowe

Powiedzmy, że mamy regresję logistyczną. Składamy funkcję strat modelu z następujących składników:

  • LogLoss na nowych danych;
  • regularizujemy wagi nowych cech (starych nie zmieniamy);
  • uczymy się również na starych danych, aby zachować stare wzorce;
  • i, być może, co najważniejsze: dodajemy Harmonic Regularization, która gwarantuje niewielką zmianę wag w porównaniu do starego modelu według normy.

Ponieważ każdy składnik utraty ma swoje współczynniki, możemy dobrać optymalne wartości do naszego zadania na podstawie walidacji krzyżowej lub w zależności od wymagań produktowych.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Drzewa

Przejdźmy do drzew decyzyjnych. Opracowaliśmy następujący algorytm dalszego uczenia drzew:

  1. Na produkcji działa las z 100–300 drzew, który został wyuczony na starym zbiorze danych.
  2. Na końcu usuwamy 5 drzew i dodajemy 10 nowych, które są wyuczone na całym zbiorze danych, ale z wysoką wagą dla nowych danych, co naturalnie gwarantuje inkrementalną zmianę modelu.

Oczywiste jest, że z biegiem czasu liczba drzew znacznie wzrasta, a należy je okresowo redukować, aby zmieścić się w czasach. W tym celu wykorzystujemy powszechnie stosowane obecnie distylację wiedzy (KD). Krótko o zasadzie jej działania.

  1. Mamy obecny „skomplikowany” model. Uruchamiamy go na treningowym zbiorze danych i otrzymujemy rozkład prawdopodobieństw klas na wyjściu.
  2. Następnie uczymy model ucznia (model z mniejszą liczbą drzew w tym przypadku) powtarzać wyniki pracy modelu, używając rozkładu klas jako zmiennej docelowej.
  3. Warto zauważyć, że nie korzystamy z oznaczeń zestawu danych, dlatego możemy używać dowolnych danych. Oczywiście, wykorzystujemy próbkę danych z produkcyjnego strumienia jako zbiór treningowy dla modelu ucznia. W ten sposób zbiór treningowy pozwala nam zapewnić dokładność modelu, a próbka strumienia gwarantuje podobną wydajność w rozwoju produkcyjnym, kompensując przesunięcie zbioru treningowego.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Połączenie tych dwóch technik (dodawanie drzew i okresowe ich zmniejszanie za pomocą metody Knowledge Distillation) zapewnia wprowadzenie nowych wzorców oraz pełną ciągłość.

Za pomocą KD wykonujemy również operacje różnicowania cech modelu, na przykład usuwanie cech i obsługę braków. W naszym przypadku posiadamy szereg ważnych cech statystycznych (dotyczących nadawców, hashy tekstowe, adresy URL itd.), które przechowywane są w bazie danych, mającej tendencję do odmowy. Model, rzecz jasna, nie jest przygotowany na tego rodzaju rozwój sytuacji, ponieważ w zbiorze treningowym nie występują sytuacje odmowy. W takich przypadkach łączymy techniki KD i augmentacji: podczas treningu dla części danych usuwamy lub zerujemy potrzebne cechy, a etykiety (wyniki obecnego modelu) bierzemy z oryginalnych, a model-uczeń uczy się powtarzać to rozkład.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Zauważyliśmy, że im poważniejsza manipulacja modelami, tym większy procent próbek strumienia jest wymagany.

Aby usunąć cechy, najprostszą operację, wystarczy niewielka część strumienia, ponieważ zmienia się tylko kilka cech, a obecny model był trenowany na tym samym zbiorze — różnica jest minimalna. Aby uprościć model (zmniejszając liczbę drzew kilka razy), potrzeba już 50 na 50. A na braki ważnych cech statystycznych, które znacząco wpływają na wydajność modelu, potrzeba jeszcze większej ilości strumienia, aby wyrównać działanie nowego modelu odpornego na braki we wszystkich typach wiadomości.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

FastText

Przejdźmy do FastText. Przypomnę, że reprezentacja (Embedding) słowa składa się z sumy embeddingu samego słowa oraz wszystkich jego literowych N-gram, zazwyczaj trójek. Ponieważ trójek może być znacznie więcej, stosuje się Bucket Hashing, czyli przekształcenie całej przestrzeni w pewną stałą mapę hash. Ostatecznie macierz wag uzyskuje rozmiar wewnętrznej warstwy na liczbę słów + bucketów.

Podczas dalszego uczenia pojawiają się nowe cechy: słowa i trójki. W standardowym dalszym uczeniu od Facebooka nic istotnego się nie dzieje. Uczone są jedynie stare wagi z krzyżową entropią na nowych danych. Tak więc nowe cechy nie są oczywiście wykorzystywane, co sprawia, że podejście to ma wszystkie wcześniej opisane wady związane z nieprzewidywalnością modelu w produkcji. Dlatego nieco poprawiliśmy FastText. Dodajemy wszystkie nowe wagi (słowa i trójki), uczymy całą macierz z krzyżową entropią i dodajemy harmonijne regularizacje na wzór modelu liniowego, co gwarantuje nieistotne zmiany starych wag.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

CNN

Z sieciami konwolucyjnymi jest nieco trudniej. Jeśli w CNN uczone są ostatnie warstwy, można oczywiście stosować harmonijną regularizację i zapewnić ciągłość. Ale w przypadku, gdy wymagana jest nauka całej sieci, to taką regularizację już trudno zastosować we wszystkich warstwach. Istnieje jednak opcja z nauką komplementarnych embeddingów za pomocą Triplet Loss (oryginalny artykuł).

Triplet Loss

Na przykładzie zadania antyphishingowego omówimy w ogólnych zarysach Triplet Loss. Weźmy nasze logo oraz pozytywne i negatywne przykłady logo innych firm. Minimalizujemy odległość między pierwszymi i maksymalizujemy odległość między drugimi, robimy to z małą przerwą, aby zapewnić większą kompaktowość klas.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Jeśli uczymy sieć ponownie, to całkowicie zmienia się przestrzeń metryczną, a staje się ona całkowicie niekompatybilna z poprzednią. To poważny problem w zadaniach, które wykorzystują wektory. Aby obejść ten problem, będziemy mieszali podczas uczenia stare embeddingi.

Dodaliśmy nowe dane do zestawu treningowego i od podstaw szkolimy drugą wersję modelu. W drugim etapie doszkalają naszą sieć (Finetuning): najpierw doszkalany jest ostatni warstwa, a potem odblokowywana jest cała sieć. W procesie tworzenia tripletów obliczamy tylko część embeddingów przy użyciu uczonego modelu, a resztę — za pomocą starego. W ten sposób, podczas doszkalania zapewniamy zgodność przestrzeni metrycznych v1 i v2. To specyficzna forma regularizacji harmonicznej.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Architektura w całości

Jeśli spojrzymy na cały system w kontekście antyspamu, to modele nie są izolowane, lecz zagnieżdżone w sobie. Bierzemy obrazy, tekst i inne cechy, przy pomocy CNN i Fast Text uzyskujemy embeddingi. Następnie na embeddingach stosujemy klasyfikatory, które wydają wyniki dla różnych klas (rodzaje wiadomości, spam, obecność logo). Wyniki i cechy trafiają do lasu drzew, gdzie podejmowane jest ostateczne decyzje. Oddzielne klasyfikatory w tym modelu pozwalają lepiej interpretować wyniki działania systemu i bardziej precyzyjnie doszkalać komponenty w przypadku wystąpienia problemów, zamiast podawać wszystkie dane w surowej formie do drzew decyzyjnych.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

W rezultacie gwarantujemy ciągłość na każdym poziomie. Na najniższym poziomie w CNN i Fast Text stosujemy regularizację harmoniczną, dla klasyfikatorów w środku — również regularizację harmoniczną i kalibrację wyników dla zgodności rozkładu prawdopodobieństwa. A boosting drzew jest trenowany inkrementalnie lub za pomocą Knowledge Distillation.

Ogólnie rzecz biorąc, wsparcie dla tak złożonego systemu uczenia maszynowego zazwyczaj stanowi problem, ponieważ każda zmian na niższym poziomie prowadzi do aktualizacji całego systemu wyżej. Jednak w naszym setupie każdy komponent zmienia się nieznacznie i jest zgodny z poprzednim, co pozwala na aktualizację całego systemu w kawałkach bez konieczności ponownego uczenia całej struktury, co umożliwia jego utrzymanie bez poważnego nadmiernego obciążenia.

Wdrożenie

Omówiliśmy zbieranie danych i doszkalanie różnych typów modeli, teraz przechodzimy do ich wdrożenia w środowisku produkcyjnym.

A/B testowanie

Jak już wcześniej wspomniałem, podczas zbierania danych zazwyczaj uzyskujemy wybór zniekształcony, na podstawie którego niemożliwe jest ocenienie wydajności produkcyjnej modelu. Dlatego wdrażając model, należy go niezbędnie porównywać z poprzednią wersją, aby zrozumieć, jak faktycznie idą sprawy, co oznacza przeprowadzanie testów A/B. Proces wdrażania i analizowania wyników jest w rzeczywistości dość rutynowy i świetnie nadaje się do automatyzacji. Nasze modele wprowadzamy stopniowo dla 5%, 30%, 50% i 100% użytkowników, jednocześnie gromadząc wszystkie dostępne metryki dotyczące odpowiedzi modelu oraz opinii użytkowników. W przypadku poważnych odchyleń automatycznie wycofujemy model, a w pozostałych przypadkach, po zgromadzeniu wystarczającej liczby kliknięć użytkowników, podejmujemy decyzję o zwiększeniu procentu. W rezultacie nowy model wprowadzamy do 50% użytkowników całkowicie automatycznie, a zatwierdzenie wprowadzenia dla całej publiczności dokonuje człowiek, choć także ten krok można zautomatyzować.

Jednak proces testów A/B stwarza możliwości optymalizacji. Polega na tym, że każdy test A/B jest dość długi (w naszym przypadku trwa od 6 do 24 godzin w zależności od liczby opinii), co czyni go dość kosztownym i wymagającym ograniczonych zasobów. Poza tym potrzebny jest wystarczająco wysoki procent ruchu do testu, aby w istocie przyspieszyć całkowity czas testu A/B (uzyskiwanie statystycznie istotnej próbki do oceny metryk przy małym procencie może zająć bardzo dużo czasu), co czyni liczbę slotów A/B niezwykle ograniczoną. Oczywiste jest, że musimy wprowadzać do testów tylko najbardziej obiecujące modele, których w procesie dalszego uczenia otrzymujemy całkiem sporo.

Aby rozwiązać ten problem, wytrenowaliśmy oddzielny klasyfikator, który przewiduje sukces testu A/B. W tym celu jako cechy bierzemy statystyki podejmowania decyzji, Precision, Recall oraz inne metryki na zbiorze uczącym, na zbiorze walidacyjnym oraz na próbie z ruchu. Porównujemy również model z aktualnym modelem w produkcji, z heurystykami i bierzemy pod uwagę złożoność modelu. Używając wszystkich tych cech, wytrenowany na historii testów klasyfikator ocenia modele kandydujące, w naszym przypadku są to lasy drzew, i podejmuje decyzję, który z nich wprowadzić do testu A/B.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

W momencie wdrożenia podejście to pozwoliło na wielokrotne zwiększenie liczby udanych testów A/B.

Testowanie & monitoring

Testowanie i monitorowanie, co może być zaskakujące, nie szkodzi naszemu zdrowiu, wręcz przeciwnie, poprawia je i redukuje zbędny stres. Testowanie pozwala zapobiegać awariom, a monitoring – wykrywać je na czas, aby zminimalizować wpływ na użytkowników.

Ważne jest zrozumienie, że prędzej czy później Twój system zawsze będzie miał błędy – jest to związane z cyklem rozwoju każdego oprogramowania. Na początku rozwoju jest wiele błędów, dopóki wszystko nie zostanie ustabilizowane i nie zakończy się główny etap wprowadzania nowych funkcji. Jednak z czasem entropia robi swoje i błędy znów się pojawiają – z powodu degradacji komponentów oraz zmian danych, o których wspomniałem na początku.

Chciałbym zwrócić uwagę, że każdy system uczenia maszynowego należy oceniać z punktu widzenia jego rentowności w całym cyklu życia. Poniżej na wykresie przedstawiony jest przykład działania systemu wychwytującego rzadki typ spamu (na wykresie linia w okolicy zera). Kiedyś, z powodu niewłaściwie przechowywanego atrybutu, system oszalał. Co gorsza, nie było monitoringu anomalii, w wyniku czego system zaczął zapisywać wiadomości do folderu „spam” w dużych ilościach na granicy podejmowania decyzji. Mimo naprawy konsekwencji, system popełnił już tyle błędów, że nie zwróci się w ciągu pięciu lat. To całkowita klapa z perspektywy cyklu życia modelu.

Zastosowanie uczenia maszynowego w Poczcie Mail.ru

Dlatego tak prosta rzecz jak monitoring może stać się kluczowa w życiu modelu. Oprócz standardowych i oczywistych metryk, analizujemy rozkład odpowiedzi i wyników modelu, a także rozkład wartości kluczowych atrybutów. Dzięki dywergencji KL możemy porównać obecny rozkład z historycznym lub wartościami z testu A/B z pozostałym strumieniem, co pozwala dostrzegać anomalie w modelu i w porę cofać zmiany.

W większości przypadków uruchamiamy nasze pierwsze wersje systemów przy użyciu prostych heurystyk lub modeli, które w przyszłości stosujemy do monitorowania. Na przykład monitorujemy model NER w porównaniu do wyrażeń regularnych dla konkretnych sklepów internetowych, a jeśli pokrycie klasyfikatora zmniejsza się w porównaniu z nimi, analizujemy przyczyny. To kolejny przydatny sposób zastosowania heurystyk!

Podsumowanie

Przejdźmy jeszcze raz przez kluczowe myśli artykułu.

  • Fibdæk. Zawsze myślimy o użytkowniku: jak będzie żył z naszymi błędami, jak będzie mógł je zgłosić. Nie zapominajmy, że użytkownicy nie są źródłem czystych informacji zwrotnych do nauki modeli, a ich należy oczyszczać za pomocą pomocniczych systemów ML. Jeśli nie ma możliwości zebrania sygnału od użytkownika, szukamy alternatywnych źródeł feedbacku, na przykład związanych systemów.
  • Douczenie. Kluczową kwestią jest tu kontynuacja, dlatego opieramy się na aktualnym modelu produkcyjnym. Nowe modele uczymy tak, aby znacznie się nie różniły od poprzedniego, stosując harmoniczną regularyzację i podobne sztuczki.
  • Wdrożenie. Automatyczne wdrożenie na podstawie metryk znacznie skraca czas wprowadzania modeli. Monitorowanie statystyk i dystrybucji podejmowania decyzji, liczby fałszywych sygnałów od użytkowników, jest niezbędne dla twojego spokojnego snu i produktywnych weekendów.

Cóż, mam nadzieję, że przeczytane pomoże Ci szybciej poprawić Twoje systemy ML, przyspieszyć ich wprowadzenie na rynek i uczynić je bardziej niezawodnymi, zmniejszając stres związany z pracą.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster