Dự đoán phân loại phim bằng BQML bằng SQL

1. Giới thiệu

Trong lớp học lập trình này, chúng ta sẽ tạo một mô hình dự đoán điểm số của phim bằng mô hình tuỳ chỉnh BigQuery ML chỉ bằng SQL và triển khai mô hình đó trong VertexAI. Bạn sẽ tìm hiểu:

  1. Cách tạo tập dữ liệu BigQuery bằng Cloud Shell và tải dữ liệu từ tệp
  2. Cách sử dụng BigQuery ML cho phương pháp học có giám sát để tạo mô hình Dự đoán hồi quy nhiều lớp cho dự đoán Điểm phim mà không cần lập trình nhiều mà chỉ cần sử dụng truy vấn SQL

Sản phẩm bạn sẽ tạo ra

Bạn sẽ tạo một

  • Tập dữ liệu BigQuery để chứa bảng và các thành phần mô hình
  • Mô hình BigQuery ML để dự đoán điểm xếp hạng phim bằng truy vấn SQL
  • Triển khai mô hình trong Vertex AI Model Registry

Yêu cầu

  • Một trình duyệt, chẳng hạn như Chrome hoặc Firefox
  • Một dự án Google Cloud đã bật tính năng thanh toán

2. Tạo dự án

  1. Trong Google Cloud Console, trên trang bộ chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
  2. Đảm bảo bạn đã bật tính năng thanh toán cho dự án trên Cloud. Tìm hiểu cách kiểm tra xem tính năng thanh toán có được bật trên dự án hay không.
  3. Chuyển đến BigQuery để bật API. Bạn cũng có thể mở trực tiếp giao diện người dùng web của BigQuery bằng cách nhập URL sau vào trình duyệt: https://console.cloud.google.com/bigquery

3. Kích hoạt Cloud Shell

  1. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud được tải sẵn bq: Trên Cloud Console, hãy nhấp vào Kích hoạt Cloud Shell ở góc trên cùng bên phải: 6757b2fb50ddcc2d.png
  2. Sau khi kết nối với Cloud Shell, bạn sẽ thấy mình đã được xác thực và dự án đã được đặt thành mã dự án của bạn. Chạy lệnh sau trong Cloud Shell để xác nhận rằng bạn đã được xác thực:
gcloud auth list
  1. Chạy lệnh sau trong Cloud Shell để xác nhận rằng lệnh gcloud biết về dự án của bạn
gcloud config list project
  1. Nếu dự án của bạn chưa được đặt, hãy sử dụng lệnh sau để đặt dự án:
gcloud config set project <PROJECT_ID>

Tham khảo tài liệu để biết các lệnh và cách sử dụng gcloud.

4. Chuẩn bị dữ liệu huấn luyện

Đây là một bước quan trọng trong tất cả các dự án, sản phẩm và ứng dụng liên quan đến dữ liệu, đòi hỏi nhiều kiến thức chuyên môn về lĩnh vực này ngoài công nghệ để chuẩn bị một tập dữ liệu tối ưu và sẵn sàng cho dự án học máy của bạn. Để phục vụ cho mục đích của lớp học lập trình này, chúng ta sẽ sử dụng tệp data (dữ liệu) đã được chuẩn bị.

5. Tạo và tải tập dữ liệu

Tập dữ liệu BigQuery là một tập hợp các bảng. Tất cả bảng trong một tập dữ liệu đều được lưu trữ ở cùng một vị trí dữ liệu. Bạn cũng có thể đính kèm các chế độ kiểm soát quyền truy cập tuỳ chỉnh để giới hạn quyền truy cập vào một tập dữ liệu và các bảng của tập dữ liệu đó.

  1. Trong Cloud Shell, hãy sử dụng lệnh bq mk để tạo một tập dữ liệu có tên là "movies".
bq mk --location=<<LOCATION>> movies

Đặt vị trí thành một khu vực (asia-south1).

  1. Đảm bảo bạn đã có tệp dữ liệu (.csv). Thực thi các lệnh sau trong Cloud Shell để nhân bản kho lưu trữ và chuyển đến dự án:
git clone <<repository link>>

cd movie-score
  1. Sử dụng lệnh bq load để tải tệp CSV vào bảng BigQuery (vui lòng lưu ý rằng bạn cũng có thể tải trực tiếp lên từ giao diện người dùng BigQuery):
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.csv \ Id:numeric,name:string,rating:string,genre:string,year:numeric,released:string,score:string,director:string,writer:string,star:string,country:string,budget:numeric,company:string,runtime:numeric,data_cat:string

