เริ่มต้นใช้งานการตรวจสอบข้อมูล Tensorflow

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

Tensorflow Data Validation (TFDV) สามารถวิเคราะห์การฝึกอบรมและให้บริการข้อมูลเพื่อ:

API หลักรองรับฟังก์ชันการทำงานแต่ละส่วนด้วยวิธีการอำนวยความสะดวกที่สร้างไว้ด้านบนและสามารถเรียกใช้ได้ในบริบทของโน้ตบุ๊ก

การคำนวณสถิติข้อมูลเชิงพรรณนา

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

ตัวอย่างเช่น สมมติว่า path นั้นชี้ไปที่ไฟล์ในรูปแบบ TFRecord (ซึ่งมีบันทึกประเภท tensorflow.Example ) ตัวอย่างต่อไปนี้แสดงการคำนวณสถิติโดยใช้ TFDV:

    stats = tfdv.generate_statistics_from_tfrecord(data_location=path)

ค่าที่ส่งคืนคือบัฟเฟอร์โปรโตคอล DatasetFeatureStatisticsList สมุดบันทึกตัวอย่าง มีการแสดงภาพสถิติโดยใช้ ภาพรวมของ Facets :

    tfdv.visualize_statistics(stats)

ภาพหน้าจอของการสร้างภาพสถิติ

ตัวอย่างก่อนหน้านี้ถือว่าข้อมูลถูกเก็บไว้ในไฟล์ TFRecord TFDV ยังรองรับรูปแบบอินพุต CSV พร้อมความสามารถในการขยายสำหรับรูปแบบทั่วไปอื่นๆ คุณสามารถค้นหาตัวถอดรหัสข้อมูลได้ ที่นี่ นอกจากนี้ TFDV ยังมีฟังก์ชันยูทิลิตี้ tfdv.generate_statistics_from_dataframe สำหรับผู้ใช้ที่มีข้อมูลในหน่วยความจำแสดงเป็น DataFrame ของแพนด้า

นอกเหนือจากการคำนวณชุดข้อมูลสถิติเริ่มต้นแล้ว TFDV ยังสามารถคำนวณสถิติสำหรับโดเมนเชิงความหมาย (เช่น รูปภาพ ข้อความ) หากต้องการเปิดใช้งานการคำนวณสถิติโดเมนเชิงความหมาย ให้ส่งอ็อบเจ็กต์ tfdv.StatsOptions ที่ enable_semantic_domain_stats ตั้งค่าเป็น True เป็น tfdv.generate_statistics_from_tfrecord

ทำงานบน Google Cloud

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

ในการเรียกใช้ TFDV บน Google Cloud ต้องดาวน์โหลดไฟล์ TFDV wheel และจัดเตรียมให้กับพนักงาน Dataflow ดาวน์โหลดไฟล์ wheel ไปยังไดเร็กทอรีปัจจุบันดังนี้:

pip download tensorflow_data_validation \
  --no-deps \
  --platform manylinux2010_x86_64 \
  --only-binary=:all:

ตัวอย่างต่อไปนี้แสดงตัวอย่างการใช้งาน TFDV บน Google Cloud:


import tensorflow_data_validation as tfdv
from apache_beam.options.pipeline_options import PipelineOptions, GoogleCloudOptions, StandardOptions, SetupOptions

PROJECT_ID = ''
JOB_NAME = ''
GCS_STAGING_LOCATION = ''
GCS_TMP_LOCATION = ''
GCS_DATA_LOCATION = ''
# GCS_STATS_OUTPUT_PATH is the file path to which to output the data statistics
# result.
GCS_STATS_OUTPUT_PATH = ''

PATH_TO_WHL_FILE = ''


# Create and set your PipelineOptions.
options = PipelineOptions()

# For Cloud execution, set the Cloud Platform project, job_name,
# staging location, temp_location and specify DataflowRunner.
google_cloud_options = options.view_as(GoogleCloudOptions)
google_cloud_options.project = PROJECT_ID
google_cloud_options.job_name = JOB_NAME
google_cloud_options.staging_location = GCS_STAGING_LOCATION
google_cloud_options.temp_location = GCS_TMP_LOCATION
options.view_as(StandardOptions).runner = 'DataflowRunner'

