การประมวลผลข้อมูลล่วงหน้าสำหรับ ML: ตัวเลือกและคำแนะนำ

เอกสารนี้เป็นเอกสารชุดแรกในชุดสองส่วนที่สำรวจหัวข้อวิศวกรรมข้อมูลและวิศวกรรมคุณลักษณะสำหรับการเรียนรู้ของเครื่อง (ML) โดยมุ่งเน้นที่งานการเรียนรู้แบบมีผู้สอน ส่วนแรกนี้กล่าวถึงแนวทางปฏิบัติที่ดีที่สุดสำหรับการประมวลผลข้อมูลล่วงหน้าในไปป์ไลน์ ML บน Google Cloud เอกสารนี้มุ่งเน้นไปที่การใช้ TensorFlow และไลบรารี TensorFlow Transform ( tf.Transform ) แบบโอเพนซอร์สเพื่อจัดเตรียมข้อมูล ฝึกโมเดล และให้บริการโมเดลสำหรับการคาดการณ์ เอกสารนี้เน้นย้ำถึงความท้าทายในการประมวลผลข้อมูลล่วงหน้าสำหรับ ML และอธิบายถึงตัวเลือกและสถานการณ์ในการดำเนินการเปลี่ยนแปลงข้อมูลบน Google Cloud อย่างมีประสิทธิภาพ

เอกสารนี้จะถือว่าคุณคุ้นเคยกับ BigQuery , Dataflow , Vertex AI และ TensorFlow Keras API

เอกสารที่สอง การประมวลผลข้อมูลล่วงหน้าสำหรับ ML ด้วย Google Cloud มีบทช่วยสอนทีละขั้นตอนเกี่ยวกับวิธีใช้งานไปป์ไลน์ tf.Transform

การแนะนำ

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

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

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

เอกสารนี้กล่าวถึงความท้าทายเหล่านี้สำหรับระดับรายละเอียดต่างๆ ของการดำเนินการทางวิศวกรรมฟีเจอร์: การรวมระดับอินสแตนซ์ แบบเต็ม และกรอบเวลา เอกสารนี้ยังอธิบายตัวเลือกและสถานการณ์ในการดำเนินการแปลงข้อมูลสำหรับ ML บน Google Cloud

เอกสารนี้ยังให้ภาพรวมของ TensorFlow Transform ( tf.Transform ) ซึ่งเป็นไลบรารีสำหรับ TensorFlow ที่ช่วยให้คุณกำหนดการแปลงข้อมูลทั้งระดับอินสแตนซ์และแบบเต็มผ่านไปป์ไลน์การประมวลผลข้อมูลล่วงหน้า ไปป์ไลน์เหล่านี้ดำเนินการด้วย Apache Beam และสร้างอาร์ติแฟกต์ที่ช่วยให้คุณใช้การแปลงเดียวกันระหว่างการคาดการณ์ได้เช่นเดียวกับเมื่อมีการให้บริการโมเดล

กำลังประมวลผลข้อมูลล่วงหน้าสำหรับ ML

ส่วนนี้จะแนะนำการดำเนินการประมวลผลข้อมูลล่วงหน้าและขั้นตอนความพร้อมของข้อมูล นอกจากนี้ยังกล่าวถึงประเภทของการดำเนินการก่อนการประมวลผลและรายละเอียดอีกด้วย

วิศวกรรมข้อมูลเปรียบเทียบกับวิศวกรรมฟีเจอร์

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

ข้อมูลดิบ (หรือเพียงแค่ data )
ข้อมูลในรูปแบบแหล่งที่มา โดยไม่ต้องเตรียม ML ล่วงหน้า ในบริบทนี้ ข้อมูลอาจอยู่ในรูปแบบดิบ (ใน Data Lake) หรือในรูปแบบที่ได้รับการแปลง (ในคลังข้อมูล) ข้อมูลที่แปลงแล้วซึ่งอยู่ในคลังข้อมูลอาจถูกแปลงจากรูปแบบดิบดั้งเดิมเพื่อใช้สำหรับการวิเคราะห์ อย่างไรก็ตาม ในบริบทนี้ ข้อมูลดิบ หมายความว่าข้อมูลไม่ได้จัดเตรียมไว้สำหรับงาน ML ของคุณโดยเฉพาะ ข้อมูลยังถือเป็นข้อมูลดิบหากส่งจากระบบสตรีมมิงที่เรียกโมเดล ML สำหรับการคาดการณ์ในที่สุด
ข้อมูลที่เตรียมไว้
ชุดข้อมูลในแบบฟอร์มที่พร้อมสำหรับงาน ML ของคุณ: แหล่งข้อมูลได้รับการแยกวิเคราะห์ เข้าร่วม และใส่ลงในแบบฟอร์มตาราง ข้อมูลที่จัดเตรียมไว้จะถูกรวบรวมและสรุปให้มีรายละเอียดที่เหมาะสม เช่น แต่ละแถวในชุดข้อมูลแสดงถึงลูกค้าที่ไม่ซ้ำใคร และแต่ละคอลัมน์แสดงถึงข้อมูลสรุปของลูกค้า เช่น ยอดใช้จ่ายทั้งหมดในช่วง 6 สัปดาห์ที่ผ่านมา ในตารางข้อมูลที่เตรียมไว้ คอลัมน์ที่ไม่เกี่ยวข้องจะถูกละทิ้ง และบันทึกที่ไม่ถูกต้องจะถูกกรองออก สำหรับงานการเรียนรู้ภายใต้การดูแล จะมีฟีเจอร์เป้าหมายอยู่
คุณสมบัติทางวิศวกรรม
ชุดข้อมูลที่มีคุณสมบัติที่ได้รับการปรับแต่งตามที่โมเดลคาดหวัง นั่นคือ คุณลักษณะที่สร้างขึ้นโดยการดำเนินการเฉพาะ ML บางอย่างบนคอลัมน์ในชุดข้อมูลที่เตรียมไว้ และสร้างคุณสมบัติใหม่สำหรับโมเดลของคุณระหว่างการฝึกและการทำนาย ตามที่อธิบายไว้ในภายหลัง ใน การดำเนินการเตรียมการประมวลผล ตัวอย่างของการดำเนินการเหล่านี้ ได้แก่ มาตราส่วนคอลัมน์ตัวเลขให้เป็นค่าระหว่าง 0 ถึง 1 ค่าการตัด และคุณลักษณะหมวดหมู่ การเข้ารหัสแบบร้อนแรง

