GPU cho dự án của bạn · thanh toán crypto không cần KYC Cách thuê
Tiếng Việt
Mở console
Hướng dẫn thực hành / KERNODECK

Kiểm tra đầu vào trước khi tải mô hình.

Trước tiên hãy xác thực việc đọc và lược đồ, sau đó là kiểu, số chiều và giá trị của dữ liệu. Tiếp theo, kiểm tra các quy tắc liên quan đến nhiều dòng, như tính duy nhất của các định danh. Một mẫu dùng để hoàn thiện các kiểm tra này; nó không chứng minh rằng toàn bộ tập dữ liệu đều hợp lệ. Hãy tải mô hình sau khi có báo cáo nêu rõ những gì thực sự đã được kiểm tra.

11 phút đọc · Hướng dẫn cho nhà phát triển

1. Chuyển các kỳ vọng của mô hình thành một khế ước dữ liệu

Hãy bắt đầu từ đối tượng mà chương trình của bạn mong đợi, trước khi chọn một trình xác thực. Với đầu vào dạng bảng, hãy đặt tên cho các cột, kiểu và đơn vị. Với hình ảnh, hãy nêu rõ kích thước, số kênh và cách xử lý hướng. Với văn bản, hãy xác định mã hóa, các trường bắt buộc và chính sách đối với đầu vào rỗng. Một dữ liệu có thể đọc được mà vẫn không phù hợp cho tính toán.

Hãy tách biệt ba quyết định: từ chối, chấp nhận nguyên trạng hoặc biến đổi theo một quy tắc đã được ghi lại. Việc chuyển một chuỗi thành số, thay thế một giá trị thiếu và cắt ngắn một đầu vào đều làm thay đổi nội dung được xử lý. Những thao tác này không nên xảy ra chỉ vì một công cụ chọn một kiểu mặc định.

Ví dụ trong hướng dẫn này mang tính minh họa và không được thực thi. Nó liên quan đến các đối tượng chứa một định danh và ba giá trị số nằm trong khoảng từ −100 đến 100. Các giới hạn này là do đặt ra để minh họa một khế ước, không có đơn vị vật lý cũng không liên quan đến một tập dữ liệu Kernodeck. Chúng cần được thay thế bằng các quy tắc của dự án thực tế.

Cuộn bảng để xem tất cả các cột.
Khế ước của ví dụ, cần được xác định trước khi kiểm tra tập dữ liệu.
MứcQuy tắcLỗi có thể phát hiện
Lược đồĐúng chính xác id và valuesThiếu trường hoặc có trường không mong đợi.
Kiểuid là chuỗi; values là danh sách sốSố được biểu diễn dưới dạng văn bản, kiểu boolean hoặc giá trị thiếu.
Hình dạngBa giá trị cho mỗi đối tượngVectơ quá ngắn hoặc quá dài.
Giá trịCác số hữu hạn trong [−100, 100]NaN, vô cực hoặc giá trị nằm ngoài miền minh họa.
Tập dữ liệuCác định danh duy nhấtHai đối tượng mang cùng một định danh.

2. Kiểm tra việc đọc trước các phép chuyển đổi

Hãy cố định định dạng và phương ngữ của nó. Với CSV, hãy ghi rõ dấu phân cách, mã hóa và sự hiện diện của dòng tiêu đề. Trình đọc CSV chuẩn của Python thường trả về chuỗi; nó không quyết định rằng cột của bạn là số nguyên. Một định danh như 0012 có thể mất ý nghĩa nếu một phép chuyển đổi biến nó thành 12. Vì vậy, hãy giữ các định danh ở kiểu dự định của chúng.

Hãy kiểm tra số lượng trường và tên cột trước khi tạo các đối tượng nghiệp vụ. Một dòng bị lệch do một dấu phân cách bất ngờ không được phép lọt qua chỉ vì một số giá trị vẫn có thể chuyển đổi được. Với các tệp nhị phân hoặc hình ảnh, cũng hãy thực hiện việc đọc thực tế: một phần mở rộng đúng không bảo đảm nội dung có thể giải mã được.

Một JSON đã giải mã chưa phải là một hợp đồng đã được xác thực. Mô-đun Python mặc định chấp nhận một số giá trị không hữu hạn và các tên lặp lại trong một đối tượng. Nếu định dạng của bạn cấm những điều này, hãy cấu hình việc từ chối ngay khi giải mã, rồi áp dụng các quy tắc lược đồ của bạn. Cũng hãy đặt một giới hạn kích thước phù hợp trước khi nạp toàn bộ tệp vào bộ nhớ.

