การตรวจสอบความถูกต้องของข้อมูล TensorFlow: การตรวจสอบและวิเคราะห์ข้อมูลของคุณ

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

มีเหตุผลหลายประการในการวิเคราะห์และแปลงข้อมูลของคุณ:

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

เครื่องมือ TFX สามารถช่วยค้นหาจุดบกพร่องของข้อมูล และช่วยในด้านวิศวกรรมฟีเจอร์

การตรวจสอบข้อมูล TensorFlow

ภาพรวม

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

  1. ดำเนินการตรวจสอบความถูกต้องโดยการเปรียบเทียบสถิติข้อมูลกับสคีมาที่ประมวลผลความคาดหวังของผู้ใช้
  2. ตรวจจับการบิดเบือนการให้บริการการฝึกอบรมโดยการเปรียบเทียบตัวอย่างในข้อมูลการฝึกอบรมและการให้บริการ
  3. ตรวจจับการเบี่ยงเบนของข้อมูลโดยดูจากชุดข้อมูล

เราบันทึกฟังก์ชันการทำงานแต่ละอย่างแยกจากกัน:

การตรวจสอบตัวอย่างตามสคีมา

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

โดยทั่วไปการตรวจสอบความถูกต้องของข้อมูล Tensorflow จะถูกเรียกใช้หลายครั้งภายในบริบทของไปป์ไลน์ TFX: (i) สำหรับทุกการแยกที่ได้รับจาก ExampleGen (ii) สำหรับข้อมูลก่อนการแปลงทั้งหมดที่ใช้โดย Transform และ (iii) สำหรับข้อมูลหลังการแปลงทั้งหมดที่สร้างโดย แปลง. เมื่อเรียกใช้ในบริบทของ Transform (ii-iii) คุณสามารถตั้งค่าตัวเลือกสถิติและข้อจำกัดตามสคีมาได้โดยการกำหนด stats_options_updater_fn สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อตรวจสอบข้อมูลที่ไม่มีโครงสร้าง (เช่น คุณลักษณะข้อความ) ดู รหัสผู้ใช้ สำหรับตัวอย่าง

คุณสมบัติสคีมาขั้นสูง

ส่วนนี้ครอบคลุมถึงการกำหนดค่าสคีมาขั้นสูงเพิ่มเติมที่สามารถช่วยในการตั้งค่าพิเศษได้

คุณสมบัติเบาบาง

การเข้ารหัสคุณลักษณะกระจัดกระจายในตัวอย่างมักจะแนะนำคุณลักษณะหลายอย่างที่คาดว่าจะมีความจุเท่ากันสำหรับตัวอย่างทั้งหมด ตัวอย่างเช่น คุณลักษณะแบบกระจาย:


WeightedCategories = [('CategoryA', 0.3), ('CategoryX', 0.7)]
จะถูกเข้ารหัสโดยใช้คุณลักษณะแยกต่างหากสำหรับดัชนีและค่า:

WeightedCategoriesIndex = ['CategoryA', 'CategoryX']
WeightedCategoriesValue = [0.3, 0.7]
โดยมีข้อจำกัดว่าความจุของคุณลักษณะดัชนีและค่าควรตรงกันสำหรับตัวอย่างทั้งหมด ข้อจำกัดนี้สามารถทำให้ชัดเจนในสคีมาโดยการกำหนด sparse_feature:

sparse_feature {
  name: 'WeightedCategories'
  index_feature { name: 'WeightedCategoriesIndex' }
  value_feature { name: 'WeightedCategoriesValue' }
}

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

กรณีการใช้งานบางกรณีมีข้อจำกัดความจุที่คล้ายกันระหว่างคุณลักษณะต่างๆ แต่ไม่จำเป็นต้องเข้ารหัสคุณลักษณะแบบกระจัดกระจาย การใช้ฟีเจอร์กระจัดกระจายควรปลดบล็อกคุณ แต่ก็ไม่เหมาะ

สภาพแวดล้อมสคีมา

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

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

  • กำหนดสภาพแวดล้อมที่แตกต่างกันสองรายการในสคีมา: ["การให้บริการ", "การฝึกอบรม"] และเชื่อมโยง 'LABEL' กับสภาพแวดล้อม "การฝึกอบรม" เท่านั้น
  • เชื่อมโยงข้อมูลการฝึกอบรมกับสภาพแวดล้อม "การฝึกอบรม" และข้อมูลการให้บริการกับสภาพแวดล้อม "การให้บริการ"
การสร้างสคีมา

สคีมาข้อมูลอินพุตถูกระบุเป็นอินสแตนซ์ของ สคีมา TensorFlow

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

TFDV รวม infer_schema() เพื่อสร้างสคีมาโดยอัตโนมัติ ตัวอย่างเช่น:

schema = tfdv.infer_schema(statistics=train_stats)
tfdv.display_schema(schema=schema)

ซึ่งจะทริกเกอร์การสร้างสคีมาอัตโนมัติตามกฎต่อไปนี้:

  • หากสคีมาถูกสร้างขึ้นอัตโนมัติแล้ว สคีมาก็จะถูกใช้เหมือนเดิม

  • มิฉะนั้น การตรวจสอบความถูกต้องของข้อมูล TensorFlow จะตรวจสอบสถิติข้อมูลที่มีอยู่และคำนวณสคีมาที่เหมาะสมสำหรับข้อมูล

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

การตรวจจับการเอียงการให้บริการการฝึกอบรม

ภาพรวม

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

ตัวอย่างสถานการณ์

ดู คู่มือเริ่มต้นใช้งานการตรวจสอบความถูกต้องของข้อมูล TensorFlow สำหรับข้อมูลเกี่ยวกับการกำหนดค่าการตรวจจับการเอียงที่ให้บริการการฝึกอบรม

