Wstępne przetwarzanie danych dla ML: opcje i rekomendacje

Ten dokument jest pierwszym z dwuczęściowej serii eksplorującej temat inżynierii danych i inżynierii funkcji na potrzeby uczenia maszynowego (ML), ze szczególnym uwzględnieniem zadań uczenia się nadzorowanego. W pierwszej części omówiono najlepsze praktyki wstępnego przetwarzania danych w potoku uczenia maszynowego w Google Cloud. Dokument koncentruje się na użyciu TensorFlow i biblioteki TensorFlow Transform ( tf.Transform ) o otwartym kodzie źródłowym do przygotowywania danych, uczenia modelu i obsługi modelu do przewidywania. W tym dokumencie podkreślono wyzwania związane z wstępnym przetwarzaniem danych na potrzeby ML oraz opisano opcje i scenariusze skutecznego przeprowadzania transformacji danych w Google Cloud.

W tym dokumencie założono, że znasz BigQuery , Dataflow , Vertex AI i interfejs API TensorFlow Keras .

Drugi dokument, Wstępne przetwarzanie danych dla uczenia maszynowego za pomocą Google Cloud , zawiera samouczek krok po kroku dotyczący wdrażania potoku tf.Transform .

Wstęp

ML pomaga automatycznie znajdować złożone i potencjalnie przydatne wzorce w danych. Wzorce te są kondensowane w modelu uczenia maszynowego, który można następnie wykorzystać w nowych punktach danych — jest to proces nazywany tworzeniem przewidywań lub wnioskowaniem .

Budowa modelu ML to proces wieloetapowy. Każdy etap wiąże się z własnymi wyzwaniami technicznymi i koncepcyjnymi. Ta dwuczęściowa seria koncentruje się na zadaniach uczenia się pod nadzorem oraz procesie selekcji, przekształcania i rozszerzania danych źródłowych w celu wytworzenia potężnych sygnałów predykcyjnych dla zmiennej docelowej. Operacje te łączą wiedzę dziedzinową z technikami analityki danych. Operacje są istotą inżynierii cech .

Rozmiar zestawów danych szkoleniowych dla rzeczywistych modeli uczenia maszynowego może z łatwością być równy lub większy niż jeden terabajt (TB). Dlatego potrzebne są struktury przetwarzania danych na dużą skalę, aby przetwarzać te zbiory danych wydajnie i rozproszonie. Jeśli używasz modelu uczenia maszynowego do tworzenia prognoz, musisz zastosować te same przekształcenia, które zostały użyte w przypadku danych szkoleniowych w nowych punktach danych. Stosując te same przekształcenia, prezentujesz aktywny zestaw danych w modelu ML w sposób zgodny z oczekiwaniami modelu.

W tym dokumencie omówiono te wyzwania dla różnych poziomów szczegółowości operacji inżynierii funkcji: agregacji na poziomie instancji, pełnego przebiegu i agregacji okien czasowych. W tym dokumencie opisano również opcje i scenariusze przeprowadzania transformacji danych dla ML w Google Cloud.

Ten dokument zawiera także omówienie TensorFlow Transform ( tf.Transform ), biblioteki dla TensorFlow, która umożliwia definiowanie transformacji danych zarówno na poziomie instancji, jak i w trybie pełnego przejścia za pomocą potoków wstępnego przetwarzania danych. Te potoki są wykonywane za pomocą Apache Beam i tworzą artefakty, które umożliwiają zastosowanie tych samych transformacji podczas prognozowania, co podczas udostępniania modelu.

Wstępne przetwarzanie danych dla ML

W tej sekcji przedstawiono operacje wstępnego przetwarzania danych i etapy gotowości danych. Omówiono także rodzaje operacji wstępnego przetwarzania i ich szczegółowość.

Inżynieria danych w porównaniu z inżynierią cech

Wstępne przetwarzanie danych na potrzeby uczenia maszynowego obejmuje zarówno inżynierię danych, jak i inżynierię funkcji. Inżynieria danych to proces przekształcania surowych danych w przygotowane dane . Następnie inżynieria funkcji dostraja przygotowane dane, aby utworzyć funkcje oczekiwane przez model ML. Terminy te mają następujące znaczenie:

Surowe dane (lub po prostu dane )
Dane w formie źródłowej, bez wcześniejszego przygotowania do ML. W tym kontekście dane mogą występować w postaci surowej (w jeziorze danych) lub w formie przekształconej (w hurtowni danych). Przekształcone dane znajdujące się w hurtowni danych mogły zostać przekonwertowane z oryginalnej, surowej postaci w celu wykorzystania ich do celów analitycznych. Jednak w tym kontekście surowe dane oznaczają, że nie zostały przygotowane specjalnie na potrzeby zadania ML. Dane są również uważane za dane surowe, jeśli są wysyłane z systemów przesyłania strumieniowego, które ostatecznie wywołują modele uczenia maszynowego w celu uzyskania prognoz.
Przygotowane dane
Zbiór danych w formie gotowy do zadania ML: źródła danych zostały przeanalizowane, połączone i umieszczone w formie tabelarycznej. Przygotowane dane są agregowane i podsumowywane z odpowiednią szczegółowością — na przykład każdy wiersz w zbiorze danych reprezentuje unikalnego klienta, a każda kolumna przedstawia podsumowanie informacji o kliencie, np. sumę wydatków w ciągu ostatnich sześciu tygodni. W przygotowanej tabeli danych usunięto nieistotne kolumny i odfiltrowano nieprawidłowe rekordy. W przypadku zadań uczenia się pod nadzorem występuje funkcja docelowa.
Zaprojektowane funkcje
Zbiór danych ze dostrojonymi funkcjami, których oczekuje model — to znaczy funkcjami, które są tworzone poprzez wykonanie pewnych operacji specyficznych dla uczenia maszynowego na kolumnach w przygotowanym zbiorze danych oraz utworzenie nowych funkcji dla modelu podczas uczenia i przewidywania, jak opisano w dalszej części w operacjach wstępnego przetwarzania . Przykłady tych operacji obejmują skalowanie kolumn numerycznych do wartości z zakresu od 0 do 1, wartości obcinające i funkcje kategoryczne z jednym kodowaniem na gorąco .

