กำไร:
- ความสามารถในการตั้งค่าไปป์ไลน์ข้อมูล (การรวบรวม การตรวจสอบความถูกต้อง การล้าง การแปลง การแยก การกำหนดเวอร์ชัน) และวางการตรวจสอบสคีมาที่จุดเริ่มต้นของไปป์ไลน์
- ความสามารถในการตัดสินใจเกี่ยวกับค่าที่หายไปและการติดฉลากตามความหมายของฟิลด์และการแบ่งส่วน เพื่อป้องกันการรั่วไหลของข้อมูล (กลุ่มและชั่วคราว)
- ความสามารถในการสร้างฐานข้อมูลที่ทำซ้ำได้โดยการแก้ไขเวอร์ชันข้อมูลและเมล็ดข้อมูลแบบสุ่ม
พลังที่แท้จริงของระบบการเรียนรู้ของเครื่องทุกระบบอยู่ที่ข้อมูล ไม่ใช่โมเดล วิศวกรที่มีประสบการณ์รู้ว่า: “ขยะเข้า ขยะออก” แม้แต่โมเดลที่ทันสมัยที่สุดที่ป้อนข้อมูลที่ไม่ดีก็ยังให้ผลลัพธ์ที่ไม่ดี ในหน่วยนี้ เราสร้างไปป์ไลน์ข้อมูล (ไปป์ไลน์ข้อมูล: ห่วงโซ่ของขั้นตอนที่ทำให้ข้อมูลดิบพร้อมสำหรับการฝึกโมเดล) ตั้งแต่ต้นจนจบและเรียนรู้ว่าขั้นตอนใดของบรรทัดนี้ที่เราสามารถใช้ปัญญาประดิษฐ์ได้อย่างปลอดภัย
ขั้นตอนของสายข้อมูล
โดยทั่วไปแล้วสายข้อมูลจะผ่านจุดหยุดเหล่านี้:
- การรวบรวม (การนำเข้า): การดึงข้อมูลจากแหล่งที่มา (ฐานข้อมูล, API, ไฟล์บันทึก, สตรีมเหตุการณ์)
- การตรวจสอบความถูกต้อง: การตรวจสอบว่าข้อมูลสอดคล้องกับสคีมา ประเภท และช่วงที่คาดหวังหรือไม่
- การทำความสะอาด: การจัดการกับค่าที่หายไป บันทึกที่ซ้ำกัน ค่าผิดปกติ และความไม่สอดคล้องกัน
- การแปลง: การเปลี่ยนข้อมูลดิบให้เป็นคุณลักษณะ เช่น การแปลงตัวแปรหมวดหมู่เป็นตัวเลข ทำให้เกิด "วันในสัปดาห์" จากวันที่
- การแยก: การแยกออกเป็นชุดการฝึกอบรม การตรวจสอบ และการทดสอบ
- การกำหนดเวอร์ชัน: การบันทึกว่าโมเดลใดได้รับการฝึกฝนด้วยข้อมูลใด
ปัญญาประดิษฐ์ช่วยประหยัดเวลาโดยการสร้างแบบร่างโค้ดและแนวคิด โดยเฉพาะในขั้นตอนที่ 2, 3 และ 4 แต่การตัดสินใจ เช่น บันทึกที่จะทิ้ง ค่าที่ขาดหายไปในการเติม และอย่างไร จะเป็นของวิศวกรที่รู้ข้อมูล เพราะการทำความสะอาดที่ไม่เหมาะสมอาจทำให้เกิดอคติที่ซ่อนอยู่ในโมเดลได้
การตรวจสอบข้อมูล: การป้องกันแนวหน้าตั้งแต่เนิ่นๆ
ข้อผิดพลาดที่แพงที่สุดไม่ได้เริ่มต้นจากการใช้งานจริง แต่เป็นจุดที่ข้ามขั้นตอนการตรวจสอบยืนยัน การตรวจสอบความถูกต้องของสคีมาจะตรวจสอบโดยอัตโนมัติว่าชุดข้อมูลขาเข้าแต่ละชุดสอดคล้องกับโครงสร้างที่คาดไว้หรือไม่ เช่น คอลัมน์อายุอยู่ระหว่าง 0-120, ช่องอีเมลว่างเปล่า, จำนวนคอลัมน์มีการเปลี่ยนแปลงหรือไม่
เคล็ดลับ: ใส่การตรวจสอบที่จุดเริ่มต้นของบรรทัด ยิ่งตรวจพบข้อมูลที่เสียหายได้เร็วเท่าไร การซ่อมแซมก็ยิ่งถูกลงเท่านั้น ข้อผิดพลาดของสคีมาที่พบในการใช้งานจริงมีราคาแพงกว่าข้อผิดพลาดที่พบในขั้นตอนการฝึกอบรมหลายเท่า
เขียนแผนการตรวจสอบด้วย pandera (หรือ Great Expectations) สำหรับสคีมาข้อมูลต่อไปนี้ คอลัมน์และกฎ:- user_id: จำนวนเต็ม ไม่สามารถเป็นค่าว่างได้ ไม่ซ้ำกัน อายุ: จำนวนเต็ม ไม่สามารถอยู่ระหว่าง 0-120- signup_date: วันที่ ไม่สามารถอยู่ในอนาคต- ประเทศ: หมวดหมู่ จากชุด {TR, DE, US, UK}- ยอดคงเหลือ: ทศนิยม ไม่สามารถเป็นค่าลบ สร้างข้อความแสดงข้อผิดพลาดที่มีความหมายสำหรับการละเมิดกฎแต่ละข้อ แสดงการทดสอบพร้อมตัวอย่างเส้นขาดที่ส่วนท้ายของโค้ด
การทำความสะอาด: มนุษย์เป็นผู้ตัดสินใจ
ค่าที่หายไปคือความเป็นจริงของทุกชุดข้อมูล วิธีจัดการ:
- การลบ: ละทิ้งแถว/คอลัมน์ที่มีอัตราการขาดหายไปสูงมาก แต่มีความเสี่ยงที่ข้อมูลสูญหายและมีอคติ
- การใส่ร้าย: การใส่ร้ายด้วยค่าเฉลี่ย ค่ามัธยฐาน ค่าที่พบบ่อยที่สุด หรือการทำนายตามแบบจำลอง
- ตั้งค่าสถานะ: การจัดเก็บข้อมูล "หายไป" ในคอลัมน์แฟล็กแยกต่างหาก บางครั้งการที่หายไปอาจเป็นสัญญาณ
อันไหนถูกต้องขึ้นอยู่กับปัญหา ในชุดข้อมูลทางการแพทย์ ข้อมูล "ค่าเลือดที่ไม่ได้วัด" ควรได้รับการเก็บรักษาไว้แทนที่จะลบทิ้ง เพราะแม้แพทย์จะปฏิเสธการวัดก็ยังเป็นสัญญาณ AI สามารถให้ตัวเลือกและโค้ดแก่คุณได้ คุณเลือกอันที่เหมาะกับความเป็นจริงของสนาม
พรอมต์อ่อน / พรอมต์แข็งแกร่ง
พร้อมท์ที่อ่อนแอ: "เติมค่าที่หายไป"
ข้อความแจ้งที่รัดกุม: "มีค่าที่ขาดหายไปในคอลัมน์ต่อไปนี้: รายได้ (หายไป 12%, การแจกแจงแบบเบ้ขวา), Last_login (หายไป 30%) แนะนำให้กรอกรายได้ด้วยค่ามัธยฐาน แต่อธิบายว่าเหตุใดค่ามัธยฐานและไม่ได้หมายความว่า สำหรับ Last_login ถือว่าค่าที่หายไปอาจมีนัยสำคัญ (ผู้ใช้อาจไม่เคยเข้าสู่ระบบ) ให้พิจารณาสร้างแฟล็ก never_logged_in แทนการลบ เขียนความลำเอียงที่วิธีใดวิธีหนึ่งจะเพิ่มลงในโมเดล"
ความแตกต่าง: พรอมต์ที่แข็งแกร่งให้ข้อมูลการกระจายและความหมายของพื้นที่ ปัญญาประดิษฐ์สร้างการสนับสนุนการตัดสินใจแทนการเติมเชิงกล
การติดฉลาก: คุณภาพคือการวัด
ในการเรียนรู้แบบมีผู้สอน (การเรียนรู้โดยให้ตัวอย่างพร้อมคำตอบที่ถูกต้อง) สิ่งที่โมเดลเรียนรู้คือป้ายกำกับ (ป้ายกำกับ: คำตอบที่ถูกต้องสำหรับแต่ละตัวอย่าง) คุณภาพฉลากกำหนดเพดาน — หากผู้คนติดป้ายกำกับไม่สอดคล้อง โมเดลจะเรียนรู้ไม่สอดคล้องกัน
ข้อตกลงระหว่างผู้อธิบายประกอบจะวัดอัตราที่บุคคลต่างๆ ให้ป้ายกำกับเดียวกันแก่กลุ่มตัวอย่างเดียวกัน แสดงเป็นค่าสัมประสิทธิ์ เช่น คัปปาของโคเฮน การปฏิบัติตามข้อกำหนดต่ำแสดงว่างานไม่ชัดเจนหรือคำสั่งไม่ชัดเจน
ปัญญาประดิษฐ์ช่วยในการติดป้ายกำกับได้สองวิธี: (1) การร่างแนวทางคำอธิบายประกอบ (2) การติดป้ายกำกับล่วงหน้า และการให้มนุษย์แก้ไขเท่านั้น แต่การติดฉลากล่วงหน้าด้วย LLM มีอันตราย: ข้อผิดพลาดอย่างเป็นระบบของแบบจำลองอาจรั่วไหลไปยังชุดฉลากทั้งหมดได้ นั่นเป็นเหตุผลที่มนุษย์ตรวจสอบฉลาก LLM บางส่วนอยู่เสมอ
ข้อควรสนใจ: อย่าถือว่าฉลากที่ผลิตโดย LLM เป็น "ความจริงจากการภาคพื้นดิน" ตรวจสอบตัวอย่างกับมนุษย์และวัด LLM-ความพอดีของมนุษย์ หากการปฏิบัติตามข้อกำหนดต่ำ การติดฉลากล่วงหน้าจะให้ผลเสียมากกว่าผลดี
พาร์ติชั่นข้อมูล: ป้องกันการรั่วไหล
ข้อผิดพลาดที่อันตรายที่สุดเมื่อแบ่งข้อมูลออกเป็นการฝึกอบรม/การตรวจสอบความถูกต้อง/การทดสอบคือข้อมูลรั่วไหล: การผสมข้อมูลการทดสอบเข้ากับการฝึกอบรม ตัวอย่าง:
- บันทึกของผู้ใช้คนเดียวกันจัดอยู่ในทั้งการฝึกอบรมและการทดสอบ (การรั่วไหลของกลุ่ม)
- ใช้อนาคตในการฝึกอบรมและอดีตในการทดสอบอนุกรมเวลา (การรั่วไหลชั่วคราว)
- การคำนวณพารามิเตอร์มาตราส่วน (การทำให้เป็นมาตรฐาน) จากข้อมูลทั้งหมดแล้วหาร
การแบ่งเวลาเป็นสิ่งสำคัญสำหรับปัญหาเกี่ยวกับเวลา: ฝึกฝนกับอดีต ทดสอบในอนาคต การแยกแบบสุ่มให้ประโยชน์ "ในอนาคต" ที่จะไม่เกิดขึ้นในการใช้งานจริง และทำให้หน่วยวัดสูงเกินจริง
การกำหนดเวอร์ชันข้อมูลและการทำซ้ำ
“เราใช้ข้อมูลอะไรในการฝึกโมเดลนี้” ความสามารถในการตอบคำถามหลายเดือนต่อมาถือเป็นจุดเด่นของวิศวกรรม ML ที่จริงจัง การกำหนดเวอร์ชันข้อมูลจะจัดเก็บสแนปชอตข้อมูลแต่ละรายการด้วย ID (แฮชหรือแท็กเวอร์ชัน) เครื่องมือเช่นข้อมูลเวอร์ชัน DVC (การควบคุมเวอร์ชันข้อมูล) เช่นโค้ด
หากต้องการสร้างผลลัพธ์ของแบบจำลองขึ้นมาใหม่ จะต้องแก้ไขสามสิ่งต่อไปนี้: เวอร์ชันข้อมูล เวอร์ชันโค้ด และเมล็ดแบบสุ่ม เป็นไปไม่ได้ที่จะพูดว่า "ฉันได้ผลลัพธ์แบบเดียวกัน" หากไม่มีทั้งสามคนนี้ เราจะเพิ่มความสามารถในการทำซ้ำให้ลึกซึ้งยิ่งขึ้นในหน่วยที่ 11 แต่การแก้ไขเมล็ดในไปป์ไลน์ข้อมูลเริ่มต้นจากที่นี่
มินิเคสสามอัน
กรณีที่ 1 - บันทึกการตรวจสอบสคีมาของวันแล้ว เมื่อทีมแปลงช่องราคาของระบบอัปสตรีมจากเพนนีเป็นลีรา ราคาทั้งหมดก็ลดลง 100 เท่า การตรวจสอบสคีมาปฏิเสธชุดงานเนื่องจาก "ราคาอยู่นอกช่วง" และแบบจำลองไม่ได้รับการฝึกฝนกับข้อมูลที่เสียหาย หากไม่มีการตรวจสอบ ข้อผิดพลาดจะสังเกตเห็นได้เฉพาะในการผลิตเท่านั้น โดยมีการคาดการณ์ที่ไม่ถูกต้อง
กรณีที่ 2 - อคติของการเติมที่ไม่ถูกต้อง ในรูปแบบเครดิต มูลค่ารายได้ที่หายไปถูกเติมด้วยค่าเฉลี่ย แต่รายได้ที่ขาดไปส่วนใหญ่อยู่ในกลุ่มผู้มีรายได้น้อย การเฉลี่ยกลุ่มนี้ "เสริมคุณค่า" โดยไม่ตั้งใจ และแบบจำลองดังกล่าวเสนอขีดจำกัดที่สูงอย่างไม่ยุติธรรม แก้ไขปัญหาด้วยค่ามัธยฐาน + ค่าสถานะหายไป
กรณีที่ 3 - การรั่วไหลชั่วคราว โมเดลการคาดการณ์ความต้องการดูดีในชุดทดสอบ (ความแม่นยำ 95%) แต่เกิดข้อขัดข้องในการใช้งานจริง เหตุผล: เนื่องจากการแยกแบบสุ่ม โมเดลจึงมองเห็นอนาคต การเปลี่ยนมาใช้ Temporal Binning ทำให้ความแม่นยำในการทดสอบลดลงเหลือ 78% แต่นั่นเป็นประสิทธิภาพที่แท้จริงและยังคงใช้งานจริงต่อไป
เทมเพลตที่คัดลอกได้
แบ่งชุดข้อมูลต่อไปนี้ออกเป็นสามชุด: การฝึกอบรม/การตรวจสอบ/การทดสอบ ข้อจำกัด: นี่คืออนุกรมเวลา ใช้การแบ่งชั่วคราว (ฝึกในอดีต ทดสอบในอนาคต) ป้องกันการรั่วไหลของแบตช์: มี `customer_id` เดียวกันในคลัสเตอร์เดียวเท่านั้น คำนวณพารามิเตอร์การปรับขนาดจากชุดการฝึกเท่านั้น จากนั้นนำไปใช้กับทั้งหมด พิมพ์จำนวนบรรทัดที่เหลืออยู่ในโค้ดในแต่ละขั้นตอน และเพิ่มการยืนยันที่จะตรวจสอบว่าไม่มีการรั่วไหล
เขียนแนวทางร่างคำอธิบายประกอบสำหรับงานติดป้ายกำกับนี้ งาน: [เช่น ติดป้ายรีวิวลูกค้าเชิงบวก/ลบ/เป็นกลาง] ชี้แจงกรณีที่เส้นเขตแดน: การเสียดสี อารมณ์ผสม วิธีติดป้ายกำกับรีวิวที่ไม่เกี่ยวข้องกับผลิตภัณฑ์ ให้ตัวอย่าง 5 ตัวอย่างและกรณีขอบที่ยาก 3 กรณีที่จะเพิ่มความสอดคล้องกันระหว่างแท็กเกอร์
สร้างรายการตรวจสอบความสามารถในการทำซ้ำสำหรับไปป์ไลน์ข้อมูลนี้:- เวอร์ชันข้อมูลควรได้รับการแก้ไขอย่างไร- ควรตั้งค่าเมล็ดสุ่มใดที่ใด- ควรบันทึกข้อมูลเมตาใด (แฮชข้อมูล จำนวนแถว วันที่) รหัสฐานของฉัน: [ภาษา/ห้องสมุด]
ตรวจสอบรหัสล้างนี้เพื่อดูข้อมูลรั่วไหล ดูสิ่งนี้โดยเฉพาะ: พารามิเตอร์การปรับขนาด/การเข้ารหัสถูกคำนวณก่อนที่จะแยกหรือไม่ มีสถิติใดบ้างที่คำนวณจากข้อมูลทั้งหมดหรือแค่การฝึกอบรม? รหัส: [รหัส]
ตารางการตัดสินใจ: กลยุทธ์คุณค่าที่ขาดหายไป
สถานะ
แนวทางที่แนะนำ
ทำไม
การกระจายเชิงตัวเลขและเบ้
เติมค่ามัธยฐาน
ค่าเฉลี่ยได้รับผลกระทบจากค่าผิดปกติ
ตัวเลขสมมาตร
เติมค่าเฉลี่ย
ปกป้องข้อมูล
ข้อบกพร่องอาจมีนัยสำคัญ
ตั้งค่าสถานะคอลัมน์ + การเติม
การขาดเป็นสัญญาณ
อัตราที่หายไป > 60%
คอลัมน์ประเมิน/ละทิ้ง
เสียงรบกวนมากเกินไป
เด็ดขาด
หมวดหมู่ "ไม่ทราบ"
ไม่สร้างเสียงข้างมากเทียม
ข้อผิดพลาดทั่วไป
- กำลังข้ามการยืนยัน หากไม่มีการควบคุมสคีมา ข้อมูลที่เสียหายจะแอบเข้ามาอย่างเงียบๆ
- ปรับขนาดก่อนที่จะแยก มันรั่วไหลสถิติการทดสอบไปสู่การศึกษา
- การใช้การแยกแบบสุ่มในอนุกรมเวลา มันสร้างตัวชี้วัดสูงปลอม
- เชื่อถือฉลาก LLM อย่างสุ่มสี่สุ่มห้า ข้อผิดพลาดที่เป็นระบบแพร่กระจายไปทั่วข้อมูล
- ไม่บันทึกเวอร์ชันข้อมูล คุณไม่สามารถสร้างผลลัพธ์ขึ้นมาใหม่ได้
- การเติมเชิงกลด้วยค่าเฉลี่ย โดยไม่สนใจความหมายของฟิลด์ และเพิ่มอคติ
โดยสรุป
ไปป์ไลน์ข้อมูลเป็นรากฐานของระบบ ML และสมควรได้รับความพยายามมากกว่าแบบจำลอง ใส่การยืนยันไว้ที่ด้านบน ตัดสินใจทำความสะอาดและติดฉลากด้วยความรู้ด้านโดเมน ป้องกันการรั่วไหล (กลุ่มและชั่วคราว) ในช่อง แก้ไขเวอร์ชันข้อมูลและเมล็ด AI สร้างโค้ดและแนวคิดในบรรทัดนี้ แต่ก็ขึ้นอยู่กับคุณที่จะตัดสินใจว่าจะประมวลผลข้อมูลใดและอย่างไร เนื่องจากการตัดสินใจที่ผิดพลาดทุกครั้งจะส่งต่อไปยังโมเดลเป็นข้อบกพร่องที่ซ่อนอยู่
งานสมัคร
เขียนรูปแบบการตรวจสอบความถูกต้อง (pandera/Great Expectations) บนชุดข้อมูลของคุณเอง และจงใจเพิ่มแถวที่ไม่ถูกต้องและแสดงว่าระบบตรวจพบ จากนั้นแบ่งข้อมูลชั่วคราวหรือเป็นกลุ่ม คำนวณพารามิเตอร์การปรับขนาดจากการฝึกเท่านั้น และตรวจสอบว่าไม่มีการรั่วไหลด้วยการยืนยัน เขียนเวอร์ชันข้อมูลและจำนวนแถวลงในไฟล์ข้อมูลเมตา
รายการตรวจสอบ
- [ ] การตรวจสอบสคีมาทำงานที่ด้านบนสุดของบรรทัด
- [ ] ฉันเลือกกลยุทธ์ค่าที่ขาดหายไปตามความหมายของฟิลด์ ฉันไม่ได้เติมด้วยวิธีกลไก
- [ ] ฉันวัดคุณภาพฉลาก (การปฏิบัติตามข้อกำหนด); ฉันตรวจสอบแท็ก LLM โดยมนุษย์
- [ ] ฉันป้องกันการรั่วไหลของกลุ่มและชั่วคราวในบานหน้าต่าง
- [ ] การปรับขนาด/การเข้ารหัสคำนวณจากชุดการฝึกเท่านั้น
- [ ] เวอร์ชันข้อมูล จำนวนแถว และค่าเริ่มต้นที่บันทึกไว้