1. บทนำ
ในโค้ดแล็บนี้ เราจะสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วยโมเดล BigQuery ML ที่กําหนดเองโดยใช้เฉพาะ SQL และทำให้โมเดลใช้งานได้ใน VertexAI คุณจะได้เรียนรู้:
- วิธีสร้างชุดข้อมูล BigQuery โดยใช้ Cloud Shell และโหลดข้อมูลจากไฟล์
- วิธีใช้ BigQuery ML สําหรับการเรียนรู้แบบควบคุมเพื่อสร้างโมเดลการคาดการณ์การถดถอยหลายคลาสสําหรับการคาดการณ์คะแนนภาพยนตร์โดยไม่ต้องเขียนโค้ดมากนัก แต่ใช้การค้นหา SQL เท่านั้น
สิ่งที่คุณจะสร้าง
คุณจะต้องสร้าง
- ชุดข้อมูล BigQuery ที่มีคอมโพเนนต์ตารางและโมเดล
- โมเดล BigQuery ML สำหรับการคาดการณ์การจัดประเภทภาพยนตร์โดยใช้การค้นหา SQL
- ติดตั้งใช้งานโมเดลใน Vertex AI Model Registry
ข้อกำหนด
2. สร้างโปรเจ็กต์
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ Google Cloud ในหน้าตัวเลือกโปรเจ็กต์
- ตรวจสอบว่าเปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ 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 เราจะใช้ไฟล์ data ที่เตรียมไว้แล้วเพื่อวัตถุประสงค์ของโค้ดแล็บนี้
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 load เพื่อโหลดไฟล์ CSV ลงในตาราง BigQuery (โปรดทราบว่าคุณอัปโหลดจาก UI ของ BigQuery โดยตรงได้ด้วย)
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 load ยังโหลดไฟล์จาก Cloud Storage ด้วย URI gs://my_bucket/path/to/file ได้อีกด้วย สคีมา ซึ่งสามารถกําหนดได้ในไฟล์สคีมา JSON หรือเป็นรายการที่คั่นด้วยคอมมา (เราใช้รายการที่คั่นด้วยคอมมา) ไชโย! ตอนนี้ข้อมูล CSV ของเราโหลดอยู่ในตาราง movies.movies แล้ว
- ค้นหาด้วยวิธีใดวิธีหนึ่งต่อไปนี้
เราโต้ตอบกับ BigQuery ได้ 3 วิธี เราจะลองใช้ 2 วิธี ได้แก่ a. UI เว็บของ BigQuery ข. คำสั่ง bq c API
SELECT name, rating, genre, runtime FROM movies.movies_score limit 3;
ฉันใช้เวิร์กสเปซ SQL ของเว็บ BigQuery เพื่อเรียกใช้การค้นหา พื้นที่ทํางาน 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 หมวดหมู่ขึ้นไป
หมายเหตุสั้นๆ เกี่ยวกับการเลือกโมเดล: นี่เป็นการเลือกโมเดลแบบทดลองที่เลือกไว้ที่นี่ โดยอิงตามการประเมินผลลัพธ์ที่ฉันได้ดำเนินการกับโมเดล 2-3 รายการในตอนแรก และสุดท้ายก็เลือกใช้ LOGISTIC REG เพื่อให้การดำเนินการง่ายขึ้นและได้ผลลัพธ์ใกล้เคียงกับคะแนนภาพยนตร์จริงจากฐานข้อมูลหลายแห่ง โปรดทราบว่าตัวอย่างนี้เป็นเพียงตัวอย่างการใช้งานรูปแบบเท่านั้น และไม่จำเป็นต้องเป็นรูปแบบที่แนะนําสําหรับ Use Case นี้ อีกวิธีในการใช้งานคือคาดการณ์ผลลัพธ์ของภาพยนตร์เป็น "ดี" / "ไม่ดี" โดยใช้โมเดลการถดถอยเชิงโลจิสติกนี้แทนการคาดการณ์คะแนน
เลือกข้อมูลการฝึก
เราได้แยกข้อมูลภาพยนตร์ (ใน CSV) เป็น 3 หมวดหมู่ในตารางโดยใช้ฟิลด์ "data_cat" ที่มีค่าอย่างใดอย่างหนึ่งต่อไปนี้ TRAIN, TEST และ PREDICT การแยกชุดข้อมูลเพื่อวัตถุประสงค์ในการทดสอบและการฝึกเป็นสิ่งสำคัญของโมเดล หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการแยกชุดข้อมูล โปรดดูเอกสารประกอบ
สร้างโมเดลการถดถอยเชิงเส้นโลจิสติก
เราสามารถใช้คำสั่ง CREATE MODEL ที่มีตัวเลือก "LOGISTIC_REG" เพื่อสร้างและฝึกโมเดลการถดถอยเชิงเส้นโลจิสติก
เรียกใช้การค้นหาด้านล่างในพื้นที่ทํางาน SQL ของเว็บ UI ของ BigQuery
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 ในขั้นตอนนี้
เมื่อสร้างแล้ว ข้อมูลต่อไปนี้จะปรากฏในส่วนสคีมาของ Workspace SQL ของ BigQuery
ป้ายกำกับ
ฟีเจอร์
ประเมินโมเดลการถดถอยเชิงโลจิสติก
หลังจากสร้างโมเดลแล้ว ให้ประเมินประสิทธิภาพของโมเดลโดยใช้ฟังก์ชัน 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, log_loss, roc_auc ซึ่งสําคัญอย่างยิ่งในการประเมินประสิทธิภาพของโมเดล นอกจากนี้ คุณยังเรียกใช้ ML.EVALUATE โดยไม่ต้องระบุข้อมูลอินพุตได้ด้วย ML.EVALUATE จะดึงข้อมูลเมตริกการประเมินที่ได้จากการฝึก ซึ่งใช้ชุดข้อมูลการประเมินที่จองไว้โดยอัตโนมัติ
เมตริกหลักโดยย่อ
ความแม่นยำ - ข้อมูลระบุตัวตนที่ถูกต้องจริงมีสัดส่วนเท่าใด ความแม่นยำ = ผลบวกจริง / (ผลบวกจริง + ผลบวกลวง) ความแม่นยำ - ผลบวกจริงตามสัดส่วนใดที่ระบบระบุได้อย่างถูกต้อง การเรียกคืน = ผลบวกลวง / (ผลบวกลวง + ผลลบลวง) ความแม่นยำ - เมตริกสําหรับประเมินโมเดลการจัดประเภท ซึ่งเป็นเศษส่วนของการคาดการณ์ที่โมเดลของเราทําถูกจริง ความแม่นยำ = จํานวนการคาดการณ์ที่ถูกต้อง / จํานวนการคาดการณ์ทั้งหมด
คาดการณ์การจัดประเภทภาพยนตร์โดยใช้ ML.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;
เมื่อสร้างโมเดลแล้ว คุณจะทําตามขั้นตอนเพื่อประเมิน คาดการณ์ และ 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" ในการค้นหา CREATE MODEL เพื่อให้ BigQuery ML เลือกโมเดลที่ต้องการลงทะเบียนไปยังรีจิสทรีโมเดล Vertex AI อย่างชัดเจน อ่านข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบล็อกนี้
9. สรุป
ในเวลาไม่ถึง 30 นาที เราได้ดำเนินการต่อไปนี้
- ตั้งค่า BigQuery เป็นฐานข้อมูลสําหรับโปรเจ็กต์ข้อมูลวิเคราะห์
- สร้างโมเดลการคาดการณ์ที่กําหนดเองโดยใช้เฉพาะ SQL ของข้อมูล BigQuery และไม่มีคําสั่งอื่นๆ
- สร้างโมเดล BQ AutoML โดยใช้การค้นหา SQL เท่านั้น
- ติดตั้งใช้งานโมเดล BQML ใน Vertex AI Model Registry แล้ว
10. ล้างข้อมูล
โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้
- ในคอนโซล Google Cloud ให้ไปที่หน้าจัดการทรัพยากร
- ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่ต้องการลบ แล้วคลิก "ลบ"
- ในกล่องโต้ตอบ ให้พิมพ์รหัสโปรเจ็กต์ แล้วคลิก "ปิด" เพื่อลบโปรเจ็กต์
11. ขอแสดงความยินดี
ยินดีด้วย คุณสร้างโมเดลการคาดการณ์คะแนนภาพยนตร์ด้วย BQML ที่กําหนดเองและ AutoML รวมถึงติดตั้งใช้งานโมเดลในรีจิสทรีโมเดล Vertex AI เรียบร้อยแล้ว และทั้งหมดนี้ทําได้โดยใช้ SQL เท่านั้น