แผนภาพต่อไปนี้ รูปที่ 1 แสดงขั้นตอนที่เกี่ยวข้องในการเตรียมข้อมูลที่ประมวลผลล่วงหน้า:

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

ในทางปฏิบัติ ข้อมูลจากแหล่งเดียวกันมักจะอยู่ในขั้นตอนความพร้อมที่แตกต่างกัน ตัวอย่างเช่น ฟิลด์จากตารางในคลังข้อมูลของคุณอาจถูกใช้เป็นคุณลักษณะทางวิศวกรรมโดยตรง ในเวลาเดียวกัน เขตข้อมูลอื่นในตารางเดียวกันอาจต้องผ่านการเปลี่ยนแปลงก่อนที่จะกลายเป็นคุณลักษณะทางวิศวกรรม ในทำนองเดียวกัน การดำเนินการด้านวิศวกรรมข้อมูลและวิศวกรรมคุณลักษณะอาจรวมกันในขั้นตอนการประมวลผลล่วงหน้าข้อมูลเดียวกัน

การดำเนินการประมวลผลล่วงหน้า

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

สำหรับข้อมูลที่มีโครงสร้าง การดำเนินการประมวลผลข้อมูลล่วงหน้ามีดังต่อไปนี้

  • การล้างข้อมูล: การลบหรือแก้ไขบันทึกที่มีค่าเสียหายหรือไม่ถูกต้องจากข้อมูลดิบ และลบบันทึกที่ขาดคอลัมน์จำนวนมาก
  • การเลือกอินสแตนซ์และการแบ่งพาร์ติชัน: การเลือกจุดข้อมูลจากชุดข้อมูลอินพุตเพื่อสร้าง การฝึกอบรม การประเมิน (การตรวจสอบความถูกต้อง) และชุดการทดสอบ กระบวนการนี้รวมถึงเทคนิคสำหรับการสุ่มตัวอย่างแบบทำซ้ำ การสุ่มตัวอย่างคลาสส่วนน้อยที่มากเกินไป และการแบ่งพาร์ติชันแบบแบ่งชั้น
  • การปรับแต่งคุณสมบัติ: การปรับปรุงคุณภาพของคุณสมบัติสำหรับ ML ซึ่งรวมถึงการปรับขนาดและการทำให้ค่าตัวเลขเป็นมาตรฐาน การใส่ค่าที่หายไป การตัดค่าผิดปกติ และการปรับค่าที่มีการแจกแจงที่บิดเบี้ยว
  • การแปลงคุณสมบัติ: การแปลงคุณสมบัติเชิงตัวเลขให้เป็นคุณสมบัติเชิงหมวดหมู่ (ผ่าน การเก็บข้อมูล ) และการแปลงคุณสมบัติเชิงหมวดหมู่เป็นการแสดงตัวเลข (ผ่านการเข้ารหัสแบบร้อนแรงเดียว การเรียนรู้ด้วยการนับ การฝังฟีเจอร์แบบกระจัดกระจาย ฯลฯ) บางรุ่นใช้งานได้กับคุณสมบัติตัวเลขหรือหมวดหมู่เท่านั้น ในขณะที่รุ่นอื่นๆ สามารถจัดการกับคุณสมบัติประเภทผสมได้ แม้ว่าโมเดลจะจัดการทั้งสองประเภท แต่ก็สามารถได้รับประโยชน์จากการแสดงที่แตกต่างกัน (ตัวเลขและหมวดหมู่) ของฟีเจอร์เดียวกัน
  • การดึงข้อมูลคุณลักษณะ: การลดจำนวนคุณลักษณะโดยการสร้างการแสดงข้อมูลที่มีขนาดต่ำกว่าและมีประสิทธิภาพมากขึ้นโดยใช้เทคนิคต่างๆ เช่น PCA การฝังการ แยก ข้อมูล และ การแฮช
  • การเลือกคุณสมบัติ: การเลือกชุดย่อยของคุณสมบัติอินพุตสำหรับการฝึกโมเดล และไม่สนใจคุณสมบัติที่ไม่เกี่ยวข้องหรือซ้ำซ้อน โดยใช้ วิธีกรองหรือ Wrapper การเลือกคุณสมบัติอาจเกี่ยวข้องกับการปล่อยคุณสมบัติหากคุณสมบัติขาดหายไปเป็นจำนวนมาก
  • การสร้างคุณลักษณะ: การสร้างคุณลักษณะใหม่โดยใช้เทคนิคทั่วไป เช่น การขยายพหุนาม (โดยใช้ฟังก์ชันทางคณิตศาสตร์ที่ไม่แปรเปลี่ยน) หรือ การข้ามคุณลักษณะ (เพื่อจับภาพการโต้ตอบของคุณลักษณะ) คุณสมบัติยังสามารถสร้างได้โดยใช้ตรรกะทางธุรกิจจากโดเมนของกรณีการใช้งาน ML

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

  • สำหรับเอกสารข้อความ: การย่อคำและย่อคำ การคำนวณ TF-IDF และการแยก n-gram การค้นหาแบบฝัง
  • สำหรับรูปภาพ: การตัด การปรับขนาด การครอบตัด การเบลอแบบเกาส์เซียน และตัวกรองคานารี
  • สำหรับข้อมูลทุกประเภท (รวมถึงข้อความและรูปภาพ): ถ่ายโอนการเรียนรู้ ซึ่งถือว่าเลเยอร์ทั้งหมดยกเว้นเลเยอร์สุดท้ายของโมเดลที่ผ่านการฝึกอบรมอย่างเต็มรูปแบบเป็นขั้นตอนทางวิศวกรรมฟีเจอร์

