Generative Insights ด้วย BigQuery SQL และ Vertex AI

1. บทนำ

ใน Codelab นี้ เราจะสร้างแอปการคาดการณ์และการแนะนำคะแนนความสำเร็จของภาพยนตร์ด้วยการค้นหา BigQuery SQL และ Vertex AI PaLM API โมเดลที่ใช้ในการสร้างข้อความคือ text-bison และโฮสต์เป็นฟังก์ชันระยะไกลใน BigQuery

รายการบริการที่ใช้มีดังนี้

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

สิ่งที่คุณจะสร้าง

คุณจะสร้าง

  • ชุดข้อมูล BigQuery ที่มีโมเดล
  • โมเดล BigQuery ML ที่คาดการณ์คะแนนความสำเร็จของภาพยนตร์ตามแอตทริบิวต์ GENRE และ RUNTIME ของภาพยนตร์
  • โมเดล BigQuery ที่โฮสต์ Vertex AI PaLM API เป็นฟังก์ชันระยะไกล
  • การเชื่อมต่อภายนอกเพื่อสร้างการเชื่อมต่อระหว่าง BigQuery กับ Vertex AI

2. ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน

ก่อนเริ่มต้น

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว ดูวิธีตรวจสอบว่าโปรเจ็กต์เปิดใช้การเรียกเก็บเงินแล้วหรือไม่
  3. ตรวจสอบว่าได้เปิดใช้ API ที่จำเป็นทั้งหมด (BigQuery API, Vertex AI API, BigQuery Connection API) แล้ว
  4. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานใน Google Cloud และมาพร้อมกับ bq ที่โหลดไว้ล่วงหน้า ดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ

จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell ที่มุมขวาบน

51622c00acec2fa.png

หากไม่ได้ตั้งค่าโปรเจ็กต์ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่า

gcloud config set project <YOUR_PROJECT_ID>
  1. ไปที่คอนโซล BigQuery โดยตรงโดยป้อน URL ต่อไปนี้ในเบราว์เซอร์ https://console.cloud.google.com/bigquery

3. กำลังเตรียมข้อมูล

ในกรณีการใช้งานนี้ เราจะใช้ชุดข้อมูลภาพยนตร์ที่ได้จากแหล่งที่มา movielens

  1. สร้างชุดข้อมูล

ชุดข้อมูล BigQuery คือคอลเล็กชันของตาราง ตารางทั้งหมดในชุดข้อมูลจะจัดเก็บไว้ในตำแหน่งข้อมูลเดียวกัน นอกจากนี้ คุณยังแนบการควบคุมการเข้าถึงที่กำหนดเองเพื่อจำกัดการเข้าถึงชุดข้อมูลและตารางของชุดข้อมูลได้ด้วย

ใน Cloud Shell ให้ใช้คำสั่ง bq mk เพื่อสร้างชุดข้อมูลชื่อ "movie_insights"

bq mk --location=us-central1 movie_insights
  1. โคลนไฟล์ต้นฉบับไปยังเครื่อง Cloud Shell โดยทำดังนี้
git clone https://github.com/AbiramiSukumaran/movie_score_genai_insights
  1. ไปที่ไดเรกทอรีโปรเจ็กต์ใหม่ที่สร้างในเครื่อง Cloud Shell โดยทำดังนี้
cd movie_score_genai_insights
  1. ใช้คำสั่ง bq load เพื่อโหลดไฟล์ CSV ลงในตาราง BigQuery (โปรดทราบว่าคุณยังอัปโหลดจาก BigQuery UI ได้โดยตรงด้วย)
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. คุณสามารถค้นหาตัวอย่างเพื่อตรวจสอบว่ามีการสร้างตาราง movie_score และข้อมูลในชุดข้อมูลหรือไม่
bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movie_insights.movie_score limit 3;

4. ข้อมูลไปยัง ML

มาสร้างโมเดลการจัดประเภทเพื่อคาดการณ์คะแนนความสำเร็จของภาพยนตร์ตามแอตทริบิวต์ GENRE และ RUNTIME กัน เราจะใช้คำสั่ง CREATE MODEL กับตัวเลือก 'LOGISTIC_REG' เพื่อสร้างและฝึกโมเดลการถดถอยแบบโลจิสติก

เรียกใช้การค้นหาด้านล่างในส่วนตัวแก้ไขคำค้นหาของพื้นที่ทำงาน SQL ในคอนโซล 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';

