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 của nội dung phim với mô hình tuỳ chỉnh BigQuery ML chỉ sử dụ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 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 nhằm dự đoán Điểm số của phim mà không cần lập trình nhiều mà chỉ 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 các thành phần bảng và mô hình
  • Mô hình học máy của BigQuery giúp dự đoán điểm xếp hạng của 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 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 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 rằng bạn đã bật tính năng thanh toán cho dự án trên Google 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 này. Bạn cũng có thể mở trực tiếp giao diện người dùng web BigQuery bằng cách nhập URL sau vào trình duyệt của mình: 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 Bảng điều khiển Cloud, 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. 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 thiết lập, hãy sử dụng lệnh sau để thiết lập dự án:
gcloud config set project <PROJECT_ID>

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

4. Đang chuẩn bị dữ liệu huấn luyện

Đây là một bước quan trọng đối với 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 bên cạnh 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ụ mục đích của lớp học lập trình này, chúng ta sẽ sử dụng tệp 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 được lưu trữ tại 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 trong 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à "phim".
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 tải bq để tải tệp CSV của bạn vào 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ề 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. –bỏ qua_lead_rows=1 – bỏ qua dòng đầu tiên trong tệp CSV vì đây là hàng tiêu đề. Movies.movies – đối số vị trí đầu tiên – xác định dữ liệu sẽ được tải vào bảng nào. ./movies.csv—đối số vị trí thứ hai—xác định tệp nào 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 gs://my_bucket/path/to/file URI. 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 tôi hiện đã được tải trong bảng movies.movies.

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

Chúng ta có thể tương tác với BigQuery theo 3 cách. Chúng ta sẽ thử hai cách trong số đó: a. Giao diện người dùng web 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.pngS

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 xếp hạng phim theo thang điểm từ 1 đến 10

Công nghệ học máy của BigQuery hỗ trợ hoạt động 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 liệu giá trị có thuộc một trong hai loại 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 liệu một giá trị có thuộc một trong nhiều danh mục hay không. Đây được gọi là bài toá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ề việc lựa chọn mô hình: Đây là lựa chọn thử nghiệm về mô hình được chọn ở đây, dựa trên đánh giá kết quả mà ban đầu tôi đã chạy qua một vài mô hình và cuối cùng đã tiến hành với LOGISTIC REG để đơn giản và có được kết quả gần hơn với 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 mô hình Hồi quy hậu cần 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 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 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ày. Nếu bạn cần thêm thông tin về cách phân tách tập dữ liệu, hãy tham khảo tài liệu này.

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

Chúng ta có thể sử dụng câu lệnh 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 logit.

Chạy truy vấn bên dưới trong Không gian làm việc SQL cho 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ề cụm từ tìm kiếm:

  1. Câu lệnh CREATE MODEL (TẠO MÔ HÌNH) 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 đề TÙY CHỌN chỉ định loại mô hình và các tùy chọn huấn luyện. Ở đây, tuỳ chọn LOGISTIC_REG chỉ định một loại mô hình hồi quy logistic. 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 giá trị nào cần huấn luyện dựa trên số lượng giá trị duy nhất trong cột nhãn
  3. data_split_method=‘NO_SPLIT&#39; buộc BQML huấn luyện dựa trên dữ liệu theo các điều kiện truy vấn (data_cat = "TRAIN"), cũng xin lưu ý rằng tốt hơn nên sử dụng hàm "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) sắp xếp ngẫu nhiên phân vùng 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ố, do đó, mô hình sẽ tìm hiểu giá trị nào trong số 10 giá trị của điểm 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. Giá trị "auto_class_weights=TRUE" sẽ 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ó trọng số. Nếu các 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 ở mức độ cao hơn
  6. Câu lệnh SELECT truy vấn bảng mà chúng tôi đã tải bằng dữ liệu csv. Mệnh đề WHERE sẽ lọc các hàng trong bảng dữ liệu đầu vào để chỉ tập dữ liệu TRAIN được chọn trong bước này

Sau khi tạo, thông tin bên dưới sẽ xuất hiện trong phần SCHEMA của Workspace SQL BigQuery:

Nhãn

93efd0c1a7883690.pngS

Tính năng

8c539338df1a9652.pngS

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

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 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 trong bước trước đó và dữ liệu đánh giá do truy vấn con SELECT trả về. Hàm 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, mức độ ghi nhớ, độ chính xác, điểm f1, log_loss, roc_auc rất 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á nhận được trong quá trình huấn luyện, sử dụng tập dữ liệu đánh giá được đặt trước tự động.

Tóm tắt các chỉ số chính:

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

Dự đoán mức phân loại phim bằng ML.PREDICT

Truy vấn sau dự đoán điểm số của từng 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 trích của kết quả:

1efb91967acc1f0c.png.

Kết quả mô hình cho thấy điểm dự đoán của bộ phim trên thang điểm từ 1 đến 10 (phân loại). Chắc hẳn bạn đang thắc mắc tại sao có nhiều hàng dự đoán cho mỗi phim. Nguyên nhân là do mô hình đã trả về các nhãn được dự đoán khả thi và xác suất xuất hiện của mỗi 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 hữu ích trong kết quả dự đoán:

  1. Để hiểu lý do mô hình của bạn tạo ra các kết quả dự đoán này, bạn có thể sử dụng hàm ML.EXPLAIN_PREDICT
  2. Để biết tính năng nào quan trọng nhất trong việc 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 chi tiết về các bước này trong tài liệu này.

7. Dự đoán mức phân loại 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à nghỉ ngơi cho đến khi tạo được kết quả mô hình. Chức năng autoML có sẵn trực tiếp trong BQML (model_type=autoML_CLASSIFIER hoặc autoML_REGRESSOR) và dễ 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, PREDICT và EXPLAIN_PREDICT giống như chúng ta đã thảo luận trong mô hình BQML tuỳ chỉnh. Tìm hiểu thêm về BigQuery AutoML trong tài liệu này.

8. Chỉ cần một cú nhấp để triển khai các mô hình BQML cho Vertex AI Model Registry

Giờ đây, bạn có thể xem tất cả mô hình học máy của mình 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. Trong đó có các mô hình được xây dựng bằng công nghệ Học máy của BigQuery, AutoML và các mô hình tuỳ chỉnh được huấn luyện. 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 mô hình_registry="vertex_ai" trong truy vấn CREATE MODEL để BigQuery ML có thể chọn những mô hình mà BigQuery ML muốn đăng ký vào Vertex AI Model Registry. Bạn có thể đọc thêm về chủ đề này trên blog này.

9. Tóm tắt

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

  1. Thiết lập BigQuery làm cơ sở dữ liệu cho dự án Analytics
  2. Tạo mô hình dự đoán tuỳ chỉnh chỉ bằng SQL dữ liệu BigQuery mà không sử dụng phương thức lập trình nào khác
  3. Đã tạo mô hình Học máy tự động BQ chỉ bằng truy vấn SQL
  4. Triển khai mô hình BQML cho Vertex AI Model Registry

10. Dọn dẹp

Để tránh bị tính phí vào tài khoản Google Cloud cho các tài nguyên sử 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 Google 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, nhập ID dự án, sau đó 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 phim với 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ả đều chỉ sử dụng SQL.