กำลังประมวลผลรายละเอียดล่วงหน้า

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

การดำเนินการก่อนการประมวลผลและการเปลี่ยนแปลงสามารถจัดประเภทได้ดังต่อไปนี้ โดยขึ้นอยู่กับความละเอียดของการดำเนินการ:

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

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

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

    ตัวอย่างเช่น ในการปรับคุณลักษณะตัวเลขให้เป็นมาตรฐานสำหรับการฝึก คุณจะต้องคำนวณค่าเฉลี่ย (μ) และค่าเบี่ยงเบนมาตรฐาน (σ) จากข้อมูลการฝึกทั้งหมด การคำนวณนี้เรียกว่าการดำเนินการ แบบเต็มรอบ (หรือ วิเคราะห์ ) เมื่อคุณให้บริการโมเดลสำหรับการคาดการณ์ ค่าของจุดข้อมูลใหม่จะถูกทำให้เป็นมาตรฐานเพื่อหลีกเลี่ยงการบิดเบือนการให้บริการการฝึก ดังนั้น ค่า μ และ σ ที่คำนวณระหว่างการฝึกจึงถูกนำมาใช้เพื่อปรับค่าฟีเจอร์ ซึ่งเป็นการดำเนินการ ระดับอินสแตนซ์ อย่างง่ายดังต่อไปนี้:

    $$ value_{scaled} = (value_{raw} - \mu) \div \sigma $$

    การแปลงฟูลพาสมีดังต่อไปนี้:

    • MinMax ปรับขนาดคุณสมบัติตัวเลขโดยใช้ ค่าต่ำสุด และ สูงสุด ที่คำนวณจากชุดข้อมูลการฝึก
    • คุณสมบัติตัวเลขมาตราส่วนมาตรฐาน (การทำให้เป็นมาตรฐานคะแนน z) โดยใช้ μ และ σ คำนวณบนชุดข้อมูลการฝึกอบรม
    • การรวมคุณสมบัติเชิงตัวเลขโดยใช้ควอนไทล์
    • การใส่ค่าที่หายไปโดยใช้ค่ามัธยฐาน (คุณสมบัติตัวเลข) หรือโหมด (คุณสมบัติหมวดหมู่)
    • การแปลงสตริง (ค่าที่กำหนด) เป็นจำนวนเต็ม (ดัชนี) โดยแยกค่าที่แตกต่างทั้งหมด (คำศัพท์) ของคุณลักษณะหมวดหมู่อินพุต
    • การนับการเกิดขึ้นของคำศัพท์ (ค่าคุณลักษณะ) ในเอกสารทั้งหมด (อินสแตนซ์) เพื่อคำนวณหา TF-IDF
    • การคำนวณ PCA ของคุณสมบัติอินพุตเพื่อฉายข้อมูลลงในพื้นที่มิติที่ต่ำกว่า (พร้อมคุณสมบัติที่ขึ้นต่อเชิงเส้น)

    คุณควรใช้เฉพาะข้อมูลการฝึกเพื่อคำนวณสถิติเช่น μ, σ, min และ max หากคุณเพิ่มข้อมูลการทดสอบและการประเมินผลสำหรับการดำเนินการเหล่านี้ คุณกำลัง รั่วไหลข้อมูล จากข้อมูลการประเมินและทดสอบเพื่อฝึกแบบจำลอง การทำเช่นนี้จะส่งผลต่อความน่าเชื่อถือของผลการทดสอบและการประเมินผล เพื่อให้แน่ใจว่าคุณได้ใช้การเปลี่ยนแปลงที่สม่ำเสมอกับชุดข้อมูลทั้งหมด คุณใช้สถิติเดียวกันที่คำนวณจากข้อมูลการฝึกเพื่อแปลงข้อมูลการทดสอบและการประเมินผล

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

  • การรวมกลุ่มในอดีตระหว่างการฝึก แต่การรวมกลุ่มแบบเรียลไทม์ระหว่างการคาดการณ์ แนวทางนี้เกี่ยวข้องกับการสร้างคุณลักษณะโดยการสรุปค่าแบบเรียลไทม์ในช่วงเวลาหนึ่ง ในแนวทางนี้ อินสแตนซ์ที่จะรวมจะถูกกำหนดผ่านส่วนคำสั่งหน้าต่างชั่วคราว ตัวอย่างเช่น คุณสามารถใช้วิธีนี้ได้หากคุณต้องการฝึกแบบจำลองที่ประมาณเวลาการเดินทางของรถแท็กซี่โดยอิงตามตัวชี้วัดการจราจรสำหรับเส้นทางในช่วง 5 นาทีที่ผ่านมา ในช่วง 10 นาทีที่ผ่านมา ในช่วง 30 นาทีที่ผ่านมา และที่อื่นๆ ช่วงเวลา คุณยังสามารถใช้วิธีการนี้เพื่อคาดการณ์ความล้มเหลวของชิ้นส่วนเครื่องยนต์โดยอิงตามค่าเฉลี่ยเคลื่อนที่ของอุณหภูมิและค่าการสั่นสะเทือนที่คำนวณในช่วง 3 นาทีที่ผ่านมา แม้ว่าการรวมกลุ่มเหล่านี้สามารถจัดเตรียมแบบออฟไลน์สำหรับการฝึกอบรมได้ แต่จะมีการคำนวณแบบเรียลไทม์จากสตรีมข้อมูลระหว่างการให้บริการ

    แม่นยำยิ่งขึ้น เมื่อคุณเตรียมข้อมูลการฝึกอบรม หากค่ารวมไม่อยู่ในข้อมูลดิบ ค่าจะถูกสร้างขึ้นในระหว่างขั้นตอนวิศวกรรมข้อมูล ข้อมูลดิบมักจะถูกเก็บไว้ในฐานข้อมูลด้วยรูปแบบ (entity, timestamp, value) ในตัวอย่างก่อนหน้านี้ entity คือตัวระบุส่วนของเส้นทางสำหรับเส้นทางแท็กซี่และตัวระบุชิ้นส่วนเครื่องยนต์สำหรับความล้มเหลวของเครื่องยนต์ คุณสามารถใช้การดำเนินการหน้าต่างเพื่อคำนวณ (entity, time_index, aggregated_value_over_time_window) และใช้คุณลักษณะการรวมเป็นอินพุตสำหรับการฝึกโมเดลของคุณ

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

