1. บทนำ
ใน Codelab นี้ เราจะสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วยโมเดลที่กำหนดเองของ BigQuery ML โดยใช้ SQL เพียงอย่างเดียว และทำให้โมเดลใช้งานได้ใน VertexAI คุณจะได้เรียนรู้:
- วิธีสร้างชุดข้อมูล BigQuery โดยใช้ Cloud Shell และโหลดข้อมูลจากไฟล์
- วิธีใช้ ML ของ BigQuery สำหรับการเรียนรู้ที่มีการควบคุมดูแลเพื่อสร้างโมเดลการคาดการณ์การถดถอยแบบหลายคลาสสำหรับการคาดการณ์ Movie Score โดยไม่ต้องเขียนโค้ดมากนัก แต่ใช้เพียงการค้นหา SQL เพียงอย่างเดียว
สิ่งที่คุณจะสร้าง
คุณจะได้สร้าง
- ชุดข้อมูล BigQuery ที่จะมีคอมโพเนนต์ของตารางและโมเดล
- โมเดล ML ของ BigQuery สำหรับการคาดการณ์การจัดประเภทภาพยนตร์โดยใช้การค้นหา SQL
- ทำให้โมเดลใช้งานได้ใน Vertex AI Model Registry
ข้อกำหนด
2. สร้างโปรเจ็กต์
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ที่อยู่ในระบบคลาวด์แล้ว ดูวิธีตรวจสอบว่าเปิดใช้การเรียกเก็บเงินในโปรเจ็กต์แล้ว
- ไปที่ BigQuery เพื่อเปิดใช้ API นอกจากนี้คุณยังเปิด UI เว็บของ BigQuery ได้โดยตรงโดยการป้อน URL ต่อไปนี้ในเบราว์เซอร์ของคุณ: https://console.cloud.google.com/bigquery
3. เปิดใช้งาน Cloud Shell
- คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่กำลังทำงานใน Google Cloud ซึ่งมีการโหลดล่วงหน้าพร้อม bq โดยจาก Cloud Console ให้คลิก "เปิดใช้งาน Cloud Shell" ที่มุมขวาบน:
- เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าได้รับการตรวจสอบสิทธิ์แล้ว และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้เกี่ยวกับโปรเจ็กต์ของคุณ
gcloud config list project
- หากไม่ได้ตั้งค่าโปรเจ็กต์ไว้ ให้ใช้คำสั่งต่อไปนี้เพื่อตั้งค่าโปรเจ็กต์
gcloud config set project <PROJECT_ID>
ดูคำสั่งและการใช้งาน gcloud ในเอกสารประกอบ
4. กำลังเตรียมข้อมูลการฝึก
นี่เป็นขั้นตอนสำคัญในโปรเจ็กต์ ผลิตภัณฑ์ และแอปทั้งหมดที่เกี่ยวข้องกับข้อมูล ซึ่งต้องอาศัยความเชี่ยวชาญด้านโดเมนอย่างมากนอกเหนือไปจากเทคโนโลยีเพื่อเตรียมชุดข้อมูลที่ดีที่สุดและเตรียมพร้อมสำหรับโปรเจ็กต์ ML สำหรับวัตถุประสงค์ของ Codelab นี้ เราจะใช้ไฟล์ข้อมูลที่ได้เตรียมไว้แล้ว
5. การสร้างและโหลดชุดข้อมูล
ชุดข้อมูล BigQuery คือคอลเล็กชันของตาราง ตารางทั้งหมดในชุดข้อมูลจะได้รับการจัดเก็บไว้ในตำแหน่งข้อมูลเดียวกัน คุณยังแนบการควบคุมการเข้าถึงที่กำหนดเองเพื่อจำกัดการเข้าถึงชุดข้อมูลและตารางของชุดข้อมูลได้ด้วย
- ใน Cloud Shell ให้ใช้คำสั่ง bq mk เพื่อสร้างชุดข้อมูลที่ชื่อ "movies"
bq mk --location=<<LOCATION>> movies
ตั้งค่าตำแหน่งเป็นภูมิภาค (asia-south1)
- ตรวจสอบว่าคุณมีไฟล์ข้อมูล (.csv) พร้อมแล้ว เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อโคลนที่เก็บและไปยังโปรเจ็กต์
git clone <<repository link>>
cd movie-score
- ใช้คำสั่งการโหลด 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 ใน 3 วิธีต่อไปนี้
เราสามารถโต้ตอบกับ BigQuery ได้ 3 วิธี โดยจะลองใช้ 2 วิธีต่อไปนี้ ก. UI ของเว็บ BigQuery ข. คำสั่ง bq c API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
ฉันใช้พื้นที่ทำงาน BigQuery Web SQL เพื่อเรียกใช้การค้นหาแล้ว พื้นที่ทำงานของ SQL มีลักษณะดังนี้
กำลังใช้คำสั่ง 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';
รายละเอียดคำค้นหา:
- คำสั่ง CREATE MODEL จะฝึกโมเดลโดยใช้ข้อมูลการฝึกในคำสั่ง SELECT
- อนุประโยค OPTIONS ระบุประเภทโมเดลและตัวเลือกการฝึก ในที่นี้ ตัวเลือก LOGISTIC_REG จะระบุประเภทโมเดลการถดถอยแบบโลจิสติก ไม่จำเป็นต้องระบุโมเดลการถดถอยแบบโลจิสติกแบบไบนารีเทียบกับโมเดลการถดถอยแบบโลจิสติกแบบหลายคลาส โดย BigQuery ML จะระบุได้ว่าควรฝึกโมเดลใดโดยอิงตามจำนวนค่าที่ไม่ซ้ำกันในคอลัมน์ป้ายกำกับ
- data_split_method=‘NO_SPLIT' บังคับให้ BQML ฝึกกับข้อมูลตามเงื่อนไขการค้นหา (data_cat = "TRAIN") และควรทราบว่าควรใช้ "AUTO_SPLIT" ในตัวเลือกนี้เพื่ออนุญาตให้เฟรมเวิร์ก (หรือบริการในกรณีนี้) สุ่มพาร์ติชันของการแยกการฝึก/ทดสอบ
- ตัวเลือก Input_label_cols จะระบุคอลัมน์ในคำสั่ง SELECT ที่จะใช้เป็นคอลัมน์ป้ายกำกับ ในส่วนนี้ คอลัมน์ป้ายกำกับคือ "คะแนน" ดังนั้นโมเดลจะเรียนรู้ว่าค่าใดใน 10 ค่าที่เป็นไปได้มากที่สุด โดยพิจารณาจากค่าอื่นๆ ที่แสดงในแต่ละแถว
- คอลัมน์ "auto_class_weights=TRUE" จะช่วยทำให้ป้ายกำกับคลาสในข้อมูลการฝึกสมดุลกัน โดยค่าเริ่มต้น ข้อมูลการฝึกจะไม่ได้ถ่วงน้ำหนัก หากป้ายกำกับในข้อมูลการฝึกไม่สมดุล โมเดลอาจเรียนรู้ที่จะคาดการณ์คลาสของป้ายกำกับที่ได้รับความนิยมสูงสุด
- คำสั่ง SELECT จะค้นหาตารางที่เราโหลดด้วยข้อมูล CSV คำสั่ง WHERE จะกรองแถวในตารางอินพุตเพื่อเลือกเฉพาะชุดข้อมูล TRAIN ในขั้นตอนนี้
เมื่อสร้างแล้ว ข้อมูลด้านล่างจะปรากฏในส่วน SCHEMA ของพื้นที่ทำงาน BigQuery SQL
ป้ายกำกับ
ฟีเจอร์
ประเมินโมเดลการถดถอยแบบโลจิสติกส์
หลังจากสร้างโมเดลแล้ว ให้ประเมินประสิทธิภาพของโมเดลโดยใช้ฟังก์ชัน 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 ฟังก์ชันนี้จะแสดงแถวของสถิติหนึ่งแถวเกี่ยวกับโมเดล
เนื่องจากคุณทำการถดถอยแบบโลจิสติกส์ ผลที่ได้จึงรวมเมตริกที่คุณเห็นในภาพหน้าจอด้านบน ซึ่งได้แก่ ความแม่นยำ, การจดจำ, ความแม่นยำ, 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'
)
)
ด้านล่างนี้เป็นตัวอย่างผลลัพธ์
ผลลัพธ์โมเดลจะแสดงคะแนนที่คาดการณ์ไว้ของภาพยนตร์ในรูปแบบ 1 ถึง 10 (การจัดประเภท) คุณอาจจะสงสัยว่าเหตุใดจึงมีแถวการคาดคะเนหลายแถวสำหรับภาพยนตร์แต่ละเรื่อง ทั้งนี้เนื่องจากโมเดลได้แสดงผลป้ายกำกับที่คาดการณ์ที่เป็นไปได้ และความน่าจะเป็นในการเกิดป้ายกำกับแต่ละรายการในลำดับจากมากไปน้อย
วิเคราะห์ผลลัพธ์ที่คาดการณ์ไว้และโมเดล
นอกจากนี้ คุณยังทำ 2 ขั้นตอนการวิเคราะห์ที่ยอดเยี่ยมเป็นส่วนหนึ่งของผลการคาดการณ์ได้ด้วย ดังนี้
- คุณใช้ฟังก์ชัน ML.EXPLAIN_PREDICT เพื่อทำความเข้าใจสาเหตุที่โมเดลของคุณสร้างผลการคาดการณ์เหล่านี้
- หากต้องการทราบว่าฟีเจอร์ใดสำคัญที่สุดในการกำหนดช่วงรายได้โดยทั่วไป คุณสามารถใช้ฟังก์ชัน 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 นาที เราจะดำเนินการต่อไปนี้
- ตั้งค่า BigQuery เป็นฐานข้อมูลสำหรับโปรเจ็กต์การวิเคราะห์
- สร้างโมเดลการคาดการณ์ที่กำหนดเองโดยใช้ SQL ของข้อมูล BigQuery เท่านั้น และไม่มีการเขียนโค้ดอื่น
- สร้างโมเดล ML Auto ML ของ BQ โดยใช้การค้นหา SQL เท่านั้น
- ทำให้โมเดล BQML ใช้งานได้กับ Vertex AI Model Registry
10. ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิกลบ
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิกปิดเครื่องเพื่อลบโปรเจ็กต์
11. ขอแสดงความยินดี
ยินดีด้วย คุณสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ที่มี BQML แบบกำหนดเองและ AutoML เรียบร้อยแล้ว รวมถึงทำให้โมเดลใช้งานได้ใน Vertex AI Model Registry ซึ่งทั้งหมดนี้ทำโดยใช้ SQL เท่านั้น