3. Cô lập một lỗi theo từng loại quy tắc

Hãy xây dựng một tập nhỏ trong đó mỗi mục không hợp lệ chỉ vi phạm một quy tắc quan trọng. Như vậy bạn sẽ biết kiểm tra phát hiện được điều gì. Nếu ví dụ sai duy nhất lại vừa có định danh sai, vừa có kích thước sai vừa có một số vô hạn, thì việc nó bị từ chối không chứng minh được cả ba quy tắc đều hoạt động.

Trong bảng, các ký hiệu biểu diễn những đối tượng minh họa đã được đọc. Vô hạn là một giá trị số không hữu hạn, không phải một cú pháp JSON cần áp dụng. Các phán quyết được suy ra bằng lập luận và không phải là kết quả của một chương trình đã chạy. Một đối tượng thứ hai mang a được kiểm tra sau đối tượng a hợp lệ để xác minh tính duy nhất.

Hãy giữ những trường hợp này cùng với hợp đồng của bạn khi hợp đồng đó thay đổi. Nếu bạn quyết định chấp nhận chuỗi số, hãy tạo một bước chuyển đổi tường minh và lưu lại dấu vết của quyết định này. Đừng âm thầm sửa đổi các kiểm tra để làm biến mất lần từ chối đầu tiên của tập dữ liệu.

Cuộn bảng để xem tất cả các cột.
Các trường hợp minh họa và chẩn đoán mong đợi.
Định danh và giá trịPhán quyết mong đợiQuy tắc được kiểm chứng
a · [1, 2, 3]Được chấp nhậnTham chiếu hợp lệ.
b · ["4", 5, 6]Từ chối: kiểuMột chuỗi không phải là một số trong hợp đồng này.
c · [7, 8]Từ chối: hình dạngHai giá trị thay vì ba.
d · [0, vô hạn, 1]Từ chối: giá trịMột giá trị không hữu hạn không thể tham gia vào phép tính.
a · [4, 5, 6], sau a đầu tiênTừ chối: trùng lặpTính duy nhất trên toàn tập dữ liệu.

4. Giữ một bộ xác thực tường minh và các thông báo hữu ích

Đoạn trích sau minh họa các kiểm tra trên một đối tượng, sau khi giải mã. Nó dừng ở quy tắc thất bại đầu tiên và không xử lý toàn bộ tệp cũng như mọi định dạng khả dĩ của nó. Tập hợp seen thuộc về quá trình duyệt tập dữ liệu: tạo lại nó ở mỗi dòng sẽ khiến việc kiểm tra trùng lặp trở nên vô ích.

Một thông báo hữu ích chứa quy tắc, tệp logic và vị trí của đối tượng. Tránh sao chép toàn bộ nội dung của nó vào đó. Đối với việc thu thập nhiều lỗi, hãy giới hạn chi tiết được lưu giữ trong khi vẫn duy trì các bộ đếm đầy đủ. Một báo cáo vài gigabyte cũng không giúp xác định nguyên nhân đầu tiên tốt hơn.

Trên một mảng NumPy, việc kiểm tra tính hữu hạn từng phần tử một có thể bổ sung cho các kiểm tra về kiểu và hình dạng. Nó không thay thế các giới hạn nghiệp vụ: một số hữu hạn vẫn có thể là một độ dài âm hoặc một giá trị được biểu diễn bằng sai đơn vị.

Đoạn trích minh họa không được thực thi — xác thực một đối tượng đã giải mã
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 item

5. Từ mẫu đến toàn bộ tập dữ liệu

Một mẫu ngắn cho phép sửa nhanh bộ đọc và hợp đồng. Hãy chọn các trường hợp thông thường và các ranh giới: đầu vào rỗng, kích thước tối đa, ký tự bất thường, phân vùng đầu tiên và cuối cùng. Chỉ chọn các dòng đầu tiên có thể bỏ sót một bất thường nằm trong một tệp xuất hiện muộn hơn hoặc trong một danh mục hiếm gặp.

Việc xác thực đầy đủ duyệt qua mọi mục liên quan và áp dụng các quy tắc toàn cục. Với khối lượng lớn, hãy xử lý các tệp dần dần và ghi lại định danh của chúng. Một tập hợp chứa mọi định danh trong bộ nhớ phù hợp với ví dụ nhỏ, nhưng có thể trở nên quá tốn kém; khi đó hãy chọn một chiến lược duy nhất phù hợp với khối lượng, mà không từ bỏ việc kiểm tra.

