16 KiB
Przygotowanie do projektu badawczo-rozwojowego
8. Ciągła integracja i ewaluacja w projektach opartych na uczeniu maszynowym [wykład]
Filip Graliński (2021)
Ciągła integracja i ewaluacja w projektach opartych na uczeniu maszynowym
Dobre praktyki w tradycyjnej inżynierii oprogramowania
Ciągła integracja
Ciągła integracja (_continuous integration, CI) to praktyka stosowana w tworzeniu oprogramowania polegają na częstym integrowaniu kodu opracowywanego przez programistów, zautomatyzowanym budowaniu oprogramowania i poddawaniu go testom.
Ciągłe wdrażanie
Ciągłe wdrażanie (_continuous deployment, CD) automatyzuje również proces wdrażania oprogramowania. Oznacza to, że również procedura wdrażania musi zostać wyrażona jako kod przechowywany w systemie kontroli wersji.
Ciągła integracja/ciągłe wdrożenie zazwyczaj współwystępuje z metodyką DevOps.
CI/CD/DevOps w jednym zdaniu: robię to tak często, że to „nic takiego”.
CI/CD a uczenie maszynowe
Dodanie do systemu modułów opartych na uczeniu maszynowym bardzo komplikuje proces CI/CD:
- modele uczenia maszynowego (np. sieci neuronowe) powstają na bazie kodu źródłowego odpowiedzialnego za uczenie i danych uczących,
- osobny kod jest odpowiedzialny za inferencję,
- choć kod odpowiedzialny za uczenie i inferencję w miarę możliwości powinny podlegać standardowej metodologii testowania (np. testy jednostkowe), to ostatecznie testy systemów opartych na uczeniu maszynowym nie mają postaci zerojedynkowej
- … raczej system może uzyskać lepszy albo gorszy wynik,
- wdrożenie (a przynajmniej uczenie) wymaga często dużych zasobów obliczeniowych i specjalnego sprzętu (karty graficzne).
Przy czym chcielibyśmy zachować „złote” zasady CI/CD.
Wprowadzenie uczenia maszynowego do oprogramowania na tyle zmienia sytuację, że mówi się o MLOps zamiast DevOps.
Proces CI/CD rozszerzony o uczenie maszynowe
Testowanie systemów opartych na uczeniu maszynowym
Podobnie jak w wypadku tradycyjnego oprogramowania testowanie modeli uczenia maszynowego przyjmuje wiele form:
- testy jednostkowe fragmentu kodu odpowiedzialnego za uczenie i inferencję,
- testy uczenia i inferencji na spreparowanych danych
- _corner cases
- uczenia „w kółko” na jednym przykładzie (czy funkcja kosztu spada do zera?)
- testy inferencji na danych „śmieciowych” (czy system jest w stanie „przetrwać” wszystko?)
- testy efektywności, przepustowości itp.
- … lecz ostatecznie najistotniejsza jest odpowiedź na pytanie, jak dobry jest wynik na danych zbliżonych do rzeczywistych (ewaluacja)
Ewaluacja
Rodzaje ewaluacji:
- testy „na ludziach”,
- testy A/B, analiza zachowania użytkownika
- ewaluacja manualna, np. test MOS (_mean-opinion score)
- ewaluacja automatyczna
- ewaluacja według wzoru
- ewaluacja wyuczana przy użyciu uczenia maszynowego (!)
Ostateczne kryterium ewaluacji: _money in the bank, a właściwie _utility in the bank (por. aksjomatyczna teoria użyteczności sformułowana przez Johna von Neumanna i Oskara Morgensterna).
Psychologiczne pułapki oceniania
efekt pierwszeństwa — _błędy pojawiające się na początku wypracowania oceniane są surowiej niż błędy na końcu wypracowania
efekt świeżości
efekt „aureoli” — _mamy skłonność do przypisywania innych pozytywnych cech ludziom atrakcyjnym fizycznie
wpływ nastroju na ocenianie — _w pochmurne dni ludzie gorzej oceniają stan gospodarki niż w słoneczne
Słabości „potocznej” matematyki
Czy symptom świadczy o chorobie?
| | | choroba | |
| | | obecna | nieobecna |
|---------+-----------+---------+---------------|
| symptom | obecny | 37 | 33 |
| | nieobecny | 17 | 13 |
85% przepytanych pielęgniarek doszło do wniosku, że istnieje związek między symptomem a chorobą.
Korelacja jest przez ludzi przeceniana, regresja do średniej — niedoceniania
Jak uniknąć pułapek oceniania?
- stosować obiektywne miary,
- najlepiej wymyślić syntetyczną funkcję oceny (pojedyncza liczba),
- jeśli to możliwe, stosować automatyczną ewaluację.
Konkretny sposób ewaluacji nazywamy miarą lub metryką ewaluacji. (Uwaga: nie ma nic wspólnego z terminami stosowanymi w matematyce!).
Definicja metryki ewaluacji
Ewaluację przeprowadzamy na ciągu danych wejściowych $(x)_i$ biorąc pod uwagę oczekiwane wyjście $(y)_i$ i rzeczywiste wyjście z systemu $(\hat{y})_i$. Funkcja (metryka, miara) ewaluacji $\mu$ powinna zwrócić skalarną wartość określającą jakość systemu, innymi słowy:
$$\mu \colon X^{n} \times Y^{n} \times \hat{Y}^{n} \to \mathcal{R},$$
gdzie $X$ jest zbiorem możliwych wejść, $Y$ — zbiorem możliwych specyfikacji oczekiwanych wyjść, $\hat{Y}$ — zbiorem możliwych wyjść (na ogół $Y = \hat{Y}$, ale mogą być sytuacje, gdzie specyfikacja oczekiwanego wyjścia jest bardziej skomplikowana).
Olbrzymia większość metryk ewaluacji nie bierze pod uwagę wejścia, lecz jedynie porównuje wyjście z systemu z oczekiwanym wyjściem, a zatem schemat upraszcza się do:
$$\mu \colon Y^{n} \times \hat{Y}^{n} \to \mathcal{R}.$$
Metryka ewaluacji — przykłady
Jedną z najprostszych metryk ewaluacji jest dokładność (_accuracy) jest to po prostu odsetek przypadków, gdy wyjście z systemu jest identyczne z oczekiwanym wyjściem.
Narzędzie ewaluacyjne GEval ma zaimplementowane kilkadziesiąt (!) metryk ewaluacji
-m,--metric METRIC Metric to be used, e.g.:RMSE, MSE, MAE, SMAPE,
Pearson, Spearman, Accuracy, LogLoss, Likelihood,
F1.0, F2.0, F0.25, Macro-F1.0, Macro-F2.0,
Macro-F0.25, MultiLabel-F1.0, MultiLabel-F2.0,
MultiLabel-F0.25, Mean/MultiLabel-F1.0,
Probabilistic-MultiLabel-F1.0,
Probabilistic-MultiLabel-F2.0,
Probabilistic-MultiLabel-F0.25,
MultiLabel-Likelihood, MAP, NDCG@3, BLEU, GLEU
("Google GLEU" not the grammar correction metric),
WER, CER (Character-Error Rate), WAR, CAR
(Character-Accuracy Rate (1-CER)), NMI, ClippEU,
LogLossHashed, LikelihoodHashed, PerplexityHashed,
BIO-F1, BIO-Weighted-F1, BIO-F1-Labels,
TokenAccuracy, SegmentAccuracy, Soft-F1.0, Soft-F2.0,
Soft-F0.25, Probabilistic-Soft-F1.0,
Probabilistic-Soft-F2.0, Probabilistic-Soft-F0.25,
Probabilistic-Soft2D-F1.0, Probabilistic-Soft2D-F2.0,
Probabilistic-Soft2D-F0.25, Soft2D-F1.0, Soft2D-F2.0,
Soft2D-F0.25, Haversine, CharMatch, Improvement@0.5,
MacroAvg/Likelihood, MSE-Against-Interval,
RMSE-Against-Interval, MAE-Against-Interval,
BLEU:lm<\s+|[a-z0-9]+> (BLEU on lowercased strings,
only Latin characters and digits considered)
Jakie własności ma dobra miara ewaluacji?
spełnia zdroworozsądkowe aksjomaty
- w szczególności dla przypadków brzegowych
- jest stabilna
koreluje z ludzką oceną
- a tak naprawdę z preferencjami użytkowników
Ewaluacja ewaluacji! — czyli metaewaluacja
Z powrotem do CI/CD
Ewaluację można zatem traktować jako rozszerzenie procesu testowania oprogramowania. Ewaluacja nigdy nie powinna być jednorazowym procesem, powinna być wpleciona w proces CI/CD. Możemy więc mówić o ciągłej ewaluacji.
Potrzeba ciągłego procesu, by upewnić się, że nasz system oparty na uczeniu maszynowym:
- jest lepszy od prostego punktu odniesienia (_naive baseline),
- jest lepszy od rozwiązań konkurencji,
- jest lepszy od systemu, który mieliśmy wczoraj, tydzień temu, rok temu…
Dobór metryki ewaluacji — tłumaczenie maszynowe
Jaka metryka jest najlepsza do oceny systemu tłumaczenia maszynowego?
To zależy!
Scanariusz A. Automatyczne tłumaczenie jest używane przez osoby nieznające języka docelowego w celu zrozumienia oryginalnego tekstu.
Scenariusz B. Oczekujemy bardzo dobrej jakości tłumaczenia. Tłumaczenia maszynowe są poprawiane przez profesjonalnych tłumaczy, tłumaczenie maszynowe służy do przyspieszenia procesu.
W scenariuszu A można zastosować standardowe metryki tłumaczenia maszynowego sprawdzające, na ile w tłumaczeniu zachowane elementy tłumaczenia referencyjnego, np. BLEU albo — lepiej — COMET, natomiast w scenariuszu B lepiej zastosować odległość edycyjną w celu oszacowania kosztu korekty.
Przykład systemu ewaluacji — GEval i Gonito
GEval to biblioteka w języku Haskell oraz narzędzie do ewaluacji uruchamiane z wiersza poleceń, zaś Gonito to oparta na bibliotece GEval aplikacja webowa, platforma do ewaluacji wyzwań uczenia maszynowego.
System na produkcji, a my nie znamy oczekiwanych wartości!
Estymacja jakości
Uruchomiliśmy nasz system w wersji produkcyjnej, skąd wiemy, że system zachowuje się poprawnie?
Można anotować lub poprawiać manualnie próbki danych produkcyjnych, rozszerzać w ten sposób zbiory testowe i dokonywać na nich ewaluacji.
Można też stosować metody estymacji jakości (_quality estimation), tzn. przewidywać jakość wyłącznie na podstawie wyjścia (bez znajomości oczekiwanego wyjścia). Na przykład w systemie tłumaczenia maszynowego można w tym celu stosować model języka docelowego.