Poniższy diagram, rysunek 1, przedstawia etapy przygotowania wstępnie przetworzonych danych:

Diagram przepływu przedstawiający przenoszenie surowych danych do przygotowanych danych przenoszenie do funkcji inżynieryjnych.
Rysunek 1. Przepływ danych od danych surowych do danych przygotowanych, do funkcji inżynieryjnych i do uczenia maszynowego.

W praktyce dane z tego samego źródła często znajdują się na różnych etapach gotowości. Na przykład pole z tabeli w hurtowni danych może zostać użyte bezpośrednio jako funkcja inżynieryjna. Jednocześnie inne pole w tej samej tabeli może wymagać przekształcenia, zanim stanie się funkcją inżynieryjną. Podobnie operacje inżynierii danych i inżynierii cech można połączyć w tym samym etapie wstępnego przetwarzania danych.

Operacje wstępnego przetwarzania

Wstępne przetwarzanie danych obejmuje kilka operacji. Każda operacja ma na celu pomóc ML w tworzeniu lepszych modeli predykcyjnych. Szczegóły tych operacji wstępnego przetwarzania wykraczają poza zakres tego dokumentu, ale niektóre operacje zostały pokrótce opisane w tej sekcji.

W przypadku danych strukturalnych operacje wstępnego przetwarzania danych obejmują:

  • Czyszczenie danych: usuwanie lub poprawianie rekordów, które mają uszkodzone lub nieprawidłowe wartości z nieprzetworzonych danych oraz usuwanie rekordów, w których brakuje dużej liczby kolumn.
  • Wybór i partycjonowanie instancji: wybieranie punktów danych z wejściowego zbioru danych w celu utworzenia zbiorów szkoleniowych, ewaluacyjnych (walidacyjnych) i testowych . Proces ten obejmuje techniki powtarzalnego próbkowania losowego, nadpróbkowania klas mniejszościowych i podziału warstwowego.
  • Dostrajanie funkcji: poprawianie jakości funkcji dla ML, co obejmuje skalowanie i normalizowanie wartości liczbowych, przypisywanie brakujących wartości, obcinanie wartości odstających i dostosowywanie wartości, które mają skośne rozkłady.
  • Transformacja funkcji: konwersja funkcji numerycznej na cechę jakościową (poprzez segmentację ) i konwersja cech kategorycznych na reprezentację numeryczną (poprzez kodowanie typu one-hot, uczenie się za pomocą zliczeń , osadzanie funkcji rzadkich itp.). Niektóre modele działają tylko z funkcjami numerycznymi lub kategorialnymi, podczas gdy inne obsługują funkcje typu mieszanego. Nawet jeśli modele obsługują oba typy, mogą skorzystać z różnych reprezentacji (numerycznej i jakościowej) tej samej cechy.
  • Ekstrakcja cech: redukcja liczby funkcji poprzez tworzenie mniejszych, bardziej wydajnych reprezentacji danych przy użyciu technik takich jak PCA , ekstrakcja osadzająca i hashowanie .
  • Wybór cech: wybór podzbioru cech wejściowych do szkolenia modelu i ignorowanie tych nieistotnych lub zbędnych, przy użyciu metod filtrowania lub opakowania . Wybór funkcji może również polegać na prostym usuwaniu funkcji, jeśli brakuje im dużej liczby wartości.
  • Konstrukcja cech: tworzenie nowych cech przy użyciu typowych technik, takich jak rozwinięcie wielomianu (przy użyciu jednowymiarowych funkcji matematycznych) lub krzyżowanie cech (w celu uchwycenia interakcji cech). Funkcje można również konstruować przy użyciu logiki biznesowej z domeny przypadku użycia ML.

Kiedy pracujesz z danymi nieustrukturyzowanymi (na przykład obrazami, plikami audio lub dokumentami tekstowymi), głębokie uczenie się zastępuje inżynierię funkcji opartą na wiedzy domeny, włączając ją do architektury modelu. Warstwa splotowa to automatyczny preprocesor funkcji. Skonstruowanie właściwej architektury modelu wymaga pewnej empirycznej wiedzy na temat danych. Ponadto wymagana jest pewna ilość wstępnego przetwarzania, na przykład:

  • W przypadku dokumentów tekstowych: stemming i lematyzacja , obliczenia TF-IDF i ekstrakcja n-gramów , wyszukiwanie osadzania.
  • W przypadku obrazów: przycinanie, zmiana rozmiaru, kadrowanie, rozmycie gaussowskie i filtry kanaryjskie.
  • Dla wszystkich typów danych (w tym tekstu i obrazów): uczenie transferowe , które traktuje wszystkie warstwy w pełni wyszkolonego modelu jako krok inżynierii funkcji.

Szczegółowość wstępnego przetwarzania

W tej sekcji omówiono szczegółowość typów transformacji danych. Pokazuje, dlaczego ta perspektywa jest kluczowa podczas przygotowywania nowych punktów danych do prognoz przy użyciu transformacji stosowanych na danych szkoleniowych.

