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 để 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ụ được 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 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 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 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 bộ chọn dự án, hãy chọn hoặc tạo một dự á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 đám mây. 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) enabled
  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 về các lệnh gcloud và cách sử dụng

Trên 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 dự án của bạn chưa được thiết lập, hãy dùng lệnh sau để thiết lập:

gcloud config set project <YOUR_PROJECT_ID>
  1. Chuyển đến bảng điều khiển 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. Đ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 về phim bắt nguồn từ nguồn movielens.

  1. Tạo một 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 location. 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 trong 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 Máy Cloud Shell:
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. 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 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 mô hình học máy

Hãy tạo một mô hình phân loại để dự đoán điểm thành công của bộ phim dựa trên các thuộc tính THỂ LOẠI và THỜI LƯỢNG. Chúng ta sẽ dùng câu lệnh CREATE MODEL với tuỳ 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 QUERY EDITOR (TRÌNH CHỈNH SỬA TRUY VẤN) của BigQuery console SQL Workspace (Không gian làm việc SQL của 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 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 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ị duy nhất trong cột nhãn.
  3. data_split_method="NO_SPLIT" buộc BQML phải huấn luyện trên dữ liệu theo các điều kiện truy vấn (data_cat = "TRAIN"). Xin lưu ý rằng bạn nên 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) ngẫu nhiên phân vùng các 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ẽ dùng làm cột nhãn. Ở đây, cột nhãn là score, vì vậy, mô hình sẽ tìm hiểu giá trị nào trong số 10 giá trị của score 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. 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 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, mô hình có thể học cách dự đoán lớp nhãn phổ biến nhất một cách mạnh mẽ 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, vì vậy, BigQuery ML có thể đăng ký rõ ràng cấu trúc này vào Vertex AI Model Registry. Bạn có thể đọc thêm về vấn đề này trong blog. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']

Sau khi tạo, nội dung bên dưới sẽ xuất hiện trong phần SCHEMA (LƯỢC ĐỒ) của BigQuery SQL Workspace (Không gian làm việc SQL của 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 MODEL (MÔ HÌNH):

7f2dc168bac0ac1a.png

Thông tin nhanh về các chỉ số chính:

Độ chính xác – Tỷ lệ số lần xác định dương tính 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ệ số lần xác định chính xác số lượng dương tính thực tế là bao nhiêu? Độ thu hồi = Dương tính thật / (Dương tính thật + Â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ệ số lần dự đoán mà mô hình của chúng ta thực sự đưa ra kết quả chính xác Độ chính xác = Số lần dự đoán chính xác / Tổng số lần dự đoán

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

Đến lúc dự đoán rồi!!!! 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 "TEST" (KIỂM THỬ).

Chạy truy vấn bên dưới trong phần QUERY EDITOR (TRÌNH CHỈNH SỬA TRUY VẤN) của BigQuery console SQL Workspace (Không gian làm việc SQL của 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ả mô hình cho thấy predicted_score (điểm số được dự đoán) của bộ phim trên thang điểm từ 1 đến 10 (phân loại). Bạn có thể thắc mắc tại sao có nhiều hàng dự đoán cho mỗi bộ phim. Đó là vì mô hình đã trả về các nhãn được dự đoán có thể xảy ra và xác suất xảy ra của từng nhãn theo thứ tự giảm dần.

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

Bạn có thể thực hiện 2 bước phân tích tuyệt vời với dự đoán để hiểu kết quả:

  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ể dùng hàm ML.EXPLAIN_PREDICT.
  2. Để biết những tính năng nào quan trọng nhất để xác định khung thu nhập nói chung, bạn có thể 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.

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 về 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 để điểm số này lớn hơn 5, với AI tạo sinh chỉ dùng các truy vấn SQL bằng mô hình text-bison (mới nhất) của Vertex AI

  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 API kết nối BQ nếu bạn chưa thực hiện và ghi lại mã Tài khoản dịch vụ từ thông tin chi tiết về cấu hình kết nối:

  1. Nhấp vào nút +ADD (+THÊM) trên ngăn BigQuery Explorer (Trình khám phá BigQuery) (ở bên trái bảng điều khiển BigQuery) rồi nhấp vào "Connection to external data sources" (Kết nối với các nguồn dữ liệu bên ngoài) trong các nguồn phổ biến được liệt kê
  2. Chọn Connection type (Loại kết nối) là "BigLake and remote functions" (BigLake và các hàm từ xa), cung cấp location type (loại vị trí) là "Region" (Khu vực) và giá trị là "us-central1 (Iowa)" và "bq_llm_connection" làm Connection ID (Mã 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 Principal (Chủ thể) và chọn vai trò "Vertex AI User" (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 Vertex AI được lưu trữ:

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');

Mô hình này tạo một mô hình có tên là llm_model trong tập dữ liệu movie_insights tận dụng API CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 của Vertex AI làm một 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 từ 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 đại diện cho kết quả văn bản được tạo b. Thuộc tính an toàn đại diện cho bộ lọc nội dung tích hợp có ngưỡng có thể điều chỉnh đượ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 bạn dùng trong BigQuery để truy cập vào Vertex AI LLM (mô hình ngôn ngữ lớn) nhằm thực hiện các tác vụ tạo văn bản

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 chứa dữ liệu mà chúng ta sẽ dùng trong thiết kế lời nhắc

Temperature là tham số lời nhắc để kiểm soát tính ngẫu nhiên của phản hồi – càng ít càng tốt về mức độ liên quan

Max_output_tokens là số lượng từ bạn muốn trong phản hồi

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

a3691afc0a97e724.png

Như bạn có thể thấy, phản hồi được lồng ghép 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 được đặt thành true, giá trị này sẽ trả về một văn bản dễ hiểu được trích xuất từ phản hồi JSON.

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

1aaa0c514fccab59.png

11. 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 được 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 học máy 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 phân tích dựa trên LLM chỉ bằng các truy vấn SQL trên tập dữ liệu về phim bằng một Vertex AI API. Hãy xem tài liệu về sản phẩm Vertex AI LLM để tìm hiểu thêm về các mô hình hiện có.