setup_options = options.view_as(SetupOptions)
# PATH_TO_WHL_FILE should point to the downloaded tfdv wheel file.
setup_options.extra_packages = [PATH_TO_WHL_FILE]

tfdv.generate_statistics_from_tfrecord(GCS_DATA_LOCATION,
                                       output_path=GCS_STATS_OUTPUT_PATH,
                                       pipeline_options=options)

ในกรณีนี้ โปรโตสถิติที่สร้างขึ้นจะถูกเก็บไว้ในไฟล์ TFRecord ที่เขียนไปยัง GCS_STATS_OUTPUT_PATH

หมายเหตุ เมื่อเรียกใช้ฟังก์ชัน tfdv.generate_statistics_... (เช่น tfdv.generate_statistics_from_tfrecord ) บน Google Cloud คุณต้องระบุ output_path การระบุไม่มีอาจทำให้เกิดข้อผิดพลาด

การอนุมานสคีมาเหนือข้อมูล

สคีมา อธิบายคุณสมบัติที่คาดไว้ของข้อมูล คุณสมบัติบางอย่างเหล่านี้คือ:

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

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

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

    schema = tfdv.infer_schema(stats)

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

โดยค่าเริ่มต้น tfdv.infer_schema จะสรุปรูปร่างของคุณลักษณะที่จำเป็นแต่ละรายการ ถ้า value_count.min เท่ากับ value_count.max สำหรับคุณลักษณะ ตั้งค่าอาร์กิวเมนต์ infer_feature_shape เป็น False เพื่อปิดใช้งานการอนุมานรูปร่าง

สคีมาเองถูกจัดเก็บเป็น บัฟเฟอร์โปรโตคอล Schema และสามารถอัปเดต/แก้ไขได้โดยใช้ API โปรโตคอลบัฟเฟอร์มาตรฐาน TFDV ยังมี วิธียูทิลิตี้สองสามวิธี เพื่อให้การอัปเดตเหล่านี้ง่ายขึ้น ตัวอย่างเช่น สมมติว่าสคีมามีบทต่อไปนี้เพื่ออธิบายคุณลักษณะสตริงที่ต้องการ payment_type ที่ใช้ค่าเดียว:

feature {
  name: "payment_type"
  value_count {
    min: 1
    max: 1
  }
  type: BYTES
  domain: "payment_type"
  presence {
    min_fraction: 1.0
    min_count: 1
  }
}

ในการทำเครื่องหมายว่าควรใส่คุณลักษณะนี้อย่างน้อย 50% ของตัวอย่าง:

    tfdv.get_feature(schema, 'payment_type').presence.min_fraction = 0.5

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

ภาพหน้าจอของการสร้างภาพสคีมา

กำลังตรวจสอบข้อมูลเพื่อหาข้อผิดพลาด

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

การจับคู่สถิติของชุดข้อมูลกับสคีมา

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

    # Assume that other_path points to another TFRecord file
    other_stats = tfdv.generate_statistics_from_tfrecord(data_location=other_path)
    anomalies = tfdv.validate_statistics(statistics=other_stats, schema=schema)

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

ทำให้เกิดความผิดปกติ

   payment_type  Unexpected string values  Examples contain values missing from the schema: Prcard (<1%).

ระบุว่าพบค่านอกโดเมนในสถิติใน <1% ของค่าคุณลักษณะ

หากเป็นไปตามที่คาดไว้ สคีมาสามารถอัปเดตได้ดังนี้:

   tfdv.get_domain(schema, 'payment_type').value.append('Prcard')

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

ประเภทความผิดปกติต่างๆ ที่โมดูลนี้สามารถตรวจพบได้แสดงไว้ ที่นี่

สมุดบันทึกตัวอย่าง ประกอบด้วยการแสดงภาพความผิดปกติอย่างง่ายเป็นตาราง โดยแสดงคุณลักษณะที่ตรวจพบข้อผิดพลาดและคำอธิบายสั้นๆ ของแต่ละข้อผิดพลาด

