การคาดการณ์การจัดประเภทภาพยนตร์ด้วย BQML โดยใช้ SQL

1. บทนำ

ใน Codelab นี้ เราจะสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วยโมเดลที่กำหนดเองของ BigQuery ML โดยใช้ SQL เพียงอย่างเดียว และทำให้โมเดลใช้งานได้ใน VertexAI คุณจะได้เรียนรู้:

  1. วิธีสร้างชุดข้อมูล BigQuery โดยใช้ Cloud Shell และโหลดข้อมูลจากไฟล์
  2. วิธีใช้ ML ของ BigQuery สำหรับการเรียนรู้ที่มีการควบคุมดูแลเพื่อสร้างโมเดลการคาดการณ์การถดถอยแบบหลายคลาสสำหรับการคาดการณ์ Movie Score โดยไม่ต้องเขียนโค้ดมากนัก แต่ใช้เพียงการค้นหา SQL เพียงอย่างเดียว

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

คุณจะได้สร้าง

  • ชุดข้อมูล BigQuery ที่จะมีคอมโพเนนต์ของตารางและโมเดล
  • โมเดล ML ของ BigQuery สำหรับการคาดการณ์การจัดประเภทภาพยนตร์โดยใช้การค้นหา SQL
  • ทำให้โมเดลใช้งานได้ใน Vertex AI Model Registry

ข้อกำหนด

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

2. สร้างโปรเจ็กต์

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
  2. ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว
  3. ไปที่ BigQuery เพื่อเปิดใช้ API นอกจากนี้คุณยังเปิด UI เว็บของ BigQuery ได้โดยตรงโดยการป้อน URL ต่อไปนี้ในเบราว์เซอร์ของคุณ: https://console.cloud.google.com/bigquery

3. เปิดใช้งาน Cloud Shell

  1. คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่กำลังทำงานใน Google Cloud ซึ่งมีการโหลดล่วงหน้าพร้อม bq โดยจาก Cloud Console ให้คลิก "เปิดใช้งาน Cloud Shell" ที่มุมขวาบน: 6757b2fb50ddcc2d.png
  2. เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าได้รับการตรวจสอบสิทธิ์แล้ว และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
  1. เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้เกี่ยวกับโปรเจ็กต์ของคุณ
gcloud config list project
  1. หากไม่ได้ตั้งค่าโปรเจ็กต์ไว้ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่าโปรเจ็กต์
gcloud config set project <PROJECT_ID>

ดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ

4. กำลังเตรียมข้อมูลการฝึก

นี่เป็นขั้นตอนสำคัญในโปรเจ็กต์ ผลิตภัณฑ์ และแอปทั้งหมดที่เกี่ยวข้องกับข้อมูล ซึ่งต้องอาศัยความเชี่ยวชาญด้านโดเมนอย่างมากนอกเหนือไปจากเทคโนโลยีเพื่อเตรียมชุดข้อมูลที่ดีที่สุดและเตรียมพร้อมสำหรับโปรเจ็กต์ ML สำหรับวัตถุประสงค์ของ Codelab นี้ เราจะใช้ไฟล์ข้อมูลที่ได้เตรียมไว้แล้ว

5. การสร้างและโหลดชุดข้อมูล

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

  1. ใน Cloud Shell ให้ใช้คำสั่ง bq mk เพื่อสร้างชุดข้อมูลที่ชื่อ "movies"
bq mk --location=<<LOCATION>> movies

ตั้งค่าตำแหน่งเป็นภูมิภาค (asia-south1)

  1. ตรวจสอบว่าคุณมีไฟล์ข้อมูล (.csv) พร้อมแล้ว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อโคลนที่เก็บและไปยังโปรเจ็กต์
git clone <<repository link>>

cd movie-score
  1. ใช้คำสั่งการโหลด BQ เพื่อโหลดไฟล์ CSV ลงในตาราง BigQuery (โปรดทราบว่าคุณจะอัปโหลดได้โดยตรงจาก BigQuery UI) ดังนี้
bq load --source_format=CSV --skip_leading_rows=1 movies.movies_score \
./movies_bq_src.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

