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ỉ sử dụng SQL và triển khai mô hình đó trong Vertex AI. Bạn sẽ tìm hiểu:

  1. Cách tạo một 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 hoạt động học có giám sát để tạo mô hình Dự đoán hồi quy nhiều lớp cho hoạt động dự đoán Điểm số của phim mà không cần viết nhiều mã, chỉ cần sử dụng các truy vấn SQL

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

Bạn sẽ tạo một

  • Một tập dữ liệu BigQuery chứa các thành phần bảng và mô hình
  • Mô hình BigQuery ML để dự đoán điểm xếp hạng phim bằng cách sử dụng các 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 trê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 chọn dự án, hãy chọn hoặc tạo một dự án trên Google Cloud.
  2. Đảm bảo rằng 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 một dự án hay không.
  3. Chuyển đến BigQuery để bật API. Bạn cũng có thể mở giao diện người dùng web BigQuery trực tiếp 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: Trong Cloud Console, hãy nhấp vào biểu tượng 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 rằng 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 bạn chưa đặt dự án, hãy dùng lệnh sau để đặt:
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. Bước này đòi hỏi nhiều kiến thức chuyên môn về miền 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 đã đượ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ả cá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 để hạn chế 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 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 đã chuẩn bị sẵn tệp dữ liệu (.csv). Thực thi các lệnh sau trong Cloud Shell để sao chép 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 một bảng BigQuery (xin lưu ý rằng bạn cũng có thể tải lên trực tiếp 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

Nội dung mô tả về các lựa 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à hà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 tải bq có thể tải các 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 vào 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 trên 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 Không gian làm việc SQL trên web của BigQuery để chạy các truy vấn. SQL Workspace 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ợ học có giám sát bằng loại mô hình 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 đa 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 kết quả đánh giá mà tôi đã chạy trên một số mô hình ban đầu và cuối cùng đã tiến hành với LOGISTIC REG để giữ cho mô hình đơn giản và để kết quả gần với điểm phân loại phim thực tế từ một số cơ sở dữ liệu. Xin lưu ý rằng bạn chỉ nên coi đây là một mẫu để triển khai mô hình và KHÔNG nhất thiết đây 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 phim là HAY / DỞ bằ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 tôi đã chia dữ liệu phim (trong tệp 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ị – TRAIN, TEST và PREDICT. Việc chia nhỏ 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 phân chia 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 với lựa chọn "LOGISTIC_REG" để tạo và huấn luyện một mô hình hồi quy logistic.

Chạy truy vấn bên dưới trong Không gian làm việc SQL của giao diện người dùng web 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 cách sử dụ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 lựa chọn huấn luyện. Ở đây, lựa chọn LOGISTIC_REG chỉ định một 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 đa 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 các điều kiện truy vấn (data_cat = 'TRAIN'). Ngoài ra, bạn nên sử dụng "AUTO_SPLIT" trong lựa chọn này để cho phép khung (hoặc dịch vụ trong trường hợp này) ngẫu nhiên phân vùng các phần chia tách huấn luyện/kiểm thử
  4. Lựa chọn input_label_cols chỉ định cột nào trong câu lệnh SELECT sẽ 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 trong 10 giá trị của điểm số, giá trị nào có khả năng xảy ra nhất dựa trên các giá trị khác có trong mỗi hàng
  5. Lựa 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 tính trọng số. Nếu các nhãn trong dữ liệu huấn luyện không cân bằng, thì mô hình có thể học cách dự đoán lớp nhãn phổ biến nhất nhiều hơn
  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 bạn tạo, nội dung dưới đây sẽ xuất hiện trong phần SCHEMA (Lược đồ) 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ị được dự đoán dựa trên 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 một truy vấn con SELECT trả về. Hàm này trả về một hàng duy nhất gồm các 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ả 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, khả năng thu hồi, độ chính xác, điểm 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ệ số lượt nhận dạng dương thực sự chính xác là bao nhiêu? Độ chính xác = Dương tính thật / (Dương tính thật + Dương tính giả) Độ thu hồi – Tỷ lệ dương tính thực tế được xác định chính xác là bao nhiêu? Độ thu hồi = Số lượng kết quả dương tính thực / (Số lượng kết quả dương tính thực + Số lượng kết quả âm tính giả) Độ chính xác – Một chỉ số để đánh giá các mô hình phân loại, đây là tỷ lệ dự đoán mà mô hình của chúng tôi thực sự đưa ra chính xác Độ chính xác = Số lượng 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 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 kết quả:

1efb91967acc1f0c.png

Kết quả của mô hình cho thấy ĐIỂM dự đoán của bộ phim theo thang điểm từ 1 đến 10 (phân loại). Có lẽ bạn đang thắc mắc tại sao lại có nhiều hàng dự đoán cho mỗi bộ phim. Đó là vì 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 2 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 quan trọng nhất để xác định khung thu nhập nói chung, bạn có thể sử dụng hàm ML.GLOBAL_EXPLAIN

Bạn có thể đọc thông tin 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 là lựa chọn 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 ĐÁNH GIÁ, DỰ ĐOÁN và GIẢI THÍCH_DỰ ĐOÁN giống 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

Giờ đây, bạn có thể xem tất cả các mô hình học máy trong Vertex AI Model Registry, giúp tổ chức của bạn dễ dàng quản lý và triển khai các mô hình hơn. Trong đó có các mô hình được xây dựng 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 lựa 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à bạn muốn đăng ký một cách rõ ràng vào Vertex AI Model Registry. Bạn có thể đọc thêm về vấn đề này trên blog này.

9. Tóm tắt

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

  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 SQL dữ liệu BigQuery và không cần mã hoá nào khác
  3. Tạo mô hình BQ Auto ML chỉ bằng các truy vấn SQL
  4. Mô hình BQML được triển khai vào Vertex AI Model Registry

10. Dọn dẹp

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

  1. Trong bảng điều khiển Cloud, 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ột Mô hình dự đoán điểm số 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 và tất cả những việc này chỉ bằng SQL.