Operacje przetwarzania wstępnego i transformacji można podzielić na następujące kategorie w zależności od szczegółowości operacji:

  • Transformacje na poziomie instancji podczas uczenia i przewidywania . Są to proste transformacje, w których do transformacji potrzebne są tylko wartości z tej samej instancji. Na przykład transformacje na poziomie instancji mogą obejmować obcięcie wartości cechy do pewnego progu, wielomianowe rozwinięcie innej cechy, pomnożenie dwóch cech lub porównanie dwóch cech w celu utworzenia flagi logicznej.

    Transformacje te muszą być stosowane identycznie podczas uczenia i przewidywania, ponieważ model będzie szkolony na przekształconych cechach, a nie na surowych wartościach wejściowych. Jeśli dane nie zostaną przekształcone identycznie, model będzie zachowywał się słabo, ponieważ zostaną mu przedstawione dane o rozkładzie wartości, z którym nie został przeszkolony. Aby uzyskać więcej informacji, zobacz omówienie pochylenia w zakresie obsługi szkolenia w sekcji Wyzwania związane z przetwarzaniem wstępnym .

  • Transformacje pełnoprzepustowe podczas uczenia, ale transformacje na poziomie instancji podczas przewidywania . W tym scenariuszu transformacje są stanowe, ponieważ do przeprowadzenia transformacji korzystają z wstępnie obliczonych statystyk. Podczas uczenia analizujesz cały zbiór danych szkoleniowych, aby obliczyć wielkości takie jak minimum, maksimum, średnia i wariancja w celu przekształcenia danych szkoleniowych, danych ewaluacyjnych i nowych danych w momencie przewidywania.

    Na przykład, aby znormalizować cechę liczbową na potrzeby uczenia, oblicza się jej średnią (μ) i odchylenie standardowe (σ) dla wszystkich danych uczących. To obliczenie nazywa się operacją pełnego przejścia (lub analizą ). Gdy udostępniasz model do przewidywania, wartość nowego punktu danych jest normalizowana, aby uniknąć odchylenia w zakresie uczenia. Dlatego wartości μ i σ obliczane podczas uczenia służą do dostosowywania wartości cechy, co jest następującą prostą operacją na poziomie instancji :

    $$ value_{scaled} = (value_{raw} - \mu) \div \sigma $$

    Transformacje pełnoprzepustowe obejmują:

    • MinMax skaluje funkcje numeryczne przy użyciu wartości min i max obliczonych na podstawie zbioru danych szkoleniowych.
    • Standardowe skalowanie (normalizacja wyniku Z) funkcji numerycznych przy użyciu μ i σ obliczonych na zbiorze danych szkoleniowych.
    • Bucketyzacja cech numerycznych za pomocą kwantyli.
    • Podpisywanie brakujących wartości za pomocą mediany (cechy liczbowe) lub trybu (cechy kategoryczne).
    • Konwertowanie ciągów znaków (wartości nominalnych) na liczby całkowite (indeksy) poprzez wyodrębnienie wszystkich odrębnych wartości (słownictwa) wejściowej cechy kategorycznej.
    • Zliczanie występowania terminu (wartości cechy) we wszystkich dokumentach (instancjach) w celu obliczenia dla TF-IDF.
    • Obliczanie PCA cech wejściowych w celu rzutowania danych na przestrzeń o niższych wymiarach (z cechami liniowo zależnymi).

    Do obliczania statystyk takich jak μ, σ, min i max należy używać wyłącznie danych uczących. Jeśli dodasz dane testowe i ewaluacyjne dla tych operacji, nastąpi wyciek informacji z danych ewaluacyjnych i testowych w celu uczenia modelu. Ma to wpływ na wiarygodność wyników testu i oceny. Aby mieć pewność, że zastosujesz spójną transformację do wszystkich zestawów danych, do transformacji danych testowych i ewaluacyjnych używasz tych samych statystyk obliczonych na podstawie danych szkoleniowych.

  • Agregacje historyczne podczas uczenia i przewidywania . Obejmuje to tworzenie agregacji biznesowych, wyprowadzeń i flag jako sygnałów wejściowych do zadania prognozowania — na przykład tworzenie wskaźników aktualności, częstotliwości i wartości pieniężnych (RFM) dla klientów w celu zbudowania modeli skłonności. Tego typu funkcje można wstępnie obliczyć i przechowywać w magazynie funkcji w celu wykorzystania podczas uczenia modeli, oceniania wsadowego i udostępniania prognoz online. Przed uczeniem i prognozowaniem można także przeprowadzić dodatkową inżynierię funkcji (na przykład transformację i dostrajanie) tych agregacji.

  • Agregacje historyczne podczas uczenia, ale agregacje w czasie rzeczywistym podczas przewidywania . Podejście to polega na utworzeniu funkcji poprzez podsumowanie wartości w czasie rzeczywistym w czasie. W tym podejściu instancje, które mają być agregowane, są definiowane poprzez klauzule tymczasowego okna. Można na przykład zastosować to podejście, jeśli chcesz wytrenować model, który szacuje czas podróży taksówką na podstawie wskaźników ruchu na trasie w ciągu ostatnich 5 minut, w ciągu ostatnich 10 minut, w ciągu ostatnich 30 minut i w innych interwały. Można również zastosować to podejście do przewidywania awarii części silnika na podstawie średniej ruchomej wartości temperatury i wibracji obliczonych w ciągu ostatnich 3 minut. Chociaż te agregacje można przygotować w trybie offline na potrzeby szkolenia, są one obliczane w czasie rzeczywistym na podstawie strumienia danych podczas udostępniania.

    Mówiąc dokładniej, podczas przygotowywania danych szkoleniowych, jeśli zagregowana wartość nie znajduje się w danych surowych, wartość jest tworzona w fazie inżynierii danych. Surowe dane są zwykle przechowywane w bazie danych w formacie (entity, timestamp, value) . W poprzednich przykładach entity jest identyfikatorem odcinka trasy dla tras kołowania i identyfikatorem części silnika w przypadku awarii silnika. Do obliczeń można używać operacji okienkowych (entity, time_index, aggregated_value_over_time_window) i używać funkcji agregacji jako danych wejściowych do uczenia modelu.

    Gdy używany jest model przewidywania w czasie rzeczywistym (online), model oczekuje jako danych wejściowych cech pochodzących z zagregowanych wartości. Dlatego możesz użyć technologii przetwarzania strumieniowego, takiej jak Apache Beam, do obliczenia agregacji na podstawie punktów danych w czasie rzeczywistym przesyłanych strumieniowo do systemu. Technologia przetwarzania strumieniowego agreguje dane w czasie rzeczywistym w oparciu o okna czasowe w miarę pojawiania się nowych punktów danych. Przed uczeniem i prognozowaniem można także przeprowadzić dodatkową inżynierię funkcji (na przykład transformację i dostrajanie) tych agregacji.