ภาพหน้าจอของความผิดปกติ

การตรวจสอบข้อผิดพลาดตามตัวอย่าง

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

   options = tfdv.StatsOptions(schema=schema)
   anomalous_example_stats = tfdv.validate_examples_in_tfrecord(
       data_location=input, stats_options=options)

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

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

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

สภาพแวดล้อม สามารถใช้เพื่อแสดงข้อกำหนดดังกล่าวได้ โดยเฉพาะอย่างยิ่ง คุณลักษณะในสคีมาสามารถเชื่อมโยงกับชุดของสภาพแวดล้อมโดยใช้ default_environment, in_environment และ not_in_environment

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

    serving_stats = tfdv.generate_statistics_from_tfrecord(data_location=serving_data_path)
    serving_anomalies = tfdv.validate_statistics(serving_stats, schema)

ภาพหน้าจอของการแสดงความผิดปกติ

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

    # All features are by default in both TRAINING and SERVING environments.
    schema.default_environment.append('TRAINING')
    schema.default_environment.append('SERVING')

    # Specify that 'tips' feature is not in SERVING environment.
    tfdv.get_feature(schema, 'tips').not_in_environment.append('SERVING')

    serving_anomalies_with_env = tfdv.validate_statistics(
        serving_stats, schema, environment='SERVING')

การตรวจสอบข้อมูลเบ้และดริฟท์

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

  • ความเบ้ระหว่างข้อมูลการฝึกอบรมและการให้บริการ
  • เลื่อนไปมาระหว่างวันต่างๆ ของข้อมูลการฝึก

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

    # Assume we have already generated the statistics of training dataset, and
    # inferred a schema from it.
    serving_stats = tfdv.generate_statistics_from_tfrecord(data_location=serving_data_path)
    # Add a skew comparator to schema for 'payment_type' and set the threshold
    # of L-infinity norm for triggering skew anomaly to be 0.01.
    tfdv.get_feature(schema, 'payment_type').skew_comparator.infinity_norm.threshold = 0.01
    skew_anomalies = tfdv.validate_statistics(
        statistics=train_stats, schema=schema, serving_statistics=serving_stats)

หมายเหตุ บรรทัดฐาน L-infinity จะตรวจจับความเอียงสำหรับคุณสมบัติหมวดหมู่เท่านั้น แทนที่จะระบุขีดจำกัด infinity_norm การระบุขีดจำกัด jensen_shannon_divergence ใน skew_comparator จะตรวจจับความเอียงสำหรับทั้งคุณลักษณะที่เป็นตัวเลขและหมวดหมู่

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

   payment_type  High L-infinity distance between serving and training  The L-infinity distance between serving and training is 0.0435984 (up to six significant digits), above the threshold 0.01. The feature value with maximum difference is: Cash

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

สมุดบันทึกตัวอย่าง ประกอบด้วยตัวอย่างง่ายๆ ของการตรวจสอบความผิดปกติที่มีฐานเอียง

การตรวจจับการเบี่ยงเบนระหว่างวันต่างๆ ของข้อมูลการฝึกสามารถทำได้ในลักษณะเดียวกัน

    # Assume we have already generated the statistics of training dataset for
    # day 2, and inferred a schema from it.
    train_day1_stats = tfdv.generate_statistics_from_tfrecord(data_location=train_day1_data_path)
    # Add a drift comparator to schema for 'payment_type' and set the threshold
    # of L-infinity norm for triggering drift anomaly to be 0.01.
    tfdv.get_feature(schema, 'payment_type').drift_comparator.infinity_norm.threshold = 0.01
    drift_anomalies = tfdv.validate_statistics(
        statistics=train_day2_stats, schema=schema, previous_statistics=train_day1_stats)

หมายเหตุ บรรทัดฐาน L-infinity จะตรวจจับความเอียงสำหรับคุณสมบัติหมวดหมู่เท่านั้น แทนที่จะระบุขีดจำกัด infinity_norm การระบุขีดจำกัด jensen_shannon_divergence ใน skew_comparator จะตรวจจับความเอียงสำหรับทั้งคุณลักษณะที่เป็นตัวเลขและหมวดหมู่

