คำตอบสั้นๆ: การประมวลผลล่วงหน้าของ AI คือชุดขั้นตอนที่ทำซ้ำได้ ซึ่งเปลี่ยนข้อมูลดิบที่มีความแปรปรวนสูงให้เป็นข้อมูลป้อนเข้าโมเดลที่สม่ำเสมอ รวมถึงการทำความสะอาด การเข้ารหัส การปรับขนาด การแบ่งคำ และการแปลงภาพ ขั้นตอนนี้มีความสำคัญ เพราะหากข้อมูลป้อนเข้าสำหรับการฝึกอบรมและข้อมูลป้อนเข้าสำหรับการใช้งานจริงแตกต่างกัน โมเดลอาจล้มเหลวโดยไม่มีการแจ้งเตือน หากขั้นตอนใด "เรียนรู้" พารามิเตอร์ ควรใช้กับข้อมูลฝึกอบรมเท่านั้นเพื่อหลีกเลี่ยงการรั่วไหล
การประมวลผลล่วงหน้าของ AI คือทุกสิ่งที่คุณทำกับข้อมูลดิบก่อน (และบางครั้งระหว่าง) การฝึกอบรมหรือการอนุมาน เพื่อให้โมเดลสามารถเรียนรู้จากข้อมูลนั้นได้ ไม่ใช่แค่ "การทำความสะอาด" เท่านั้น มันคือการทำความสะอาด การจัดรูปแบบ การปรับขนาด การเข้ารหัส การเพิ่มประสิทธิภาพ และการบรรจุข้อมูลให้เป็นรูปแบบที่สอดคล้องกัน ซึ่งจะไม่ทำให้โมเดลของคุณทำงานผิดพลาดในภายหลัง [1]
ประเด็นสำคัญ:
คำจำกัดความ : การประมวลผลล่วงหน้าจะแปลงตารางข้อมูลดิบ ข้อความ รูปภาพ และบันทึกต่างๆ ให้เป็นคุณลักษณะที่พร้อมใช้งานสำหรับแบบจำลอง
ความสม่ำเสมอ : ใช้การแปลงข้อมูลแบบเดียวกันทั้งในระหว่างการฝึกฝนและการอนุมานเพื่อป้องกันข้อผิดพลาดที่เกิดจากความไม่ตรงกัน
การรั่วไหล : ปรับใช้ตัวปรับขนาด ตัวเข้ารหัส และตัวแยกโทเค็นกับข้อมูลฝึกฝนเท่านั้น
ความสามารถในการทำซ้ำ : สร้างไปป์ไลน์ที่มีสถิติที่ตรวจสอบได้ ไม่ใช่ลำดับเซลล์ในสมุดบันทึกแบบเฉพาะกิจ
การตรวจสอบการผลิต : ติดตามความคลาดเคลื่อนและการเบี่ยงเบน เพื่อป้องกันไม่ให้ปัจจัยนำเข้าค่อยๆกัดกร่อนประสิทธิภาพ
บทความที่คุณอาจสนใจอ่านต่อหลังจากบทความนี้:
🔗 วิธีทดสอบโมเดล AI เพื่อประสิทธิภาพในโลกแห่งความเป็นจริง
วิธีการเชิงปฏิบัติเพื่อประเมินความถูกต้อง ความทนทาน และอคติได้อย่างรวดเร็ว.
🔗 การแปลงข้อความเป็นเสียงพูดเป็น AI คืออะไร และทำงานอย่างไร
อธิบายพื้นฐานของ TTS การใช้งานหลัก และข้อจำกัดทั่วไปในปัจจุบัน.
🔗 ปัจจุบัน AI สามารถอ่านลายมือเขียนหวัดได้อย่างแม่นยำหรือไม่
ครอบคลุมถึงความท้าทายในการจดจำ เครื่องมือที่ดีที่สุด และเคล็ดลับด้านความแม่นยำ.
🔗 AI มีความแม่นยำแค่ไหนในการทำภารกิจทั่วไป
วิเคราะห์ปัจจัยด้านความแม่นยำ เกณฑ์มาตรฐาน และความน่าเชื่อถือในโลกแห่งความเป็นจริง.
การประมวลผลข้อมูลเบื้องต้นของ AI ในภาษาที่เข้าใจง่าย (และสิ่งที่ไม่ใช่) 🤝
การประมวลผลข้อมูลเบื้องต้นสำหรับ AI คือการแปลงข้อมูลดิบ (ตาราง ข้อความ รูปภาพ บันทึก) ให้เป็นคุณลักษณะที่พร้อมใช้งานสำหรับโมเดล หากเปรียบเทียบข้อมูลดิบกับโรงรถที่รก การประมวลผลข้อมูลเบื้องต้นก็เหมือนกับการที่คุณติดป้ายกำกับกล่อง คัดแยกสิ่งของที่ชำรุด และจัดเรียงสิ่งต่างๆ ให้เป็นระเบียบ เพื่อให้คุณสามารถเดินผ่านได้อย่างปลอดภัย
ไม่ใช่ตัวแบบจำลองเอง แต่เป็นสิ่งต่างๆ ที่ทำให้แบบจำลองนั้นเป็นไปได้:
-
การแปลงหมวดหมู่ให้เป็นตัวเลข (หนึ่งร้อน, ลำดับ, เป็นต้น) [1]
-
การปรับขนาดช่วงตัวเลขขนาดใหญ่ให้เป็นช่วงที่เหมาะสม (การกำหนดมาตรฐาน ค่าต่ำสุด-สูงสุด ฯลฯ) [1]
-
การแยกข้อความออกเป็นรหัสอินพุต (และโดยปกติจะเป็นหน้ากากความสนใจ) [3]
-
การปรับขนาด/ครอบตัดภาพและการใช้การแปลงแบบกำหนดหรือแบบสุ่มอย่างเหมาะสม [4]
-
สร้างไปป์ไลน์ที่ทำซ้ำได้เพื่อให้การฝึกอบรมและอินพุต "ในชีวิตจริง" ไม่แตกต่างกันในลักษณะที่แนบเนียน [2]
ข้อควรจำเล็กน้อย: “การประมวลผลล่วงหน้า” รวมถึง ทุกสิ่งที่เกิดขึ้นอย่างสม่ำเสมอก่อนที่โมเดลจะเห็นข้อมูลป้อนเข้า ทีมบางทีมแบ่งขั้นตอนนี้ออกเป็น “การสร้างคุณลักษณะ” กับ “การทำความสะอาดข้อมูล” แต่ในความเป็นจริง เส้นแบ่งเหล่านั้นไม่ชัดเจน