รายละเอียดการค้นหา:

  1. คำสั่ง CREATE MODEL จะฝึกโมเดลโดยใช้ข้อมูลฝึกฝนในคำสั่ง SELECT
  2. โดยอนุประโยค OPTIONS จะระบุประเภทโมเดลและตัวเลือกการฝึก ในที่นี้ ตัวเลือก LOGISTIC_REG จะระบุประเภทโมเดลการถดถอยแบบโลจิสติก ไม่จำเป็นต้องระบุโมเดลการถดถอยแบบโลจิสติกแบบไบนารีเทียบกับโมเดลการถดถอยแบบโลจิสติกแบบหลายคลาส เนื่องจาก BigQuery ML สามารถกำหนดได้ว่าจะฝึกโมเดลใดโดยอิงตามจำนวนค่าที่ไม่ซ้ำกันในคอลัมน์ป้ายกำกับ
  3. data_split_method=‘NO_SPLIT' จะบังคับให้ BQML ฝึกโมเดลกับข้อมูลตามเงื่อนไขการค้นหา (data_cat = ‘TRAIN') โปรดทราบว่าควรใช้ ‘AUTO_SPLIT' ในตัวเลือกนี้เพื่อให้เฟรมเวิร์ก (หรือบริการในกรณีนี้) สุ่มพาร์ติชันของการแยกการฝึก/การทดสอบ
  4. ตัวเลือก input_label_cols จะระบุคอลัมน์ในคำสั่ง SELECT ที่จะใช้เป็นคอลัมน์ป้ายกำกับ ในที่นี้ คอลัมน์ป้ายกำกับคือคะแนน ดังนั้นโมเดลจะเรียนรู้ว่าค่าใดใน 10 ค่าของคะแนนมีแนวโน้มมากที่สุดโดยอิงตามค่าอื่นๆ ที่มีอยู่ในแต่ละแถว
  5. ตัวเลือก "auto_class_weights=TRUE" จะปรับสมดุลป้ายกำกับคลาสในข้อมูลฝึกฝน โดยค่าเริ่มต้น ข้อมูลฝึกฝนจะไม่มีการถ่วงน้ำหนัก หากป้ายกำกับในข้อมูลฝึกฝนไม่สมดุล โมเดลอาจเรียนรู้ที่จะคาดการณ์ป้ายกำกับคลาสที่ได้รับความนิยมมากที่สุดอย่างหนักหน่วงมากขึ้น
  6. คำสั่ง SELECT จะค้นหาตารางที่เราโหลดด้วยข้อมูล CSV โดยคําสั่ง WHERE จะกรองแถวในตารางอินพุตเพื่อให้ระบบเลือกเฉพาะชุดข้อมูล TRAIN ในขั้นตอนนี้
  7. โครงสร้างต่อไปนี้เป็นทางเลือกเพื่อให้ BigQuery ML ลงทะเบียนอย่างชัดเจนกับ Vertex AI Model Registry อ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบล็อก. model_registry='vertex_ai', vertex_ai_model_version_aliases=['logistic_reg', 'experimental']นี้

เมื่อสร้างแล้ว ข้อมูลต่อไปนี้จะปรากฏในส่วนสคีมาของพื้นที่ทำงาน SQL ของ BigQuery

2e43087f914aa466.png

หลังจากสร้างโมเดลแล้ว ให้ประเมินประสิทธิภาพของโมเดลโดยใช้ฟังก์ชัน ML.EVALUATE ฟังก์ชัน ML.EVALUATE จะประเมินค่าที่คาดการณ์เทียบกับข้อมูลจริง

นอกจากนี้ คุณยังดูเมตริกการประเมินของโมเดลได้จากหน้าโมเดล โดยทำดังนี้

7f2dc168bac0ac1a.png

เมตริกหลักโดยย่อ

ความแม่นยำ - สัดส่วนของการระบุผลบวกที่ถูกต้องจริงเป็นเท่าใด ความแม่นยำ = ผลบวกจริง / (ผลบวกจริง + ผลบวกลวง) ความสามารถในการเรียกคืน - ระบุสัดส่วนของผลบวกจริงได้อย่างถูกต้องหรือไม่ Recall = True Positive / (True Positive + False Negative) ความแม่นยำ - เมตริกสําหรับการประเมินโมเดลการจัดประเภท ซึ่งเป็นเศษส่วนของการคาดการณ์ที่โมเดลของเราทําได้อย่างถูกต้อง ความแม่นยํา = จํานวนการคาดการณ์ที่ถูกต้อง / จํานวนการคาดการณ์ทั้งหมด