คำอธิบายตัวเลือก: –source_format=CSV - ใช้รูปแบบข้อมูล CSV เมื่อแยกวิเคราะห์ไฟล์ข้อมูล –skip_leading_rows=1 - ข้ามบรรทัดแรกในไฟล์ CSV เพราะเป็นแถวส่วนหัว Movies.movies - อาร์กิวเมนต์ตำแหน่งแรกที่ใช้กำหนดตารางข้อมูลที่ควรโหลด ./movies.csv - อาร์กิวเมนต์ตำแหน่งข้อที่ 2 เป็นตัวกำหนดไฟล์ที่ต้องการโหลด นอกเหนือจากไฟล์ในเครื่องแล้ว คำสั่งโหลด BQ ยังโหลดไฟล์จาก Cloud Storage ที่มี URI ของ gs://my_bucket/path/to/file ได้ด้วย สคีมาซึ่งกำหนดในไฟล์สคีมา JSON หรือเป็นรายการที่คั่นด้วยคอมมาได้ (ฉันใช้รายการที่คั่นด้วยคอมมา) ไชโย! ข้อมูล CSV ของเราโหลดอยู่ในตาราง movies.movies ด้วย

  1. ค้นหาโดยใช้ 1 ใน 3 วิธีต่อไปนี้

เราสามารถโต้ตอบกับ BigQuery ได้ 3 วิธี โดยจะลองใช้ 2 วิธีต่อไปนี้ ก. UI ของเว็บ BigQuery ข. คำสั่ง bq c API

SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

ฉันใช้พื้นที่ทำงาน BigQuery Web SQL เพื่อเรียกใช้การค้นหาแล้ว พื้นที่ทำงานของ SQL มีลักษณะดังนี้

109a0b2c7155e9b3.png

กำลังใช้คำสั่ง bq:

bq query --use_legacy_sql=false \
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;

6. คาดการณ์การจัดประเภทภาพยนตร์ตั้งแต่ 1 ถึง 10

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

หมายเหตุสั้นๆ เกี่ยวกับตัวเลือกโมเดล: นี่เป็นตัวเลือกโมเดลทดลองที่เลือกที่นี่ โดยอิงตามการประเมินผลลัพธ์ที่ฉันพบในโมเดลไม่กี่โมเดลในระยะแรก และสุดท้ายก็ดำเนินการต่อด้วย LOGIStic REG เพื่อทำให้เรียบง่ายและเพื่อให้ได้ผลลัพธ์ที่ใกล้เคียงกับการจัดประเภทภาพยนตร์จริงจากฐานข้อมูลหลายแห่ง โปรดทราบว่านี่ควรถือเป็นตัวอย่างสำหรับการติดตั้งใช้งานโมเดล และไม่จำเป็นต้องเป็นโมเดลที่แนะนำสำหรับกรณีการใช้งานนี้ อีกวิธีในการนำวิธีนี้ไปใช้คือการคาดการณ์ผลลัพธ์ของภาพยนตร์ว่า "ดี / ไม่ดี" โดยใช้โมเดลการถดถอยแบบโลจิสติกแทนการคาดการณ์คะแนน

เลือกข้อมูลการฝึก

เราได้แบ่งข้อมูลภาพยนตร์ (ในรูปแบบ csv) ออกเป็น 3 หมวดหมู่ในตารางโดยใช้ฟิลด์ "data_cat" ซึ่งมีค่าใดค่าหนึ่งใน 3 ค่า ได้แก่ TRAIN, TEST และ PREDICT การแยกชุดข้อมูลเพื่อวัตถุประสงค์ในการทดสอบและการฝึกเป็นแง่มุมที่สำคัญของโมเดล หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการทำความเข้าใจการแยกชุดข้อมูล โปรดดูเอกสารประกอบ

สร้างโมเดลการถดถอยแบบโลจิสติก

เราสามารถใช้คำสั่ง CREATE MODEL ที่มีตัวเลือก "LOGISTIC_REG" ได้ เพื่อสร้างและฝึกโมเดลการถดถอยแบบโลจิสติกส์

เรียกใช้การค้นหาด้านล่างใน SQL Workspace ของ BigQuery Web UI

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
OPTIONS
  ( model_type='LOGISTIC_REG',
    auto_class_weights=TRUE,
   data_split_method='NO_SPLIT',
    input_label_cols=[‘score']
  ) AS
SELECT
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_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 ในขั้นตอนนี้

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

ป้ายกำกับ

93efd0c1a7883690.png

ฟีเจอร์

8c539338df1a9652.png

ประเมินโมเดลการถดถอยแบบโลจิสติกส์

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

SELECT
  *
FROM
  ML.EVALUATE (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘TEST'
    )
  )

ฟังก์ชัน ML.EVALUATE จะใช้โมเดลที่ฝึกในขั้นตอนก่อนหน้าและข้อมูลการประเมินที่แสดงผลโดยข้อความค้นหาย่อย SELECT ฟังก์ชันนี้จะแสดงแถวของสถิติหนึ่งแถวเกี่ยวกับโมเดล

b54b0ebd6514a498.png