Potok uczenia maszynowego w Google Cloud

W tej sekcji omówiono podstawowe elementy typowego kompleksowego potoku służącego do uczenia i obsługi modeli TensorFlow ML w Google Cloud przy użyciu usług zarządzanych. Omówiono także, gdzie można wdrożyć różne kategorie operacji wstępnego przetwarzania danych oraz typowe wyzwania, jakie możesz napotkać podczas wdrażania takich transformacji. Sekcja Jak działa tf.Transform pokazuje, jak biblioteka TensorFlow Transform pomaga sprostać tym wyzwaniom.

Architektura na wysokim poziomie

Poniższy diagram, rysunek 2, przedstawia architekturę wysokiego poziomu typowego potoku uczenia maszynowego do szkolenia i obsługi modeli TensorFlow. Etykiety A, B i C na diagramie odnoszą się do różnych miejsc w potoku, w których może odbywać się wstępne przetwarzanie danych. Szczegółowe informacje na temat tych kroków znajdują się w poniższej sekcji.

Diagram architektury przedstawiający etapy przetwarzania danych.
Rysunek 2. Architektura wysokiego poziomu do szkolenia i obsługi ML w Google Cloud.

Rurociąg składa się z następujących etapów:

  1. Po zaimportowaniu nieprzetworzonych danych dane tabelaryczne są przechowywane w BigQuery, a inne dane, takie jak obrazy, dźwięk i wideo, są przechowywane w Cloud Storage. Druga część tej serii wykorzystuje jako przykład dane tabelaryczne przechowywane w BigQuery.
  2. Inżynieria danych (przygotowanie) i inżynieria funkcji są wykonywane na dużą skalę przy użyciu Dataflow. To wykonanie generuje zestawy szkoleniowe, ewaluacyjne i testowe gotowe do obsługi uczenia maszynowego, które są przechowywane w Cloud Storage. W idealnym przypadku te zestawy danych są przechowywane jako pliki TFRecord , co jest formatem zoptymalizowanym do obliczeń TensorFlow.
  3. Pakiet trenera modelu TensorFlow jest przesyłany do szkolenia Vertex AI, które wykorzystuje wstępnie przetworzone dane z poprzednich kroków do szkolenia modelu. Dane wyjściowe tego kroku to przeszkolony model TensorFlow SavedModel , który jest eksportowany do Cloud Storage.
  4. Wyszkolony model TensorFlow jest wdrażany w Vertex AI Prediction jako usługa posiadająca interfejs API REST, dzięki czemu można go używać do przewidywań online. Ten sam model można również wykorzystać do zadań przewidywania wsadowego.
  5. Po wdrożeniu modelu jako interfejsu API REST aplikacje klienckie i systemy wewnętrzne mogą wywoływać interfejs API, wysyłając żądania z pewnymi punktami danych i otrzymując odpowiedzi od modelu z przewidywaniami.
  6. Do organizowania i automatyzowania tego potoku można użyć Vertex AI Pipelines jako harmonogramu do wywoływania etapów przygotowania danych, uczenia modelu i wdrażania modelu.

Możesz także użyć magazynu funkcji Vertex AI do przechowywania funkcji wejściowych w celu tworzenia prognoz. Można na przykład okresowo tworzyć funkcje inżynieryjne na podstawie najnowszych nieprzetworzonych danych i przechowywać je w magazynie funkcji Vertex AI. Aplikacje klienckie pobierają wymagane funkcje wejściowe z magazynu funkcji Vertex AI i wysyłają je do modelu w celu otrzymania prognoz.

Gdzie przeprowadzić obróbkę wstępną

Na rysunku 2 etykiety A, B i C pokazują, że operacje wstępnego przetwarzania danych mogą odbywać się w BigQuery, Dataflow lub TensorFlow. W poniższych sekcjach opisano działanie każdej z tych opcji.

Opcja A: BigQuery

Zazwyczaj w BigQuery implementowana jest logika umożliwiająca wykonanie następujących operacji:

  • Próbkowanie: losowe wybieranie podzbioru danych.
  • Filtrowanie: usuwanie nieistotnych lub nieprawidłowych instancji.
  • Partycjonowanie: dzielenie danych w celu utworzenia zbiorów szkoleniowych, ewaluacyjnych i testowych.

