Dzień Społeczności ML jest 9 listopada! Dołącz do nas na aktualizacje z TensorFlow Jax i więcej Dowiedz się więcej

Walidacja danych TensorFlow: sprawdzanie i analizowanie danych

Gdy dane znajdą się w potoku TFX, możesz użyć składników TFX do ich analizy i przekształcenia. Tych narzędzi można używać nawet przed wytrenowaniem modelu.

Istnieje wiele powodów, dla których warto analizować i przekształcać dane:

  • Aby znaleźć problemy w swoich danych. Typowe problemy obejmują:
    • Brakujące dane, takie jak obiekty z pustymi wartościami.
    • Etykiety traktowane jako cechy, aby Twój model mógł zerknąć na właściwą odpowiedź podczas treningu.
    • Funkcje o wartościach spoza oczekiwanego zakresu.
    • Anomalie danych.
    • Nauczony model transferu ma przetwarzanie wstępne, które nie jest zgodne z danymi uczącymi.
  • Aby zaprojektować bardziej efektywne zestawy funkcji. Na przykład możesz zidentyfikować:
    • Szczególnie pouczające funkcje.
    • Nadmiarowe funkcje.
    • Funkcje o tak dużej skali, że mogą spowalniać naukę.
    • Funkcje z niewielką ilością lub bez unikalnych informacji predykcyjnych.

Narzędzia TFX mogą zarówno pomóc znaleźć błędy w danych, jak i pomóc w inżynierii funkcji.

Walidacja danych TensorFlow

Przegląd

TensorFlow Data Validation identyfikuje anomalie w uczeniu i udostępnianiu danych oraz może automatycznie tworzyć schematy, analizując dane. Komponent można skonfigurować tak, aby wykrywał różne klasy anomalii w danych. To może

  1. Wykonuj testy poprawności, porównując statystyki danych ze schematem, który kodyfikuje oczekiwania użytkownika.
  2. Wykryj pochylenie podczas obsługi treningowej, porównując przykłady w danych uczących i udostępnianych.
  3. Wykryj dryf danych, patrząc na serię danych.

Każdą z tych funkcjonalności dokumentujemy niezależnie:

Walidacja na podstawie schematu

Walidacja danych TensorFlow identyfikuje wszelkie anomalie w danych wejściowych, porównując statystyki danych ze schematem. Schemat kodyfikuje właściwości, które mają spełniać dane wejściowe, takie jak typy danych lub wartości kategorialne, i może być modyfikowany lub zastępowany przez użytkownika.

Walidacja danych Tensorflow jest zwykle wywoływana wielokrotnie w kontekście potoku TFX: (i) dla każdego podziału uzyskanego z ExampleGen, (ii) dla wszystkich wstępnie przetworzonych danych używanych przez Transform oraz (iii) dla wszystkich danych po transformacji wygenerowanych przez Przekształcać. Wywołane w kontekście Transform (ii-iii), opcje statystyk i ograniczenia oparte na schemacie można ustawić, definiując stats_options_updater_fn . Jest to szczególnie przydatne podczas walidacji nieustrukturyzowanych danych (np. Funkcji tekstowych). Zobacz przykładowy kod użytkownika .

Zaawansowane funkcje schematu

W tej sekcji omówiono bardziej zaawansowaną konfigurację schematu, która może pomóc w specjalnych konfiguracjach.

Rzadkie funkcje

Kodowanie rzadkich funkcji w przykładach zwykle wprowadza wiele funkcji, które mają mieć tę samą wartościowość we wszystkich przykładach. Na przykład rzadka cecha:


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
byłaby kodowana przy użyciu oddzielnych funkcji dla indeksu i wartości:

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
z zastrzeżeniem, że wartościowość indeksu i wartości powinna być zgodna dla wszystkich przykładów. To ograniczenie można wyraźnie określić w schemacie, definiując sparse_feature:

sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}

Rzadka definicja funkcji wymaga co najmniej jednego indeksu i jednej wartości, która odwołuje się do funkcji istniejących w schemacie. Jawne zdefiniowanie rzadkich funkcji umożliwia TFDV sprawdzenie, czy wartościowości wszystkich przywołanych funkcji są zgodne.

Niektóre przypadki użycia wprowadzają podobne ograniczenia wartościowości między funkcjami, ale niekoniecznie kodują rzadką funkcję. Używanie rzadkich funkcji powinno Cię odblokować, ale nie jest idealne.

Środowiska schematu

