1. Przekształć oczekiwania modelu w kontrakt danych
Zacznij od obiektu, którego oczekuje twój program, zanim wybierzesz walidator. Dla danych wejściowych tabelarycznych nazwij kolumny, typy i jednostki. Dla obrazu określ wymiary, kanały i obsługę orientacji. Dla tekstu zdefiniuj kodowanie, pola obowiązkowe i politykę dotyczącą pustych danych wejściowych. Dane mogą być czytelne, a mimo to nieodpowiednie do obliczenia.
Rozdziel trzy decyzje: odrzucić, zaakceptować bez zmian lub przekształcić zgodnie z udokumentowaną regułą. Konwersja ciągu znaków na liczbę, zastąpienie brakującej wartości i obcięcie danych wejściowych zmieniają przetwarzaną treść. Te operacje nie powinny zachodzić tylko dlatego, że narzędzie wybiera domyślny typ.
Przykład w tym przewodniku jest edukacyjny i nie jest wykonywany. Dotyczy obiektów zawierających identyfikator i trzy wartości liczbowe z przedziału od −100 do 100. Te granice są wymyślone, aby zilustrować kontrakt, bez jednostki fizycznej ani związku ze zbiorem danych Kernodeck. Należy je zastąpić regułami rzeczywistego projektu.
Przewiń tabelę, aby zobaczyć wszystkie kolumny.| Poziom | Reguła | Możliwy do wykrycia błąd |
|---|---|---|
| Schemat | Dokładnie id i values | Brakujące lub nieoczekiwane pole. |
| Typ | id jako ciąg znaków; values jako lista liczb | Liczba przedstawiona jako tekst, wartość logiczna lub brak wartości. |
| Kształt | Trzy wartości na obiekt | Wektor zbyt krótki lub zbyt długi. |
| Wartość | Liczby skończone w [−100, 100] | NaN, nieskończoność lub wartość poza zakresem edukacyjnym. |
| Korpus | Unikalne identyfikatory | Dwa obiekty mają ten sam identyfikator. |
2. Sprawdź odczyt przed konwersjami
Ustal format i jego dialekt. Dla CSV udokumentuj separator, kodowanie i obecność nagłówka. Standardowy czytnik CSV w Pythonie zwraca normalnie ciągi znaków; nie decyduje, że twoja kolumna jest liczbą całkowitą. Identyfikator taki jak 0012 może stracić znaczenie, jeśli konwersja zamieni go w 12. Zachowaj więc identyfikatory w ich zamierzonym typie.
Skontroluj liczbę pól i nazwy kolumn przed utworzeniem obiektów biznesowych. Wiersz przesunięty przez nieoczekiwany separator nie może przejść pod pretekstem, że niektóre wartości pozostają konwertowalne. Dla plików binarnych lub obrazów również wykonaj rzeczywisty odczyt: poprawna końcówka nie gwarantuje dekodowalnej zawartości.
Zdekodowany JSON to jeszcze nie zatwierdzony kontrakt. Moduł Pythona domyślnie akceptuje pewne wartości niefinitywne oraz powtórzone nazwy w obiekcie. Jeśli Twój format ich zabrania, skonfiguruj odrzucanie ich na etapie dekodowania, a następnie zastosuj reguły schematu. Ustaw też odpowiedni limit rozmiaru, zanim załadujesz cały plik do pamięci.
3. Wyizoluj jeden błąd na typ reguły
Zbuduj mały zbiór, w którym każdy niepoprawny wpis narusza tylko jedną istotną regułę. Dzięki temu będziesz wiedzieć, co wykrywa kontrola. Jeśli jedyny błędny przykład łączy zły identyfikator, niewłaściwy wymiar i nieskończoność, jego odrzucenie nie dowodzi, że działają wszystkie trzy reguły.
W tabeli oznaczenia reprezentują obiekty dydaktyczne, które zostały już odczytane. Nieskończoność to niefinitywna wartość liczbowa, a nie składnia JSON, którą należy stosować. Werdykty wynikają z rozumowania i nie są danymi wyjściowymi uruchomionego programu. Drugi obiekt z polem a testuje się po poprawnym obiekcie a, aby sprawdzić unikalność.
Zachowaj te przypadki wraz ze swoim kontraktem, gdy będzie się on zmieniał. Jeśli zdecydujesz się akceptować łańcuchy znaków reprezentujące liczby, utwórz jawny krok konwersji i pozostaw ślad tej decyzji. Nie zmieniaj po cichu kontroli, aby usunąć pierwsze odrzucenie z korpusu.
Przewiń tabelę, aby zobaczyć wszystkie kolumny.| Identyfikator i wartości | Oczekiwany werdykt | Ćwiczona reguła |
|---|---|---|
| a · [1, 2, 3] | Zaakceptowany | Poprawny punkt odniesienia. |
| b · ["4", 5, 6] | Odrzucony: typ | Łańcuch znaków nie jest liczbą w tym kontrakcie. |
| c · [7, 8] | Odrzucony: forma | Dwie wartości zamiast trzech. |
| d · [0, infini, 1] | Odrzucony: wartość | Wartość niefinitywna nie może wejść do obliczeń. |
| a · [4, 5, 6], po pierwszym a | Odrzucony: duplikat | Unikalność w korpusie. |
4. Utrzymuj jawny walidator i użyteczne komunikaty
Poniższy fragment pokazuje kontrole na obiekcie po dekodowaniu. Zatrzymuje się na pierwszej niespełnionej regule i nie obsługuje ani całego pliku, ani wszystkich jego możliwych formatów. Kontener seen należy do przebiegu po korpusie: odtwarzanie go przy każdym wierszu czyniłoby kontrolę duplikatów bezużyteczną.
Użyteczny komunikat zawiera regułę, plik logiczny i pozycję obiektu. Nie kopiuj do niego całej jego zawartości. Przy zbieraniu wielu błędów ogranicz zachowywane szczegóły, utrzymując kompletne liczniki. Raport o rozmiarze kilku gigabajtów też nie pomaga w zlokalizowaniu pierwszej przyczyny.
W tablicy NumPy kontrola skończoności element po elemencie może uzupełniać kontrole typu i kształtu. Nie zastępuje granic biznesowych: liczba skończona nadal może być ujemną długością lub wartością wyrażoną w niewłaściwej jednostce.
import math
def valider_objet(item, seen):
if type(item) is not dict or set(item) != {"id", "values"}:
raise ValueError("SCHEMA")
identifiant = item["id"]
if type(identifiant) is not str or not identifiant.strip():
raise ValueError("IDENTIFIANT")
if identifiant in seen:
raise ValueError("DOUBLON")
values = item["values"]
if type(values) is not list or len(values) != 3:
raise ValueError("FORME")
for value in values:
if type(value) not in (int, float):
raise ValueError("TYPE")
if not (-100 <= value <= 100) or not math.isfinite(value):
raise ValueError("VALEUR")
seen.add(identifiant)
return item5. Od próbki do pełnego korpusu
Krótka próbka pozwala szybko poprawić czytnik i kontrakt. Wybierz przypadki zwykłe i graniczne: puste wejście, maksymalny rozmiar, nietypowy znak, pierwszą i ostatnią partycję. Wybór samych pierwszych wierszy może pominąć anomalię znajdującą się w późniejszym pliku lub w rzadkiej kategorii.
Pełna walidacja przechodzi przez wszystkie istotne wpisy i stosuje reguły globalne. Przy dużych wolumenach przetwarzaj pliki stopniowo i zapisuj ich tożsamość. Zbiór wszystkich identyfikatorów w pamięci sprawdza się w małym przykładzie, ale może stać się zbyt kosztowny; wybierz wtedy strategię unikalności dostosowaną do wolumenu, nie rezygnując z kontroli.
Raport musi wskazywać swój zakres: próbkę kalibracyjną, całość partycji lub całość zdefiniowanego korpusu. Zachowaj liczbę odczytanych, zaakceptowanych i odrzuconych pozycji oraz zastosowane reguły. Jeśli pliki zmienią się później, stary raport nie zatwierdza automatycznie nowego wejścia.
6. Zdecyduj, co zrobić z odrzuconymi danymi
Zatrzymaj pracę, gdy błędy podważają sens obliczenia: brakuje istotnej kolumny, jednostki są niezgodne lub utracono dopasowanie identyfikatorów. Jeśli Twoje zadanie dopuszcza wykluczenie pojedynczych elementów, zdefiniuj tę politykę przed uruchomieniem, zachowaj odrzucenia i oblicz wyniki na faktycznie zaakceptowanym zakresie.
Odsunięcie na bok nie jest korektą. Jeśli zastępujesz brakujące wartości lub normalizujesz dane wejściowe, utwórz nową identyfikowalną wersję i zwaliduj ją ponownie. Zachowaj transformację i jej parametry wraz z eksperymentem. W przeciwnym razie dwa przebiegi o tej samej nazwie mogą używać różnych danych.
Przed GPU sprawdź jeszcze faktycznie zbudowany batch: kolejność wymiarów, typ numeryczny, ewentualną maskę i zgodność z celami. Walidacja pliku poprzedza transformacje; nie dowodzi, że pipeline zachowa następnie te właściwości. Przypadek reprezentatywny pozwala zweryfikować tę ostatnią granicę.
7. Utwórz zrozumiałą autoryzację uruchomienia
Oczekiwany wynik to krótki raport, który odpowiada na cztery pytania: jakie wejście, jakie reguły, jaki zakres i jaka decyzja. Status ważny musi wskazywać precyzyjną tożsamość korpusu. Status częściowy musi nazywać to, co pozostaje do sprawdzenia. Odrzucenie musi pozwalać odnaleźć dotyczące obiekty bez niepotrzebnego rozpowszechniania ich treści.
Dodaj kontrolę samego walidatora: przypadek poprawny przechodzi, każdy niepoprawny jest odrzucany z właściwego powodu, a liczniki się zgadzają. Następnie sprawdź krótki fragment w aplikacji. Ta podwójna kontrola pozwala uniknąć mylenia zgodności danych z jakością modelu lub dostępnością GPU.
Zgodne dane wejściowe mogą nadal być obciążone, błędnie oznaczone lub nieodpowiednie do badanego zagadnienia. Ten przewodnik obejmuje zgodność strukturalną i jawne reguły; nie poświadcza ani reprezentatywności, ani praw do użytkowania. Te decyzje uzupełniają dokumentację przed długim przetwarzaniem.