Skryptów SQL BigQuery można używać jako zapytania źródłowego dla potoku wstępnego przetwarzania Dataflow, czyli etapu przetwarzania danych przedstawionego na rysunku 2. Jeśli na przykład system jest używany w Kanadzie, a hurtownia danych zawiera transakcje z całego świata, filtrowanie dane szkoleniowe dotyczące tylko Kanady najlepiej wykonać w BigQuery. Inżynieria funkcji w BigQuery jest prosta i skalowalna oraz umożliwia wdrażanie transformacji funkcji na poziomie instancji i agregacji historycznych.

Zalecamy jednak używanie BigQuery do inżynierii funkcji tylko wtedy, gdy używasz modelu do przewidywania zbiorczego (oceny) lub jeśli funkcje są wstępnie obliczane w BigQuery, ale przechowywane w magazynie funkcji Vertex AI do wykorzystania podczas przewidywania online. Jeśli planujesz wdrożyć model do prognoz online, a nie masz zaprojektowanej funkcji w magazynie funkcji online, musisz zreplikować operacje wstępnego przetwarzania SQL, aby przekształcić surowe punkty danych generowane przez inne systemy. Innymi słowy, musisz zaimplementować tę logikę dwukrotnie: raz w SQL, aby wstępnie przetworzyć dane szkoleniowe w BigQuery, a drugi raz w logice aplikacji, która wykorzystuje model do wstępnego przetwarzania punktów danych online na potrzeby prognozowania.

Na przykład, jeśli aplikacja kliencka jest napisana w Javie, musisz ponownie zaimplementować logikę w Javie. Może to powodować błędy wynikające z rozbieżności w implementacji, jak opisano w sekcji dotyczącej przekrzywienia w obsłudze szkolenia w części Wyzwania związane z przetwarzaniem wstępnym w dalszej części tego dokumentu. Utrzymanie dwóch różnych implementacji jest również dodatkowym obciążeniem. Za każdym razem, gdy zmieniasz logikę w SQL w celu wstępnego przetwarzania danych szkoleniowych, musisz odpowiednio zmienić implementację Java, aby wstępnie przetwarzać dane w czasie udostępniania.

Jeśli używasz modelu tylko do przewidywania wsadowego (na przykład używasz przewidywania wsadowego Vertex AI) i jeśli dane do oceniania pochodzą z BigQuery, możesz zaimplementować te operacje przetwarzania wstępnego w ramach skryptu SQL BigQuery. W takim przypadku możesz użyć tego samego skryptu SQL do wstępnego przetwarzania, aby przygotować dane uczące i oceniające.

Pełnoprzepustowe transformacje stanowe nie nadają się do implementacji w BigQuery. Jeśli używasz BigQuery do transformacji pełnoprzepustowych, potrzebujesz tabel pomocniczych do przechowywania ilości potrzebnych do transformacji stanowych, takich jak średnie i wariancje do skalowania funkcji numerycznych. Co więcej, implementacja transformacji pełnoprzepustowych przy użyciu języka SQL w BigQuery zwiększa złożoność skryptów SQL i tworzy skomplikowaną zależność między uczącymi a oceniającymi skryptami SQL.

Opcja B: przepływ danych

Jak pokazano na rysunku 2, w Apache Beam można wdrożyć kosztowne obliczeniowo operacje wstępnego przetwarzania i uruchamiać je na dużą skalę za pomocą Dataflow. Dataflow to w pełni zarządzana usługa automatycznego skalowania do przetwarzania danych wsadowych i strumieniowych. Korzystając z Dataflow, możesz także używać zewnętrznych wyspecjalizowanych bibliotek do przetwarzania danych, w przeciwieństwie do BigQuery.

Dataflow może wykonywać przekształcenia na poziomie instancji oraz przekształcenia funkcji agregacji historycznej i agregacji w czasie rzeczywistym. W szczególności, jeśli modele ML oczekują funkcji wejściowej, takiej jak total_number_of_clicks_last_90sec , funkcje okienkowe Apache Beam mogą obliczyć te funkcje w oparciu o agregację wartości okien czasowych danych zdarzeń w czasie rzeczywistym (strumieniowych) (na przykład zdarzeń kliknięć). We wcześniejszej dyskusji na temat szczegółowości transformacji nazywano to „agregacjami historycznymi podczas uczenia, ale agregacjami w czasie rzeczywistym podczas przewidywania”.

Poniższy diagram, rysunek 3, przedstawia rolę Dataflow w przetwarzaniu danych strumieniowych w celu uzyskania przewidywań w czasie zbliżonym do rzeczywistego.

Architektura wykorzystania danych strumieniowych do przewidywania.
Rysunek 3. Architektura wysokiego poziomu wykorzystująca dane strumieniowe do predykcji w Dataflow.

Jak pokazano na rysunku 3, podczas przetwarzania zdarzenia zwane punktami danych są pobierane do Pub/Sub . Dataflow wykorzystuje te punkty danych, oblicza funkcje na podstawie agregacji w czasie, a następnie wywołuje wdrożony interfejs API modelu ML w celu uzyskania prognoz. Prognozy są następnie wysyłane do wychodzącej kolejki Pub/Sub. Z Pub/Sub prognozy mogą być wykorzystywane przez systemy niższego szczebla, takie jak monitorowanie lub kontrola, lub mogą być przekazywane z powrotem (na przykład jako powiadomienia) do pierwotnego klienta wysyłającego żądanie. Prognozy można również przechowywać w magazynie danych o niskim opóźnieniu, takim jak Cloud Bigtable, w celu pobierania w czasie rzeczywistym. Cloud Bigtable może być również używany do gromadzenia i przechowywania agregacji w czasie rzeczywistym, dzięki czemu można je wyszukiwać w razie potrzeby w celu przewidywania.

