Thông tin chi tiết tạo sinh bằng BigQuery SQL và Vertex AI

1. Giới thiệu

Trong lớp học lập trình này, chúng ta sẽ xây dựng một ứng dụng dự đoán và đề xuất xếp hạng thành công của phim bằng các truy vấn BigQuery SQL và Vertex AI PaLM API. Mô hình dùng để thực hiện hoạt động tạo văn bản là text-bison và được lưu trữ dưới dạng một hàm từ xa trong BigQuery.

Danh sách các dịch vụ đã sử dụng là:

  1. BigQuery ML
  2. Vertex AI PaLM API
  3. Cloud Shell

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 mô hình
  • Một mô hình BigQuery ML dự đoán điểm số thành công của một bộ phim dựa trên các thuộc tính THỂ LOẠI và THỜI LƯỢNG của bộ phim
  • Một mô hình BigQuery lưu trữ Vertex AI PaLM API dưới dạng một hàm từ xa
  • Một kết nối bên ngoài để thiết lập mối kết nối giữa BigQuery và Vertex AI

2. 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

Trước khi bắt đầu

  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 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. Đảm bảo rằng bạn đã bật tất cả các API cần thiết (BigQuery API, Vertex AI API, BigQuery Connection API)
  4. Bạn sẽ sử dụng Cloud Shell, một môi trường dòng lệnh chạy trong Google Cloud và được tải sẵn bq. Tham khảo tài liệu để biết các lệnh và cách sử dụng gcloud

Trong Cloud Console, hãy nhấp vào Activate Cloud Shell (Kích hoạt Cloud Shell) ở góc trên cùng bên phải:

51622c00acec2fa.png

Nếu bạn chưa đặt dự án, hãy dùng lệnh sau để đặt dự án:

gcloud config set project <YOUR_PROJECT_ID>
  1. Chuyển đến bảng điều khiển BigQuery ngay bằng cách nhập URL sau vào trình duyệt: https://console.cloud.google.com/bigquery

3. Đang chuẩn bị dữ liệu

Trong trường hợp sử dụng này, chúng ta sẽ sử dụng tập dữ liệu phim bắt nguồn từ nguồn movielens.

  1. Tạo 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 đó.

Trong Cloud Shell, hãy dùng lệnh bq mk để tạo một tập dữ liệu có tên là "movie_insights"

bq mk --location=us-central1 movie_insights
  1. Sao chép tệp nguồn vào Cloud Shell Machine:
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
  1. Chuyển đến thư mục dự án mới được tạo trong Máy Cloud Shell:
cd movie_score_genai_insights
  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 movie_insights.movie_score \
./movies_data.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
  1. Bạn có thể truy vấn một mẫu để kiểm tra xem bảng movie_score và dữ liệu có được tạo trong tập dữ liệu hay không:
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;

4. Dữ liệu cho ML

Hãy tạo một mô hình phân loại để dự đoán điểm số thành công của phim dựa trên các thuộc tính THỂ LOẠI và THỜI LƯỢNG. Chúng ta sẽ 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 phần TRÌNH CHỈNH SỬA TRUY VẤN của Không gian làm việc SQL trên bảng điều khiển BigQuery:

CREATE OR REPLACE MODEL
  `movie_insights.model_rating_by_runtime_genre`
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 name, genre,runtime, score
FROM
  movie_insights.movie_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 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 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 trong bước này.
  7. Các cấu trúc sau đây là KHÔNG BẮT BUỘC để BigQuery ML có thể đăng ký rõ ràng cấu trúc đó vào Sổ đăng ký mô hình Vertex AI. Bạn có thể đọc thêm về vấn đề này trên blog này. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']

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:

2e43087f914aa466.png

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ế.

Bạn cũng có thể xem các chỉ số đánh giá của mô hình trên trang MÔ HÌNH:

7f2dc168bac0ac1a.png

Các chỉ số chính trong nháy mắt:

Độ chính xác – Tỷ lệ số lần 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ật được xác định chính xác là bao nhiêu? Độ thu hồi = Dương tính thực / (Dương tính thực + Â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

5. Dự đoán điểm số của phim bằng mô hình

Đã đến lúc dự đoán!!!! Truy vấn sau đây dự đoán điểm số của từng bộ phim trong tập dữ liệu được phân loại là dữ liệu "KIỂM THỬ".

Chạy truy vấn bên dưới trong phần TRÌNH CHỈNH SỬA TRUY VẤN của Không gian làm việc SQL trên bảng điều khiển BigQuery:

SELECT
  *
FROM
  ML.PREDICT (MODEL movie_insights.model_rating_by_runtime_genre,
    (
    SELECT
      *
    FROM
      movie_insights.movie_score
    WHERE
      data_cat= 'TEST'
     )
  );

Kết quả sẽ có dạng như sau:

c719844860ce7c27.png

Kết quả của mô hình cho thấy predicted_score 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:

Bạn có thể thực hiện 2 bước phân tích quan trọng với thông tin dự đoán để hiểu rõ kết quả:

  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 chi tiết về các bước này trong tài liệu.

6. Dữ liệu cho AI tạo sinh

Hãy cung cấp thông tin chi tiết về tập dữ liệu phim bằng cách yêu cầu LLM (Mô hình ngôn ngữ lớn) tóm tắt các yếu tố ảnh hưởng đến điểm số của phim lớn hơn 5, bằng AI tạo sinh sử dụng mô hình text-bison (mới nhất) của Vertex AI chỉ bằng các truy vấn sql

  1. Bảng movie_score mà chúng ta đã tạo cũng sẽ là dữ liệu đầu vào cho bước này.
  2. Kết nối bên ngoài sẽ được tạo để thiết lập quyền truy cập giữa BigQuery ML và các dịch vụ Vertex.
  3. Cấu trúc BigQuery GENERATE_TEXT sẽ được dùng để gọi API PaLM từ xa từ Vertex AI.

7. Tạo kết nối bên ngoài

Bật BQ Connection API (nếu chưa bật) và ghi lại mã nhận dạng Tài khoản dịch vụ trong phần thông tin chi tiết về cấu hình kết nối:

  1. Nhấp vào nút +THÊM trên ngăn BigQuery Explorer (ở bên trái của bảng điều khiển BigQuery) rồi nhấp vào "Kết nối với các nguồn dữ liệu bên ngoài" trong danh sách các nguồn phổ biến
  2. Chọn Loại kết nối là "BigLake và các hàm từ xa", cung cấp loại vị trí là "Khu vực" và giá trị là "us-central1 (Iowa)" và "bq_llm_connection" làm Mã nhận dạng kết nối

8a87802ab0846a6.png

  1. Sau khi tạo kết nối, hãy ghi lại Tài khoản dịch vụ được tạo từ thông tin chi tiết về cấu hình kết nối

Cấp quyền

Trong bước này, chúng ta sẽ cấp quyền cho Tài khoản dịch vụ để truy cập vào dịch vụ Vertex AI:

Mở IAM rồi thêm Tài khoản dịch vụ mà bạn đã sao chép sau khi tạo kết nối bên ngoài làm Nguyên tắc và chọn vai trò "Người dùng Vertex AI"

ff8e1d730879f972.png

8. Tạo mô hình học máy từ xa

Tạo mô hình từ xa đại diện cho một mô hình ngôn ngữ lớn được lưu trữ trên Vertex AI:

CREATE OR REPLACE MODEL
  movie_insights.llm_model REMOTE
WITH CONNECTION `us-central1.bq_llm_connection` OPTIONS (remote_service_type = 'CLOUD_AI_LARGE_LANGUAGE_MODEL_V1');

Thao tác này sẽ tạo một mô hình có tên là llm_model trong tập dữ liệu movie_insights. Mô hình này tận dụng API CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 của Vertex AI làm hàm từ xa. Quá trình này sẽ mất vài giây để hoàn tất.

9. Tạo văn bản bằng mô hình học máy

Sau khi tạo mô hình, hãy dùng mô hình đó để tạo, tóm tắt hoặc phân loại văn bản.

SELECT
  ml_generate_text_result['predictions'][0]['content'] AS generated_text,
  ml_generate_text_result['predictions'][0]['safetyAttributes']
    AS safety_attributes,
  * EXCEPT (ml_generate_text_result)
FROM
  ML.GENERATE_TEXT(
    MODEL `movie_insights.llm_model`,
    (
 SELECT
      CONCAT('FROM THE FOLLOWING TEXT ABOUT MOVIES, WHAT DO YOU THINK ARE THE FACTORS INFLUENCING A MOVIE SCORE TO BE GREATER THAN 5?: ', movie_data) AS prompt
    FROM (
      SELECT
        REPLACE(STRING_AGG( CONCAT('A movie named ',name, ' from the country ', country, ' with a censor rating of ',rating, ' and a budget of ', budget, ' produced by ', company, ' with a runtime of about ', runtime, ' and in the genre ', genre, ' starring ', star, ' has had a success score of ', score, '') ), ',','. ') AS movie_data
      FROM (
        SELECT
          *
        FROM
          `movie_insights.movie_score`
        WHERE
          CAST(SCORE AS INT64) > 5
        LIMIT
          50) ) AS MOVIES
    ),
    STRUCT(
      0.2 AS temperature,
      100 AS max_output_tokens));

**Giải thích:

ml_generate_text_result** là phản hồi của mô hình tạo văn bản ở định dạng JSON, chứa cả nội dung và các thuộc tính an toàn: a. Nội dung biểu thị kết quả văn bản được tạo b. Thuộc tính an toàn là bộ lọc nội dung tích hợp có ngưỡng điều chỉnh được, được bật trong Vertex AI Palm API để tránh mọi phản hồi không mong muốn hoặc không lường trước được từ mô hình ngôn ngữ lớn – phản hồi sẽ bị chặn nếu vi phạm ngưỡng an toàn

ML.GENERATE_TEXT là cấu trúc mà bạn dùng trong BigQuery để truy cập vào LLM của Vertex AI nhằm thực hiện các tác vụ tạo văn bản

Hàm CONCAT nối câu lệnh PROMPT và bản ghi cơ sở dữ liệu

movie_insights là tên tập dữ liệu và movie_score là tên của bảng có dữ liệu mà chúng ta sẽ dùng trong thiết kế câu lệnh

Nhiệt độ là tham số của câu lệnh để kiểm soát tính ngẫu nhiên của câu trả lời – nhiệt độ càng thấp thì câu trả lời càng phù hợp

Max_output_tokens là số lượng từ bạn muốn có trong câu trả lời

Phản hồi truy vấn có dạng như sau:

a3691afc0a97e724.png

Như bạn thấy, phản hồi được lồng và không được định dạng.

10. Làm phẳng kết quả truy vấn

Hãy làm phẳng kết quả để chúng ta không phải giải mã JSON một cách rõ ràng trong truy vấn:

SELECT
  *
FROM
  ML.GENERATE_TEXT( MODEL movie_insights.llm_model,
    (
    SELECT
      CONCAT('FROM THE FOLLOWING TEXT ABOUT MOVIES, WHAT DO YOU THINK ARE THE FACTORS INFLUENCING A MOVIE SCORE TO BE GREATER THAN 5?: ', movie_data) AS prompt
    FROM (
      SELECT
        REPLACE(STRING_AGG( CONCAT('A movie named ',name, ' from the country ', country, ' with a censor rating of ',rating, ' and a budget of ', budget, ' produced by ', company, ' with a runtime of about ', runtime, ' and in the genre ', genre, ' starring ', star, ' has had a success score of ', score, '') ), ',','. ') AS movie_data
      FROM (
        SELECT
          *
        FROM
          `movie_insights.movie_score`
        WHERE
          CAST(SCORE AS INT64) > 5
        LIMIT
          50) ) AS MOVIES),
    STRUCT( 0.2 AS temperature,
      100 AS max_output_tokens,
      TRUE AS flatten_json_output));

**Giải thích:

Flatten_json_output** đại diện cho giá trị boolean. Nếu bạn đặt giá trị này thành true, hệ thống sẽ trả về văn bản dễ hiểu dạng phẳng được trích xuất từ phản hồi JSON.

Phản hồi truy vấn có dạng như sau:

1aaa0c514fccab59.png

11. 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, bạn có thể xoá điểm cuối Vertex AI mà bạn đã tạo trong bước ML bằng cách chuyển đến trang Điểm cuối Vertex AI.

12. Xin chúc mừng

Xin chúc mừng! Bạn đã tạo thành công một mô hình BQML và thực hiện hoạt động phân tích dựa trên LLM bằng cách chỉ sử dụng API Vertex AI trên tập dữ liệu phim của mình thông qua các truy vấn SQL. Hãy xem tài liệu về sản phẩm LLM của Vertex AI để tìm hiểu thêm về các mô hình hiện có.