Mô tả tuỳ chọn: –source_format=CSV – sử dụng định dạng dữ liệu CSV khi phân tích cú pháp tệp dữ liệu. –skip_leading_rows=1 – bỏ qua dòng đầu tiên trong tệp CSV vì đó là dòng tiêu đề. Movies.movies – đối số vị trí đầu tiên – xác định bảng mà dữ liệu sẽ được tải vào. ./movies.csv – đối số vị trí thứ hai – xác định tệp cần tải. Ngoài các tệp cục bộ, lệnh bq load có thể tải tệp từ Cloud Storage bằng URI gs://my_bucket/path/to/file. Một giản đồ có thể được xác định trong tệp giản đồ JSON hoặc dưới dạng danh sách được phân tách bằng dấu phẩy (tôi đã sử dụng danh sách được phân tách bằng dấu phẩy). Hoan hô! Dữ liệu csv của chúng ta hiện đã được tải trong bảng movies.movies.

  1. Truy vấn theo một trong 3 cách sau:

Chúng ta có thể tương tác với BigQuery theo 3 cách, chúng ta sẽ thử 2 trong số đó: a. Giao diện người dùng web của BigQuery b. Lệnh bq c. API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

Tôi đã sử dụng BigQuery Web SQL Workspace để chạy truy vấn. Không gian làm việc SQL có dạng như sau:

109a0b2c7155e9b3.png

Sử dụng lệnh bq:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. Dự đoán điểm xếp hạng phim theo thang điểm từ 1 đến 10

BigQuery ML hỗ trợ phương pháp học có giám sát bằng loại mô hình biến hồi quy logistic. Bạn có thể sử dụng loại mô hình hồi quy logistic nhị phân để dự đoán xem một giá trị có thuộc một trong hai danh mục hay không; hoặc bạn có thể sử dụng loại mô hình hồi quy nhiều lớp để dự đoán xem một giá trị có thuộc một trong nhiều danh mục hay không. Đây được gọi là các vấn đề phân loại vì chúng cố gắng phân loại dữ liệu thành hai hoặc nhiều danh mục.

Lưu ý nhanh về lựa chọn mô hình: Đây là lựa chọn mô hình thử nghiệm được chọn ở đây, dựa trên việc đánh giá kết quả ban đầu tôi đã chạy qua một vài mô hình và cuối cùng đã tiếp tục với LOGISTIC REG để đơn giản hoá và để có kết quả gần với điểm xếp hạng phim thực tế từ một số cơ sở dữ liệu. Xin lưu ý rằng đây chỉ là một mẫu để triển khai mô hình và KHÔNG nhất thiết là mô hình được đề xuất cho trường hợp sử dụng này. Một cách khác để triển khai việc này là dự đoán kết quả của bộ phim là TỐT / KHÔNG TỐT bằng cách sử dụng mô hình hồi quy logistic này thay vì dự đoán điểm số.

Chọn dữ liệu huấn luyện

Chúng ta đã chia dữ liệu về phim (ở định dạng csv) thành 3 danh mục trong bảng bằng cách sử dụng trường "data_cat" có một trong 3 giá trị là TRAIN (HUẤN LUYỆN), TEST (KIỂM THỬ) và PREDICT (DỰ ĐOÁN). Việc phân tách tập dữ liệu cho mục đích kiểm thử và huấn luyện là một khía cạnh quan trọng của mô hình. Nếu bạn cần thêm thông tin về cách chia tách tập dữ liệu, hãy tham khảo tài liệu.

Tạo mô hình hồi quy logistic

Chúng ta có thể sử dụng câu lệnh CREATE MODEL (TẠO MÔ HÌNH) với tuỳ chọn "LOGISTIC_REG" để tạo và huấn luyện mô hình hồi quy logistic.

Chạy truy vấn dưới đây trong Không gian làm việc SQL trên giao diện người dùng web của BigQuery:

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