Báo cáo phải nêu rõ phạm vi của nó: mẫu thử nghiệm, toàn bộ một phân vùng hay toàn bộ tập dữ liệu đã xác định. Giữ nguyên số lượng đã đọc, chấp nhận và từ chối, cùng các quy tắc đã áp dụng. Nếu các tệp sau đó thay đổi, báo cáo cũ không tự động xác nhận đầu vào mới.

6. Quyết định xử lý dữ liệu bị từ chối

Dừng công việc khi các lỗi làm sai lệch ý nghĩa của phép tính: thiếu cột thiết yếu, đơn vị không tương thích hoặc mất khớp các định danh. Nếu tác vụ của bạn cho phép loại trừ các phần tử riêng lẻ, hãy xác định chính sách này trước khi chạy, giữ lại các trường hợp bị từ chối và tính kết quả trên phạm vi thực sự được chấp nhận.

Loại bỏ không phải là sửa chữa. Nếu bạn thay thế các giá trị thiếu hoặc chuẩn hóa đầu vào, hãy tạo một phiên bản mới có thể nhận diện và xác nhận lại nó. Giữ lại phép biến đổi và các tham số của nó cùng với thí nghiệm. Nếu không, hai lần thử có cùng tên có thể dùng dữ liệu khác nhau.

Trước GPU, hãy kiểm tra thêm batch thực sự được tạo: thứ tự các chiều, kiểu số, mặt nạ nếu có và sự khớp với các nhãn mục tiêu. Việc xác nhận tệp diễn ra trước các phép biến đổi; nó không chứng minh rằng pipeline sau đó vẫn giữ các thuộc tính này. Một trường hợp tiêu biểu cho phép kiểm tra ranh giới cuối cùng này.

7. Tạo một sự cho phép chạy dễ hiểu

Đầu ra mong đợi là một báo cáo ngắn trả lời bốn câu hỏi: đầu vào nào, quy tắc nào, phạm vi nào và quyết định nào. Một trạng thái hợp lệ phải trỏ đến một danh tính tập dữ liệu chính xác. Một trạng thái một phần phải nêu rõ những gì còn phải kiểm tra. Một sự từ chối phải cho phép tìm lại các đối tượng liên quan mà không phát tán nội dung của chúng một cách không cần thiết.

Thêm một kiểm tra cho chính trình xác nhận: một trường hợp đúng được chấp nhận, mỗi trường hợp sai bị từ chối vì đúng lý do, và các bộ đếm khớp lại với nhau. Sau đó kiểm tra một đoạn nhỏ trong ứng dụng. Kiểm tra kép này tránh nhầm lẫn giữa tính tuân thủ của dữ liệu với chất lượng mô hình hoặc tính khả dụng của GPU.

Các đầu vào tuân thủ vẫn có thể bị thiên lệch, dán nhãn sai hoặc không phù hợp với câu hỏi đang nghiên cứu. Hướng dẫn này bao quát tính tuân thủ về cấu trúc và các quy tắc rõ ràng; nó không chứng nhận tính đại diện hay quyền sử dụng. Những quyết định này hoàn thiện hồ sơ trước một quá trình xử lý dài.

Câu hỏi của bạn

Một tệp JSON đọc được đã hợp lệ cho mô hình của tôi chưa?

Chưa. Việc giải mã chỉ kiểm tra một cách biểu diễn, không kiểm tra các trường, chiều, đơn vị và ràng buộc nghiệp vụ của bạn. Hãy áp dụng một hợp đồng rõ ràng sau khi đọc và cấu hình các trường hợp từ chối định dạng cần thiết.

Tôi có thể chỉ xác nhận vài dòng đầu tiên không?

Chúng dùng để tinh chỉnh trình đọc, nhưng không xác nhận phần còn lại của tập dữ liệu. Hãy nêu rõ đây là một mẫu, sau đó duyệt toàn bộ các đầu vào bắt buộc và kiểm tra các quy tắc tổng thể trước khi chạy đầy đủ.

Có nên tự động xóa các dòng không đúng không?

Không. Trước tiên hãy xác định một chính sách từ chối tương thích với tác vụ. Giữ lại các bộ đếm và các phần tử cần sửa lại; việc loại trừ làm thay đổi phạm vi và có thể làm sai lệch phân tích nếu nó diễn ra âm thầm.