Domyślnie walidacje zakładają, że wszystkie przykłady w potoku są zgodne z jednym schematem. W niektórych przypadkach konieczne jest wprowadzenie niewielkich różnic w schemacie, na przykład funkcje używane jako etykiety są wymagane podczas uczenia (i powinny zostać zweryfikowane), ale brakuje ich podczas udostępniania. Środowiska mogą służyć do wyrażania takich wymagań, w szczególności default_environment() , in_environment() , not_in_environment() .

Załóżmy na przykład, że funkcja o nazwie „LABEL” jest wymagana do uczenia, ale prawdopodobnie nie będzie jej działać. Można to wyrazić poprzez:

  • Zdefiniuj dwa odrębne środowiska w schemacie: [„OBSŁUGA”, „SZKOLENIE”] i skojarz „ETYKIETA” tylko ze środowiskiem „SZKOLENIE”.
  • Skojarz dane szkoleniowe ze środowiskiem „TRENING”, a dane obsługujące ze środowiskiem „OBSŁUGA”.
Generowanie schematu

Schemat danych wejściowych jest określony jako instancja schematu TensorFlow.

Zamiast ręcznie konstruować schemat od podstaw, programista może polegać na automatycznej konstrukcji schematu TensorFlow Data Validation. W szczególności TensorFlow Data Validation automatycznie konstruuje początkowy schemat na podstawie statystyk obliczonych na podstawie danych uczących dostępnych w potoku. Użytkownicy mogą po prostu przejrzeć ten automatycznie wygenerowany schemat, zmodyfikować go w razie potrzeby, wprowadzić do systemu kontroli wersji i przekazać bezpośrednio do potoku w celu dalszej weryfikacji.

TFDV zawiera infer_schema() do automatycznego generowania schematu. Na przykład:

schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)

Spowoduje to automatyczne wygenerowanie schematu na podstawie następujących reguł:

  • Jeśli schemat został już wygenerowany automatycznie, jest używany w takiej postaci, w jakiej jest.

  • W przeciwnym razie TensorFlow Data Validation sprawdza dostępne statystyki danych i oblicza odpowiedni schemat dla danych.

Uwaga: schemat generowany automatycznie jest najlepszym rozwiązaniem i próbuje jedynie wywnioskować podstawowe właściwości danych. Oczekuje się, że użytkownicy przejrzą go i zmodyfikują w razie potrzeby.

Wykrywanie przekrzywienia w udostępnianiu szkoleniowym

Przegląd

Walidacja danych TensorFlow może wykryć odchylenie dystrybucji między danymi uczącymi a udostępnianymi. Pochylenie dystrybucji występuje, gdy dystrybucja wartości funkcji dla danych uczących znacznie różni się od udostępnianych danych. Jedną z głównych przyczyn wypaczenia dystrybucji jest użycie albo zupełnie innego korpusu do generowania danych treningowych, aby przezwyciężyć brak danych początkowych w żądanym korpusie. Innym powodem jest wadliwy mechanizm próbkowania, który wybiera tylko podpróbkę serwowanych danych do treningu.

Przykładowy scenariusz

Więcej informacji na temat konfigurowania wykrywania pochylenia w trakcie udostępniania można znaleźć w przewodniku TensorFlow Data Validation Get Started Guide .

Wykrywanie dryfu

Wykrywanie dryftu jest obsługiwane między kolejnymi zakresami danych (tj. Między zakresem N i zakresem N + 1), na przykład między różnymi dniami danych treningowych. Dryft wyrażamy w postaci odległości L-nieskończoności dla cech jakościowych i przybliżonej dywergencji Jensena-Shannona dla cech numerycznych. Możesz ustawić odległość progową, aby otrzymywać ostrzeżenia, gdy dryf jest większy niż dopuszczalny. Ustawienie właściwej odległości jest zwykle procesem iteracyjnym wymagającym wiedzy dziedzinowej i eksperymentów.

Informacje na temat konfigurowania wykrywania dryfu można znaleźć w przewodniku po sprawdzeniu poprawności danych TensorFlow - wprowadzenie .

Używanie wizualizacji do sprawdzania danych

Walidacja danych TensorFlow zapewnia narzędzia do wizualizacji rozkładu wartości cech. Analizując te dystrybucje w notatniku Jupyter przy użyciu aspektów , można wykryć typowe problemy z danymi.

Statystyki funkcji

Identyfikowanie podejrzanych dystrybucji

Typowe błędy w danych można zidentyfikować, korzystając z ekranu Przegląd aspektów w celu wyszukania podejrzanych rozkładów wartości funkcji.