Thông tin chi tiết về truy vấn:

  1. Câu lệnh CREATE MODEL huấn luyện một mô hình bằng dữ liệu huấn luyện trong câu lệnh SELECT
  2. Mệnh đề OPTIONS chỉ định loại mô hình và các tuỳ chọn huấn luyện. Ở đây, tuỳ chọn LOGISTIC_REG chỉ định loại mô hình hồi quy logistic. Bạn không cần chỉ định mô hình hồi quy logistic nhị phân so với mô hình hồi quy logistic nhiều lớp: BigQuery ML có thể xác định mô hình nào cần huấn luyện dựa trên số lượng giá trị riêng biệt trong cột nhãn
  3. data_split_method=‘NO_SPLIT' buộc BQML huấn luyện trên dữ liệu theo điều kiện truy vấn (data_cat = ‘TRAIN'), cũng lưu ý rằng bạn nên sử dụng "AUTO_SPLIT" trong tuỳ chọn này để cho phép khung (hoặc dịch vụ trong trường hợp này) tạo ngẫu nhiên phân vùng của các phần phân tách huấn luyện/kiểm thử
  4. Tuỳ chọn input_label_cols chỉ định cột nào trong câu lệnh SELECT sẽ được dùng làm cột nhãn. Ở đây, cột nhãn là điểm số, vì vậy, mô hình sẽ tìm hiểu xem giá trị nào trong số 10 giá trị của điểm số có nhiều khả năng nhất dựa trên các giá trị khác có trong mỗi hàng
  5. Tuỳ chọn "auto_class_weights=TRUE" cân bằng các nhãn lớp trong dữ liệu huấn luyện. Theo mặc định, dữ liệu huấn luyện không được điều chỉnh trọng số. Nếu nhãn trong dữ liệu huấn luyện không cân bằng, mô hình có thể học cách dự đoán lớp nhãn phổ biến nhất
  6. Câu lệnh SELECT truy vấn bảng mà chúng ta đã tải bằng dữ liệu csv. Mệnh đề WHERE lọc các hàng trong bảng đầu vào để chỉ chọn tập dữ liệu TRAIN ở bước này

Sau khi tạo, nội dung dưới đây sẽ xuất hiện trong mục SCHEMA (GIẤY LƯU TRỮ) của Không gian làm việc SQL BigQuery:

Nhãn

93efd0c1a7883690.png

Tính năng

8c539338df1a9652.png

Đánh giá mô hình hồi quy logistic

Sau khi tạo mô hình, hãy đánh giá hiệu suất của mô hình bằng hàm ML.EVALUATE. Hàm ML.EVALUATE đánh giá các giá trị dự đoán so với dữ liệu thực tế. Truy vấn để đánh giá mô hình như sau:

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘TEST'
    )
  )

Hàm ML.EVALUATE lấy mô hình được huấn luyện ở bước trước và dữ liệu đánh giá do truy vấn con SELECT trả về. Hàm này trả về một hàng số liệu thống kê về mô hình.

b54b0ebd6514a498.png

Vì bạn đã thực hiện hồi quy logistic, nên kết quả sẽ bao gồm các chỉ số mà bạn thấy trong ảnh chụp màn hình ở trên – độ chính xác, tỷ lệ thu hồi, độ chính xác, điểm số f1, log_loss, roc_auc. Đây là những chỉ số thực sự quan trọng trong việc đánh giá hiệu suất của mô hình. Bạn cũng có thể gọi ML.EVALUATE mà không cần cung cấp dữ liệu đầu vào. ML.EVALUATE truy xuất các chỉ số đánh giá được lấy trong quá trình huấn luyện, sử dụng tập dữ liệu đánh giá được tự động đặt trước.

Xem nhanh các chỉ số chính:

Độ chính xác – Tỷ lệ phần trăm nhận dạng chính xác là bao nhiêu? Độ chính xác = Số dương tính thật / (Số dương tính thật + Số dương tính giả) Tỷ lệ thu hồi – Tỷ lệ phần trăm số dương tính thực tế được xác định chính xác là bao nhiêu? Mức độ ghi nhớ = Số dương tính thật / (Số dương tính thật + Số âm tính giả) Độ chính xác – Một chỉ số để đánh giá mô hình phân loại, đây là tỷ lệ phần trăm các dự đoán mà mô hình của chúng ta thực sự dự đoán chính xác Độ chính xác = Số dự đoán chính xác / Tổng số dự đoán

Dự đoán điểm xếp hạng phim bằng ML.PREDICT

Truy vấn sau đây dự đoán điểm số của từng bộ phim trong phần PREDICT (DỰ ĐOÁN) của tập dữ liệu.

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

Dưới đây là một đoạn mã kết quả:

1efb91967acc1f0c.png