ไปป์ไลน์ ML บน Google Cloud

ส่วนนี้จะกล่าวถึงองค์ประกอบหลักของไปป์ไลน์แบบ end-to-end โดยทั่วไปเพื่อฝึกอบรมและให้บริการโมเดล TensorFlow ML บน Google Cloud โดยใช้บริการที่มีการจัดการ นอกจากนี้ยังอภิปรายการว่าคุณสามารถใช้การดำเนินการประมวลผลข้อมูลล่วงหน้าประเภทต่างๆ ได้ที่ไหน และความท้าทายทั่วไปที่คุณอาจเผชิญเมื่อคุณใช้การแปลงดังกล่าว ส่วน วิธีการทำงานของ tf.Transform แสดงให้เห็นว่าไลบรารี TensorFlow Transform ช่วยจัดการกับความท้าทายเหล่านี้ได้อย่างไร

สถาปัตยกรรมระดับสูง

แผนภาพต่อไปนี้ รูปที่ 2 แสดงสถาปัตยกรรมระดับสูงของไปป์ไลน์ ML ทั่วไปสำหรับการฝึกและการให้บริการโมเดล TensorFlow ป้าย A, B และ C ในไดอะแกรมอ้างอิงถึงตำแหน่งต่างๆ ในไปป์ไลน์ที่สามารถประมวลผลข้อมูลล่วงหน้าได้ รายละเอียดเกี่ยวกับขั้นตอนเหล่านี้มีอยู่ในส่วนต่อไปนี้

แผนภาพสถาปัตยกรรมแสดงขั้นตอนในการประมวลผลข้อมูล
รูปที่ 2 สถาปัตยกรรมระดับสูงสำหรับการฝึกอบรม ML และการให้บริการบน Google Cloud

ไปป์ไลน์ประกอบด้วยขั้นตอนต่อไปนี้:

  1. หลังจากนำเข้าข้อมูลดิบแล้ว ข้อมูลแบบตารางจะจัดเก็บไว้ใน BigQuery และข้อมูลอื่นๆ เช่น รูปภาพ เสียง และวิดีโอ จะถูกจัดเก็บไว้ใน Cloud Storage ส่วนที่สองของชุดนี้ใช้ข้อมูลแบบตารางที่จัดเก็บไว้ใน BigQuery เป็นตัวอย่าง
  2. วิศวกรรมข้อมูล (การเตรียมการ) และวิศวกรรมฟีเจอร์ดำเนินการในวงกว้างโดยใช้ Dataflow การดำเนินการนี้จะสร้างชุดการฝึกอบรม การประเมิน และการทดสอบที่พร้อมใช้งาน ML ซึ่งจัดเก็บไว้ใน Cloud Storage ตามหลักการแล้ว ชุดข้อมูลเหล่านี้จะถูกจัดเก็บเป็นไฟล์ TFRecord ซึ่งเป็นรูปแบบที่ปรับให้เหมาะสมที่สุดสำหรับการคำนวณ TensorFlow
  3. แพ็คเกจตัวฝึก โมเดล TensorFlow จะถูกส่งไปยัง Vertex AI Training ซึ่งใช้ข้อมูลที่ประมวลผลล่วงหน้าจากขั้นตอนก่อนหน้าเพื่อฝึกโมเดล ผลลัพธ์ของขั้นตอนนี้คือ TensorFlow SavedModel ที่ได้รับการฝึกอบรมซึ่งส่งออกไปยัง Cloud Storage
  4. โมเดล TensorFlow ที่ผ่านการฝึกอบรมถูกปรับใช้กับ Vertex AI Prediction เป็นบริการที่มี REST API เพื่อให้สามารถใช้สำหรับการคาดการณ์ออนไลน์ได้ โมเดลเดียวกันนี้สามารถใช้กับงานการคาดการณ์แบบแบตช์ได้
  5. หลังจากปรับใช้โมเดลเป็น REST API แล้ว แอปไคลเอนต์และระบบภายในสามารถเรียกใช้ API ได้โดยการส่งคำขอพร้อมจุดข้อมูลบางส่วน และรับการตอบสนองจากโมเดลพร้อมการคาดการณ์
  6. สำหรับการจัดเตรียมและทำให้ไปป์ไลน์นี้เป็นอัตโนมัติ คุณสามารถใช้ Vertex AI Pipelines เป็นตัวกำหนดเวลาเพื่อเรียกใช้ขั้นตอนการจัดเตรียมข้อมูล การฝึกโมเดล และขั้นตอนการปรับใช้โมเดล

คุณยังสามารถใช้ Vertex AI Feature Store เพื่อจัดเก็บคุณสมบัติอินพุตเพื่อทำการคาดการณ์ได้ ตัวอย่างเช่น คุณสามารถสร้างคุณสมบัติทางวิศวกรรมเป็นระยะจากข้อมูลดิบล่าสุด และจัดเก็บไว้ใน Vertex AI Feature Store แอปไคลเอนต์ดึงคุณสมบัติอินพุตที่จำเป็นจาก Vertex AI Feature Store และส่งไปยังโมเดลเพื่อรับการคาดการณ์

จะต้องดำเนินการล่วงหน้าที่ไหน

ในรูปที่ 2 ป้ายกำกับ A, B และ C แสดงให้เห็นว่าการดำเนินการประมวลผลข้อมูลล่วงหน้าสามารถเกิดขึ้นใน BigQuery, Dataflow หรือ TensorFlow ส่วนต่อไปนี้จะอธิบายวิธีการทำงานของแต่ละตัวเลือกเหล่านี้

