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

2. ข้อกำหนด

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

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

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

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

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 เพื่อโหลดไฟล์ 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" เพื่อสร้างและฝึกโมเดลการถดถอยแบบโลจิสติกส์

เรียกใช้การค้นหาด้านล่างในส่วนการค้นหาเครื่องมือแก้ไขการค้นหา Workspace ในคอนโซล 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&#39; บังคับให้ 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']นี้

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

2e43087f914aa466.png

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

คุณยังสามารถดูเมตริกการประเมินของโมเดลของคุณจากหน้า MODEL ได้ด้วย

7f2dc168bac0ac1a.png

ข้อมูลโดยย่อของเมตริกหลักมีดังนี้

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

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

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

เรียกใช้การค้นหาด้านล่างในส่วนการค้นหาเครื่องมือแก้ไขการค้นหา Workspace ในคอนโซล 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

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

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

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

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

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

6. ข้อมูลกับ Generative AI

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

  1. ตารางที่เราสร้าง Movie_score ไว้จะเป็นอินพุตสำหรับขั้นตอนนี้ด้วย
  2. ระบบจะสร้างการเชื่อมต่อภายนอกเพื่อสร้างการเข้าถึงระหว่างบริการ BigQuery ML กับ Vertex
  3. ระบบจะใช้โครงสร้าง BigQuery GENERATE_TEXT เพื่อเรียกใช้ 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 และเพิ่มบัญชีบริการที่คุณคัดลอกหลังจากสร้างการเชื่อมต่อภายนอกเป็นผู้หลักและเลือก "ผู้ใช้ 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 ที่มีทั้งแอตทริบิวต์เนื้อหาและความปลอดภัย ก. เนื้อหาแสดงผลลัพธ์ข้อความที่สร้างขึ้น b. แอตทริบิวต์ความปลอดภัยจะแสดงตัวกรองเนื้อหาในตัวที่มีเกณฑ์แบบปรับได้ซึ่งเปิดใช้ใน Vertex AI Palm API เพื่อหลีกเลี่ยงการตอบสนองที่ไม่คาดคิดหรือคาดไม่ถึงจากโมเดลภาษาขนาดใหญ่ โดยการตอบกลับจะถูกบล็อกหากละเมิดเกณฑ์ความปลอดภัย

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

CONCAT จะเพิ่มคำสั่ง PROMPT และบันทึกฐานข้อมูล

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

Temperature คือพารามิเตอร์พรอมต์เพื่อควบคุมการสุ่มคำตอบ โดยยิ่งให้คำตอบน้อยก็จะยิ่งดีกว่าในแง่ของความเกี่ยวข้อง

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. ล้างข้อมูล

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

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

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