Kết quả của mô hình cho biết ĐIỂM dự đoán của bộ phim theo thang điểm từ 1 đến 10 (phân loại). Bạn hẳn đang thắc mắc tại sao có nhiều hàng dự đoán cho mỗi bộ phim. Đó là do mô hình đã trả về các nhãn dự đoán có thể có và xác suất xuất hiện của từng nhãn theo thứ tự giảm dần.

Phân tích kết quả dự đoán và mô hình

Ngoài ra, bạn có thể thực hiện hai bước phân tích quan trọng trong kết quả dự đoán:

  1. Để hiểu lý do mô hình của bạn tạo ra những kết quả dự đoán này, bạn có thể sử dụng hàm ML.EXPLAIN_PREDICT
  2. Để biết những đặc điểm nào quan trọng nhất để xác định thu nhập nói chung, bạn có thể sử dụng hàm ML.GLOBAL_EXPLAIN

Bạn có thể đọc chi tiết về các bước này trong tài liệu.

7. Dự đoán điểm xếp hạng phim bằng BigQuery AutoML

AutoML rất phù hợp nếu bạn muốn dịch vụ BigQuery tạo mô hình cho bạn và thư giãn cho đến khi kết quả mô hình được tạo. Bạn có thể sử dụng tính năng AUTOML ngay trong BQML (model_type=AUTOML_CLASSIFIER hoặc AUTOML_REGRESSOR) và dễ dàng gọi hơn nhiều nếu dữ liệu đã có trong BigQuery.

CREATE OR REPLACE MODEL movies.auto_movies
       OPTIONS(model_type='AUTOML_CLASSIFIER',
               input_label_cols=['score'],
               budget_hours=1.0)
AS 
SELECT
  * EXCEPT(id, data_cat)
FROM
  movies.movies_score;

Sau khi tạo mô hình, bạn có thể thực hiện các bước để EVALUATE (ĐÁNH GIÁ), PREDICT (DỰ ĐOÁN) và EXPLAIN_PREDICT (GIẢI THÍCH_DỰ ĐOÁN) như chúng ta đã thảo luận trong mô hình BQML tuỳ chỉnh. Đọc thêm về BigQuery AutoML trong tài liệu.

8. Triển khai mô hình BQML vào Vertex AI Model Registry chỉ bằng một lần nhấp chuột

Giờ đây, bạn có thể xem tất cả mô hình máy học trong Vertex AI Model Registry, giúp tổ chức của bạn dễ dàng quản lý và triển khai mô hình hơn. Điều này bao gồm các mô hình được tạo bằng BigQuery ML, AutoML và các mô hình được huấn luyện tuỳ chỉnh. Dưới đây là cách thực hiện:

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
   model_registry='vertex_ai',
  vertex_ai_model_version_aliases=['logistic_reg', 'experimental'],
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

Thêm tuỳ chọn model_registry="vertex_ai" vào truy vấn CREATE MODEL để BigQuery ML có thể chọn những mô hình mà nó muốn đăng ký rõ ràng vào Vertex AI Model Registry. Bạn có thể đọc thêm về vấn đề này trong blog này.

9. Tóm tắt

Trong vòng chưa đầy 30 phút, chúng ta đã có:

  1. Thiết lập BigQuery làm cơ sở dữ liệu cho dự án phân tích
  2. Tạo mô hình dự đoán tuỳ chỉnh chỉ bằng cách sử dụng các SQL dữ liệu BigQuery mà không cần lập trình nào khác
  3. Tạo mô hình BigQuery Auto ML chỉ bằng các truy vấn SQL
  4. Triển khai mô hình BQML vào Vertex AI Model Registry

10. Dọn dẹp

Để tránh bị tính phí cho tài khoản Google Cloud của bạn đối với các tài nguyên được sử dụng trong bài đăng này, hãy làm theo các bước sau:

  1. Trong Google Cloud Console, hãy chuyển đến trang Quản lý tài nguyên
  2. Trong danh sách dự án, hãy chọn dự án mà bạn muốn xoá rồi nhấp vào Xoá
  3. Trong hộp thoại, hãy nhập mã dự án rồi nhấp vào Tắt để xoá dự án

11. Xin chúc mừng

Xin chúc mừng! Bạn đã tạo thành công Mô hình dự đoán điểm số của phim bằng BQML tuỳ chỉnh và AutoML, đồng thời triển khai mô hình này trong Vertex AI Model Registry (Sổ đăng ký mô hình Vertex AI) và tất cả những việc này chỉ bằng cách sử dụng SQL.