ตัวเลือก A: BigQuery

โดยทั่วไปแล้ว ตรรกะจะถูกนำมาใช้ใน BigQuery สำหรับการดำเนินการต่อไปนี้

  • การสุ่มตัวอย่าง: สุ่มเลือกชุดย่อยจากข้อมูล
  • การกรอง: ลบอินสแตนซ์ที่ไม่เกี่ยวข้องหรือไม่ถูกต้องออก
  • การแบ่งพาร์ติชัน: การแบ่งข้อมูลเพื่อสร้างชุดการฝึกอบรม การประเมิน และการทดสอบ

สคริปต์ BigQuery SQL สามารถใช้เป็นแบบสอบถามต้นทางสำหรับไปป์ไลน์การประมวลผลล่วงหน้าของ Dataflow ซึ่งเป็นขั้นตอนการประมวลผลข้อมูลในรูปที่ 2 ตัวอย่างเช่น หากมีการใช้ระบบในแคนาดา และคลังข้อมูลมีธุรกรรมจากทั่วโลก โดยกรองไปที่ การรับข้อมูลการฝึกอบรมเฉพาะแคนาดาทำได้ดีที่สุดใน BigQuery วิศวกรรมฟีเจอร์ใน BigQuery นั้นเรียบง่ายและปรับขนาดได้ และรองรับการใช้งานการแปลงฟีเจอร์การรวมระดับอินสแตนซ์และประวัติ

อย่างไรก็ตาม เราขอแนะนำให้คุณใช้ BigQuery สำหรับวิศวกรรมฟีเจอร์เฉพาะในกรณีที่คุณใช้แบบจำลองของคุณสำหรับการทำนายแบบกลุ่ม (การให้คะแนน) หรือหากฟีเจอร์นั้นได้รับการคำนวณล่วงหน้าใน BigQuery แต่จัดเก็บไว้ใน Vertex AI Feature Store เพื่อใช้ในระหว่างการทำนายแบบออนไลน์ หากคุณวางแผนที่จะปรับใช้โมเดลสำหรับการคาดการณ์ออนไลน์ และหากคุณไม่มีคุณสมบัติทางวิศวกรรมในร้านค้าฟีเจอร์ออนไลน์ คุณจะต้องจำลองการดำเนินการประมวลผลล่วงหน้าของ SQL เพื่อแปลงจุดข้อมูลดิบที่ระบบอื่นสร้างขึ้น กล่าวอีกนัยหนึ่ง คุณต้องใช้ตรรกะสองครั้ง: ครั้งแรกใน SQL เพื่อประมวลผลข้อมูลการฝึกล่วงหน้าใน BigQuery และครั้งที่สองในตรรกะของแอปที่ใช้โมเดลเพื่อประมวลผลจุดข้อมูลออนไลน์ล่วงหน้าสำหรับการคาดการณ์

ตัวอย่างเช่น หากแอปไคลเอ็นต์ของคุณเขียนด้วย Java คุณจะต้องปรับใช้ตรรกะใน Java ใหม่ สิ่งนี้อาจทำให้เกิดข้อผิดพลาดเนื่องจากความคลาดเคลื่อนในการใช้งาน ดังที่อธิบายไว้ในส่วนการเอียงการให้บริการการฝึกอบรมของ ความท้าทายในการประมวลผล ล่วงหน้าในเอกสารนี้ นอกจากนี้ยังมีค่าใช้จ่ายเพิ่มเติมเพื่อรักษาการใช้งานที่แตกต่างกันสองรายการ เมื่อใดก็ตามที่คุณเปลี่ยนตรรกะใน SQL เพื่อประมวลผลข้อมูลการฝึกล่วงหน้า คุณจะต้องเปลี่ยนการใช้งาน Java ตามการประมวลผลข้อมูลล่วงหน้า ณ เวลาที่ให้บริการ

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

การแปลง stateful แบบเต็มพาสไม่เหมาะสำหรับการนำไปใช้ใน BigQuery หากคุณใช้ BigQuery สำหรับการแปลงแบบเต็มพาส คุณจะต้องมีตารางเสริมเพื่อจัดเก็บปริมาณที่จำเป็นสำหรับการแปลงแบบมีสถานะ เช่น ค่าเฉลี่ยและความแปรปรวนเพื่อปรับขนาดฟีเจอร์ตัวเลข นอกจากนี้ การใช้การแปลงแบบเต็มพาสโดยใช้ SQL บน BigQuery จะสร้างความซับซ้อนที่เพิ่มขึ้นในสคริปต์ SQL และสร้างการพึ่งพาที่ซับซ้อนระหว่างการฝึกและการให้คะแนนสคริปต์ SQL

ตัวเลือก B: กระแสข้อมูล

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

Dataflow สามารถทำการเปลี่ยนแปลงระดับอินสแตนซ์ และการเปลี่ยนแปลงคุณสมบัติการรวมในอดีตและแบบเรียลไทม์ได้ โดยเฉพาะอย่างยิ่ง หากโมเดล ML ของคุณคาดหวังคุณสมบัติอินพุต เช่น total_number_of_clicks_last_90sec ฟังก์ชันหน้าต่าง Apache Beam สามารถคำนวณคุณสมบัติเหล่านี้โดยอิงตามการรวมค่าของกรอบเวลาของข้อมูลเหตุการณ์แบบเรียลไทม์ (การสตรีม) (เช่น เหตุการณ์การคลิก) ในการอภิปรายก่อนหน้านี้เกี่ยวกับ รายละเอียดของการเปลี่ยนแปลง สิ่งนี้เรียกว่า "การรวมกลุ่มในอดีตระหว่างการฝึกอบรม แต่เป็นการรวมกลุ่มแบบเรียลไทม์ระหว่างการคาดการณ์"

แผนภาพต่อไปนี้ รูปที่ 3 แสดงบทบาทของ Dataflow ในการประมวลผลข้อมูลสตรีมสำหรับการคาดการณ์แบบเรียลไทม์