5. การคาดการณ์คะแนนภาพยนตร์โดยใช้โมเดล

ถึงเวลาทำนายแล้ว!!!! คําค้นหาต่อไปนี้จะคาดการณ์คะแนนของภาพยนตร์แต่ละเรื่องในชุดข้อมูลที่จัดหมวดหมู่เป็นข้อมูล "TEST"

เรียกใช้การค้นหาด้านล่างในส่วนตัวแก้ไขคำค้นหาของพื้นที่ทำงาน SQL ในคอนโซล BigQuery

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

ผลลัพธ์จะมีลักษณะดังนี้

c719844860ce7c27.png

ผลลัพธ์ของโมเดลจะแสดง predicted_score ของภาพยนตร์ในระดับ 1 ถึง 10 (การจัดประเภท) คุณอาจสงสัยว่าทำไมถึงมีแถวการคาดการณ์หลายแถวสำหรับภาพยนตร์แต่ละเรื่อง เนื่องจากโมเดลได้แสดงป้ายกำกับที่คาดการณ์ได้และโอกาสที่จะเกิดป้ายกำกับแต่ละรายการตามลำดับที่ลดลง

วิเคราะห์ผลลัพธ์ที่คาดการณ์และโมเดล:

คุณสามารถทำขั้นตอนการวิเคราะห์ที่ยอดเยี่ยม 2 ขั้นตอนด้วยการคาดการณ์เพื่อทำความเข้าใจผลลัพธ์ได้ ดังนี้

  1. หากต้องการทราบสาเหตุที่โมเดลสร้างผลการคาดการณ์เหล่านี้ คุณสามารถใช้ฟังก์ชัน ML.EXPLAIN_PREDICT
  2. หากต้องการทราบว่าฟีเจอร์ใดสำคัญที่สุดในการกำหนดช่วงรายได้โดยทั่วไป คุณสามารถใช้ฟังก์ชัน ML.GLOBAL_EXPLAIN

คุณสามารถอ่านขั้นตอนเหล่านี้โดยละเอียดได้ในเอกสารประกอบ

6. ข้อมูลไปยัง Generative AI

มาดูข้อมูลเชิงลึกเกี่ยวกับชุดข้อมูลภาพยนตร์โดยการถาม LLM (โมเดลภาษาขนาดใหญ่) ถึงสรุปปัจจัยที่มีอิทธิพลต่อคะแนนภาพยนตร์ให้มากกว่า 5 โดยใช้ Generative AI ด้วยโมเดล text-bison (ล่าสุด) ของ Vertex AI โดยใช้การค้นหา SQL เท่านั้น

  1. ตาราง movie_score ที่เราสร้างขึ้นจะเป็นอินพุตสำหรับขั้นตอนนี้ด้วย
  2. ระบบจะสร้างการเชื่อมต่อภายนอกเพื่อสร้างสิทธิ์เข้าถึงระหว่าง BigQuery ML กับบริการ Vertex
  3. ระบบจะใช้โครงสร้าง GENERATE_TEXT ของ BigQuery เพื่อเรียกใช้ PaLM API จาก Vertex AI จากระยะไกล

7. สร้างการเชื่อมต่อภายนอก

เปิดใช้ BQ Connection API หากยังไม่ได้ดำเนินการ และจดรหัสบัญชีบริการจากรายละเอียดการกำหนดค่าการเชื่อมต่อ

  1. คลิกปุ่ม +เพิ่ม ในแผง BigQuery Explorer (ทางด้านซ้ายของคอนโซล BigQuery) แล้วคลิก "การเชื่อมต่อกับแหล่งข้อมูลภายนอก" ในแหล่งข้อมูลยอดนิยมที่แสดง
  2. เลือกประเภทการเชื่อมต่อเป็น "BigLake และฟังก์ชันระยะไกล" ระบุประเภทสถานที่ตั้งเป็น "ภูมิภาค" และค่าเป็น "us-central1 (ไอโอวา)" และ "bq_llm_connection" เป็นรหัสการเชื่อมต่อ

8a87802ab0846a6.png

  1. เมื่อสร้างการเชื่อมต่อแล้ว ให้จดบันทึกบัญชีบริการที่สร้างขึ้นจากรายละเอียดการกำหนดค่าการเชื่อมต่อ

ให้สิทธิ์

