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 ứng dụng theo toa và thông tin dự đoán Điểm xếp hạng thành công của phim với 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 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ô hình học máy BigQuery 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 CATEGORY và RUNTIME của phim đó
  • Mô hình BigQuery lưu trữ Vertex AI PaLM API dưới dạng hàm từ xa
  • 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 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 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. Đảm bảo tất cả các API cần thiết (API BigQuery, Vertex AI API, BigQuery Connection API) đều được bật
  4. 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 bằng bq. Tham khảo tài liệu về các lệnh gcloud và cách sử dụng

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:

51622c00acec2fa.png.

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 <YOUR_PROJECT_ID>
  1. Chuyển trực tiếp đến bảng điều khiển BigQuery bằng cách nhập URL sau vào trình duyệt của bạn: 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 tôi sẽ sử dụng tập dữ liệu phim lấy từ nguồn movielens (tập dữ liệu phim).

  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ả 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 đó.

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_Details"

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 Cloud Shell Machine của bạn:
cd movie_score_genai_insights
  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 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. Chuyển dữ liệu sang công nghệ học máy

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 CATEGORY và RUNTIME. Chúng ta sẽ 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 mục EDITOR EDITOR 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ề cụm từ tìm kiếm:

  1. Câu lệnh CREATE MODEL sẽ 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 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. 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 tuỳ 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ủa các lượt phân tách tàu/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, thì mô hình đó có thể tìm hiểu 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 nhập dữ liệu để chỉ tập dữ liệu TRAIN được chọn trong bước này.
  7. Các cấu trúc sau đây là KHÔNG BẮT BUỘC để công nghệ học máy BigQuery có thể đăng ký một cách rõ ràng cho Sổ đăng ký mô hình Vertex AI. Bạn có thể đọc thêm về chủ đề này trên blog. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental'] 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:

2e43087f914aa466.pngS

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

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

7f2dc168bac0ac1a.png.

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

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

Thời gian dự đoán!!!! Truy vấn sau đây dự đoán điểm số của từng phim trong tập dữ liệu được phân loại là "THỬ NGHIỆM" .

Chạy truy vấn bên dưới trong mục EDITOR EDITOR 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ả mô hình cho dự đoán điểm của phim theo 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:

Bạn có thể thực hiện 2 bước phân tích hữu ích cùng với thông tin 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ể 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.

6. Chuyển dữ liệu sang 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 của phim lớn hơn 5. AI tạo sinh dùng mô hình text-bison (mới nhất) của Vertex AI chỉ sử dụng các truy vấn sql

  1. Bảng mà chúng tôi đã tạo Movie_score 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 công nghệ học máy BigQuery và các dịch vụ Vertex.
  3. Cấu trúc GENERATE_TEXT của BigQuery sẽ được dùng để gọi API PaLM từ xa qua Vertex AI.

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

Bật API kết nối BQ nếu chưa bật và ghi lại mã 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 bảng điều khiển BigQuery), rồi nhấp vào "Kết nối với 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 chức năng từ xa", cung cấp loại vị trí là "Khu vực" và có giá trị là "us-central1 (Iowa)" và "bq_llm_connection" làm Mã kết nối

8a87802ab0846a6.pngS

  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

Ở 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 Tài khoản chính và chọn "Người dùng Vertex AI" Vai trò

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

Công cụ này tạo một mô hình có tên llm_model trong tập dữ liệu movie_insights. Mô hình này tận dụng CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API 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 sử 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ả thuộc tính nội dung và 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 thể hiện bộ lọc nội dung tích hợp sẵn, có ngưỡng điều chỉnh được bật trong Vertex AI Palm API để tránh mọi phản hồi ngoài ý muốn hoặc ngoài dự kiến của 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 sử dụng trong BigQuery để truy cập vào mô hình ngôn ngữ lớn (LLM) của Vertex AI nhằm thực hiện các công việc tạo văn bản

Hàm CONCAT sẽ thêm 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 tôi sẽ sử dụng trong thiết kế câu lệnh

Nhiệt độ là thông số nhắc để kiểm soát mức độ ngẫu nhiên của câu trả lời – càng ít càng tốt về mức độ liên quan

Max_output_tokens là số từ bạn muốn dùng để 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à chưa đượ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 boolean mà nếu đặt true sẽ trả về một văn bản phẳng 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.pngS

11. Dọn dẹp

Để tránh làm phát sinh các tài nguyên sử dụng trong bài đăng này trong tài khoản Google Cloud của bạn, 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 Vertex AI Endpoint (Điểm cuối của 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 mô hình ngôn ngữ lớn (LLM) bằng Vertex AI API trên tập dữ liệu phim mà chỉ sử dụng truy vấn SQL. Hãy xem tài liệu về sản phẩm mô hình ngôn ngữ lớn (LLM) trong Vertex AI để tìm hiểu thêm về các mô hình có sẵn.