Niezrównoważone dane

Niezrównoważona cecha to cecha, w przypadku której przeważa jedna wartość. Niezbilansowane funkcje mogą wystąpić naturalnie, ale jeśli funkcja zawsze ma tę samą wartość, możesz mieć błąd danych. Aby wykryć niezrównoważone funkcje w Przeglądzie aspektów, wybierz opcję „Niejednorodność” z menu „Sortuj według”.

Najbardziej niezrównoważone funkcje zostaną wymienione na górze każdej listy typów funkcji. Na przykład poniższy zrzut ekranu przedstawia jedną funkcję, która składa się z samych zer, i drugą, która jest wysoce niezrównoważona, na górze listy „Funkcje numeryczne”:

Wizualizacja niezrównoważonych danych

Jednolicie rozproszone dane

Cecha równomiernie rozłożona to taka, dla której wszystkie możliwe wartości pojawiają się z zbliżoną częstotliwością. Podobnie jak w przypadku niezrównoważonych danych, ta dystrybucja może wystąpić naturalnie, ale może być również spowodowana błędami w danych.

Aby wykryć równomiernie rozmieszczone funkcje w przeglądzie aspektów, wybierz „Niejednorodność” z menu „Sortuj według” i zaznacz pole wyboru „Odwróć kolejność”:

Histogram jednolitych danych

Dane ciągów są przedstawiane za pomocą wykresów słupkowych, jeśli istnieje 20 lub mniej unikatowych wartości, lub jako skumulowany wykres dystrybucji, jeśli jest więcej niż 20 unikalnych wartości. Tak więc w przypadku danych ciągów jednolite rozkłady mogą pojawiać się jako płaskie wykresy słupkowe, takie jak powyższy, lub jako linie proste, jak na poniższym:

Wykres liniowy: skumulowany rozkład jednolitych danych

Błędy, które mogą generować jednolicie rozproszone dane

Oto kilka typowych błędów, które mogą powodować równomierne rozłożenie danych:

  • Używanie ciągów do reprezentowania typów danych niebędących ciągami, takich jak daty. Na przykład będziesz mieć wiele unikalnych wartości dla funkcji daty i godziny z reprezentacjami, takimi jak „2017-03-01-11-45-03”. Unikalne wartości zostaną rozłożone równomiernie.

  • W tym indeksy, takie jak „numer wiersza” jako funkcje. Tutaj znowu masz wiele unikalnych wartości.

Brakujące dane

Aby sprawdzić, czy obiekt nie ma całkowicie brakujących wartości:

  1. Wybierz „Brakująca kwota / zero” z menu „Sortuj według”.
  2. Zaznacz pole wyboru „Odwróć kolejność”.
  3. Spójrz na kolumnę „brakujące”, aby zobaczyć odsetek wystąpień z brakami wartości dla funkcji.

Błąd danych może również powodować niepełne wartości funkcji. Na przykład możesz oczekiwać, że lista wartości funkcji będzie miała zawsze trzy elementy i odkryjesz, że czasami ma tylko jeden. Aby sprawdzić niekompletne wartości lub inne przypadki, w których listy wartości funkcji nie mają oczekiwanej liczby elementów:

  1. Z menu rozwijanego „Wykres do pokazania” po prawej stronie wybierz opcję „Długość listy wartości”.

  2. Spójrz na wykres po prawej stronie każdego wiersza funkcji. Wykres przedstawia zakres długości list wartości dla funkcji. Na przykład podświetlony wiersz na poniższym zrzucie ekranu przedstawia funkcję, która ma kilka list wartości o zerowej długości:

Wyświetlanie przeglądu aspektów z funkcją z listami wartości funkcji o zerowej długości

Duże różnice w skali między elementami

Jeśli twoje funkcje różnią się znacznie pod względem skali, model może mieć trudności z nauką. Na przykład, jeśli niektóre funkcje różnią się od 0 do 1, a inne od 0 do 1 000 000 000, masz dużą różnicę w skali. Porównaj kolumny „maks.” I „min.” Między obiektami, aby znaleźć bardzo różne skale.

Rozważ znormalizowanie wartości cech, aby zredukować te szerokie odchylenia.

Etykiety z nieprawidłowymi etykietami

Estymatory TensorFlow mają ograniczenia dotyczące typu danych, które akceptują jako etykiety. Na przykład klasyfikatory binarne zwykle działają tylko z etykietami {0, 1}.

Przejrzyj wartości etykiet w przeglądzie aspektów i upewnij się, że są one zgodne z wymaganiami estymatorów .