สถาปัตยกรรมสำหรับการใช้ข้อมูลสตรีมเพื่อการคาดการณ์
รูปที่ 3 สถาปัตยกรรมระดับสูงที่ใช้ข้อมูลสตรีมสำหรับการคาดการณ์ใน Dataflow

ดังที่แสดงในรูปที่ 3 ในระหว่างการประมวลผล เหตุการณ์ที่เรียกว่า จุดข้อมูล จะถูกนำเข้าไปยัง Pub/Sub Dataflow ใช้จุดข้อมูลเหล่านี้ คำนวณฟีเจอร์ตามการสรุปรวมในช่วงเวลาหนึ่ง จากนั้นเรียก API โมเดล ML ที่ปรับใช้สำหรับการคาดการณ์ จากนั้นการคาดการณ์จะถูกส่งไปยังคิว Pub/Sub ขาออก จาก Pub/Sub การคาดการณ์สามารถนำมาใช้โดยระบบดาวน์สตรีม เช่น การตรวจสอบหรือการควบคุม หรือสามารถส่งกลับ (เช่น เป็นการแจ้งเตือน) ไปยังไคลเอ็นต์ที่ร้องขอดั้งเดิมได้ การคาดการณ์ยังสามารถจัดเก็บไว้ในที่เก็บข้อมูลที่มีเวลาแฝงต่ำ เช่น Cloud Bigtable เพื่อการดึงข้อมูลแบบเรียลไทม์ Cloud Bigtable ยังสามารถใช้เพื่อสะสมและจัดเก็บการรวมกลุ่มแบบเรียลไทม์เหล่านี้ เพื่อให้สามารถค้นหาได้เมื่อจำเป็นสำหรับการคาดการณ์

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

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

Dataflow สามารถใช้เพื่อทำการแปลงแบบเต็มพาส โดยการคำนวณสถิติที่จำเป็นในวงกว้าง อย่างไรก็ตาม สถิติเหล่านี้จำเป็นต้องจัดเก็บไว้ที่ไหนสักแห่งเพื่อใช้ในระหว่างการทำนายเพื่อแปลงจุดข้อมูลการทำนาย ด้วยการใช้ไลบรารี TensorFlow Transform ( tf.Transform ) คุณสามารถฝังสถิติเหล่านี้ลงในโมเดลได้โดยตรง แทนที่จะเก็บไว้ที่อื่น วิธีการนี้จะอธิบายในภายหลังใน How tf.Transform works

ตัวเลือก C: TensorFlow

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

รหัสลอจิกการเปลี่ยนแปลงในฟังก์ชัน serving_fn กำหนดอินเทอร์เฟซการให้บริการของ SavedModel ของคุณสำหรับการทำนายออนไลน์ หากคุณใช้การแปลงแบบเดียวกันกับที่ใช้ในการเตรียมข้อมูลการฝึกในโค้ดตรรกะการแปลงของฟังก์ชัน serving_fn จะช่วยให้แน่ใจว่าการแปลงแบบเดียวกันนั้นจะถูกนำไปใช้กับจุดข้อมูลการคาดการณ์ใหม่เมื่อมีการให้บริการ

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

ความท้าทายในการประมวลผลล่วงหน้า

ต่อไปนี้เป็นความท้าทายหลักของการดำเนินการประมวลผลข้อมูลล่วงหน้า:

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

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

  • การแปลงร่างแบบเต็มพาส คุณไม่สามารถใช้การแปลงแบบเต็มพาส เช่น การปรับขนาดและการแปลงมาตรฐานในโมเดล TensorFlow ของคุณ ในการแปลงแบบเต็มพาส สถิติบางอย่าง (เช่น ค่า max และ min เพื่อปรับขนาดคุณลักษณะตัวเลข) จะต้องได้รับการคำนวณจากข้อมูลการฝึกล่วงหน้า ตามที่อธิบายไว้ใน ตัวเลือก B: Dataflow จากนั้นค่าจะต้องถูกเก็บไว้ที่ไหนสักแห่งเพื่อใช้ระหว่างการแสดงโมเดลสำหรับการคาดการณ์เพื่อแปลงจุดข้อมูลดิบใหม่เป็นการแปลงระดับอินสแตนซ์ ซึ่งจะช่วยหลีกเลี่ยงการบิดเบือนการให้บริการการฝึก คุณสามารถใช้ไลบรารี TensorFlow Transform ( tf.Transform ) เพื่อฝังสถิติในโมเดล TensorFlow ของคุณได้โดยตรง วิธีการนี้จะอธิบายในภายหลังใน How tf.Transform works

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

    ตามหลักการแล้ว ข้อมูลการฝึกจะถูกแปลงก่อนการฝึก โดยใช้เทคนิคที่อธิบายไว้ใน ตัวเลือก B: Dataflow โดยที่การดำเนินการแปลง 10,000 รายการจะถูกใช้เพียงครั้งเดียวในแต่ละอินสแตนซ์การฝึก จากนั้นข้อมูลการฝึกที่ได้รับการแปลงจะถูกนำเสนอต่อโมเดล ไม่มีการเปลี่ยนแปลงใดๆ เพิ่มเติม และตัวเร่งความเร็วก็ยุ่งอยู่ตลอดเวลา นอกจากนี้ การใช้ Dataflow ยังช่วยให้คุณประมวลผลข้อมูลจำนวนมากล่วงหน้าในวงกว้าง โดยใช้บริการที่มีการจัดการเต็มรูปแบบ

    การเตรียมข้อมูลการฝึกอบรมล่วงหน้าสามารถปรับปรุงประสิทธิภาพการฝึกอบรมได้ อย่างไรก็ตาม การใช้ตรรกะการเปลี่ยนแปลงภายนอกโมเดล (แนวทางที่อธิบายไว้ใน ตัวเลือก A: BigQuery หรือ ตัวเลือก B: Dataflow ) ไม่สามารถแก้ไขปัญหาการบิดเบือนการให้บริการการฝึกอบรมได้ เว้นแต่คุณจะจัดเก็บคุณลักษณะทางวิศวกรรมไว้ในที่เก็บคุณลักษณะเพื่อใช้สำหรับทั้งการฝึกและการทำนาย ตรรกะการแปลงต้องถูกนำไปใช้ในที่ใดที่หนึ่งเพื่อนำไปใช้กับจุดข้อมูลใหม่ที่จะมาสำหรับการคาดการณ์ เนื่องจากอินเทอร์เฟซของโมเดลคาดว่าจะมีข้อมูลที่แปลงแล้ว ไลบรารี TensorFlow Transform ( tf.Transform ) สามารถช่วยคุณแก้ไขปัญหานี้ได้ ดังที่อธิบายไว้ในส่วนต่อไปนี้