กำลังเขียนตัวเชื่อมต่อข้อมูลที่กำหนดเอง

ในการคำนวณสถิติข้อมูล TFDV มี วิธีที่สะดวกหลายวิธี ในการจัดการข้อมูลอินพุตในรูปแบบต่างๆ (เช่น TFRecord ของ tf.train.Example , CSV เป็นต้น) หากรูปแบบข้อมูลของคุณไม่อยู่ในรายการนี้ คุณต้องเขียนตัวเชื่อมต่อข้อมูลแบบกำหนดเองสำหรับการอ่านข้อมูลที่ป้อนเข้า และเชื่อมต่อกับ TFDV core API สำหรับการคำนวณสถิติข้อมูล

TFDV core API สำหรับการคำนวณสถิติข้อมูล คือ Beam PTransform ที่ใช้ PCollection ของกลุ่มตัวอย่างอินพุต (กลุ่มตัวอย่างอินพุตจะแสดงเป็น Arrow RecordBatch) และส่งออก PCollection ที่มีบัฟเฟอร์โปรโตคอล DatasetFeatureStatisticsList เดียว

เมื่อคุณใช้ตัวเชื่อมต่อข้อมูลแบบกำหนดเองที่รวบรวมตัวอย่างอินพุตของคุณใน Arrow RecordBatch แล้ว คุณต้องเชื่อมต่อกับ tfdv.GenerateStatistics API เพื่อคำนวณสถิติข้อมูล ยกตัวอย่าง TFRecord ของ tf.train.Example tfx_bsl มีตัวเชื่อมต่อข้อมูล TFExampleRecord และด้านล่างนี้คือตัวอย่างวิธีเชื่อมต่อกับ tfdv.GenerateStatistics API

import tensorflow_data_validation as tfdv
from tfx_bsl.public import tfxio
import apache_beam as beam
from tensorflow_metadata.proto.v0 import statistics_pb2

DATA_LOCATION = ''
OUTPUT_LOCATION = ''

with beam.Pipeline() as p:
    _ = (
    p
    # 1. Read and decode the data with tfx_bsl.
    | 'TFXIORead' >> (
          tfxio.TFExampleRecord(
              file_pattern=[DATA_LOCATION],
              telemetry_descriptors=['my', 'tfdv']).BeamSource())
    # 2. Invoke TFDV `GenerateStatistics` API to compute the data statistics.
    | 'GenerateStatistics' >> tfdv.GenerateStatistics()
    # 3. Materialize the generated data statistics.
    | 'WriteStatsOutput' >> WriteStatisticsToTFRecord(OUTPUT_LOCATION))

สถิติการคำนวณผ่านส่วนของข้อมูล

TFDV สามารถกำหนดค่าให้คำนวณสถิติผ่านส่วนของข้อมูลได้ การแบ่งส่วนสามารถเปิดใช้งานได้โดยการจัดเตรียมฟังก์ชันการแบ่งส่วนซึ่งใช้ใน Arrow RecordBatch และส่งออกลำดับของทูเพิลของฟอร์ม (slice key, record batch) TFDV ให้วิธีง่ายๆ ในการ สร้างฟังก์ชันการแบ่งตามค่าคุณลักษณะ ซึ่งสามารถจัดให้เป็นส่วนหนึ่งของ tfdv.StatsOptions เมื่อคำนวณสถิติ

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

import tensorflow_data_validation as tfdv
from tensorflow_data_validation.utils import slicing_util

# Slice on country feature (i.e., every unique value of the feature).
slice_fn1 = slicing_util.get_feature_value_slicer(features={'country': None})

# Slice on the cross of country and state feature (i.e., every unique pair of
# values of the cross).
slice_fn2 = slicing_util.get_feature_value_slicer(
    features={'country': None, 'state': None})

# Slice on specific values of a feature.
slice_fn3 = slicing_util.get_feature_value_slicer(
    features={'age': [10, 50, 70]})

stats_options = tfdv.StatsOptions(
    slice_functions=[slice_fn1, slice_fn2, slice_fn3])