Tę samą implementację Apache Beam można wykorzystać do przetwarzania wsadowego danych szkoleniowych pochodzących z magazynu danych offline, takiego jak BigQuery, oraz do przetwarzania strumieniowego danych w czasie rzeczywistym na potrzeby udostępniania prognoz online.

W innych typowych architekturach, takich jak architektura pokazana na rysunku 2, aplikacja kliencka bezpośrednio wywołuje interfejs API wdrożonego modelu w celu prognozowania online. W takim przypadku, jeśli w Dataflow zaimplementowano operacje wstępnego przetwarzania w celu przygotowania danych szkoleniowych, operacje te nie są stosowane do danych predykcyjnych, które trafiają bezpośrednio do modelu. Dlatego tego typu transformacje powinny zostać zintegrowane z modelem podczas udostępniania predykcji online.

Przepływu danych można używać do przeprowadzania transformacji pełnoprzepustowej poprzez obliczanie wymaganych statystyk na dużą skalę. Jednakże statystyki te muszą być gdzieś przechowywane, aby można je było wykorzystać podczas prognozowania w celu przekształcenia punktów danych prognozy. Korzystając z biblioteki TensorFlow Transform ( tf.Transform ), możesz bezpośrednio osadzić te statystyki w modelu, zamiast przechowywać je w innym miejscu. Podejście to wyjaśniono w dalszej części Jak działa tf.Transform .

Opcja C: TensorFlow

Jak pokazano na rysunku 2, możesz zaimplementować operacje wstępnego przetwarzania i transformacji danych w samym modelu TensorFlow. Jak pokazano na rysunku, przetwarzanie wstępne zaimplementowane na potrzeby uczenia modelu TensorFlow staje się integralną częścią modelu, gdy model jest eksportowany i wdrażany na potrzeby prognoz. Transformacje w modelu TensorFlow można zrealizować na jeden z poniższych sposobów:

Kod logiki transformacji w funkcji serving_fn definiuje interfejs obsługujący Twój SavedModel na potrzeby przewidywania online. Jeśli zaimplementujesz te same przekształcenia, które zostały użyte do przygotowania danych szkoleniowych w kodzie logiki transformacji funkcji serving_fn , zapewni to, że te same przekształcenia zostaną zastosowane do nowych punktów danych przewidywania podczas ich udostępniania.

Ponieważ jednak model TensorFlow przetwarza każdy punkt danych niezależnie lub w małej partii, nie można obliczyć agregacji ze wszystkich punktów danych. W rezultacie w modelu TensorFlow nie można zaimplementować transformacji pełnoprzepustowych.

Wyzwania związane z przetwarzaniem wstępnym

Poniżej przedstawiono główne wyzwania związane z wdrażaniem wstępnego przetwarzania danych:

  • Skok treningowo-służący . Skok trening-serw odnosi się do różnicy pomiędzy efektywnością (wydajnością przewidywaną) podczas treningu i podczas serwowania. To zniekształcenie może być spowodowane rozbieżnością między sposobem obsługi danych w potokach szkoleniowych i obsługujących. Na przykład, jeśli model jest szkolony na funkcji przekształconej logarytmicznie, ale podczas udostępniania jest prezentowany z surową funkcją, dane wyjściowe prognozy mogą nie być dokładne.

    Jeśli transformacje staną się częścią samego modelu, obsługa transformacji na poziomie instancji może być prosta, jak opisano wcześniej w opcji C: TensorFlow . W takim przypadku interfejs obsługujący model (funkcja serving_fn ) oczekuje surowych danych, podczas gdy model wewnętrznie przekształca te dane przed obliczeniem wyniku. Transformacje są takie same, jak te, które zastosowano w przypadku surowych punktów danych szkoleniowych i predykcyjnych.

  • Transformacje pełnoprzepustowe . W modelu TensorFlow nie można zaimplementować przekształceń pełnoprzepustowych, takich jak przekształcenia skalujące i normalizacyjne. W przypadku transformacji pełnoprzepustowych niektóre statystyki (na przykład wartości max i min w celu skalowania funkcji numerycznych) muszą zostać wcześniej obliczone na danych szkoleniowych, jak opisano w opcji B: Przepływ danych . Następnie wartości muszą być gdzieś zapisane, aby można je było wykorzystać podczas udostępniania modelu do przewidywania w celu przekształcenia nowych nieprzetworzonych punktów danych w postaci przekształceń na poziomie instancji, co pozwala uniknąć zniekształceń podczas obsługi szkolenia. Możesz użyć biblioteki TensorFlow Transform ( tf.Transform ), aby bezpośrednio osadzić statystyki w modelu TensorFlow. Podejście to wyjaśniono w dalszej części Jak działa tf.Transform .

  • Przygotowanie danych z góry w celu zwiększenia efektywności treningu . Implementowanie przekształceń na poziomie instancji w ramach modelu może obniżyć efektywność procesu uczenia. Ta degradacja występuje, ponieważ te same transformacje są wielokrotnie stosowane do tych samych danych szkoleniowych w każdej epoce. Wyobraź sobie, że masz surowe dane szkoleniowe zawierające 1000 funkcji i stosujesz kombinację transformacji na poziomie instancji, aby wygenerować 10 000 funkcji. Jeśli zaimplementujesz te transformacje jako część swojego modelu, a następnie przekażesz modelowi surowe dane szkoleniowe, te 10 000 operacji zostanie zastosowanych N razy w każdym wystąpieniu, gdzie N to liczba epok. Ponadto, jeśli używasz akceleratorów (GPU lub TPU), pozostają one bezczynne, podczas gdy procesor wykonuje te transformacje, co nie jest efektywnym wykorzystaniem kosztownych akceleratorów.

    W idealnym przypadku dane szkoleniowe są przekształcane przed szkoleniem przy użyciu techniki opisanej w opcji B: przepływ danych , gdzie 10 000 operacji transformacji jest stosowanych tylko raz w każdym wystąpieniu szkoleniowym. Przekształcone dane uczące są następnie prezentowane modelowi. Nie są stosowane żadne dalsze przekształcenia, a akceleratory są cały czas zajęte. Ponadto korzystanie z Dataflow ułatwia wstępne przetwarzanie dużych ilości danych na dużą skalę przy użyciu w pełni zarządzanej usługi.

    Przygotowanie danych treningowych z wyprzedzeniem może poprawić efektywność treningu. Jednak wdrożenie logiki transformacji poza modelem (podejścia opisane w Opcja A: BigQuery lub Opcja B: Przepływ danych ) nie rozwiązuje problemu odchylenia w obsłudze szkoleń. Jeśli nie przechowujesz zaprojektowanej funkcji w magazynie funkcji, która będzie używana zarówno do uczenia, jak i przewidywania, logika transformacji musi zostać gdzieś zaimplementowana, aby można ją było zastosować do nowych punktów danych przychodzących do przewidywania, ponieważ interfejs modelu oczekuje przekształconych danych. Biblioteka TensorFlow Transform ( tf.Transform ) może pomóc w rozwiązaniu tego problemu, jak opisano w poniższej sekcji.