tf.Transform ทำงานอย่างไร

ไลบรารี tf.Transform มีประโยชน์สำหรับการแปลงที่ต้องผ่านแบบเต็ม เอาต์พุตของไลบรารี tf.Transform จะถูกส่งออกเป็นกราฟ TensorFlow ที่แสดงถึงตรรกะการเปลี่ยนแปลงระดับอินสแตนซ์และสถิติที่คำนวณจากการแปลงแบบเต็มพาส เพื่อใช้สำหรับการฝึกอบรมและการให้บริการ การใช้กราฟเดียวกันสำหรับทั้งการฝึกและการเสิร์ฟสามารถป้องกันการบิดเบือนได้ เนื่องจากมีการใช้การเปลี่ยนแปลงเดียวกันในทั้งสองขั้นตอน นอกจากนี้ ไลบรารี tf.Transform ยังสามารถทำงานได้ตามขนาดในไปป์ไลน์การประมวลผลแบบกลุ่มบน Dataflow เพื่อเตรียมข้อมูลการฝึกล่วงหน้าและปรับปรุงประสิทธิภาพการฝึก

แผนภาพต่อไปนี้ รูปที่ 4 แสดงให้เห็นว่าไลบรารี tf.Transform ประมวลผลล่วงหน้าและแปลงข้อมูลเพื่อการฝึกและการทำนายอย่างไร กระบวนการนี้อธิบายไว้ในส่วนต่อไปนี้

แผนภาพแสดงโฟลว์จากข้อมูลดิบผ่าน tf แปลงเป็นการคาดการณ์
รูปที่ 4 พฤติกรรมของ tf.Transform สำหรับการประมวลผลล่วงหน้าและการแปลงข้อมูล

แปลงข้อมูลการฝึกอบรมและการประเมินผล

คุณประมวลผลข้อมูลดิบล่วงหน้าโดยใช้การเปลี่ยนแปลงที่ใช้งานใน tf.Transform Apache Beam API และเรียกใช้ตามขนาดบน Dataflow การประมวลผลล่วงหน้าเกิดขึ้นในขั้นตอนต่อไปนี้:

  • ระยะการวิเคราะห์: ในระหว่างระยะการวิเคราะห์ สถิติที่จำเป็น (เช่น ค่าเฉลี่ย ความแปรปรวน และควอนไทล์) สำหรับการแปลงแบบมีสถานะจะถูกคำนวณจากข้อมูลการฝึกด้วยการดำเนินการแบบเต็มพาส เฟสนี้สร้างชุดของสิ่งประดิษฐ์การแปลง รวมถึงกราฟ transform_fn กราฟ transform_fn คือกราฟ TensorFlow ที่มีตรรกะการเปลี่ยนแปลงเป็นการดำเนินการระดับอินสแตนซ์ โดยจะรวมสถิติที่คำนวณในขั้นตอนการวิเคราะห์เป็นค่าคงที่
  • ระยะการแปลง: ในระหว่างระยะการแปลง กราฟ transform_fn จะถูกนำไปใช้กับข้อมูลการฝึกดิบ โดยที่สถิติที่คำนวณแล้วจะถูกนำไปใช้ในการประมวลผลบันทึกข้อมูล (เช่น เพื่อปรับขนาดคอลัมน์ตัวเลข) ในรูปแบบระดับอินสแตนซ์

แนวทางแบบสองเฟสเช่นนี้จะจัดการกับ ความท้าทายในการประมวลผลล่วงหน้า ของการแปลงแบบเต็มพาส

เมื่อข้อมูลการประเมินได้รับการประมวลผลล่วงหน้า จะมีการใช้เฉพาะการดำเนินการระดับอินสแตนซ์เท่านั้น โดยใช้ตรรกะในกราฟ transform_fn และสถิติที่คำนวณจากขั้นตอนการวิเคราะห์ในข้อมูลการฝึกอบรม กล่าวอีกนัยหนึ่ง คุณไม่ได้วิเคราะห์ข้อมูลการประเมินแบบเต็มขั้นตอนเพื่อคำนวณสถิติใหม่ เช่น μ และ σ เพื่อทำให้คุณสมบัติตัวเลขในข้อมูลการประเมินเป็นมาตรฐาน แต่คุณใช้สถิติที่คำนวณจากข้อมูลการฝึกอบรมเพื่อแปลงข้อมูลการประเมินในระดับอินสแตนซ์แทน

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

แนบการแปลงกับโมเดลที่ส่งออก

ตามที่ระบุไว้กราฟ transform_fn ที่ผลิตโดยท่อส่ง tf.Transform จะถูกเก็บไว้เป็นกราฟ tensorflow ที่ส่งออก กราฟที่ส่งออกประกอบด้วยตรรกะการแปลงเป็นการดำเนินการระดับอินสแตนซ์และสถิติทั้งหมดที่คำนวณในการแปลงแบบเต็มรูปแบบเป็นค่าคงที่กราฟ เมื่อโมเดลที่ผ่านการฝึกอบรมถูกส่งออกสำหรับการให้บริการกราฟ transform_fn จะถูกแนบกับ SavedModel ซึ่งเป็นส่วนหนึ่งของฟังก์ชั่น serving_fn ของมัน

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

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

