1. モデルの期待をデータ契約に変換する
バリデータを選ぶ前に、まずプログラムが期待するオブジェクトから始めましょう。表形式の入力では、列名、型、単位を定義します。画像では、次元、チャンネル、向きの処理を明示します。テキストでは、エンコーディング、必須フィールド、空入力に対するポリシーを定義します。データは読み取れても計算に適さない場合があります。
三つの判断を区別しましょう。拒否する、そのまま受け入れる、文書化されたルールに従って変換する、です。文字列を数値に変換する、欠損値を置き換える、入力を切り詰めるといった操作は処理内容を変えます。これらの操作は、ツールがデフォルトの型を選択したというだけの理由で発生してはなりません。
このガイドの例は教育的なものであり、実行されるものではありません。識別子と−100から100の範囲の三つの数値を持つオブジェクトを扱います。これらの範囲は契約を例示するために作られた架空のものであり、物理的な単位やKernodeckのデータセットとは関係ありません。実際のプロジェクトのルールに置き換える必要があります。
表をスクロールしてすべての列を表示してください。| レベル | ルール | 検出可能な失敗 |
|---|---|---|
| スキーマ | idとvaluesのみを正確に含む | フィールドの欠落または予期しないフィールド。 |
| 型 | idは文字列、valuesは数値のリスト | 数値がテキスト、ブール値、または欠損値として表現されている。 |
| 形状 | オブジェクトごとに三つの値 | ベクトルが短すぎるか長すぎる。 |
| 値 | [−100, 100]の範囲内の有限な数値 | NaN、無限大、または教育的な範囲外の値。 |
| コーパス | 識別子の一意性 | 二つのオブジェクトが同じ識別子を持つ。 |
2. 変換前に読み取りを検証する
フォーマットとその方言を固定しましょう。CSVの場合、区切り文字、エンコーディング、ヘッダーの有無を文書化します。Pythonの標準CSVリーダーは通常文字列を返しますが、あなたの列が整数であるとは判断しません。0012のような識別子は、変換によって12に変わると意味を失う可能性があります。したがって、識別子は意図された型のまま保持しましょう。
ビジネスオブジェクトを作成する前に、フィールド数と列名を確認しましょう。予期しない区切り文字でずれた行は、一部の値が変換可能であるという理由だけで通してはなりません。バイナリファイルや画像についても、実際の読み取りを行いましょう。正しい拡張子はデコード可能な内容を保証するものではありません。
デコードされた JSON は、まだ検証済みの契約ではありません。Python モジュールはデフォルトで、一部の非有限値やオブジェクト内の重複した名前を受け入れます。フォーマットがこれらを禁止している場合は、デコード時にその拒否を設定し、その後スキーマのルールを適用してください。ファイル全体をメモリに読み込む前に、適切なサイズ制限も定義しましょう。
3. ルールの種類ごとにエラーを切り分ける
各無効なエントリが重要なルールを 1 つだけ違反するような小さなセットを構築しましょう。そうすれば、その検査が何を検出するのかが分かります。唯一の誤った例が、不正な識別子と誤った次元、無限大の数を同時に含んでいる場合、それが拒否されても 3 つのルールが機能していることの証明にはなりません。
表内の記法は、すでに読み込まれた教育用オブジェクトを表しています。無限大は非有限の数値であり、採用すべき JSON 構文ではありません。判定結果は推論による期待値であり、実行されたプログラムの出力ではありません。a を持つ 2 つ目のオブジェクトは、一意性を確認するために、有効な a のオブジェクトの後にテストされます。
契約が進化する際には、これらのケースを契約とともに保持しておきましょう。数値文字列を受け入れることにした場合は、明示的な変換ステップを作成し、その決定の記録を残してください。コーパスの最初の拒否を消すために、検査を黙って変更してはいけません。
表をスクロールしてすべての列を表示してください。| 識別子と値 | 期待される判定 | 対象となるルール |
|---|---|---|
| a · [1, 2, 3] | 受理 | 有効な参照。 |
| b · ["4", 5, 6] | 拒否:型 | この契約では、文字列は数値ではありません。 |
| c · [7, 8] | 拒否:形式 | 3つの値ではなく2つの値。 |
| d · [0, 無限大, 1] | 拒否:値 | 非有限値は計算に含めることができません。 |
| a · [4, 5, 6]、最初の a の後 | 拒否:重複 | コーパス上の一意性。 |
4. 明示的なバリデータと活用可能なメッセージを保つ
次の抜粋は、デコード後のオブジェクトに対する検査を示しています。最初に失敗したルールで停止し、ファイル全体や考えられるすべてのフォーマットを処理するものではありません。seen コンテナはコーパスの走査に属します。各行で再作成すると、重複検査が無意味になります。
有用なメッセージには、ルール、論理ファイル、オブジェクトの位置が含まれます。その内容全体をコピーすることは避けましょう。複数のエラーを収集する場合は、完全なカウンターを維持しつつ、保持する詳細を制限してください。数ギガバイトのレポートも、最初の原因を特定する助けにはなりません。
NumPy 配列では、要素ごとの有限性チェックが型と形式のチェックを補完できます。ただし、ビジネス上の境界を置き換えるものではありません。有限の数値でも、負の長さや誤った単位で表された値である可能性があります。
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. サンプルからコーパス全体へ移行する
短いサンプルは、リーダーと契約をすばやく修正するのに役立ちます。通常のケースと境界(空の入力、最大サイズ、珍しい文字、最初と最後のパーティション)を選びましょう。先頭の行だけを選ぶと、より後ろのファイルやまれなカテゴリにある異常を見逃す可能性があります。
完全な検証では、対象となるすべてのエントリを走査し、グローバルなルールを適用します。大量のデータの場合は、ファイルを段階的に処理し、その識別情報を記録します。すべての識別子をメモリに保持する方法は小さな例には適していますが、コストが高くなりすぎる可能性があります。その場合は、検査を諦めずに、データ量に適した一意性戦略を選びましょう。
レポートにはその範囲を明記する必要があります。デバッグ用サンプル、パーティション全体、または定義されたコーパス全体のいずれかです。読み込んだ件数、受理した件数、拒否した件数、および適用したルールを保持してください。その後ファイルが変更された場合、古いレポートは新しい入力を自動的に検証するものではありません。
6. 拒否されたデータの扱いを決める
エラーが計算の意味を無効にする場合は作業を中止してください。必須カラムの欠落、単位の非互換、識別子の対応関係の喪失などが該当します。タスクが孤立した要素の除外を許可している場合は、そのポリシーを起動前に定義し、拒否されたものを保持し、実際に受理された範囲で結果を計算してください。
除外は修正ではありません。欠損値を置き換えたり入力を正規化したりする場合は、識別可能な新しいバージョンを作成し、再検証してください。変換とそのパラメータは実験と一緒に保持してください。そうしなければ、同じ名前の2つの試行が異なるデータを使用する可能性があります。
GPUの前に、実際に構築されたバッチをさらに確認してください。次元の順序、数値型、該当する場合はマスク、およびターゲットとの対応です。ファイルの検証は変換に先行しますが、その後のパイプラインがこれらの性質を保つことを証明するものではありません。代表的なケースでこの最後の境界を確認できます。
7. 理解しやすい起動許可を作成する
期待される出力は、4つの問いに答える短いレポートです。どの入力か、どのルールか、どの範囲か、どの判断か。有効なステータスは、正確なコーパスの同一性を参照しなければなりません。部分的なステータスは、まだ確認が必要なものを明示しなければなりません。却下は、該当するオブジェクトの内容を不必要に公開することなく、それらを特定できるようにしなければなりません。
バリデータ自体のチェックも追加してください。正しいケースは通り、各不正ケースは正しい理由で拒否され、カウンターが整合することを確認します。次にアプリケーションで小さな箇所を確認してください。この二重チェックにより、データの適合性をモデルの品質やGPUの可用性と混同することを避けられます。
適合した入力であっても、バイアスがあったり、ラベル付けが誤っていたり、検討対象の問いに適さなかったりする可能性があります。このガイドは構造的な適合性と明示的なルールを扱うものであり、代表性や利用権を保証するものではありません。これらの判断は長時間の処理の前に dossier を補完するものです。