Jak działa tf.Transform

Biblioteka tf.Transform jest przydatna w przypadku transformacji wymagających pełnego przejścia. Dane wyjściowe biblioteki tf.Transform są eksportowane jako wykres TensorFlow, który reprezentuje logikę transformacji na poziomie instancji oraz statystyki obliczone na podstawie transformacji pełnoprzepustowych, które mają być używane do uczenia i udostępniania. Używanie tego samego wykresu do treningu i serwowania może zapobiec zniekształceniom, ponieważ na obu etapach stosowane są te same przekształcenia. Ponadto bibliotekę tf.Transform można uruchomić na dużą skalę w potoku przetwarzania wsadowego w Dataflow, aby od razu przygotować dane szkoleniowe i poprawić efektywność szkolenia.

Poniższy diagram, rysunek 4, pokazuje, jak biblioteka tf.Transform wstępnie przetwarza i przekształca dane na potrzeby uczenia i przewidywania. Proces opisano w poniższych sekcjach.

Diagram przedstawiający przepływ od surowych danych przez tf.Transform do prognoz.
Rysunek 4. Zachowanie tf.Transform przy wstępnym przetwarzaniu i przekształcaniu danych.

Przekształcaj dane dotyczące szkoleń i ocen

Wstępnie przetwarzasz surowe dane szkoleniowe za pomocą transformacji zaimplementowanej w interfejsach API tf.Transform Apache Beam i uruchamiasz je na dużą skalę w Dataflow. Przetwarzanie wstępne przebiega w następujących fazach:

  • Faza analizy: Podczas fazy analizy wymagane statystyki (takie jak średnie, wariancje i kwantyle) dla transformacji stanowych są obliczane na danych szkoleniowych za pomocą operacji pełnego przejścia. W tej fazie powstaje zestaw artefaktów transformacji, w tym wykres transform_fn . Wykres transform_fn to wykres TensorFlow, który ma logikę transformacji jako operacje na poziomie instancji. Zawiera statystyki obliczone w fazie analizy w postaci stałych.
  • Faza transformacji: podczas fazy transformacji wykres transform_fn jest stosowany do surowych danych szkoleniowych, gdzie obliczone statystyki są wykorzystywane do przetwarzania rekordów danych (na przykład w celu skalowania kolumn liczbowych) w sposób na poziomie instancji.

Takie podejście dwufazowe rozwiązuje wyzwanie związane z przetwarzaniem wstępnym , jakim jest wykonywanie transformacji pełnoprzepustowych.

Gdy dane ewaluacyjne są wstępnie przetwarzane, stosowane są wyłącznie operacje na poziomie instancji, wykorzystując logikę z wykresu transform_fn i statystyki obliczone z fazy analizy w danych szkoleniowych. Innymi słowy, nie analizuje się danych ewaluacyjnych w sposób pełnoprzepustowy, aby obliczyć nowe statystyki, takie jak μ i σ, w celu normalizacji cech numerycznych w danych ewaluacyjnych. Zamiast tego używasz statystyk obliczonych na podstawie danych szkoleniowych, aby przekształcić dane oceny w sposób na poziomie instancji.

Przekształcone dane szkoleniowe i ewaluacyjne są przygotowywane na dużą skalę przy użyciu Dataflow, zanim zostaną użyte do uczenia modelu. Ten proces przygotowywania danych partii rozwiązuje wyzwanie wstępne , polegające na przygotowaniu danych z góry w celu poprawy wydajności treningu. Jak pokazano na rycinie 4, model wewnętrzny model oczekuje przekształconych funkcji.

Dołącz transformacje do modelu eksportowanego

