Tổ chức mã và refactor

Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Ravi Bhadauria

Machine Learning Engineer

Mã thử nghiệm vs mã sản xuất

  • Mã thử nghiệm giúp lặp nhanh
  • Nhưng không phù hợp sản xuất
    • Chưa kiểm thử, dễ lỗi
    • Không mô-đun, lặp mã nhiều
    • Khó tái lập
Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Đặc tính của mã sản xuất tốt

  • Tái lập: tạo lại kết quả trong môi trường và thời điểm khác

  • Mô-đun: tách biệt, độc lập, kiểm thử được

  • Nhất quán: Một nguồn sự thật cho mọi tham số

    • Một tệp cấu hình/tham số

Sơ đồ minh họa ba đặc tính của mã sản xuất

Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Tệp cấu hình và YAML

  • Tệp phải ở định dạng được hỗ trợ

    • YAML, JSON, TOML, Python
    • Mặc định là params.yaml
  • Ta dùng YAML

    • Viết tắt của "YAML Ain't Markup Language"
    • Chuẩn trao đổi dữ liệu giữa ngôn ngữ/ứng dụng
    • Cú pháp đơn giản, rõ ràng
    • Phần mở rộng: .yaml hoặc .yml
1 https://dvc.org/doc/command-reference/params#description
Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Cú pháp YAML

  • Khai báo tham số dạng dictionary

    • Khóa và giá trị cách nhau bằng :
  • Chú thích bắt đầu bằng #

  • Kiểu dữ liệu:

    • Số nguyên, Số thực, Chuỗi
  • Cấu trúc dữ liệu:

    • Mảng
    • Dictionary lồng nhau
  • Thụt lề quan trọng

# Cặp khóa-giá trị
a: 1
b: 1.2
c: "String value"
# Mảng
a: [1, 2.2, 3, 4.8]
b:
  - 5
  - "String value"
# Dictionary lồng nhau
a:
  b: "Some value"
  c: "Some other value"
Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Ví dụ tệp cấu hình

# Tham số tiền xử lý dữ liệu
preprocess:
  ...
  target_column: RainTomorrow
  categorical_features:
    - Location
    - WindGustDir
    - ...

# Tham số huấn luyện/đánh giá mô hình train_and_evaluate: rfc_params: n_estimators: 2 ...
Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Ví dụ hàm mô-đun

# Trong model.py
def evaluate_model(model, X_test, y_test):
    """Đánh giá mô hình trên tập kiểm tra và trả về các chỉ số."""
    y_pred = model.predict(X_test)
    precision = precision_score(y_test, y_pred)
    ...
    return { "accuracy": accuracy, "precision": precision,
        "recall": recall, "f1_score": f1 }
# Trong mã entry-point (train_and_evaluate.py)
from model import evaluate_model
metrics = evaluate_model(model, X_test, y_test)
Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Bố cục mã dự án mẫu

Hình bố cục mã trong kho Machine Learning

Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Ayo berlatih!

Nhập môn Quản lý Phiên bản Dữ liệu với DVC

Preparing Video For Download...