เหตุใดการประมวลผลล่วงหน้าด้วย AI จึงมีความสำคัญมากกว่าที่หลายคนยอมรับ 😬
โมเดลคือเครื่องมือจับคู่รูปแบบ ไม่ใช่เครื่องมืออ่านใจ ถ้าข้อมูลป้อนเข้าไม่สอดคล้องกัน โมเดลก็จะเรียนรู้กฎที่ไม่สอดคล้องกัน นี่ไม่ใช่เชิงปรัชญา แต่เป็นความจริงที่เจ็บปวด.
การประมวลผลล่วงหน้าช่วยคุณได้ดังนี้:
-
ปรับปรุงเสถียรภาพการเรียนรู้ โดยการใส่คุณลักษณะลงในการแสดงผลที่ผู้ประมาณค่าสามารถใช้งานได้อย่างน่าเชื่อถือ (โดยเฉพาะอย่างยิ่งเมื่อมีการปรับขนาด/การเข้ารหัส) [1]
-
ลดสัญญาณรบกวน โดยทำให้ความเป็นจริงที่ยุ่งเหยิงดูเหมือนสิ่งที่แบบจำลองสามารถนำไปใช้สรุปได้ (แทนที่จะจดจำสิ่งผิดปกติเหล่านั้น)
-
ป้องกันโหมดความล้มเหลวเงียบๆ เช่น การรั่วไหลและความไม่ตรงกันระหว่างการฝึกอบรม/การให้บริการ (ประเภทที่ดู “ยอดเยี่ยม” ในการตรวจสอบ แต่กลับล้มเหลวอย่างสิ้นเชิงในการใช้งานจริง) [2]
-
เร่งความเร็วในการทำซ้ำ เพราะการแปลงที่ทำซ้ำได้นั้นดีกว่าการเขียนโค้ดแบบยุ่งเหยิงในสมุดบันทึกทุกวัน
นอกจากนี้ ประสิทธิภาพของโมเดลส่วนใหญ่ก็มาจากตรงนี้ด้วย มากจริงๆ บางครั้งก็รู้สึกไม่ยุติธรรม แต่ก็เป็นความจริง 🙃
อะไรคือสิ่งที่ทำให้ไปป์ไลน์การประมวลผลล่วงหน้า AI ที่ดี ✅
โดยทั่วไปแล้ว “การประมวลผลเบื้องต้นที่ดี” มักมีคุณสมบัติดังต่อไปนี้:
-
สามารถทำซ้ำได้ : ข้อมูลนำเข้าเหมือนกัน → ผลลัพธ์เหมือนกัน (ไม่มีความสุ่มแบบไม่ทราบสาเหตุ เว้นแต่จะเป็นการเพิ่มจำนวนโดยเจตนา)
-
ความสอดคล้องระหว่างการฝึกฝนและการให้บริการ : สิ่งที่คุณทำในระหว่างการฝึกฝนจะถูกนำไปใช้ในลักษณะเดียวกันในระหว่างการอนุมาน (พารามิเตอร์ที่ปรับให้เหมาะสมเหมือนกัน แผนที่หมวดหมู่เหมือนกัน การกำหนดค่าโทเคไนเซอร์เหมือนกัน ฯลฯ) [2]
-
ปลอดภัยจากการรั่วไหล : ไม่มีสิ่งใดในการประเมิน/ทดสอบที่มีผลต่อ
การติดตั้ง(จะกล่าวถึงกับดักนี้เพิ่มเติมในภายหลัง) [2] -
สังเกตได้ : คุณสามารถตรวจสอบสิ่งที่เปลี่ยนแปลงไปได้ (สถิติของฟีเจอร์ จำนวนข้อมูลที่หายไป จำนวนหมวดหมู่) ดังนั้นการแก้ไขข้อผิดพลาดจึงไม่ใช่แค่การคาดเดาอีกต่อไป
ถ้าการประมวลผลล่วงหน้าของคุณคือกลุ่มเซลล์ในสมุดบันทึกที่ชื่อว่า final_v7_really_final_ok … คุณก็คงเข้าใจดี มันใช้งานได้จนกระทั่งมันใช้งานไม่ได้ 😬
องค์ประกอบหลักของการประมวลผลล่วงหน้าของ AI 🧱
ลองนึกถึงขั้นตอนการเตรียมข้อมูลเบื้องต้นว่าเป็นชุดของส่วนประกอบพื้นฐานที่คุณนำมาประกอบกันเป็นกระบวนการทำงาน.
1) การทำความสะอาดและการตรวจสอบความถูกต้อง 🧼
งานที่ต้องทำโดยทั่วไป:
-
ลบรายการที่ซ้ำกัน
-
จัดการกับค่าที่หายไป (ตัดทิ้ง เติมค่าที่หายไป หรือแสดงค่าที่หายไปอย่างชัดเจน)
-
บังคับใช้ประเภท หน่วย และช่วง
-
ตรวจจับข้อมูลป้อนเข้าที่ผิดรูปแบบ
-
กำหนดรูปแบบข้อความให้เป็นมาตรฐาน (ช่องว่าง, กฎการใช้ตัวพิมพ์ใหญ่-เล็ก, ข้อกำหนดเฉพาะของยูนิโค้ด)
ส่วนนี้อาจไม่ดูหรูหรา แต่ช่วยป้องกันความผิดพลาดโง่ๆ ได้อย่างแน่นอน ผมพูดด้วยความหวังดี.
2) การเข้ารหัสข้อมูลเชิงหมวดหมู่ 🔤
โมเดลส่วนใหญ่ไม่สามารถใช้สตริงดิบๆ เช่น "red" หรือ "premium_user" ได้
แนวทางทั่วไป:
-
การเข้ารหัสแบบวันฮอต (หมวดหมู่ → คอลัมน์ไบนารี) [1]
-
การเข้ารหัสลำดับ (หมวดหมู่ → รหัสจำนวนเต็ม) [1]
สิ่งสำคัญไม่ใช่ว่า ตัวไหน แต่เป็นการที่การแมปยังคงสม่ำเสมอและไม่ “เปลี่ยนรูปร่าง” ระหว่างการฝึกและการอนุมาน นั่นคือวิธีที่คุณจะได้โมเดลที่ดูดีแบบออฟไลน์และทำงานผิดปกติแบบออนไลน์ [2]
3) การปรับขนาดและการทำให้เป็นมาตรฐานของฟีเจอร์ 📏
การปรับขนาดมีความสำคัญเมื่อฟีเจอร์ต่างๆ อยู่ในช่วงที่แตกต่างกันอย่างมาก.
สองผลงานคลาสสิก:
-
การทำให้เป็นมาตรฐาน : ลบค่าเฉลี่ยและปรับขนาดให้มีความแปรปรวนเป็นหนึ่ง [1]
-
การปรับขนาดแบบ Min-max : ปรับขนาดคุณลักษณะแต่ละอย่างให้อยู่ในช่วงที่กำหนด [1]
แม้ว่าคุณจะใช้โมเดลที่ "รับมือได้ในระดับหนึ่ง" ก็ตาม การปรับขนาดมักจะทำให้กระบวนการทำงานเข้าใจง่ายขึ้น และยากที่จะเกิดข้อผิดพลาดโดยไม่ตั้งใจ.
4) การสร้างฟีเจอร์ (หรือเรียกอีกอย่างว่า การโกงอย่างมีประโยชน์) 🧪
ตรงนี้คุณจะช่วยให้โมเดลทำงานได้ง่ายขึ้นโดยการสร้างสัญญาณที่ดีขึ้น:
-
อัตราส่วน (จำนวนคลิก / จำนวนการแสดงผล)
-
ช่วงเวลาการเลื่อน (N วันที่ผ่านมา)
-
จำนวน (เหตุการณ์ต่อผู้ใช้)
-
การแปลงลอการิทึมสำหรับการกระจายแบบหางหนา
การสร้างฟีเจอร์นั้นมีศิลปะอยู่ บางครั้งคุณอาจสร้างฟีเจอร์ขึ้นมา รู้สึกภูมิใจ...แต่สุดท้ายมันไม่ได้ผลอะไรเลย หรือแย่กว่านั้นคือมันกลับทำให้ผิดหวัง นั่นเป็นเรื่องปกติ อย่าไปผูกพันกับฟีเจอร์มากเกินไป เพราะมันไม่ได้รักคุณกลับหรอกนะ 😅
5) การแบ่งข้อมูลอย่างถูกวิธี ✂️
ฟังดูเหมือนเรื่องพื้นฐาน จนกระทั่งมันไม่ใช่เช่นนั้น:
-
การแบ่งแบบสุ่มสำหรับข้อมูล iid
-
การแบ่งตามเวลาสำหรับอนุกรมเวลา
-
การแบ่งกลุ่มเกิดขึ้นเมื่อเอนทิตีซ้ำกัน (ผู้ใช้ อุปกรณ์ ผู้ป่วย)
และที่สำคัญ: แบ่งก่อนปรับการประมวลผลล่วงหน้าที่เรียนรู้จากข้อมูล หากขั้นตอนการประมวลผลล่วงหน้าของคุณ "เรียนรู้" พารามิเตอร์ (เช่น ค่าเฉลี่ย คำศัพท์ แผนที่หมวดหมู่) จะต้องเรียนรู้จากข้อมูลการฝึกอบรมเท่านั้น [2]
การประมวลผลข้อมูลเบื้องต้นด้วย AI ตามประเภทข้อมูล: ตาราง ข้อความ รูปภาพ 🎛️
การประมวลผลล่วงหน้าจะเปลี่ยนแปลงรูปร่างไปตามข้อมูลที่คุณป้อนให้กับโมเดล.
ข้อมูลในรูปแบบตาราง (สเปรดชีต บันทึกข้อมูล ฐานข้อมูล) 📊
ขั้นตอนทั่วไป:
-
กลยุทธ์ค่าที่หายไป
-
การเข้ารหัสเชิงหมวดหมู่ [1]
-
การปรับขนาดคอลัมน์ตัวเลข [1]
-
การจัดการค่าผิดปกติ (กฎของโดเมนดีกว่าการ "ตัดค่าแบบสุ่ม" ในกรณีส่วนใหญ่)
-
คุณลักษณะที่ได้มา (การรวมกลุ่ม, ความล่าช้า, สถิติแบบหมุนเวียน)
คำแนะนำที่เป็นประโยชน์: กำหนดกลุ่มคอลัมน์ให้ชัดเจน (ตัวเลข เทียบกับ หมวดหมู่ เทียบกับ ตัวระบุ) ตัวคุณในอนาคตจะขอบคุณคุณแน่นอน.
ข้อมูลข้อความ (NLP) 📝
การประมวลผลข้อความเบื้องต้นมักประกอบด้วย:
-
การแยกคำออกเป็นโทเค็น/คำย่อย
-
การแปลงเป็น รหัสอินพุต
-
การเติม/การตัดทอน
-
การสร้าง หน้ากากความสนใจ สำหรับการจัดกลุ่ม [3]
กฎเล็กๆ ที่ช่วยลดความยุ่งยาก: สำหรับการตั้งค่าแบบ Transformer ให้ปฏิบัติตามการตั้งค่าโทเคไนเซอร์ที่โมเดลกำหนดไว้ และอย่าปรับเปลี่ยนเองโดยไม่มีเหตุผล การปรับเปลี่ยนเองจะทำให้คุณได้ผลลัพธ์ที่ว่า "มันฝึกได้แต่แปลกๆ"
ภาพ (คอมพิวเตอร์วิชั่น) 🖼️
ขั้นตอนการประมวลผลเบื้องต้นโดยทั่วไป:
-
ปรับขนาด/ตัดขอบให้ได้รูปทรงที่สม่ำเสมอ
-
การแปลงเชิงกำหนดสำหรับการประเมินผล
-
การแปลงแบบสุ่มสำหรับการเพิ่มประสิทธิภาพการฝึกอบรม (เช่น การตัดแบบสุ่ม) [4]
รายละเอียดหนึ่งที่คนมักมองข้าม: “การแปลงแบบสุ่ม” ไม่ใช่แค่ความรู้สึก แต่เป็นการสุ่มตัวอย่างพารามิเตอร์ทุกครั้งที่มีการเรียกใช้ เหมาะสำหรับการฝึกฝนที่หลากหลาย แต่แย่มากสำหรับการประเมินผลหากคุณลืมปิดการสุ่ม [4]
กับดักที่ทุกคนตกหลุมพราง: การรั่วไหลของข้อมูล 🕳️🐍
การรั่วไหลเกิดขึ้นเมื่อข้อมูลจากข้อมูลการประเมินผลแอบเข้าไปในข้อมูลการฝึกฝน ซึ่งมักเกิดขึ้นผ่านขั้นตอนการประมวลผลล่วงหน้า สิ่งนี้อาจทำให้โมเดลของคุณดูดีเยี่ยมในระหว่างการตรวจสอบความถูกต้อง แต่กลับทำให้คุณผิดหวังในโลกแห่งความเป็นจริง.
รูปแบบการรั่วไหลที่พบได้ทั่วไป:
-
การปรับขนาดโดยใช้สถิติชุดข้อมูลทั้งหมด (แทนที่จะใช้เฉพาะการฝึกอบรม) [2]
-
การสร้างแผนที่หมวดหมู่โดยใช้การฝึกฝนและการทดสอบร่วมกัน [2]
-
fit()หรือfit_transform()ใดๆ ที่ “มองเห็น” ชุดทดสอบ [2]
หลักการง่ายๆ (ตรงไปตรงมา แต่ได้ผล):
-
อุปกรณ์ใดๆ ที่มี สำหรับฝึกความกระชับ ควรใช้สำหรับการฝึกซ้อมเท่านั้น
-
จากนั้นคุณ แปลง การตรวจสอบ/ทดสอบโดยใช้ตัวแปลงที่เหมาะสมนั้น [2]
และหากคุณต้องการตรวจสอบแบบคร่าวๆ ว่า “มันจะแย่แค่ไหนกันเชียว?” เอกสารของ scikit-learn เองก็แสดงตัวอย่างการรั่วไหลที่ลำดับการประมวลผลล่วงหน้าที่ไม่ถูกต้องทำให้ความแม่นยำอยู่ที่ประมาณ 0.76 บนเป้าหมายแบบสุ่ม จากนั้นลดลงเหลือประมาณ 0.5 เมื่อแก้ไขการรั่วไหลแล้ว นั่นแสดงให้เห็นว่าการรั่วไหลที่ผิดพลาดนั้นดูน่าเชื่อถือเพียงใด [2]
นำขั้นตอนการประมวลผลเบื้องต้นเข้าสู่กระบวนการผลิตได้อย่างราบรื่นโดยไม่เกิดความวุ่นวาย 🏗️
โมเดลจำนวนมากไม่ประสบความสำเร็จในการใช้งานจริง ไม่ใช่เพราะโมเดลนั้น "ไม่ดี" แต่เป็นเพราะ ความเป็นจริงของข้อมูลป้อนเข้า เปลี่ยนแปลงไป หรือกระบวนการทำงานของคุณเปลี่ยนไป
การประมวลผลข้อมูลเบื้องต้นที่มุ่งเน้นการผลิตมักประกอบด้วย:
-
บันทึกอาร์ติแฟกต์ (การแมปตัวเข้ารหัส พารามิเตอร์สเกลเลอร์ การกำหนดค่าโทเคไนเซอร์) เพื่อให้การอนุมานใช้การแปลงที่เรียนรู้แบบเดียวกันเป๊ะ [2]
-
ข้อกำหนดการรับข้อมูลที่เข้มงวด (คอลัมน์/ประเภท/ช่วงที่คาดหวัง)
-
การตรวจสอบความเบี่ยงเบนและการเคลื่อนตัว เนื่องจากข้อมูลการผลิต จะ มีการเปลี่ยนแปลง [5]
หากคุณต้องการคำจำกัดความที่ชัดเจน: การตรวจสอบโมเดล Vertex AI ของ Google แยกความแตกต่างระหว่าง ความเบี่ยงเบนในการให้บริการการฝึกอบรม (การกระจายการผลิตเบี่ยงเบนจากการฝึกอบรม) และ การเคลื่อนตัวของการอนุมาน (การกระจายการผลิตเปลี่ยนแปลงไปตามเวลา) และรองรับการตรวจสอบทั้งคุณลักษณะเชิงหมวดหมู่และเชิงตัวเลข [5]
เพราะเรื่องเซอร์ไพรส์นั้นมีราคาแพง และไม่ใช่เรื่องเซอร์ไพรส์ที่สนุกสนานด้วย.
ตารางเปรียบเทียบ: เครื่องมือประมวลผลล่วงหน้าและการตรวจสอบทั่วไป (และเหมาะสำหรับใคร) 🧰
| เครื่องมือ / ไลบรารี | เหมาะที่สุดสำหรับ | ราคา | เหตุผลที่มันได้ผล (และความซื่อสัตย์เล็กน้อย) |
|---|---|---|---|
| การประมวลผลล่วงหน้าของ scikit-learn | ไปป์ไลน์ ML แบบตาราง | ฟรี | ตัวเข้ารหัสแบบแข็ง + ตัวปรับขนาด (OneHotEncoder, StandardScaler เป็นต้น) และพฤติกรรมที่คาดเดาได้ [1] |
| ตัวสร้างโทเค็นรูปหน้ากอด | การเตรียมข้อมูลป้อนเข้าสำหรับ NLP | ฟรี | สร้างรหัสอินพุต + หน้ากากความสนใจอย่างสม่ำเสมอในทุกรอบ/โมเดล [3] |
| torchvision เปลี่ยนแปลง | การมองเห็นเปลี่ยนแปลง + เสริมประสิทธิภาพ | ฟรี | วิธีที่เรียบร้อยในการผสมการแปลงแบบกำหนดและแบบสุ่มในไปป์ไลน์เดียว [4] |
| การตรวจสอบโมเดล AI ของ Vertex | การตรวจจับการเบี่ยงเบน/การคลาดเคลื่อนในสภาพแวดล้อมการผลิต | ชำระเงิน (ระบบคลาวด์) | มอนิเตอร์มีคุณสมบัติการเบี่ยงเบน/การเลื่อน และแจ้งเตือนเมื่อเกินเกณฑ์ [5] |
(ใช่แล้ว โต๊ะนี้ก็ยังมีความคิดเห็นอยู่ แต่เป็นความคิดเห็นที่ตรงไปตรงมานะ 😅)
รายการตรวจสอบการเตรียมข้อมูลที่ใช้งานได้จริง 📌
ก่อนการฝึกซ้อม
-
กำหนดรูปแบบข้อมูลขาเข้า (ประเภท หน่วย ช่วงที่อนุญาต)
-
ตรวจสอบค่าที่หายไปและข้อมูลซ้ำซ้อน
-
แบ่งข้อมูลอย่างถูกวิธี (แบบสุ่ม / ตามเวลา / ตามกลุ่ม)
-
การประมวลผลล่วงหน้าที่เหมาะสมกับ การฝึกอบรมเท่านั้น (
fit/fit_transformยังคงอยู่กับการฝึกอบรม) [2] -
บันทึกสิ่งประดิษฐ์การประมวลผลล่วงหน้าเพื่อให้การอนุมานสามารถนำกลับมาใช้ใหม่ได้ [2]
ระหว่างการฝึกอบรม
-
ใช้การเพิ่มประสิทธิภาพแบบสุ่มเฉพาะเมื่อเหมาะสม (โดยปกติจะใช้เฉพาะการแบ่งการฝึกอบรมเท่านั้น) [4]
-
รักษาการประมวลผลล่วงหน้าของการประเมินให้เป็นแบบกำหนด [4]
-
ติดตามการเปลี่ยนแปลงการประมวลผลล่วงหน้า เช่น การเปลี่ยนแปลงโมเดล (เพราะมันเป็นเช่นนั้นจริงๆ)
ก่อนการใช้งานจริง
-
ตรวจสอบให้แน่ใจว่าการอนุมานใช้เส้นทางการประมวลผลล่วงหน้าและสิ่งประดิษฐ์ที่เหมือนกัน [2]
-
ตั้งค่าการตรวจสอบการเบี่ยงเบน/ความเอียง (แม้แต่การตรวจสอบการกระจายคุณลักษณะพื้นฐานก็มีประโยชน์มาก) [5]
เจาะลึก: ข้อผิดพลาดทั่วไปในการประมวลผลข้อมูลเบื้องต้น (และวิธีหลีกเลี่ยง) 🧯
ความผิดพลาดข้อที่ 1: “เดี๋ยวฉันก็จะทำให้ทุกอย่างกลับสู่สภาวะปกติได้อย่างรวดเร็ว” 😵
หากคุณคำนวณพารามิเตอร์การปรับขนาดบนชุดข้อมูลทั้งหมด คุณกำลังเปิดเผยข้อมูลการประเมิน ฝึกฝนบนชุดข้อมูลฝึกฝน แล้วแปลงส่วนที่เหลือ [2]
ข้อผิดพลาดที่ 2: การจัดหมวดหมู่ที่สับสนวุ่นวาย 🧩
หากการแมปหมวดหมู่ของคุณเปลี่ยนไประหว่างการฝึกอบรมและการอนุมาน โมเดลของคุณอาจอ่านโลกผิดพลาดโดยไม่รู้ตัว รักษาการแมปให้คงที่ผ่านอาร์ติแฟกต์ที่บันทึกไว้ [2]
ข้อผิดพลาดที่ 3: การสุ่มเพิ่มข้อมูลเข้าไปในการประเมินผล 🎲
การแปลงแบบสุ่มนั้นยอดเยี่ยมในการฝึกอบรม แต่ไม่ควรเปิดใช้งานแบบลับๆ เมื่อคุณพยายามวัดประสิทธิภาพ (สุ่มก็คือสุ่ม) [4]
ข้อคิดส่งท้าย 🧠✨
การประมวลผลล่วงหน้าสำหรับ AI คือศิลปะอันมีระเบียบวินัยในการเปลี่ยนความเป็นจริงที่ยุ่งเหยิงให้กลายเป็นข้อมูลป้อนเข้าโมเดลที่สอดคล้องกัน ครอบคลุมถึงการทำความสะอาด การเข้ารหัส การปรับขนาด การแบ่งคำ การแปลงภาพ และที่สำคัญที่สุดคือไปป์ไลน์และผลลัพธ์ที่ทำซ้ำได้
-
ดำเนินการประมวลผลล่วงหน้าอย่างรอบคอบ ไม่ใช่ทำแบบสุ่ม [2]
-
แยกก่อน ปรับให้เข้ากับการฝึกเท่านั้น หลีกเลี่ยงการรั่วไหล [2]
-
ใช้การประมวลผลล่วงหน้าที่เหมาะสมกับรูปแบบ (โทเคไนเซอร์สำหรับข้อความ การแปลงสำหรับรูปภาพ) [3][4]
-
ตรวจสอบความเบี่ยงเบน/การเคลื่อนตัวของการผลิตเพื่อไม่ให้โมเดลของคุณค่อยๆ เคลื่อนตัวไปสู่ความไร้สาระ [5]
และถ้าคุณติดขัด ให้ถามตัวเองว่า
“ขั้นตอนการประมวลผลล่วงหน้านี้จะยังคงเหมาะสมอยู่ไหม ถ้าฉันนำไปใช้กับข้อมูลใหม่ในวันพรุ่งนี้?”
ถ้าคำตอบคือ “อืม… อาจจะ?” นั่นแหละคือเบาะแสของคุณ 😬
คำถามที่พบบ่อย
อธิบายง่ายๆ คือ การประมวลผลล่วงหน้าด้วย AI คืออะไร?
การประมวลผลล่วงหน้าของ AI คือชุดขั้นตอนที่ทำซ้ำได้ ซึ่งเปลี่ยนข้อมูลดิบที่มีสัญญาณรบกวนและมีความแปรปรวนสูงให้เป็นข้อมูลป้อนเข้าที่สม่ำเสมอซึ่งแบบจำลองสามารถเรียนรู้ได้ ขั้นตอนนี้อาจรวมถึงการทำความสะอาด การตรวจสอบความถูกต้อง การเข้ารหัสหมวดหมู่ การปรับขนาดค่าตัวเลข การแยกคำในข้อความ และการแปลงภาพ เป้าหมายคือเพื่อให้แน่ใจว่าการฝึกฝนและการอนุมานในขั้นตอนการผลิตเห็นข้อมูลป้อนเข้า "ประเภทเดียวกัน" เพื่อป้องกันไม่ให้แบบจำลองแสดงพฤติกรรมที่ไม่สามารถคาดเดาได้ในภายหลัง.
เหตุใดการประมวลผลล่วงหน้าด้วย AI จึงมีความสำคัญอย่างยิ่งในขั้นตอนการผลิต?
การประมวลผลล่วงหน้ามีความสำคัญ เพราะโมเดลมีความไวต่อรูปแบบการนำเสนอข้อมูล หากข้อมูลฝึกฝนถูกปรับขนาด เข้ารหัส แยกเป็นโทเค็น หรือแปลงแตกต่างจากข้อมูลใช้งานจริง คุณอาจพบข้อผิดพลาดที่ไม่ตรงกันระหว่างการฝึกฝนและการใช้งาน ซึ่งดูเหมือนจะปกติดีในแบบออฟไลน์ แต่กลับล้มเหลวอย่างเงียบๆ ในแบบออนไลน์ กระบวนการประมวลผลล่วงหน้าที่แข็งแกร่งยังช่วยลดสัญญาณรบกวน ปรับปรุงเสถียรภาพการเรียนรู้ และเร่งความเร็วในการทำซ้ำ เนื่องจากคุณไม่ต้องเสียเวลาไปกับการแก้ปัญหาโค้ดที่ซับซ้อนในโน้ตบุ๊ก.
ฉันจะป้องกันการรั่วไหลของข้อมูลระหว่างการประมวลผลล่วงหน้าได้อย่างไร?
กฎง่ายๆ ข้อหนึ่งคือ: ทุกอย่างที่มี ปรับให้เหมาะสม (fit step) จะต้องปรับให้เหมาะสมกับข้อมูลฝึกฝนเท่านั้น ซึ่งรวมถึงตัวปรับขนาด (scalers), ตัวเข้ารหัส (encoders) และตัวแยกคำ (tokenisers) ที่เรียนรู้พารามิเตอร์ต่างๆ เช่น ค่าเฉลี่ย แผนที่หมวดหมู่ หรือคำศัพท์ คุณต้องแบ่งข้อมูลก่อน ปรับให้เหมาะสมกับข้อมูลฝึกฝน จากนั้นแปลงข้อมูลตรวจสอบ/ทดสอบโดยใช้ตัวแปลงที่ปรับให้เหมาะสมแล้ว การรั่วไหลของข้อมูลอาจทำให้ข้อมูลตรวจสอบดูดีอย่างน่าอัศจรรย์ แต่กลับล้มเหลวในการใช้งานจริง
ขั้นตอนการประมวลผลล่วงหน้าที่พบบ่อยที่สุดสำหรับข้อมูลในรูปแบบตารางมีอะไรบ้าง?
สำหรับข้อมูลในรูปแบบตาราง กระบวนการประมวลผลทั่วไปจะรวมถึงการทำความสะอาดและตรวจสอบความถูกต้อง (ประเภท ช่วง ค่าที่หายไป) การเข้ารหัสข้อมูลเชิงหมวดหมู่ (one-hot หรือ ordinal) และการปรับขนาดข้อมูลเชิงตัวเลข (การทำให้เป็นมาตรฐานหรือ min-max) หลายกระบวนการจะเพิ่มการสร้างคุณลักษณะเฉพาะด้าน เช่น อัตราส่วน หน้าต่างเลื่อน หรือจำนวนนับ วิธีปฏิบัติที่ดีคือการกำหนดกลุ่มคอลัมน์อย่างชัดเจน (ตัวเลข เทียบกับเชิงหมวดหมู่ เทียบกับตัวระบุ) เพื่อให้การแปลงข้อมูลมีความสอดคล้องกัน.
กระบวนการเตรียมข้อมูลเบื้องต้นสำหรับโมเดลข้อความทำงานอย่างไร?
การประมวลผลข้อความเบื้องต้นโดยทั่วไปหมายถึงการแบ่งข้อความออกเป็นโทเค็น/คำย่อย การแปลงโทเค็นเหล่านั้นเป็นรหัสประจำตัวอินพุต และการจัดการการเติม/ตัดคำเพื่อการประมวลผลแบบกลุ่ม เวิร์กโฟลว์ของ Transformer หลายๆ แบบยังสร้างมาสก์ความสนใจควบคู่ไปกับรหัสประจำตัวด้วย แนวทางทั่วไปคือการใช้การกำหนดค่าตัวแบ่งโทเค็นที่คาดหวังของโมเดลแทนที่จะปรับแต่งเอง เพราะความแตกต่างเล็กน้อยในการตั้งค่าตัวแบ่งโทเค็นอาจนำไปสู่ผลลัพธ์ที่ว่า “ฝึกฝนได้ แต่พฤติกรรมไม่แน่นอน”.
การประมวลผลภาพเบื้องต้นสำหรับแมชชีนเลิร์นนิงแตกต่างจากการประมวลผลภาพทั่วไปอย่างไร?
การประมวลผลภาพเบื้องต้นมักจะช่วยให้รูปร่างและการจัดการพิกเซลมีความสม่ำเสมอ เช่น การปรับขนาด/การตัดภาพ การทำให้เป็นมาตรฐาน และการแบ่งแยกที่ชัดเจนระหว่างการแปลงแบบกำหนดและแบบสุ่ม สำหรับการประเมินผล การแปลงควรเป็นแบบกำหนดเพื่อให้สามารถเปรียบเทียบตัวชี้วัดได้ สำหรับการฝึกฝน การเพิ่มข้อมูลแบบสุ่ม (เช่น การตัดภาพแบบสุ่ม) สามารถเพิ่มความทนทานได้ แต่ความสุ่มนั้นจะต้องจำกัดไว้เฉพาะการฝึกฝนเท่านั้น ไม่ควรเปิดใช้งานโดยไม่ได้ตั้งใจในระหว่างการประเมินผล.
อะไรทำให้ไปป์ไลน์การประมวลผลล่วงหน้า "ดี" แทนที่จะเปราะบาง?
ไปป์ไลน์การประมวลผลล่วงหน้าของ AI ที่ดีนั้นต้องสามารถทำซ้ำได้ ปลอดภัยจากการรั่วไหล และตรวจสอบได้ การทำซ้ำได้หมายความว่าข้อมูลป้อนเข้าเดียวกันจะให้ผลลัพธ์เดียวกัน เว้นแต่ว่ามีการสุ่มเพื่อเพิ่มข้อมูลโดยเจตนา ปลอดภัยจากการรั่วไหลหมายความว่าขั้นตอนการปรับให้เหมาะสมจะไม่แตะต้องขั้นตอนการตรวจสอบ/ทดสอบ ตรวจสอบได้หมายความว่าคุณสามารถตรวจสอบสถิติต่างๆ เช่น ข้อมูลที่หายไป จำนวนหมวดหมู่ และการกระจายของคุณลักษณะ เพื่อให้การแก้ไขข้อผิดพลาดอยู่บนพื้นฐานของหลักฐาน ไม่ใช่ความรู้สึก ไปป์ไลน์ดีกว่าลำดับการเขียนโน้ตบุ๊กแบบเฉพาะกิจทุกครั้ง.
ฉันจะรักษาความสอดคล้องของกระบวนการฝึกฝนและการประมวลผลล่วงหน้าสำหรับการอนุมานได้อย่างไร?
หัวใจสำคัญคือการนำสิ่งที่เรียนรู้มาแล้วกลับมาใช้ซ้ำในขั้นตอนการอนุมานอย่างแม่นยำ เช่น พารามิเตอร์ของตัวปรับขนาด การแมปของตัวเข้ารหัส และการกำหนดค่าของตัวแยกคำ นอกจากนี้ คุณยังต้องการข้อตกลงอินพุต (คอลัมน์ ประเภท และช่วงที่คาดหวัง) เพื่อป้องกันไม่ให้ข้อมูลจริงเปลี่ยนแปลงไปเป็นรูปร่างที่ไม่ถูกต้องโดยไม่รู้ตัว ความสม่ำเสมอไม่ได้หมายถึงแค่ "ทำตามขั้นตอนเดิม" แต่หมายถึง "ทำตามขั้นตอนเดิมด้วยพารามิเตอร์และการแมปที่ปรับให้เหมาะสมแล้วเหมือนเดิม"
ฉันจะตรวจสอบปัญหาการประมวลผลล่วงหน้า เช่น การเบี่ยงเบนและการบิดเบี้ยวเมื่อเวลาผ่านไปได้อย่างไร?
แม้จะมีระบบประมวลผลข้อมูลที่แข็งแกร่ง ข้อมูลการผลิตก็ยังเปลี่ยนแปลงได้ วิธีการทั่วไปคือการตรวจสอบการเปลี่ยนแปลงการกระจายคุณลักษณะ และแจ้งเตือนเมื่อเกิดความเบี่ยงเบนระหว่างข้อมูลฝึกฝนและข้อมูลใช้งาน (ข้อมูลการผลิตแตกต่างจากข้อมูลฝึกฝน) และการเบี่ยงเบนของการอนุมาน (ข้อมูลการผลิตเปลี่ยนแปลงไปตามเวลา) การตรวจสอบอาจทำได้ง่าย (เช่น การตรวจสอบการกระจายขั้นพื้นฐาน) หรือจัดการอย่างเป็นระบบ (เช่น Vertex AI Model Monitoring) เป้าหมายคือการตรวจจับการเปลี่ยนแปลงของข้อมูลป้อนเข้าตั้งแต่เนิ่นๆ ก่อนที่มันจะค่อยๆ บั่นทอนประสิทธิภาพของโมเดล.
เอกสารอ้างอิง
[1] API ของ scikit-learn:
sklearn.preprocessing (encoders, scalers, normalization) [2] scikit-learn: ข้อผิดพลาดทั่วไป - การรั่วไหลของข้อมูลและวิธีหลีกเลี่ยง
[3] เอกสาร Hugging Face Transformers: Tokenizers (รหัสอินพุต, หน้ากากความสนใจ)
[4] เอกสาร PyTorch Torchvision: Transforms (Resize/Normalize + random transforms)
[5] เอกสาร Google Cloud Vertex AI: ภาพรวมการตรวจสอบโมเดล (feature skew & drift)