Jak wspomniano, wykres transform_fn , który jest wytwarzany przez rurociąg tf.Transform , jest przechowywany jako eksportowany wykres tensorflow. Wyeksportowany wykres składa się z logiki transformacji jako operacji na poziomie instancji, a wszystkie statystyki obliczone w transformacjach pełnego pasa jako stałe wykresu. Gdy wyszkolony model jest eksportowany do obsługi, wykres transform_fn jest przymocowany do SavedModel w ramach funkcji serving_fn .

Podczas gdy obsługuje model prognozowania, interfejs obsługujący model oczekuje punktów danych w formacie RAW (to znaczy przed jakąkolwiek transformacją). Jednak model wewnętrzny model oczekuje danych w formacie transformowanym.

Wykres transform_fn , który jest obecnie częścią modelu, stosuje całą logikę wstępnego przetwarzania w przychodzącym punkcie danych. Wykorzystuje przechowywane stałe (takie jak μ i σ do normalizacji cech numerycznych) w operacji na poziomie instancji podczas prognozowania. Dlatego wykres transform_fn przekształca surowy punkt danych w format transformowany. Przekształcony format jest oczekiwany przez model wewnętrzny model w celu uzyskania prognoz, jak pokazano na rycinie 4.

Mechanizm ten rozwiązuje wyzwanie wstępnego przetwarzania pochylania szkolnictwa, ponieważ ta sama logika (implementacja), która jest wykorzystywana do przekształcenia danych dotyczących szkolenia i oceny, jest stosowane do przekształcenia nowych punktów danych podczas serwowania prognozowania.

Podsumowanie opcji wstępnego przetwarzania

Poniższa tabela podsumowuje opcje wstępnego przetwarzania danych, które omówiono ten dokument. W tabeli „nie dotyczy” oznacza „nie dotyczy”.

Opcja wstępnego przetwarzania danych Poziom instancji
(Transformacje bez statystyki)

Pełny przebieg podczas szkolenia i poziomu instancji podczas serwowania (transformacje stanowe)

Agregacje w czasie rzeczywistym (okno) podczas szkolenia i obsługi (transformacje przesyłania strumieniowego)

BigQuery (SQL)

Punktacja partii: OK - Ta sama implementacja transformacji jest stosowana na danych podczas szkolenia i punktacji partii.

Prognozowanie online: Nie jest zalecane -możesz przetwarzać dane szkolenia, ale powoduje to, że w skewce prowadzenia szkoleń przetwarzasz dane za pomocą różnych narzędzi.

Punktacja partii: nie jest zalecana .

Prognozowanie online: nie zalecane .

Chociaż możesz korzystać z statystyk obliczonych za pomocą transformacji partii/online na poziomie BigQuery, nie jest to łatwe, ponieważ musisz zachować sklep z statystykami, który ma być wypełniony podczas szkolenia i używać podczas prognozowania.

Punktacja partii: Nie dotyczy-takie jak te są obliczane na podstawie wydarzeń w czasie rzeczywistym.

Prognozowanie online: Nie jest zalecane -możesz przetwarzać dane szkolenia, ale powoduje to, że w skewce prowadzenia szkoleń przetwarzasz dane za pomocą różnych narzędzi.

Data Flow (Apache Beam)

Punktacja partii: OK - Ta sama implementacja transformacji jest stosowana na danych podczas szkolenia i punktacji partii.

Prognozowanie online: OK - Jeśli dane w serwowaniu pochodzą z pubu/substancji substancji do zużycia przez przepływ danych. W przeciwnym razie skutkuje skośnięciem do prowadzenia treningów.

Punktacja partii: nie jest zalecana .

Prognozy online: nie zalecane .

Chociaż możesz korzystać z statystyk obliczonych za pomocą przepływu danych na przykład transformacji partii/online na poziomie, nie jest to łatwe, ponieważ musisz utrzymać sklep statystyk, który ma być wypełniony podczas szkolenia i używać podczas prognozowania.

Punktacja partii: Nie dotyczy-takie jak te są obliczane na podstawie wydarzeń w czasie rzeczywistym.

Prognozy online: OK - Ta sama transformacja wiązki Apache jest stosowana na danych podczas szkolenia (partia) i obsługi (strumień).

Data Flow (Apache Beam + TFT)

Punktacja partii: OK - Ta sama implementacja transformacji jest stosowana do danych podczas szkolenia i punktacji partii.

Prognozowanie online: Zalecane -unikając szkolenia w zakresie wykrzyku i przygotowuje dane szkoleniowe z góry.

Punktacja partii: Zalecane .

Prognozowanie online: Zalecane .

Oba zastosowania są zalecane, ponieważ logika transformacji i obliczone statystyki podczas szkolenia są przechowywane jako wykres tensorflow, który jest dołączony do eksportowanego modelu do obsługi.

Punktacja partii: Nie dotyczy-takie jak te są obliczane na podstawie wydarzeń w czasie rzeczywistym.

Prognozy online: OK - Ta sama transformacja wiązki Apache jest stosowana na danych podczas szkolenia (partia) i obsługi (strumień).

Tensorflow *
( input_fn & serving_fn )

Punktacja partii: nie jest zalecana .

Prognozowanie online: nie zalecane .

W przypadku wydajności treningu w obu przypadkach lepiej jest przygotować dane szkoleniowe z góry.

Punktacja partii: Nie jest to możliwe .

Prognozy online: niemożliwe .

Punktacja partii: Nie dotyczy-takie jak te są obliczane na podstawie wydarzeń w czasie rzeczywistym.

Prognozy online: niemożliwe .

* W przypadku TensorFlow transformacje takie jak skrzyżowanie, osadzanie i jedno- gorące kodowanie powinny być wykonywane deklaratywnie jako kolumny feature_columns .

Co dalej