เนื่องจากคุณทำการถดถอยแบบโลจิสติกส์ ผลที่ได้จึงรวมเมตริกที่คุณเห็นในภาพหน้าจอด้านบน ซึ่งได้แก่ ความแม่นยำ, การจดจำ, ความแม่นยำ, f1-score, log_loss, roc_auc ซึ่งสำคัญมากในการประเมินประสิทธิภาพของโมเดล หรือจะเรียกใช้ ML.EVALUATE ก็ได้โดยไม่ต้องระบุข้อมูลอินพุต ML.EVALUATE จะเรียกข้อมูลเมตริกการประเมินที่ได้รับระหว่างการฝึก ซึ่งใช้ชุดข้อมูลการประเมินที่สงวนไว้โดยอัตโนมัติ

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

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

คาดการณ์การจัดประเภทภาพยนตร์โดยใช้ ML.PREDICT

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

SELECT
  *
FROM
  ML.PREDICT (MODEL movies.movies_score_model,
    (
    SELECT
      *
    FROM
      movies.movies_score
    WHERE
      data_cat= ‘PREDICT'
     )
  )

ด้านล่างนี้เป็นตัวอย่างผลลัพธ์

1efb91967acc1f0c.png

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

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

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

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

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

7. คาดการณ์การจัดประเภทภาพยนตร์โดยใช้ BigQuery AutoML

AutoML เหมาะมากหากคุณต้องการให้บริการ BigQuery สร้างโมเดลสำหรับคุณ และผ่อนคลายจนกว่าจะมีการสร้างผลลัพธ์ของโมเดล ความสามารถ AUTOML มีให้ใช้งานใน BQML (model_type=AUTOML_CLASSIFIER หรือ AUTOML_REGRESSOR) โดยตรงและเรียกใช้ได้ง่ายขึ้นหากข้อมูลอยู่ใน BigQuery อยู่แล้ว

CREATE OR REPLACE MODEL movies.auto_movies
       OPTIONS(model_type='AUTOML_CLASSIFIER',
               input_label_cols=['score'],
               budget_hours=1.0)
AS 
SELECT
  * EXCEPT(id, data_cat)
FROM
  movies.movies_score;

เมื่อสร้างโมเดลแล้ว คุณจะทำตามขั้นตอนเพื่อ EVALUATE, PREDICT และ EXPLAIN_PREDICT ได้ตามที่ได้พูดคุยกันไปในโมเดล BQML ที่กำหนดเอง อ่านเพิ่มเติมเกี่ยวกับ BigQuery AutoML ในเอกสารประกอบ

8. คลิกเพียงครั้งเดียวเพื่อทำให้โมเดล BQML ใช้งานได้ใน Vertex AI Model Registry

ตอนนี้คุณสามารถดูโมเดล ML ทั้งหมดของคุณภายใน Vertex AI Model Registry ซึ่งจะช่วยให้องค์กรจัดการและทำให้โมเดลใช้งานได้ง่ายขึ้น ซึ่งรวมถึงโมเดลที่สร้างด้วย BigQuery ML, AutoML และโมเดลที่กำหนดเองที่ผ่านการฝึกแล้ว โดยดำเนินการดังนี้

CREATE OR REPLACE MODEL
  `movies.movies_score_model`
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
  * EXCEPT(id, data_cat)
FROM
  ‘movies.movies_score'
WHERE
  data_cat = 'TRAIN';

รวม model_registry="vertex_ai" ในการค้นหา "สร้างโมเดล" เพื่อให้ BigQuery ML เลือกและโมเดลที่ต้องการลงทะเบียนอย่างชัดเจนกับ Vertex AI Model Registry ได้ อ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบล็อกนี้

9. สรุป

ในเวลาไม่ถึง 30 นาที เราจะดำเนินการต่อไปนี้

  1. ตั้งค่า BigQuery เป็นฐานข้อมูลสำหรับโปรเจ็กต์การวิเคราะห์
  2. สร้างโมเดลการคาดการณ์ที่กำหนดเองโดยใช้ SQL ของข้อมูล BigQuery เท่านั้น และไม่มีการเขียนโค้ดอื่น
  3. สร้างโมเดล ML Auto ML ของ BQ โดยใช้การค้นหา SQL เท่านั้น
  4. ทำให้โมเดล BQML ใช้งานได้กับ Vertex AI Model Registry

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

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

  1. ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
  2. ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
  3. ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์

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

ยินดีด้วย คุณสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ที่มี BQML แบบกำหนดเองและ AutoML เรียบร้อยแล้ว รวมถึงทำให้โมเดลใช้งานได้ใน Vertex AI Model Registry ซึ่งทั้งหมดนี้ทำโดยใช้ SQL เท่านั้น