การตรวจจับดริฟท์

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

ดู คู่มือเริ่มต้นใช้งานการตรวจสอบความถูกต้องของข้อมูล TensorFlow สำหรับข้อมูลเกี่ยวกับการกำหนดค่าการตรวจจับดริฟท์

การใช้การแสดงภาพเพื่อตรวจสอบข้อมูลของคุณ

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

สถิติคุณสมบัติ

การระบุการกระจายที่น่าสงสัย

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

ข้อมูลไม่สมดุล

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

คุณสมบัติที่ไม่สมดุลที่สุดจะแสดงอยู่ที่ด้านบนของรายการประเภทคุณสมบัติแต่ละรายการ เช่น ภาพหน้าจอต่อไปนี้แสดงฟีเจอร์หนึ่งที่เป็นศูนย์ทั้งหมด และฟีเจอร์วินาทีที่ไม่สมดุลอย่างมาก ที่ด้านบนของรายการ "ฟีเจอร์ตัวเลข"

การแสดงข้อมูลที่ไม่สมดุล

ข้อมูลที่กระจายอย่างสม่ำเสมอ

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

หากต้องการตรวจหาคุณลักษณะที่กระจายสม่ำเสมอในภาพรวม Facets ให้เลือก "ความไม่สม่ำเสมอ" จากเมนูแบบเลื่อนลง "จัดเรียงตาม" และทำเครื่องหมายที่ช่องทำเครื่องหมาย "ลำดับย้อนกลับ":

ฮิสโตแกรมของข้อมูลที่สม่ำเสมอ

ข้อมูลสตริงจะแสดงโดยใช้แผนภูมิแท่งหากมีค่าที่ไม่ซ้ำกัน 20 ค่าหรือน้อยกว่า และเป็นกราฟการกระจายสะสมหากมีค่าที่ไม่ซ้ำกันมากกว่า 20 ค่า ดังนั้นสำหรับข้อมูลสตริง การแจกแจงแบบสม่ำเสมออาจปรากฏเป็นกราฟแท่งแบนเหมือนกราฟแท่งด้านบนหรือเส้นตรงเหมือนกราฟด้านล่าง:

กราฟเส้น: การกระจายสะสมของข้อมูลที่สม่ำเสมอ

จุดบกพร่องที่สามารถสร้างข้อมูลที่มีการกระจายอย่างสม่ำเสมอ

ต่อไปนี้เป็นข้อบกพร่องทั่วไปบางประการที่สามารถสร้างข้อมูลที่มีการกระจายสม่ำเสมอ:

  • การใช้สตริงเพื่อแสดงชนิดข้อมูลที่ไม่ใช่สตริง เช่น วันที่ ตัวอย่างเช่น คุณจะมีค่าที่ไม่ซ้ำกันจำนวนมากสำหรับคุณลักษณะวันที่และเวลาที่มีการแสดงเช่น "2017-03-01-11-45-03" ค่าที่ไม่ซ้ำจะถูกกระจายอย่างสม่ำเสมอ

  • รวมดัชนีเช่น "หมายเลขแถว" เป็นคุณลักษณะ คุณมีคุณค่าที่ไม่ซ้ำใครมากมายที่นี่อีกครั้ง

ข้อมูลหายไป

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

  1. เลือก "จำนวนขาดหายไป/ศูนย์" จากเมนูแบบเลื่อนลง "จัดเรียงตาม"
  2. ทำเครื่องหมายที่ช่อง "ลำดับย้อนกลับ"
  3. ดูคอลัมน์ "หายไป" เพื่อดูเปอร์เซ็นต์ของอินสแตนซ์ที่มีค่าที่ขาดหายไปสำหรับคุณลักษณะหนึ่งๆ

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

  1. เลือก "ความยาวรายการมูลค่า" จากเมนูแบบเลื่อนลง "แผนภูมิที่จะแสดง" ทางด้านขวา

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

การแสดงภาพรวม Facets พร้อมฟีเจอร์ที่มีรายการค่าฟีเจอร์ที่มีความยาวเป็นศูนย์

ความแตกต่างอย่างมากในมาตราส่วนระหว่างคุณสมบัติ

หากคุณลักษณะของคุณแตกต่างกันอย่างมากในขนาด โมเดลอาจมีปัญหาในการเรียนรู้ ตัวอย่างเช่น หากคุณลักษณะบางอย่างแตกต่างกันไปตั้งแต่ 0 ถึง 1 และคุณสมบัติอื่นๆ แตกต่างกันไปตั้งแต่ 0 ถึง 1,000,000,000 คุณจะมีขนาดที่แตกต่างกันมาก เปรียบเทียบคอลัมน์ "สูงสุด" และ "ต่ำสุด" ตามคุณลักษณะต่างๆ เพื่อค้นหาระดับที่แตกต่างกันอย่างมาก

พิจารณาการปรับค่าคุณลักษณะให้เป็นมาตรฐานเพื่อลดความผันแปรในวงกว้างเหล่านี้

ป้ายกำกับที่มีป้ายกำกับไม่ถูกต้อง

ตัวประมาณการของ TensorFlow มีข้อจำกัดเกี่ยวกับประเภทของข้อมูลที่ยอมรับเป็นป้ายกำกับ ตัวอย่างเช่น โดยทั่วไปตัวแยกประเภทไบนารีจะใช้งานได้กับป้ายกำกับ {0, 1} เท่านั้น

ตรวจสอบค่าป้ายกำกับในภาพรวมแง่มุม และตรวจสอบให้แน่ใจว่าค่าเหล่านี้เป็นไปตาม ข้อกำหนดของเครื่องมือประมาณค่า