กลไกนี้แก้ไข ความท้าทายการประมวลผลล่วงหน้า ของการฝึกอบรมการฝึกอบรมเนื่องจากตรรกะเดียวกัน (การใช้งาน) ที่ใช้ในการแปลงข้อมูลการฝึกอบรมและการประเมินผลจะถูกนำไปใช้เพื่อแปลงจุดข้อมูลใหม่ระหว่างการทำนาย

สรุปตัวเลือกการประมวลผลล่วงหน้า

ตารางต่อไปนี้สรุปตัวเลือกการประมวลผลข้อมูลล่วงหน้าที่เอกสารนี้กล่าวถึง ในตาราง "N/A" หมายถึง "ไม่สามารถใช้ได้"

ตัวเลือกการประมวลผลข้อมูลล่วงหน้า ระดับอินสแตนซ์
(การเปลี่ยนแปลงไร้สัญชาติ)

เต็มผ่านระหว่างการฝึกอบรมและระดับอินสแตนซ์ระหว่างการให้บริการ (การเปลี่ยนแปลงของสถานะ)

การรวมตัวแบบเรียลไทม์ (หน้าต่าง) ระหว่างการฝึกอบรมและให้บริการ (การแปลงสตรีมมิ่ง)

BigQuery (SQL)

การให้คะแนนแบบแบตช์: ตกลง - การใช้งานการแปลงเดียวกันจะถูกนำไปใช้กับข้อมูลระหว่างการฝึกอบรมและการให้คะแนนแบบแบตช์

การทำนายออนไลน์: ไม่แนะนำ -คุณสามารถประมวลผลข้อมูลการฝึกอบรมได้ แต่ส่งผลให้เกิดการฝึกอบรมการฝึกอบรมเพราะคุณประมวลผลข้อมูลโดยใช้เครื่องมือที่แตกต่างกัน

การให้คะแนนแบบแบทช์: ไม่แนะนำ

การทำนายออนไลน์: ไม่แนะนำ

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

การให้คะแนนแบบแบตช์: N/A- รวมเช่นนี้คำนวณตามเหตุการณ์แบบเรียลไทม์

การทำนายออนไลน์: ไม่แนะนำ -คุณสามารถประมวลผลข้อมูลการฝึกอบรมได้ แต่ส่งผลให้เกิดการฝึกอบรมการฝึกอบรมเพราะคุณประมวลผลข้อมูลโดยใช้เครื่องมือที่แตกต่างกัน

DataFlow (Apache Beam)

การให้คะแนนแบบแบตช์: ตกลง - การใช้งานการแปลงเดียวกันจะถูกนำไปใช้กับข้อมูลระหว่างการฝึกอบรมและการให้คะแนนแบบแบตช์

การทำนายออนไลน์: ตกลง - หากข้อมูลในเวลาที่ให้บริการมาจาก Pub/Sub ที่จะบริโภคโดย DataFlow มิฉะนั้นส่งผลให้เกิดการฝึกอบรม

การให้คะแนนแบบแบทช์: ไม่แนะนำ

การคาดการณ์ออนไลน์: ไม่แนะนำ

แม้ว่าคุณสามารถใช้สถิติที่คำนวณได้โดยใช้ DataFlow สำหรับการแปลงแบทช์ระดับ/ออนไลน์ แต่ก็ไม่ใช่เรื่องง่ายเพราะคุณต้องรักษาสถิติที่เก็บไว้ในระหว่างการฝึกอบรมและใช้ในระหว่างการทำนาย

การให้คะแนนแบบแบตช์: N/A- รวมเช่นนี้คำนวณตามเหตุการณ์แบบเรียลไทม์

การทำนายออนไลน์: ตกลง - การแปลงลำแสง Apache เดียวกันถูกนำไปใช้กับข้อมูลระหว่างการฝึกอบรม (แบทช์) และการให้บริการ (สตรีม)

DataFlow (Apache Beam + TFT)

การให้คะแนนแบบแบตช์: ตกลง - การใช้งานการแปลงเดียวกันจะถูกนำไปใช้กับข้อมูลระหว่างการฝึกอบรมและการให้คะแนนแบบแบตช์

การทำนายออนไลน์: แนะนำ -หลีกเลี่ยงการฝึกอบรมการให้บริการและเตรียมข้อมูลการฝึกอบรมล่วงหน้า

การให้คะแนนแบบแบทช์: แนะนำ

การทำนายออนไลน์: แนะนำ

แนะนำให้ใช้การใช้งานทั้งสองเนื่องจากตรรกะการแปลงและสถิติที่คำนวณได้ในระหว่างการฝึกอบรมจะถูกเก็บไว้เป็นกราฟเทนเซอร์โฟลว์ที่แนบมากับแบบจำลองที่ส่งออกสำหรับการให้บริการ

การให้คะแนนแบบแบตช์: N/A- รวมเช่นนี้คำนวณตามเหตุการณ์แบบเรียลไทม์

การทำนายออนไลน์: ตกลง - การแปลงลำแสง Apache เดียวกันถูกนำไปใช้กับข้อมูลระหว่างการฝึกอบรม (แบทช์) และการให้บริการ (สตรีม)

tensorflow *
( input_fn & serving_fn )

การให้คะแนนแบบแบทช์: ไม่แนะนำ

การทำนายออนไลน์: ไม่แนะนำ

สำหรับประสิทธิภาพการฝึกอบรมในทั้งสองกรณีจะเป็นการดีกว่าที่จะเตรียมข้อมูลการฝึกอบรมล่วงหน้า

การให้คะแนนแบบแบทช์: เป็นไปไม่ได้

การทำนายออนไลน์: เป็นไปไม่ได้

การให้คะแนนแบบแบตช์: N/A- รวมเช่นนี้คำนวณตามเหตุการณ์แบบเรียลไทม์

การทำนายออนไลน์: เป็นไปไม่ได้

* ด้วย tensorflow การแปลงเช่นการข้ามการฝังและการเข้ารหัสหนึ่งร้อนควรดำเนินการอย่างเปิดเผยว่าเป็นคอลัมน์ feature_columns

อะไรต่อไป