ในขั้นตอนนี้ เราจะให้สิทธิ์แก่บัญชีบริการเพื่อเข้าถึงบริการ Vertex AI

เปิด IAM แล้วเพิ่มบัญชีบริการที่คุณคัดลอกหลังจากสร้างการเชื่อมต่อภายนอกเป็น Principal แล้วเลือกบทบาท "ผู้ใช้ Vertex AI"

ff8e1d730879f972.png

8. สร้างโมเดล ML ระยะไกล

สร้างโมเดลระยะไกลที่แสดงถึงโมเดลภาษาขนาดใหญ่ของ 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');

ซึ่งจะสร้างโมเดลชื่อ llm_model ในชุดข้อมูล movie_insights ที่ใช้ประโยชน์จาก CLOUD_AI_LARGE_LANGUAGE_MODEL_V1 API ของ Vertex AI เป็นฟังก์ชันระยะไกล ซึ่งอาจใช้เวลาหลายวินาทีจึงจะเสร็จสมบูรณ์

9. สร้างข้อความโดยใช้โมเดล ML

เมื่อสร้างโมเดลแล้ว ให้ใช้โมเดลเพื่อสร้าง สรุป หรือจัดหมวดหมู่ข้อความ

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

**คำอธิบาย:

ml_generate_text_result** คือการตอบกลับจากโมเดลการสร้างข้อความในรูปแบบ JSON ซึ่งมีทั้งแอตทริบิวต์เนื้อหาและความปลอดภัย ดังนี้ ก. เนื้อหาแสดงผลลัพธ์ข้อความที่สร้างขึ้น ข แอตทริบิวต์ความปลอดภัยแสดงถึงตัวกรองเนื้อหาในตัวที่มีเกณฑ์ที่ปรับได้ซึ่งเปิดใช้ใน Vertex AI Palm API เพื่อหลีกเลี่ยงการตอบกลับที่ไม่ตั้งใจหรือไม่คาดคิดจากโมเดลภาษาขนาดใหญ่ โดยระบบจะบล็อกการตอบกลับหากละเมิดเกณฑ์ความปลอดภัย

ML.GENERATE_TEXT คือโครงสร้างที่คุณใช้ใน BigQuery เพื่อเข้าถึง LLM ของ Vertex AI เพื่อทำงานสร้างข้อความ

CONCAT จะต่อท้ายข้อความ PROMPT และระเบียนฐานข้อมูล

movie_insights คือชื่อชุดข้อมูล และ movie_score คือชื่อของตารางที่มีข้อมูลที่เราจะใช้ในการออกแบบพรอมต์

อุณหภูมิคือพารามิเตอร์พรอมต์ที่ใช้ควบคุมความสุ่มของคำตอบ โดยยิ่งน้อยยิ่งดีในแง่ของความเกี่ยวข้อง

Max_output_tokens คือจำนวนคำที่คุณต้องการในคำตอบ

การตอบกลับการค้นหาจะมีลักษณะดังนี้

a3691afc0a97e724.png

ดังที่คุณเห็น คำตอบจะซ้อนกันและไม่มีการจัดรูปแบบ

10. ทำให้ผลการค้นหาแบนราบ

มาทำให้ผลลัพธ์แบนราบเพื่อที่เราจะได้ไม่ต้องถอดรหัส JSON อย่างชัดเจนในคำค้นหา

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

**คำอธิบาย:

Flatten_json_output** แสดงค่าบูลีน ซึ่งหากตั้งค่าเป็นจริงจะแสดงข้อความที่เข้าใจได้ง่ายซึ่งดึงมาจากคำตอบ JSON

การตอบกลับการค้นหาจะมีลักษณะดังนี้

1aaa0c514fccab59.png

11. ล้างข้อมูล

หากต้องการหลีกเลี่ยงการเรียกเก็บเงินจากบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้ คุณสามารถลบปลายทาง Vertex AI ที่สร้างขึ้นเป็นส่วนหนึ่งของขั้นตอน ML ได้โดยไปที่หน้าปลายทาง Vertex AI

12. ขอแสดงความยินดี

ยินดีด้วย คุณสร้างโมเดล BQML และทำการวิเคราะห์ตาม LLM โดยใช้ Vertex AI API ในชุดข้อมูลภาพยนตร์ได้สำเร็จโดยใช้การค้นหา SQL เท่านั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่มีได้ในเอกสารประกอบของผลิตภัณฑ์ LLM ของ Vertex AI